On est tous habitué à utiliser le zoom sur nos navigateurs mobile en double tapant lorsque le contenu d’un site web n’est pas adapté l’écran.
Cette habitude je l’ai aussi sur les PC et Apple a ajoutée la fonctionnalité sur Safari, mais qu’en est-il pour Chrome mon bien aimé ? Pour l’instant rien de natif.

Heureusement un tour rapide sur le Chrome Store et j’ai trouvé ce que je voulais !

c’est ici : https://chrome.google.com/webstore/detail/zoom-on-doubleclick/jkmalmidnicnnmceielaelokkdmmgkcb

Je me suis lancer dans la conversion d’un petit projet PHP vers C#, et je suis tombé sur une fonction qui m’était totalement inconnue à savoir unpack().
Je vais vous partager le résultat de mes recherches sur ce sujet.

Il s’agit en fait de deux fonctions pack() qui compacte les arguments args dans un tableau d’octet binaire et unpack() qui fait l’inverse.
Ces deux fonctions proviennent à la base de perl mais sont implémentées partiellement en php, (certain format ne sont pas supportés).

Vous pouvez chercher sur la MSDN vous ne trouverez aucun équivalent complet de ces deux fonctions.
J’ai donc demandé à ma bible .net, Mister Jb Evain, si il en avait déjà entendu parlé et en deux minutes m’a sortie une classe existante dans le framework Mono Mono_DataConvert. Merci Jb :)
Même si Miguel de Icaza et son équipe à fait du bon boulot, son implémentation reste cependant elle aussi incomplete.

Je vais essaye de vous donner un ensemble d’exemples avec le code php et sont équivalent .net.

Une chaîne complétée avec NULL

// PHP
$packed = pack("a10","fox" );
$unpacked = unpack("a10",$packed);
// C#
var packed = "fox".PadRight(10, '');
var unpacked = ASCIIEncoding.ASCII.GetString(pack, 0, 4);

Notez que la distinction entre signé et non signé n’affecte que la fonction unpack , tandis que la fonction pack fournira le même résultat pour les deux formats.
De plus, notez que PHP enregistre de manière interne et intégrale les valeurs : cette représentation dépend de la machine. Si vous essayez d’enregistrer une valeur trop grande, elle risque d’être convertie et de donner lieu à des effets de bords vicieux.

En lisant le flux RSS de Scott Hanselman sur mon feedly préféré, je suis tombé sur un billet intéressant où Scott répond à un dev se demandant si il est vraiment développeur ou juste Googleur.

Bref, l’info qui concerne ce billet, c’est un lien que Scott a donné  http://projecteuler.net/ qui présente plein de petit problèmes mathématique plus ou moins simple qu’il faut résoudre en créant de petits programmes.

Je me suis donc lancé à tester ça, et j’ai tout de suite accroché !
Je viens de créer un repository sur GitHub pour mettre les algos que j’ai utilisés pour résoudre les 3 premiers problèmes :

https://github.com/evilz/projecteuler

Je suis preneur de remarques et même d’aide sur certain problèmes plus complexes que je n’arriverais pas à résoudre ou à comprendre. J’oubliais de dire le site est en anglais évidement.

Amusez vous bien ;p

On a tous des papiers, factures, bultin de salaire… assez important et a pas perdre en cas de feu.

Voici un petit outil sympa pour les scanner vite fait et les récupérer en pdf

icopy

Disponible ici

Apres je met le tout sur ma Dropbox ou sur google drive.
Coté sécurité c’est pas le top, mais c’est juste des papiers qui normalement trainent sur le bureau :p

Nous allons voir dans cet article les différentes façon de créer un système d’auto-complétion (ou l’équivalent) sur un Windows Phone 7.

Méthode 1 : InputScope

Comme pour d’autres OS mobile, WP7 permet de rechercher un mot entré par un utilisateur dans un dictionnaire.
De plus via la propriété InputScope nous allons pouvoir spécifier un contexte.

Actuellement les scopes disponible sont listés dans l’énumération InputScopeNameValue

Nom de membre Description
Default La gestion par défaut de commandes d'entrée.
Url Le modèle d'entrée de texte pour une adresse URL (Uniform Resource Locator).
FullFilePath Le modèle d'entrée de texte pour le chemin d'accès complet d'un fichier.
FileName Le modèle d'entrée de texte pour un nom de fichier.
EmailUserName Le modèle d'entrée de texte pour un nom d'utilisateur de courrier électronique.
EmailSmtpAddress Le modèle d'entrée de texte pour une adresse de messagerie utilisant le protocole SMTP (Simple Mail Transfer Protocol).
LogOnName Le modèle d'entrée de texte pour un nom de connexion.
PersonalFullName Le modèle d'entrée de texte pour le nom complet d'une personne.
PersonalNamePrefix Le modèle d'entrée de texte pour le préfixe du nom d'une personne.
PersonalGivenName Le modèle d'entrée de texte pour le prénom d'une personne.
PersonalMiddleName Le modèle d'entrée de texte pour le second prénom d'une personne.
PersonalSurname Le modèle d'entrée de texte pour le nom de famille d'une personne.
PersonalNameSuffix Le modèle d'entrée de texte pour le suffixe du nom d'une personne.
PostalAddress Le modèle d'entrée de texte pour une adresse postale.
PostalCode Le modèle d'entrée de texte pour un code postal.
AddressStreet Le modèle d'entrée de texte pour une adresse de rue.
AddressStateOrProvince Le modèle d'entrée de texte pour un état ou une province.
AddressCity Le modèle d'entrée de texte pour une adresse de ville.
AddressCountryName Le modèle d'entrée de texte pour le nom d'un pays.
AddressCountryShortName Le modèle d'entrée de texte pour le nom abrégé d'un pays.
CurrencyAmountAndSymbol Le modèle d'entrée de texte pour montant et symbole de devise.
CurrencyAmount Le modèle d'entrée de texte pour le montant d'une devise.
Date Le modèle d'entrée de texte pour une date de calendrier.
DateMonth Le modèle d'entrée de texte pour le numéro du mois dans une date de calendrier.
DateDay Le modèle d'entrée de texte pour le numéro du jour dans une date de calendrier.
DateYear Le modèle d'entrée de texte pour l'année dans une date de calendrier.
DateMonthName Le modèle d'entrée de texte pour le nom du mois dans une date de calendrier.
DateDayName Le modèle d'entrée de texte pour le nom du jour dans une date de calendrier.
Digits Le modèle d'entrée de texte pour les chiffres.
Number Le modèle d'entrée de texte pour un nombre.
OneChar Le modèle d'entrée de texte pour un caractère.
Password Le modèle d'entrée de texte pour un mot de passe.
TelephoneNumber Le modèle d'entrée de texte pour un numéro de téléphone.
TelephoneCountryCode Le modèle d'entrée de texte pour un indicatif téléphonique de pays.
TelephoneAreaCode Le modèle d'entrée de texte pour un indicatif téléphonique régional.
TelephoneLocalNumber Le modèle d'entrée de texte pour un numéro de téléphone local.
Time Le modèle d'entrée de texte pour l'heure.
TimeHour Le modèle d'entrée de texte pour l'heure du jour.
TimeMinorSec
NumberFullWidth Le modèle d'entrée de texte pour un nombre de largeur complète.
AlphanumericHalfWidth Le modèle d'entrée de texte pour caractères alphanumériques à demi-chasse.
AlphanumericFullWidth Le modèle d'entrée de texte pour caractères alphanumériques à pleine chasse.
CurrencyChinese Le modèle d'entrée de texte pour devise chinoise.
Bopomofo Le modèle d'entrée de texte pour le système Bopomofo de transcription phonétique du chinois mandarin.
Hiragana Le modèle d'entrée de texte pour le système d'écriture Hiragana.
KatakanaHalfWidth Le modèle d'entrée de texte pour caractères Katakana à demi-chasse.
KatakanaFullWidth Le modèle d'entrée de texte pour caractères Katakana à pleine chasse.
Hanja Le modèle d'entrée de texte pour les caractères Hanja.
PhraseList
RegularExpression Le modèle d'entrée de texte pour une expression régulière.
Srgs Le modèle d'entrée de texte pour la Spécification de la Grammaire de la Reconnaissance vocale (SRGS).
Xml Le modèle d'entrée de texte pour XML.

Voici le XAML néccésaire pour activer cette fonctionnalité sur une textbox :

<TextBox InputScope="Text" />

et le résultat

Cette méthode est très simple et rapide à mettre en place, cependant les mots retournés, même si le contexte est précisé, ne correspondent pas forcément au besoin actuel, d’ou la seconde méthode.

Méthode 2 : AutoCompleteBox

Le contrôle SilverLight AutoCompleteBox permet de créer un champs de saisi qui sera autocompleté en utilisant une liste que l’on va pouvoir définir, la bonne nouvelle c’est que ce controle peut être utilisé sur WP7., la mauvaise c’est qu’il est un peu buggé.

Avant de pouvoir utiliser ce controle il faut rajouter la référence vers l’assembly System.Windows.Controls.Input

Il ne reste plus qu’à l’inserer dans votre XAML

<toolkit:AutoCompleteBox x:Name="acbArrival" Grid.Row="1" Grid.Column="1" Text="{Binding ArrivalTown, Mode=TwoWay}"
MinimumPopulateDelay="200"
MinimumPrefixLength="3"
FilterMode="StartsWith"
ValueMemberBinding="{Binding Name}"
ItemsSource="{ Binding TownsList}" Height="71" VerticalAlignment="Top"
SelectionChanged="acbArrival_SelectionChanged"
IsEnabledChanged="acbArrival_IsEnabledChanged"
>
<toolkit:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</toolkit:AutoCompleteBox.ItemTemplate>
</toolkit:AutoCompleteBox>