vendredi, août 08, 2008

Référencer son entreprise sur Google Map


Depuis quelques temps déjà quand on tape "restaurant arras" ou encore "une société ville", on obtient en premier lieu un résultat issue de Google Map faisant apparaître le nom de la société suivi des ses coordonnées : adresse, téléphone, site et bien sur le plan.

Pour cela, il est possible de le faire s'inscrire via ce lien : Inscrire sa société sur google map

mercredi, août 06, 2008

Gogole Insights for search

Google a publié un petit outils très intéressant que j'ai connu grâce à WebRankInfo.
Celui-ci permet de visualiser les recherches effectués sur un ou plusieurs mots clés, sur une période et en filtrant les résultats par lieux ... quelque chose de très intéressant :-)
Google Insight for search par WRI

lundi, août 04, 2008

System.Math.Round les arrondis en .NET

On me demande de réaliser une fonction d'arrondi dites au 4/5eme qui dit :
si le chiffre après l'arrondi est inférieur ou égal à quatre alors on garde la valeur sinon on incrémente de un.
Ce qui donne pour un arrondi à 2 décimales :
1.234 ==> 1.23
1.235 ==> 1.24
1.236 ==> 1.24
...

Pour moi c'est la fonction arrondi par défaut ... donc, je me dit pourquoi pas utiliser Decimal.Round(1.235m,2) et vérifier le résultat.
Surprise, le résultat n'est pas celui attendu ! Cela me retourne : 1.23, car .NET, la fonction arrondie utilisée est la méthode du chiffre paire le plus près et non pas la plus proche ! Voici un petit article sur les arrondis qui m'a aidé a comprendre : arrondi sur wikipédia

Donc pour utiliser l'arrondi au plus près, il faut utiliser la fonction suivante :
Decimal.Round(1.235m, 2,MidpointRounding.AwayFromZero)

vendredi, août 01, 2008

Synthétiseur vocal en C# : SAPI 5.3

Si vous souhaitez utiliser la synthese vocal dans l'une de vos applications C# en .NET 3.0, je vous conseil de regarder le namespace System.Speech qui permet d'utiliser SAPI (Microsoft Speech API), en ce qui concerne les version sous Vista la 5.3 est disponible. Par contre, pour XP, il faut voir vers la 5.1 :
SAPI 5.1 SDK téléchargement

Optionnel : Pour obtenir les voix en francais, voici un article qui donne une solution :
Synthese vocal en francais

Je n'ai pas regardé, mais peut être que l'on peut passer l'installation du SDK ... car il me semble que les voix sont installés par défaut. Voir dans Panneau de configuration, Voix.

Maintenant que nous avons notre SAPI d'installer, nous allons créer un nouveau projet de type application .NET 3.0 (on est pas obligé de faire du XAML, mais c'est vous qui voyez).

L'objectif de cette petite application et de faire parler votre ordinateur. Avec cette meme librairie, il est possible de faire de la reconnaissance vocale mais je n'ai pas encore abordé le sujet.

1er étape : référencer System.Speech qui est une Dll de .NET 3.0
2eme étape : faire parler au synthétiseur une phrase toute simple
Contrairement a ce que l'on pourrait penser, c'est tout simple !! :)
Voici les quelques lignes de code à ajouter :
System.Speech.Synthesis.SpeechSynthesizer synthetizer = = new System.Speech.Synthesis.SpeechSynthesizer();
//En mode asynchrone
synthetizer.SpeakAsync("Bonjour");
//En mode synchrone
// synthetizer.Speak("Bonjour");


Ensuite, on peut réaliser des textes un peu plus élaborer en utilisant le PromptBuilder qui permet de structurer son texte. Attention, cette fois-ci, le synthetiseur prend la voix correspondant à la culture du système et non plus la voix par défaut. C'est la raison pour laquelle, j'ai précisé la culture dans l'exemple suivant, qui donne la date et l'heure du système :
System.Speech.Synthesis.PromptBuilder pBuilder = new System.Speech.Synthesis.PromptBuilder(System.Globalization.CultureInfo.GetCultureInfo("fr-FR")) ;
pBuilder.AppendText("Nous sommes le :");
pBuilder.AppendTextWithHint(DateTime.Now.ToString("dd/MM/yyyy"), System.Speech.Synthesis.SayAs.Date);
pBuilder.AppendBreak();
pBuilder.AppendText("Il est : ");
pBuilder.AppendTextWithHint(DateTime.Now.ToString("HH:mm:ss"), System.Speech.Synthesis.SayAs.Time24);
synthetizer.SpeakAsync(pBuilder);


.AppendText(string text) réalise la même chose que ce que nous avons utilisé tout à l'heure.
.AppendTextWithHint(string text, SayAs sayAs) lit le texte en fonction du type de donné dont il s'agit par exemple : .AppendTextWithHint("01/01/2008",SayAs.Date) sera lu comme "1er Aout 2008"
.AppendBreak() comme son nom l'indique, cela permet de réaliser une pause entre les mots. Il est possible de préciser le temps de la pause avec un TimeSpan.

Voilà pour un premier test. J'espère pouvoir faire des tests avec la reconnaissance vocal et vous tenir informer.

jeudi, juillet 31, 2008

Analyseur de contenu

Sur le forum de WebRankInfo, quelqu'un a proposé un petit outils que je trouve fort sympathique. Il en existe très certainement d'autres, mais comme c'est la première fois que j'en utilise un, j'en profite pour lui faire un peu de publicité.

Il s'agit d'un analyseur de contenu. En gros, ca permet de visualiser le nombre d'occurrence de chaque mot sur le site afin de vérifier si la pertinence des mots clés est correct.

Voici le résultat pour les mots clés apparents :


Voici le résultat pour l'analyse :



Et pour terminer, un petit récapitulatif des liens internes et leurs textes associés :


J'en profite également pour signaler que cette même personne a mis en service un système de capture d'écran de site

mercredi, juillet 16, 2008

Tutoriel installation vTiger


Comme dis dans un précédent post, je travaille sur un dossier concernant le CRM gratuit vTiger. L'objectif est de rendre disponible un CRM complet à moindre frais. Pour réaliser mon dossier, je me suis servi d'un hébergement Lycos (Website XS).


Ce dossier est consultable sur mon site concernant l'hébergement : dossier vTiger

Celui-ci n'est pas encore terminé, n'hésitez pas à me faire part de vos remarques.

mardi, juillet 08, 2008

Positionnement Google

Je viens de trouver un petit outils très intéressant afin de pouvoir visualiser son référencement "naturel" sur le moteur de recher google.

L'outils est très simple, vous saisissez votre URL, les mots clés ... et quelques secondes plus tard vous voyez la page et et la position où votre site apparait !

Voici le lien : http://www.sam-mag.com/default.aspx?id=68&mnu=68

mercredi, juillet 02, 2008

Générateur de site map

Après avoir lu quelques articles sur le référencement, j'ai lu à plusieurs reprises que pour faciliter, il était nécessaire d'avoir un site map

Voici un site que se charge de le faire en ligne, très pratique et rapide : http://www.xml-sitemaps.com/

Référencement des sites flash sur Google

Et oui, depuis bien longtemps, on lit que si l'on veut un site bien référencer, il ne faut pas faire de site en flash (ou si l'on en fait un, rajouter suffisamment d'html pour qu'il soit visible) car les moteurs de recherches ne savent pas lire Flash ... et bien ca y est, google sait le faire :
Indexation animations flash

mardi, juillet 01, 2008

CRM gratuit - vTiger

Après plusieurs tentative, j'ai enfin réussi à configurer vTiger sur un hébergement de type Lycos.

Il est assez intéressant de voir que l'on peut mettre à disposition de tous ces commerciaux un CRM sans trop d'effort et qui plus est gratuit! Le plus gros du travail est de le paramétrer (clients, fournisseurs, produits ...)

Si vous souhaitez avoir une description du produit en francais, cliquez-ici. Sinon pour le site officiel, c'est par ici

Pour ma part, bien que je n'ai pas encore testé complètement la solution, ses deux points forts sont le mode web et le plugin outlook qui permet de synchroniser contact, agenda et messages.

Je publierai prochainement un post dans lequel j'expliquerai l'ensemble des étapes à réaliser pour y parvenir ...

lundi, juin 30, 2008

Solutions d'hébergement - www.solutions-hebergement.fr

Lycos a mis en place un système d'affiliation qui consiste à promouvoir leurs solutions en échange de quoi, ils fournissent une commission non négligeable. Pour d'informations Affiliation Lycos

Pour ma part, j'ai choisi de promouvoir leurs offres via un site internet dans lequel on pourra retrouver toutes les informations pour réaliser son site internet et surtout sa boutique en ligne.

Pour l'instant, je n'ai pas encore terminé le site mais il est déjà publié. N'hésitez pas à me faire des retours : Créer son site ou sa boutique en ligne

samedi, mars 22, 2008

SharpDevelop 3.0 Beta 1

Ca y est la Beta 1 est sortie depuis le 19 février !

Pour ceux qui ne connaisse pas encore SharpDevelop, il s'agit d'un IDE pour la plateforme .NET OpenSource fonctionnant sous Windows (possibilité sous Linux via Mono mais non supporté). Cet IDE est basé sur un principe de plug-in ce qui le rend extensible facilement pour qui le veut.

La nouvelle version prend en charge le framework 3.5 et donc les nouvelles fonctionnalités qui en découle. Notamment, Daniel Grunwald a écrit un designer WPF pour lequel il recherche de bonnes âmes pour l'idée particulièrement pour le binding.

Pour plus d'information :
annonce de la sortie beta 1

Le site de sharpdevelop

vendredi, mars 14, 2008

Réplication SQL Server - RMO de SMO

Lorsque l'on réalise certains développements, nous sommes amenés à rencontrer les réplications SQL Server avec des contraintes de licences compte tenu des budgets disponibles.

J'ai rencontré cela en souhaitant mettre en place une réplication de fusion entre un sql server 2005 workgroup et un serveur sql express.

Le problème que l'on se rend compte très rapidement c'est que le sql server express ne dispose pas d'agent.
Alors, on commence à explorer d'autres pistes : la réplication transactionelle bidirectionnelle ! Chouette ! Ca fonctionne avec sql express après avoir paramétré msdtc convenablement! Seul contrainte à cela c'est qu'en cas de coupure de lien entre les deux serveurs, plus aucun enregistrements n'est réalisable ...
Retour arrière, il faut utiliser une réplication de fusion, de façon à pouvoir travailler en mode déconnecté (sur une GPAO ce n'est pas négligeable). Deux solutions, soit j'essaie de faire en sorte pour trouver le budget pour une seconde licence ... soit je me débrouille autrement pour faire un "agent".
Et c'est là qu'intervient RMO (Replication Management Object) de SMO (Sql Server Management Object).
Avec ces objets, il est possible de réaliser un pseudo agent grâce à une petite application c#.

Voici un petit bout de code qui permet :
1) de réaliser l'abonnement
2) de déclencher les réplications (reste à faire une tâche planifiée)


public class RMO
{
///
/// Launch a client merge replication (as a sql agent done)
///

/// Subscriber instance name
/// Publisher instance name
/// Publication name
/// Publication DB Name
/// Subscription DB Name
/// Indicate if it is necessary to create subscription
public static void MergePushReplic(string subscriberName, string publisherName, string publicationName, string publicationDbName, string subscriptionDbName, bool createSubscription)
{

// Create a connection to the Publisher.
ServerConnection connPub = new ServerConnection(publisherName);
ServerConnection connSub = new ServerConnection(subscriberName);
MergePublication publication;
MergePullSubscription subscription;

try
{

connPub.Connect();
connSub.Connect();


publication = new MergePublication(publicationName, publicationDbName, connPub);

if (publication.LoadProperties())
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}


subscription = new MergePullSubscription(subscriptionDbName, publisherName, publicationDbName, publicationName, connSub);
subscription.SynchronizationAgentProcessSecurity.Login = @"";
subscription.SynchronizationAgentProcessSecurity.Password = "";
subscription.CreateSyncAgentByDefault = true;


if (createSubscription)
subscription.Create();

Boolean registered = false;

// Verify that the subscription is not already registered.
foreach (MergeSubscription existing
in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName
&& existing.SubscriptionDBName == subscriptionDbName
&& existing.SubscriptionType == SubscriptionOption.Pull)
{
registered = true;
}
}
/*
if (!registered)
{
// Register the local subscription with the Publisher.
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.None,
MergeSubscriberType.Local, 0);
}
*/
// Check that we have enough metadata to start the agent.
if (subscription.SubscriberSecurity != null)
{
subscription.SynchronizationAgent.PublisherSecurityMode = SecurityMode.Integrated;
subscription.SynchronizationAgent.DistributorSecurityMode = SecurityMode.Integrated;
subscription.SynchronizationAgent.OutputVerboseLevel = 1;
subscription.SynchronizationAgent.Output = "c:\\replic.log";
// Synchronously start the Merge Agent for the subscription.
subscription.SynchronizationAgent.Synchronize();

}
else
{
throw new ApplicationException("There is insufficent metadata to " +
"synchronize the subscription. Recreate the subscription with " +
"the agent job or supply the required agent properties at run time.");
}
}
else
{
// Do something here if the push subscription does not exist.
throw new ApplicationException(String.Format(
"The subscription to '{0}' does not exist on {1}",
publicationName, subscriberName));
}
}
catch (Exception ex)
{
// Implement appropriate error handling here.
throw new ApplicationException("The subscription could not be synchronized.", ex);

}
finally
{
connPub.Disconnect();
connSub.Disconnect();
}


}

}


En attendant, voici un petit lien fort utile :
http://msdn2.microsoft.com/en-us/library/microsoft.sqlserver.replication.aspx

samedi, mars 08, 2008

SharpDevelop

Pour ceux dont les limitations des versions Express de Visual Studio sont trop contraigantes et pour ceux qui souhaitent pouvoir modeler un IDE comme bon leur semble voici un projet OpenSource intéressant. Il s'agit de SharpDevelop qui est un IDE en constante évolution. La dernière release est la 2.2 qui supporte le Framework .NET 3.0, la version 3.0 est en cours de développement et celle-ci supporte le Framework .NET 3.5, bien que cette version est disponible, elle n'est pas encore stable.

Un gros avantage de cet IDE est l'intégration de nombreux outils OpenSource très souvent utilisés : NUnit, SVN, ...

Je pense que c'est très intéressant de suivre un tel projet et j'aimerai pouvoir consacrer un peu de temps à celui-ci.

Vous retrouverez tout ce dont vous avez besoin sur http://www.sharpdevelop.net/OpenSource/SD/Default.aspx

vendredi, décembre 14, 2007

Comment obtenir le chemin courant en .NET Compact framework

Voici une belle petite commande qui permet d'obtenir le chemin d'exécution dans une application .NET CF 1.0 ou 2.0 :

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)

Effectivement sur windows ce 4.2 ou 5.0 il n'y a pas de notion de 'current directory' que l'on peut avoir l'habitude d'utiliser.

Webcam - Traitement d'image et plus

Pour le plaisir, je me suis intéressé à comment intégrer une image d'une webcam dans une application .NET. En faisant mes recherches, je suis tombé sur une petite application sur code project qui répondait à mes besoins même plus !
http://www.thecodeproject.com/KB/audio-video/Motion_Detection.aspx
Il s'agit en fait d'une implémentation de la librairie AForge.Net (http://code.google.com/p/aforge/) dans laquelle on retrouve
  1. tout ce qu'il faut pour afficher différents flux vidéo ... dont les flux locaux issus de webcams
  2. tout ce qu'il faut pour traiter les images (filtres RGB, HSL, Mathématique ...)
  3. et pour terminer ... tout ce qu'il faut pour réaliser des réseaux neuronnaux et trucs un peu tordus du genre !

Je me suis donc retrouvé d'afficher ma webcam, à étudier les réseaux neuronnaux ...

Je pensais avant d'avoir regarder le truc qu'il fallait être un mathématicien averti afin de pouvoir utiliser ce genre de chose. Et à priori cela n'est pas aussi compliqué que je le pensais. Ca n'est cependant pas simple ! Si cela vous intéresse, il y a une petite démo sur ce que l'on peut faire avec les réseaux neuronnaux (mais avant faut quand même se mettre dans le bain) http://www.codeproject.com/KB/recipes/aforge_neuro.aspx

Bonne lecture !

lundi, juillet 09, 2007

Le passage de date depuis un .NET CF 1.0 vers un services web .NET 2.0 est un vrai casse tête
Lors d'un développement un de mes collègues a eu un problème assez louche :

Coté PPC une application en .NET CF 1.0 qui filtre des commandes en fonction des dates d'expédition. En fonction de cette date, on appele un service web qui retourne une liste de commande en fonction de la date choisie. Jusque là rien d'extra et tout fonctionnait bien. On nous a demandé de rajouter l'heure de départ, sur le papier ça parraissait on ne peut plus facile mais en réaliter ... grosse galère !

Pour une raison assez mystèrieuse, lorsque l'on passait le datetime avec l'heure comprise on avait un décalage coté serveur de +9H ! on a regarder la partie paramètres régionaux et tout coller ... impossible de trouver la raison.

Pour solutionner, on a du changer la signature de la méthode et passer les heures séparemment ... tout simplement étrange!

samedi, juillet 07, 2007

Les certifications Microsoft côté développeur :

Pour ceux qui sont intéressés comme moi à se certifier sur les technos ASP.NET, il y a eu quelques récents changements.
J'ai toujours entendu parler de MCAD (Microsoft Certified Application Developper) et bien maintenant c'est remplacé pour par le MCSP (Microsoft Certified Solution Professional).
Pour cela, il est nécessaire de devenir un MCTS Web developper, 2 examens :
Exam 70–536: TS: Microsoft .NET Framework 2.0 - Application Development Foundation
Exam 70-528: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development
Ensuite pour obtenir le MCSP Web developper, il faut passer un examen supplémentaire :
Exam 70-547: PRO: Designing and Developing Web Applications by Using the Microsoft .NET Framework

Vous retrouverez tout ça sur le lien suivant : http://www.microsoft.com/learning/mcp/mcpd/webdev/default.mspx

lundi, mai 28, 2007

NHibernate en release

Voila depuis quelques temps déjà NHibernate est sorti en release. Cette dernière version a beaucoup de bugs de corriger. Pour aller télécharger la dernière version :
http://www.hibernate.org/343.html

jeudi, janvier 04, 2007

API Google MAP

Un article sur le site du journal des développeur concernant l'API Google MAP. Celle-ci permet d'intégrer les fonctionnalités de Google MAP dans nos sites web en utilisant JavaScript.
Je pense qu'il serait intéressant de faire un petit Wrapper .Net si celui-ci n'existe pas encore...

http://developpeur.journaldunet.com/tutoriel/dht/061222-google-maps-api/0.shtml