mar 27

Le singleton est très utilisé en Objective-C afin d’accéder à un objet partagé.
Seulement, cela peut-être fastidieux à intégrer.

Pour éviter le code à rallonge, voici un fichier qui pourra vous être utile.

KSSingleton.h

Son usage est relativement simple.

MySingleton.h

#import <Foundation/Foundation.h>
 
#import "KSSingleton.h"
 
@interface MySingleton : NSObject {
        NSInteger integerValue;
}
 
@property (assign) NSInteger integerValue;
 
KS_SINGLETON_INTERFACE(MySingleton)
 
@end

MySingleton.m

#import "MySingleton.h"
 
@interface MySingleton (hidden)
 
- (void)initialization;
 
@end
 
@implementation MySingleton (hidden)
 
- (void)initialization {
        integerValue = 12;
}
 
@end
 
 
 
@implementation MySingleton
 
@synthesize integerValue;
 
KS_SINGLETON_IMPLEMENTATION(MySingleton)
 
@end

Notez que l’implémentation de - (void)initialization; est facultative. Elle peut cependant être utile à l’initialisation du singleton.

Ensuite, l’utilisation dans le code se fait ainsi :

MySingleton *s = [MySingleton sharedSingleton];

L’appel au singleton se fait toujours via [MaClasse sharedMaClasse].

Vous pouvez utiliser cette fonctionnalité à titre personnel et/ou professionnel, du moment que vous conservez son en-tête intacte.

Vous pouvez également télécharger le Projet d’exemple ici.

  • Share/Bookmark
mar 22

Beaucoup de questions nous ont été posées sur l’iPad ces derniers temps. En effet, cet objet intrigue. Nous allons donc tâcher de répondre à certaines questions.

Un premier pas avec l’iPhone

Aujourd’hui, c’est un fait : tout le monde est séduit par l’iPhone. Les ventes explosent. Les utilisateurs migrent en masse des systèmes BlackBerry et Nokia vers la marque à la pomme. Bref, c’est un véritable succès.

Mais quelle est l’origine de son succès :

  • le prix ? à 600 euros l’appareil, tout le monde s’accordait sur le luxe de l’objet à sa sortie
  • les performances techniques ? tous les processeurs d’appareils mobiles sorties à ce jour se sont basé sur des composants identiques, ou presque

Il semblerait que son origine soit plutôt ce qui le différencie des autres :

  • sa simplicité d’utilisation
  • la richesse de l’AppStore (richesse également qualitative, du fait de la validation du contenu)

En clair, Apple a fait comme les autres, mais en mieux. Et c’est là qu’est la véritable différence : des interfaces simples, conviviales, à échelle humaine. Le lien qui unie l’homme à son outil se ressert, en effaçant magnifiquement la barrière technique.

Donc l’iPad est un gros iPhone ?

Tout comme un match de tennis n’est pas un match de ping-pong où les joueurs sont sur la table, l’iPad n’est pas un gros iPhone ni un gros iPod Touch. Beaucoup de choses changent et d’autres sont malgré tout liées.

La première différence est l’usage : imaginez-vous téléphoner avec un iPad à l’oreille. De même, essayez de réaliser une présentation sur un iPhone, la tâche risque d’être rude…

La taille est également un point de différence : si l’iPhone est un appareil mobile, l’iPad est un appareil nomade. L’iPhone a un usage strictement personnel. l’iPad a lui, de par sa taille, une capacité d’ouverture à l’environnement.

… alors c’est un MacBook, mais en plus petit ?

Ce n’est pas un MacBook non plus :

  • les applications iPad démarrent instantanément
  • l’ensemble de la plateforme iPad repose sur une base iPhone OS, optimisée pour un usage tactile
  • un MacBook peut effectuer des tâches plus complexes, et de manière simultanée, correspondant à un usage plus intensif
  • du fait de la différence d’usage et de matériel, les applications pour ordinateur sont très différentes des applications iPad

Ni un ordinateur, ni un appareil mobile ???

En effet, l’iPad est un appareil à mi-chemin entre les deux.

Le maillon manquant

Prenons un exemple concret : les réseaux sociaux. La plupart d’entre nous adorons visiter Facebook, Twitter et autres.

Au travail, ou à la maison quand on fait les comptes par exemple, on aime bien avoir une petite fenêtre qui apparaît ponctuellement histoire de nous lier au reste du monde. Dans un tel cadre d’activité informatique pure, l’outil est tout à fait approprié.

Dans les transports en commun ou dans la rue, on apprécie également de pouvoir être liés à notre vie virtuelle, pour partager par exemple une photo ou une vidéo de l’instant présent avec ceux qui ne peuvent être là. On sort alors instantanément le compagnon de poche et il fait le lien, aussi rapidement qu’il le défait.

Mais il y a ces moments, où l’appareil mobile est trop petit pour un usage plus immersif et l’ordinateur est trop encombrant (et trop lourd d’usage). On veut par exemple partager entre amis ou en famille des photos trouvées sur les réseaux sociaux pour rester dans le même exemple.

Ce genre de situation est souvent problématique pour beaucoup d’entre nous. Qui ne s’est jamais trouvé dans une situation comme celles-ci :

  • l’ordinateur encombrant pour regarder un film dans le train (même un netbook devient vite pénible du fait de son clavier)
  • le casse-tête pour regarder 3 photos en famille
  • l’ordinateur trop long à charger pour présenter un produit à un client
  • les démonstrations techniques plantées à cause d’une mauvaise version d’un logiciel quelconque
  • les recettes de cuisine sur internet, illisibles sur un mobile et impossibles à positionner avec un ordinateur
  • le programme TV en ligne, petit (et très personnel) sur iPhone et trop encombrant (avec le câble qui passe entre les jambes) sur l’ordinateur
  • le « ha, si j’avais mon ordinateur, je regarderais sur wikipedia » quand on visite un monument

Une tablette tactile classique peut-elle suffire ?

L’idée est séduisante : de nombreux constructeurs ont d’ailleurs réalisé des tablettes tactiles. Techniquement, il n’y a rien de révolutionnaire.

Mais ce n’est pas la technique qui est en question. L’approche d’Apple a été inverse. Plutôt que se demander quels usages techniques pouvaient être réalisés par l’utilisateur, la question a été de savoir comment les tâches réalisées par les utilisateurs au quotidien pourraient être simplifiées grâce à la technique.

Le bug

C’est à ce stade que l’on se rend compte d’un bug qui atteint la majorité des systèmes informatiques.

C’est à l’outil informatique de s’adapter à l’homme, et non l’inverse.

Le renouveau de l’informatique

Jusqu’à aujourd’hui, les utilisateurs d’outils informatiques devaient être technicien pour comprendre leurs outils.

Et c’est bien une aberration : comment peut-on gagner du temps / de la facilité avec un outil qui n’est pas adapté à notre activité ?

Le monde Apple tourne en effet autour de cette philosophie. Mac OS X se veut simple et efficace par définition. Mais le marché en a voulu autrement. Mais le PC fait partie de la culture informatique.

Cependant, le mobile est un marché relativement nouveau. Et l’iPhone a jeté un pavé dans la mare en proposant un outil relativement simple d’utilisation tout en s’avérant aussi efficace que ses concurrents.

Et c’est grâce à cette philosophie de simplicité et d’efficacité que l’iPad va pouvoir combler la plupart des lacunes de l’informatique. L’iPad est la seule tablette qui se veut à la fois esthétique, simple d’utilisation, efficace et relativement abordable.

Le début d’une grande aventure

Si l’iPhone a véritablement marqué l’informatique mobile, l’iPad va s’occuper de l’informatique mobile. Le lien entre les deux est véritablement réduit. En effet, comme l’a relativement bien présenté S. Jobs, une application conçue pour fonctionner sur iPhone pourra également fonctionner sur iPad.

La plupart du temps, Internet fait le lien entre les deux : les réseaux sociaux en sont le parfait exemple. Mais c’est également le cas pour les mails, les documents partagés, les messageries instantanées. Tout ceci est maintenant dématérialisé.

Mais il y a encore une limite à franchir : le lien entre l’iPhone OS (iPhone / iPad) et Mac OS X. Mais cette limite est très mince. La base technique de l’iPhone OS est en effet la même que Mac OS X. Les applications iPhone / iPad seront-elles un jour compatible Mac OS X ? L’avenir nous le dira.

Kaeli Soft : une porte ouverte vers ce nouveau monde

C’est dans cet esprit d’informatique à échelle humaine que fonctionne la société Kaeli Soft. Nous ne faisons pas des outils pour des techniciens mais pour des Hommes.

Aujourd’hui, notre compétence technique, validée par plusieurs succès dont nous garderons la discrétion, nous permet de vous offrir le meilleur de l’informatique d’aujourd’hui et de demain. Nous travaillons dans un soucis d’efficacité et de clarté technique afin d’offrir des prestations reposants sur de solides socles techniques.

Nos compétences sont bien sûr orientées vers la plateforme iPhone OS (iPhone, iPod Touch, iPad) nous permettant d’assurer une conception optimale.

Nous orientons également notre travail afin de fournir des solutions aussi simples à maintenir qu’efficaces à l’usage.

Afin d’être assurés d’obtenir les meilleurs résultats, Kaeli Soft est axée sur 3 pôles de compétence principaux :

  • services web
  • développement iPhone
  • ergonomie des système

Nos prestataires internes et externes proposent le meilleur de leurs compétences en matière de :

  • conception
  • production
  • recherche et développement

De plus, la structure Kaeli Soft, soucieuse d’offrir un soin tout particulier à l’aspect visuel et l’ergonomie des produits de ses clients, travaille en partenariat avec des graphistes et ergonomistes professionnels.

Vous pouvez nous contacter par mail ou via le formulaire prévu à cet effet.

  • Share/Bookmark
mar 22

Un petit post rapide qui pourra peut-être rendre service à certains d’entre vous qui ont été confrontés au même problème que moi.

Vous installer VMWare Fusion 3 afin d’utiliser vos applications Windows sur votre Mac.

Vous récupérez les dernières MAJ, vous ouvrez votre machine virtuelle Windows XP (ou autre) qui fonctionnait parfaitement avec les anciennes versions et là, c’est le drame : le clavier ne fonctionne plus correctement. (_ au lieu de =, – au lieu de +)

Pas de panique !

La démarche à suivre est la suivante :

  • menu VMWare Fusion -> Préférences
  • onglet Clavier et souris
  • décocher Activer les mappages de touche et Activer les mappages de touche pour les langues

Normalement, tout revient en ordre. Vous pouvez reprendre une activité normale.

  • Share/Bookmark
fév 21

Dans ce petit billet, nous allons tâcher de présenter simplement ce que sont les services web REST et le format d’échange JSON.

L’architecture REST

Commençons par le commencement. Une piqure de rappel sur le protocole HTTP n’est jamais malvenue.
Pour faire simple, une requête HTTP se présente ainsi :

  • Une méthode (GET, POST, PUT, DELETE)
  • Un chemin vers une ressource (/index.php, /liste/contenu/)
  • Une version du protocole (1.0 ou 1.1 généralement)
  • Un ensemble de propriétés et valeurs (Content-Type, Length)
  • Un contenu (facultatif)

C’est autour de ce protocole que s’organise l’architecture REST.

Les méthodes HTTP sont donc utilisées ainsi :

  • GET : lecture d’information
  • POST : envoi d’information
  • PUT : mise à jour d’information
  • DELETE : suppression d’information

Par exemple, si je veux lire la liste des adhérents à mon club d’échecs, j’effectue une requête de type GET vers la ressource http://monsite.com/adherents . Si je veux les adhérents ayant plus de 20 ans, je peux faire http://monsite.com/adherents?ageMinimum=20.
De la même manière, si je veux supprimer les adhérents 3 et 4, je peux faire une requête de type DELETE vers http://monsite.com/adherents/3/4.
Si on veut envoyer des informations, on utilise POST ou PUT en passant les informations dans le corps du message.

REST du côté serveur

La plupart d’entre vous utilisent PHP pour interpréter les informations du côté du serveur. Nous allons donc nous baser sur ce langage afin d’expliquer le fonctionnement.

Tout d’abord, il faut savoir quelle est la méthode utilisée. Et là, premier problème : PHP ne semble gérer que les requêtes de type POST et GET, qui sont utilisées par HTML.

Récupérons d’abord la méthode HTTP

Pour cela, il suffit d’utiliser les données du serveur.

// $method sera égal à 'get', 'post', 'put' ou 'delete'
$method = strtolower($_SERVER['REQUEST_METHOD']);

Pas de soucis pour GET et POST

Les méthodes GET et POST ne posent pas de soucis particulier : leur contenu est passé respectivement dans les tableaux $_GET et $_POST.

Pas de soucis non plus pour DELETE

La méthode DELETE envoie ses paramètres dans l’URL ( accessible via $_SERVER['REQUEST_URI'])

Il reste les paramètres de PUT

La méthode PUT envoie elle des informations dans le corps du message. Comment les récupérer en PHP ?
Voici la solution :

// récupération des données brutes
$raw_data = file_get_contents('php://input');
// transformation en tableau à indexes ($put_data)
parse_str($raw_data, $put_data);

Format des échanges : JSON

Les données échangées doivent pouvoir être comprises par le côté serveur comme le côté client.
Pour cela, un format simple avec une forte capacité de compression a fait son apparition : JSON.
JSON s’architecture autour du format des objets ECMAScript (JavaScript) .
Les 2 principales caractéristiques sont :

  • Le principe de clé / valeur
  • L’organisation des données sous forme de tableau

Les types de données valables sont :

  • tableau
  • objet
  • chaîne de caractères
  • valeur numérique (entier, double)
  • booléen (true/false)
  • null

Par exemple, pour récupérer le nom, le prénom et l’âge d’une personne dans un objet :

{
    "nom": "xxxx",
    "prenom": "yyyy",
    "age": 25
}

Une liste d’articles :

[
    {
        "nom": "article a",
        "prix": 3.05,
        "disponible": false,
        "descriptif": "mon article a ..."
    },
    {
        "nom": "article b",
        "prix": 13.05,
        "disponible": true,
        "descriptif": null
    }
]

Vous trouverez plus d’informations sur le format JSON au travers du site officiel : http://www.json.org/json-fr.html

Pour les données binaires (images et autres), il suffit de donner une adresse en lecture et une propriété en écriture.
Par exemple, si je veux envoyer une image avec un descriptif, mes variables POST seront organisées ainsi :

  • json : descriptif au format json
  • image : image au format binaire

La lecture des données au niveau serveur se fait ainsi :

$result = json_decode($json_data);

L’écriture, basée sur un tableau à indexes, se fait ainsi :

$json_str = json_encode($data_array);

Vous trouverez toutes les informations nécessaires sur http://www.php.net/manual/fr/ref.json.php.

Pour finir, le type de données utilisé généralement pour décrire un contenu JSON est application/json.

Avec ceci, vous avez de quoi réaliser des services web performants et simples à mettre en oeuvre !

  • Share/Bookmark
fév 08

Un des sujets épineux de ces derniers temps fût le support du multi-tâches sur iPhone OS. On ne peut pas faire tourner 4 programmes à la fois sur un iPhone alors que c’est possible sur un ordinateur de bureau.

  • Limite technique ? Pas vraiment. Sans être multi-coeurs, le processeur de l’iPhone sait faire plusieurs choses à la fois. (on peut écouter de la musique en surfant par exemple)
  • Limite de l’OS ? Non plus. iPhone OS repose sur Mac OS X qui est tout à fait à l’aise avec ce procédé.

Mais alors, pourquoi ?

(très) rapide historique du développement sur smartphone

Les premiers smartphones orientés grand public furent, entre autres, les Windows CE.

Et comme chez Microsoft (et d’autres) on n’a pas spécialement cherché a se compliquer la tâche, on a donc fait en sorte que ça fonctionne comme sur un ordinateur de bureau, mais en plus petit.

Ca fonctionne, oui mais…

La farandole des programmes « maison »

Forcément, les développeurs ont rapidement voulu concevoir leurs applications « maison », tournant pour certaines en tâche de fond.

Ensuite, on a forcément pu lancer plein d’applications dans tous les sens : des applications de qualité excellente à médiocre. (à savoir, gourmande en mémoire, mais restant en tâche de fond)

Sans compter que certaines lancent elles-même des sous-tâches (appelées threads) qui s’exécutent avec une emprunte mémoire certes mince (autour d’1 Mo) et qui s’arrêtent ensuite (ou pas).

Sauf que cette gourmandise mémoire fait que le smartphone devient très vite horriblement lent. Le smartphone n’a pas le quart de la mémoire d’un ordinateur. Il arrive donc vite à saturation.

Mais que faire alors ?

C’est très certainement la question que ce sont posés les ingénieurs d’Apple en lançant l’iPhone.

Le principe est simple :

  • lancer une application
  • sauvegarder son état à la fermeture
  • restaurer son état à l’ouverture

Du coup :

  • les applications se lancent rapidement, car elles ont un maximum de mémoire disponible,
  • leur état est enregistré, donc pas de soucis de reprise d’activité,
  • la batterie est économisée car aucun processus ne consomme inutilement des ressources.

Bien entendu, au début, tout le monde s’est plein de cette « limitation ». Mais aujourd’hui, l’iPhone reste l’un des smartphones les plus appréciés.

Un exemple suivi ?

Alors que les Windows Mobile étaient jusqu’ici multi-tâches, la version Windows Mobile 7 en cours de développement s’oriente elle vers le mono-tâche, à la manière de l’iPhone.

  • Share/Bookmark
fév 07

Le plugin Flash n’est pas disponible sur plateforme iPhone OS et cela suscite beaucoup d’interrogations. Nous allons donc tâcher d’expliquer le pourquoi du comment.

Historique

Flash est disponible sur plateforme MacOS depuis de nombreuses années. Des cumuls de fonctionnalités sont arrivés les uns à la suite des autres, apportant chacun leur lots de nouveautés.

Cependant, au fur et à mesure des versions, Flash sur Mac OS X s’est avéré de plus en plus lourd et lent.

Puis est arrivé iPhone OS : un Mac OS X mobile. Même architecture, donc portage simplifié.

Cependant, Apple a jugé le plugin trop lourd et trop plantogène pour l’iPhone. Il n’a donc pas été inclus.

Pourquoi Flash est-il lourd sur Mac OS X et iPhone OS ?

La raison est simple : la plateforme Mac a évolué, le plugin Flash n’a pas suivi.

Pour vérifier cela, il suffit de regarder ce qu’utilise le plugin Flash sur Mac OS X.

otool -L /Library/Internet\ Plug-Ins/Flash\ Player.plugin/Contents/MacOS/Flash\ Player

Et que voyons-nous ?

Flash utilise Carbon qui est l’ancienne base de Mac OS conservée pour des raisons de compatibilité. La nouvelle base de Mac OS X est en effet connue sous le nom de Cocoa.

Qu’est-ce que cela implique ?

  • Pas de 64 bits,
  • Le matériel n’est pas exploité de manière optimale,
  • L’intégration au système est minimale,

Du coup, iPhone OS subit les mêmes problèmes (d’autant qu’il n’est pas compatible Carbon) . Et ça, Steve Jobs ne l’accepte pas.

Des efforts en cours

Des efforts pour la prochaine version de Flash semblent mis en oeuvre. En effet, Adobe a annoncé avoir optimisé Flash sur Mac OS X.

Pour cela, ils vont commencer par utiliser Core Animation (Quartz Core) qui permet d’afficher des animations 2D optimisées pour le matériel.

De même, la lecture de vidéo sera optimisée.

Du coup, Core Animation faisant partie de Cocoa, il y a fort à parier qu’une version 64 bits fassent son apparition dans la foulée.

Et si Flash utilise pleinement les possibilités de Cocoa sur Mac OS X, il y a de bonnes chances pour qu’Apple finisse par accepter la version mobile qui, reposant sur la même base, sera optimisée pour l’iPhone OS.

La poêle et le chaudron

Apple semble très fort en donneur de leçon sur ce coup-là.

A en croire leur propos, tous leurs logiciels semblent pleinement optimisés.

Sauf qu’il y a un vilain petit canard. iTunes, l’un des logiciels phares d’Apple, n’utilise Cocoa que partiellement. Ceci est vérifiable ainsi :

otool -L /Applications/iTunes.app/Contents/MacOS/iTunes

On voit en effet apparaître un lien prononcé avec Carbon !

Alors Monsieur Apple, à quand une version d’iTunes pleinement optimisée pour Cocoa ?

  • Share/Bookmark
fév 06

Si vous aussi vous avez un Mac et une clé 3G, vous avez dû être séduit par l’annonce : « Compatible Mac OS X ». Seulement, la version fournie n’est pas compatible avec Snow Leopard.

Après de nombreuses recherches, j’ai enfin trouvé une version parfaitement fonctionnelle sous Mac OS X : Vodaphone Mobile Broadband 3.04.10.00.

Vous pouvez télécharger cette version ici.

  • Share/Bookmark
jan 30

Les développeurs PHP vont certainement adorer cette fonction.

Elle permet d’encoder un tableau (à indexes ou pas) de manière efficace. Elle est basée sur un autre code qui ne fonctionnait malheureusement pas très bien.
Les CDATA sont également automatiquement insérés au besoin.
Quand il n’y a pas d’index, les données ressortent sous l’intitulé entry et la racine du document sera toujours entries.

function xml_encode($mixed, $domElement = NULL, $DOMDocument = NULL) {
    if (is_null($DOMDocument)) {
        $DOMDocument = new DOMDocument;
        $DOMDocument->formatOutput = true;
 
		$rootNode = $DOMDocument->createElement('entries');
		$DOMDocument->appendChild($rootNode);
 
        xml_encode($mixed, $rootNode, $DOMDocument);
 
        echo @$DOMDocument->saveXML();
    } else {
        if (is_array($mixed)) {
            foreach ($mixed as $index=>$mixedElement) {
                if (is_int($index)) {
					$nodeName = 'entry';
				} else {
					$nodeName = $index;
				}
				$node = $DOMDocument->createElement($nodeName);
				$domElement->appendChild($node);
				xml_encode($mixedElement, $node, $DOMDocument);
			}
        } else {
			// TODO: test if CDATA if needed
			$new_node = $DOMDocument->createTextNode($mixed);
 
            $domElement->appendChild($new_node);
        }
    }
}

On l’utilise comme json_encode().

Par exemple :

<?php
 
header('Content-Type: text/xml');
 
function xml_encode($mixed, $domElement = NULL, $DOMDocument = NULL) {
    if (is_null($DOMDocument)) {
        $DOMDocument = new DOMDocument;
        $DOMDocument->formatOutput = true;
 
		$rootNode = $DOMDocument->createElement('entries');
		$DOMDocument->appendChild($rootNode);
 
        xml_encode($mixed, $rootNode, $DOMDocument);
 
        echo @$DOMDocument->saveXML();
    } else {
        if (is_array($mixed)) {
            foreach ($mixed as $index=>$mixedElement) {
                if (is_int($index)) {
					$nodeName = 'entry';
				} else {
					$nodeName = $index;
				}
				$node = $DOMDocument->createElement($nodeName);
				$domElement->appendChild($node);
				xml_encode($mixedElement, $node, $DOMDocument);
			}
        } else {
			// TODO: test if CDATA if needed
			$new_node = $DOMDocument->createTextNode($mixed);
 
            $domElement->appendChild($new_node);
        }
    }
}
 
$entree[0] = "texte";
 
for ($i = 0;$i < 50;$i++) {
	$entree[$i]['nom'] = "texte pour nom ${i}";
	$entree[$i]['valeur'] = "texte pour valeur ${i}";
 
	$donnes['debut'] = 0;
	$donnes['fin'] = 100;
	$entree[$i]['donnees'] = $donnes;
 
	for ($j = 0;$j < 5;$j++) {
		$liste[$j] = "liste ${j}";
	}
 
	$entree[$i]['liste'] = $liste;
 
	$entree[$i]['xml'] = "donnees avec <a>balise xml</a>";
}
 
echo xml_encode($entree);
 
?>

Affichera :

<?xml version="1.0"?>
<entries>
  <entry>dexte</entry>
  <entry>
    <nom>texte pour nom 1</nom>
    <valeur>texte pour valeur 1</valeur>
    <donnees>
      <debut>0</debut>
      <fin>100</fin>
    </donnees>
    <liste>
      <entry>liste 0</entry>
      <entry>liste 1</entry>
      <entry>liste 2</entry>
      <entry>liste 3</entry>
      <entry>liste 4</entry>
    </liste>
    <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>
  </entry>
  <entry>
    <nom>texte pour nom 2</nom>
    <valeur>texte pour valeur 2</valeur>
    <donnees>
      <debut>0</debut>
      <fin>100</fin>
    </donnees>
    <liste>
      <entry>liste 0</entry>
      <entry>liste 1</entry>
      <entry>liste 2</entry>
      <entry>liste 3</entry>
      <entry>liste 4</entry>
    </liste>
    <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>
  </entry>
  <entry>
    <nom>texte pour nom 3</nom>
    <valeur>texte pour valeur 3</valeur>
    <donnees>
      <debut>0</debut>
      <fin>100</fin>
    </donnees>
    <liste>
      <entry>liste 0</entry>
      <entry>liste 1</entry>
      <entry>liste 2</entry>
      <entry>liste 3</entry>
      <entry>liste 4</entry>
    </liste>
    <xml>donnees avec &lt;a&gt;balise xml&lt;/a&gt;</xml>
  </entry>
 
...
</entries>

Et voilà !

  • Share/Bookmark
jan 28

Hier, Apple nous a présenté son nouveau bébé : l’iPad !

Nous allons donc tâcher de présenter ce nouveau support qui sera bientôt dans tous les foyers. (si, si, même si beaucoup d’entre vous semblent encore en douter !)

Tout d’abord, c’est une tablette

Et oui : Pad en anglais signifiant bloc-note, il s’agit bien d’une tablette tactile.

Les tablettes tactiles, on connaît : chacun a sorti la sienne. Ca a fait d’ailleurs un beau flop dans la plupart des cas. Rien de nouveau me direz-vous

Et bien non !

En effet, l’iPad n’est pas une tablette comme les autres. Contrairement à ses concurrentes qui fonctionnent avec un Windows 7 ou un GNU/Linux dans le meilleur des cas, celle-ci fonctionne sous iPhone OS.

Qu’est-ce que ça change ?

  • meilleure autonomie (10 heures)
  • meilleures performances
  • démarrage quasi instantané

Et comme c’est du Apple :

  • écran très haute qualité
  • fin et léger
  • multi-touch
  • écologique (pas de PVC, etc..)
  • avec une pomme au dos ;-)

Ok, c’est une tablette performante : et après ?

Les fonctionnalités de base sont identiques à celles de l’iPhone et suivent la même logique d’utilisation. La différence principale est l’ergonomie qui a été adaptée à la taille de la tablette.

On retrouve donc le classique navigateur web Safari : surfez instantanément depuis votre canapé sans le pénible câble d’alimentation…

Il y a également le client Mail pour lire et écrire des courriers électroniques confortablement (à 2 mains !)

L’outil Photos : une gestion simple et rapide des photos (que l’on peut importer depuis l’appareil photo) . Une utilisation inédite du multi-touch et des diaporamas 3D à couper le souffle ! On veut faire voir une photo à un interlocuteur en face de soi ? Il suffit de retourner l’iPad, l’image s’adapte automatiquement !

Les vidéos peuvent être lues en haute définition via une interface animée en 3D époustouflante ! Un confort d’utilisation inégalé.

YouTube est également de la partie.

La fonctionnalité iPod n’a jamais été aussi simple d’utilisation pour écouter votre musique et voir vos films.

L’application iTunes vous permet également d’acheter du contenu multimédia en ligne ou bien télécharger des podcasts par exemple.

Les applications Contacts, Cartes, Notes et Calendrier sont également de la partie…

Génial ! Un gros iPhone avec une interface améliorée… C’est tout ?

Et bien non, ce n’est pas tout.

Car s’il y a bien une chose qui a fait le succès de l’iPhone, c’est bien l’App Store et ses applications !

L’iPad possède en effet son App Store avec des applications spécialement prévue pour lui. En effet, les applications iPad permettent une interaction nouvelle. Par exemple, grâce à la taille de l’écran, on peut faire défiler des sous-menus flottants.

L’intégralité de la suite bureautique iWork a ainsi été déclinée sur iPad afin de rendre l’expérience tactile encore plus simple et agréable. Par exemple pars en weekend avec un peu de boulot. La mallette du portable avec le câble d’alimentation qui traverse la chambre. Il n’y a rien de pire pour avoir l’impression d’emmener son bureau entier avec soi. Je prend l’iPad : l’interface est agréable, je l’utilise également pour mes loisirs, ça ne stresse personne et ça ne prend pas de place dans les bagages.

Dans le même ordre d’idée, un sac d’école est suffisamment lourd sans en plus s’encombrer d’un ordinateur portable qui pèse plusieurs kilos qu’il faudra charger au bout d’une heure. L’iPad sera remercié par bien des colonnes vertébrales ! Il ne prend pas plus de place qu’un cahier et pèse environ 700g.

Bon, c’est un outil de travail sympa… et les gamers sont encore oubliés !

Et bien non !

Les graphismes 3D sont somptueux et l’expérience de jeux unique grâce à une immersion totale.

Tout d’abord, grâce à l’accéléromètre, vous pouvez par exemple pencher votre iPad pour tourner dans les virages : sensations assurées !

C’est notamment le cas dans Need For Speed, qui se sert également du multi-touch afin d’améliorer les contrôles du joueur. (boîte de vitesse, rétroviseur)

Le génialissime NOVA a également été revu afin de s’adapter à ce nouveau support : on peut par exemple ouvrir une porte en tournant le loquet avec 3 doigts, comme dans la vraie vie !

Et bien entendu le jeu en réseau sera de la partie, notamment via Bluetooth ou WiFi, à l’instar de ce que l’on retrouve sur iPhone.

Parlons-en de l’iPhone : que deviennent mes applications achetées sur l’App Store ?

Et bien justement, Apple a pensé à tout. Vous pouvez utiliser vos applications iPhone sur iPad, soit en dimensions normales, soit en doublant la taille des pixels.

Il est également prévu de pouvoir fournir à terme des applications universelles, à la fois adaptées à l’iPhone et à l’iPad, sans dégradation de la qualité.

Et la presse électronique, c’est pour quand ?

La véritable presse électronique arrive enfin !

Si vous aussi vous avez cru à une mauvaise blague en voyant débarquer le Kindle d’Amazon (un lecteur noir et blanc, tout plastique,… XXème siècle) vous allez adorer l’iPad.

  • une librairie en ligne : iBooks Store
  • une interface simple et agréable
  • des animations 3D
  • de la vidéo
  • du contenu interactif
  • accessible (grossissement du pas de caractères, changement de police)

Enfin un eBook aussi confortable qu’un véritable livre !


Et dans la vie de tous les jours, concrètement ?

Les exemples d’utilisation sont nombreux :

  • regarder des photos en famille sans sortir l’artillerie lourde
  • consulter ses emails dans son canapé
  • aller sur Facebook avant de dormir, après avoir lu quelques pages d’un livre électronique
  • surfer sur le net pendant une réunion, l’iPad caché dans un dossier (au moins 50% des lecteurs en meurent d’envie, soyons francs !)
  • préparer ses diapos dans le train sans encombrer le voisin d’en face
  • permettre aux enfants de voir un film pendant un long trajet en voiture
  • regarder la TV numérique dans n’importe quelle pièce de la maison (Orange ou SFR TV)
  • faire une partie de jeux en réseaux entre 2 cours
  • prendre des notes que l’on n’aura pas à recopier ensuite
  • dessiner
  • lire des livres en vacances sans encombrer la valise
  • faire la présentation des derniers produits de la société à un client
  • lire un livre de recette dans la cuisine, avec les caractères ECRIS EN GROS
  • … et tout ce qui reste à inventer par les développeurs !

Il y a des accessoires au moins ?

Clavier physique, dock, housse de protection qui fait également office de support, et…

J’oubliais ! Il y a possibilité d’utiliser une sortie vidéo externe pour utiliser les vidéo-projecteurs par exemple !

En terme de réseau, ça donne quoi ?

Du WiFi N pour de meilleurs performances et un emplacement SIM en option pour la 3G !

Et comme une bonne nouvelle ne vient jamais seule, ils ont même prévu du partage de fichiers.

Niveau prix, on annonçait du 999 $ : encore un gouffre financier !

Et bien il n’en n’est rien !

Décliné en 3 versions 16 Go, 32 Go et 64 Go pour un prix allant de 499 $ à 699 $. Comptez 130 $ de plus pour l’option 3G. (aucun tarif annoncé en Europe pour la 3G, mais entre 15 et 30 $ par mois au lieu d’environ 60 $ sans engagement aux USA)

A titre de comparaison, le lecteur de eBook Kindle DX d’Amazon (le truc en noir et blanc) coûte 489 $ !

Une date de sortie ?

Il sortira très certainement en mars 2010 pour la version WiFi et en juin 2010 pour la version WiFi + 3G.

Je veux de la vraie démo

La présentation intégrale est disponible sur le site d’Apple.

Et Kaeli Soft dans tout ça ?

Kaeli Soft ? Nous avons déjà conçu nos premiers programmes de tests : nous serons sur le marché dès sa sortie !

  • Share/Bookmark
jan 24

Dans ce rapide tutoriel, nous allons voir comment intégrer une image dans un code HTML.

En effet, cela peut-être pratique par exemple pour embarquer du contenu web dans un base de données.

Pour cela, il suffit d’utiliser la balise img, évidemment, ainsi que le codage base64.

En HTML, cela ressemble à ça :

<img src="data:image/png;base64,..." />

Voici un script bash qui permet d’encoder le tout automatiquement, grâce à openssl.

#!/bin/sh
 
if [ $# -eq 0 ]; then
	echo "Command: ${0} <image file>"
	exit 1
fi
 
path=$1
source=$(basename ${path})
extension=${source##*.}
base=${source%.*}
output="${base}.html"
base64=$(openssl base64 -in ${path})
 
echo "<html><head></head><body><img src=\"data:image/${extension};base64,${base64}\" /></body></html>" > $output
 
exit 0

Le script fonctionne ainsi :

  • ./monscript.sh monfichierimage.png
  • génération automatique de monfichierimage.html
  • Share/Bookmark