Écrit le 28/06/2008 à 11:29 dans la catégorie Apple
Article lié à :
iPhone, Orange
Par un communiqué de presse, Orange a dévoilé les forfaits qui seront disponibles à l'achat d'un nouvel IPhone 3G.
Voici le communiqué :
En acquisition, l’iPhone 3G 8Go sera proposé au prix de 149€ avec les forfaits « Orange pour iPhone » ainsi qu’avec les forfaits Origami Star (à partir de 3h), First, et Jet. Avec les mêmes forfaits, l’iPhone 3G 16Go sera vendu à 199€.
Avec les autres forfaits de la gamme (hors forfaits bloqués et sans engagement), l’iPhone 8Go sera commercialisé à partir de 199€, et 249€ pour le 16 Go. Ainsi, dès 32€/mois avec un forfait Origami Star 1h+1h, Orange continue de démocratiser les usages mobile, en permettant à des clients de pouvoir utiliser la fonction internet de leur iPhone en illimité (*).
En fidélisation, dans le cadre du «Programme Changer de mobile », l’iPhone 3G sera proposé à partir de 199€ pour le 8Go et 249€ pour le 16Go avec un engagement de 24 mois.
Pour les clients Orange Business Services, l’iPhone 3G sera également lancé le 17 juillet 2008.
Une offre privilégiée pour les clients iPhone chez Orange
De façon exceptionnelle, Orange proposera à ses clients ayant acheté un iPhone avant le 12 juin 2008 et l’utilisant avec un forfait Orange (hors forfait bloqué, Initial et Mobicarte) de pouvoir acheter l'iPhone 3G au prix de 99€. Cet avantage prendra la forme d’une offre de remboursement de 100€ valable jusqu’au 31/10/2008, dans le cadre du 3 « Programme Changer de mobile » et sous réserve d'un engagement de 24 mois.
Cette offre de remboursement sera disponible pour les clients Orange Business Services, le 17 juillet 2008.
Pour résumer, il sera possible d'avoir un Iphone 3G 8Go à 199€ ou un 16Go à 249€ avec un forfait à 32€ par mois, comprenant internet illimité (limité à 500Mo de transfert par mois puis ralenti), 1h + 1h les soirs et week-ends, ainsi que les SMS illimités les soirs et week-ends. Reste quelques interrogations par rapport à la gestion des mails...
Je pense qu'il va vraiment être difficile de résister, à ce prix là..... !

Écrit le 11/04/2008 à 11:28 dans la catégorie Internet
Article lié à :
cinéma, liens, livres/BD, musique, séries TV, spectacle
N'avez-vous jamais eu envie de partager les émotions procurées par l'écoute du dernier CD que vous avez acheté ? N'avez-vous jamais souhaité faire part de votre coup de coeur concernant un film en particulier ?
C'est dans cette optique que Martin à souhaiter créer son site : partager ses coups de coeurs. Classés en catégories, les chroniques peuvent traiter de films, de séries TV mais également de spectacles ou de livres. Vous pouvez évidemment lire les différentes chroniques, mais également les commenter, ou mieux encore, proposer vos propres chroniques.
Je vous conseille donc d'écrire vos chroniques pour faire vivre ce site qui grâce à vous pourrait avoir un bel avenir !

Écrit le 20/02/2008 à 19:19 dans la catégorie Cinéma
Article lié à :
court-métrage, film amateur, IX.g, liens, perso, video
Alors que IX.g (prononcez "neuf G") a été tourné il y a deux ans, nous n'avions pas pour le moment de version correcte au niveau de la qualité, aussi bien au niveau du son que de l'image. Et pour cause : nous avions monté et exporté le film en NTSC en ayant des vidéos PAL, autrement dit nous aplatissions nos images, ce qui ne pouvait entrainer qu'une baisse de qualité !
Quant au son, nous avions enregistré la voix off avec un micro qui nous semblait de bonne qualité, relié à un PC, mais le niveau sonore était vraiment trop faible, et une fois amplifié les textes n'étaient plus compréhensibles.
Conscients depuis peu qu'il était possible de pallier à ces problèmes, nous avons profité de ces vacances pour le faire !
Dans un premier temps, nous avons transposé le montage NTSC sur une piste de montage PAL dans Adobe Premiere, ce qui fut vraiment compliqué étant donnée la stabilité hasardeuse du logiciel. Après avoir fait 5 parties PAL pour le film, il restait à les recoller, et y mettre une bande son retouchée.
C'est là qu'intervient mon MacBook Pro ! En effet, n'ayant pas de vrai micro, nous avons utilisé celui intégré à mon portable, ce qui a au final donné un rendu plus que correct. Après avoir ré-enregistré la totalité des voix off, il ne restait plus qu'à faire une exportation de ce nouveau montage.
Comme d'habitude, le visionnage qui a suivi le montage m'a permis de remarquer et corriger encore quelques erreurs. Finalement, il ne me restait plus qu'à faire une compression haute qualité de notre bijou !
C'est donc uniquement aujourd'hui que notre film est accessible sur la toile, sous deux formes : tout d'abord une version compressée en Xvid, avec une très bonne qualité de son, disponible en téléchargement direct, et une version en streaming sur vimeo.
IX.g - Film amateur from Antony Gardez on Vimeo.
Pour les liens, je vous invite à vous rendre sur le site internet du film, qui reste à paufiner mais qui a le mérite d'être clair, d'avoir un synopsis de très haute qualité, ainsi qu'une page téléchargement exhaustive !

Écrit le 29/01/2008 à 21:49 dans la catégorie Programmation
Article lié à :
jointure SQL, PHP/MySQL, programmation, tutoriel
Cet article est en fait tiré d'un message que j'avais laissé sur le forum que nous utilisions avec mes collègues de l'INSA pour construire le site de notre BDE. J'avais à l'époque synthétisé les connaissances que je venais d'acquérir en fouillant le Web et en pratiquant de mon côté. Il se peut donc que certains termes ou certaines syntaxes ne soient pas forcément les plus appropriées, mais j'avais toutefois fait de mon mieux pour avoir des requêtes "propres".
Le principe d'une jointure est simple, c'est récupérer des informations, en une seule requête, dans plusieurs tables. Le problème qui se pose immédiatement, est celui de lier ces deux tables sur un critère précis, pour pouvoir afficher une ligne d'informations de la première table liées à d'autres informations de la seconde.
Je m'explique : imaginons par exemple pour la gestion de news, que je veuille récupérer chaque article, avec en plus le nom de la catégorie dans laquelle il a été posté.
Je vais faire :
SELECT news_title,news_content,cat_title FROM news_content,news_cat
Mais dans un tel cas, je vais pour chaque article de news récupérer une ligne avec chaque catégorie, car je n'ai pas précisé comment organiser cette jointure, autrement dit je n'ai pas indiqué le lien logique qui lie ces deux tables. Il faut donc rajouter une clause WHERE spécifiant comment lier les deux tables. Il faut donc procéder ainsi :
SELECT news_title,news_content,cat_title FROM news_content,news_cat WHERE news_content.cat_id=news_cat.cat_id
On aura ainsi tous les titres et contenus d'articles avec à chaque fois uniquement le titre de la catégorie correspondant au cat_id présent dans le tuple de l'article en question dans la table news_content.
NB : Il est parfois nécessaire, dans le case de jointures, de préfixer le nom des champs avec le nom de la table de laquelle il est tiré, par exemple news_content.news_title, afin d'éviter toute ambiguïté. En effet, si ma table news_cat avait également contenu un champ news_title, il n'aurait pas été possible de discerner les deux et de savoir lequel sélectionner. Par contre, en ce qui concerne le champ sur lequel porte la jointure, dans notre cas news_cat, cela n'est pas necessaire puisque par définition nous considérons qu'il s'agit du même champ.
Pour illustrer ce type de requête, il faut imaginer deux tables, avec dans la première des articles. Celle-ci serait donc composée des champs news_id et content_id. La seconde contiendrait quant à elle des commentaires et qui contiendrait donc également ce champ news_id. On sait ainsi à quel article ce commentaire se rapporte.
Si la requête formulée précédemment est transposée à ce schéma de base de données, et qu'il n'y a pour le moment aucun commentaire correspondant à un certain article, ce dernier ne sera pas retourné. Ce comportement est logique, puisque la jointure de base permet de créer un tuple à partir de deux tables qui sont directement liées et que l'on suppose complémentaires. Un article qui n'a pas de commentaires n'est donc pas considéré comme devant faire partie de cette jointure. Pour une requête récupérant chaque article et son nombre de commentaires, seuls les articles en ayant seront récupérés.
Le principe d'une requête ouverte est que l'on souhaite que l'une des deux tables concernées voit toutes ses entrées retournées, que l'on trouve une correspondance dans la seconde table ou non. On l'utilise ainsi :
SELECT news_content news_title comment_number FROM news LEFT JOIN comments ON news.news_id = comments.type_id
La table qui doit être intégralement retournée est celle à gauche du LEFT JOIN, ou évidemment à droite d'un RIGHT JOIN. Le ON situé ensuite est la clause de jointure, que l'on mettait précédemment dans le WHERE.
J'ai supposé ici que le champ de la table comments était différent de celui de la table news. Dans le cas ou par exemple les deux champs sont appelés news_id, on peut procéder comme suit :
SELECT news_content news_title comment_number FROM news LEFT JOIN comments USING(news_id)
COUNT() et SUM()Je parlais tout à l'heure de compter le nombre de commentaires relatifs à un article. Il extiste pour cela diverses fonctions SQL qui évitent de devoir traiter les données récupérées de la base.
SUM()SUM() permet de faire la somme des valeurs contenues dans des champs spécifiques. Supposons par exemple une table avec un champ nom et un champ dépenses, dans laquelle on trouve chaque dépense de chaque personne sur un tuple différent. On a par exemple un tuple avec Jean associé à la valeur 20, puis un second avec ce même prénom et la valeur 30. Si votre souhait est de savoir combien chaque personne a fait comme dépenses, c'est à dire avoir un tuple par nom de la base associé à la somme des dépenses présentes dans la table, vous pouvez utiliser SUM() au lieu de perdre du temps à traiter les données après une requête générale en PHP ou tout autre langage. Voici la requête dans notre exemple précis :
SELECT nom, SUM(depenses) as somme FROM table1 GROUP BY nom
Nous indiquons ici, par la clause GROUP BY, sur quel champ nous devons regrouper les résultats. Le as permet d'obtenir en nom de champ somme dans le résultat de la requête.
En second exemple, je prendrai les tables des sondages du site du BDE. J'ai créé une table poll_answers, qui contient les champs answer_id (clé de cette table), poll_id et answer_votes. Pour illustrer, dès que la réponse 42, qui correspond à un certain sondage, est choisie et votée, le tuple correspondant est modifié de la manière suivante :
UPDATE poll_answers SET answer_votes= answer_votes+1 WHERE answer_id = 42
Ainsi, pour savoir le nombre total de votes pour un sondage donné, disons le numéro 7, la requête est la suivante :
SELECT sum(answer_votes) as total_vote FROM poll_answers WHERE poll_id = 7
COUNT()Revenons maintenant à l'exemple des commentaires. J'ai envie de savoir combien j'ai de commentaires pour l'article ayant pour identifiant 21. Plutôt que de prendre tous les commentaires, puis de compter les lignes des résultats en PHP, je peux ici utiliser la fonction COUNT(). La différence avec SUM() est donc qu'ici on ne fait pas une somme de valeurs de la table, mais on compte le nombre de résultats.
SELECT count(comment_id) as total FROM comments WHERE news_id = 21
Il est évidemment préférable de compter sur la clé de la table, afin d'obtenir tous les éléments de celle-ci correspondant à notre clause WHERE. Dans notre résultat, nous obtenons ainsi une valeur entière correspondant au nombre exacte de commentaires portant sur l'article 21.
Une fois que ces trois parties ont été bien assimilées, il est intéressant de voir où tout cela peut nous mener concrètement.
Il est donc temps d'expliquer en détail la plus grosse requête que j'ai eu à faire pour le système d'actualité du site, et qui m'a poussé à apprendre tout cela.
Dans un soucis de minimiser le nombre de requêtes, j'ai souhaité récupérer en une seule fois les informations suivante :
Il y a donc quatre tables concernées. Sans chercher à optimiser, il est évidemment possible de faire une requête sur les articles, et pour chaque ligne de résultat traité dans mon code PHP refaire une requête sur chacune des autres tables avec une clause du type WHERE news_id =. Ce qui m'aurait donné 3 requête de plus pour chaque article affiché. Autrement dit, une simple liste de 10 articles aurait conduit à un total de 31 requêtes.
J'ai donc cherché à tout réunir en une seule requête. Elle est sur plusieurs tables, regroupe deux tables par une jointure ouverte, et utilise la fonction COUNT(). Voici la bête :
SELECT news_id, news_title, news_content as content, DATE_FORMAT(news_dt, '%d/%M/%Y') as date, news_cat.cat_title as category, user_specialrank.special_rank_name as specialrank, COUNT(comments.comment_id) as com_number FROM news_cat,user_specialrank,news_content LEFT JOIN comments ON news_content.news_id = comments.type_id WHERE news_cat.cat_id = news_content.cat_id AND user_specialrank.specialrank_id = news_content.author_specialrank_id AND news_validated = 'y' GROUP BY news_dt DESC limit 0,10
Paf. C'est gros, moche, bourrin, c'est de l'optimisation. Je ne sais pas s'il est toujours nécessaire d'optimiser à ce point les requêtes SQL, mais il m'a semblé vraiment indispensable d'éviter d'avoir une complexité cubique (i.e. qui demande n3 opérations quand on traite n données).
Voici quelques explications :
SELECT soit compliquée. En ce qui concerne le FROM, j'y ai mis toutes les tables, en liant les deux dernières sur une jointure ouverte. J'ai ainsi tous les articles, mêmes si ils n'ont pas de commentaires.COUNT(), je ne récupérère qu'une seule ligne, qu'un seul tuple par article, puis que les lignes des différents commentaires correspondant sont simplement comptées.WHERE, j'ai les deux conditions pour ma jointure avec les deux autres tables, c'est à dire pour la catégorie et le rang de l'utilisateur auteur (En réalité, il y a un nom d'auteur correspondant à un niveau précis, par exemple 0 : administrateur, ou 10 : secrétaire du BDE).GROUP BY permet de spécifier sur quelle table on regroupe les COUNT(). En effet cette clause est indispensable dès que d'autres champs que le COUNT() sont récupérés dans la requête. J'en ai profité pour grouper par la date, supposant que nous n'aurons jamais deux articles postés à la même date (à la seconde près), et pour rajouter DESC. J'ai ainsi mes articles triés par date décroissantes. J'aurais également pu écrire GROUP BY news_id ORDER_BY news_dt DESC.En espérant avoir été assez clair, j'espère que cet article éclaircira un peu ces aspects à ceux qui souhaitent les connaître mais ne savent pas par où commencer !

Écrit le 26/01/2008 à 15:02 dans la catégorie Programmation
Article lié à :
LaTeX, programmation, tutoriel
Le LATEX (prononcez "latec") est un ensemble de macro-commandes permettant une utilisation simplifiée du "processeur de texte" TeX. Autrement dit, pour faire plus simple, avec LATEX vous pouvez écrire des articles, dossiers, thèses et même livres ou présentations avec une relative simplicité. Quel est donc l'intérêt d'utiliser un langage de programmation pour éditer du texte ?
LATEX permet de produire des documents la plupart du temps de type scientifique en s'attachant uniquement au contenu et au sens du document. En effet, dans les logiciels de type WYSIWYG (What You See Is What You Get) tels que Microsoft Word ou OpenOffice Writer, vous éditez votre texte, placez vos alinéas, paragraphes, tabulations, listes, titres à votre guise, avec les couleurs de vos choix, les marges de votre choix, et cela vous prend parfois beaucoup de temps. Sans compter le temps passé à essayer d'uniformiser le tout... A l'inverse, le principe de l'écriture de documents LATEX est à peu près le même que celui de la création web en HTML couplé aux feuilles CSS : la séparation de la sémantique et de la forme, qui sont deux aspects différents qui peuvent (doivent) donc être traités séparément. Cette approche permet, après une courte période de prise en main, de générer des documents avec une mise en page standardisée, selon les normes du pays choisi, de manière très rapide et ce sans soucis de mise en page.
Enfin, l'atout de ce langage pour l'édition de document scientifique est un ensemble de packages, ou paquetages, qui permettent l'affichage d'équations mathématiques, de matrices, mais aussi l'insertion de code dans n'importe quel langage de programmation avec coloration syntaxique adaptée, l'affichage de molécules, et ainsi de suite.
Un document LATEX est à la base un simple document texte qui peut être écrit avec n'importe quel éditeur de texte. Les deux notions importantes en LATEX sont les environnements et les commandes qui sont des instructions commençant systématiquement par le signe backslash \. Un environnement est symbolisé par les balises \begin{environnement} et \end{environnement}. Tout le texte qui sera situé entre ces balises sera traité ou affiché selon les propriétés de cet environnement. L'exemple le plus simple est le suivant :
\begin{document}
Ici se trouve le contenu de votre document.
\end{document}
C'est entre les balises de l'environnement document que se trouvent les informations à afficher dans le document final. Les commandes placées en dehors seront les en-têtes habituelles telles que les inclusions de packages et la déclaration du nom, du type et de l'auteur du document.
C'est par les commandes LATEX que sont déclarés ces en-têtes. Mais les commandes permettent aussi l'affichage dans le document de certains caractères spéciaux, ou consacrés. Une commande est de la forme \commande{arguments}, et ne fait donc qu'une ligne. Il est possible que la commande ne prenne pas d'argument, comme la commande \maketitle, présent dans l'exemple ci-après, et qui permet d'insérer le titre du document à un endroit précis.
\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\title{Exemple relativement simple de document \LaTeX{}}
\author{Antony Gardez}
\begin{document}
\maketitle
\section{Titre de premier niveau}
\subsection{Titre de deuxième niveau}
Pour écrire du texte, il suffit de le placer dans l'environnement document,
comme cette phrase. La création d'un nouveau paragraphe s'effectue en passant
deux lignes dans le texte.
Cette phrase se situe dans un nouveau paragraphe.
\begin{verbatim}
Le contenu de l'environnement verbatim est affiché tel quel avec tous les
espaces
et retours à la ligne.
Il s'agit d'un affichage de texte brut.
\end{verbatim}
\end{document}
Vous pouvez avoir le rendu de cette partie de code LATEX au format pdf ici.
De nombreux rapports scientifiques sont rédigés en LATEX. En cherchant rapidement sur internet des manuels de logiciels scientifiques, des livres en rapport avec les sciences ou l'informatique, ou encore des thèses, des rapports, vous reconnaîtrez assez rapidement le style particulier des documents LATEX. Cela vous permettra également d'avoir un aperçu des possibilités de ce langage.
Pour vous faciliter la vie je vous ai gentiment trouvé quelques exemples !
Enfin, si vous avez l'occasion de passer près d'un rayon informatique dans une librairie, la plupart des livres de ce domaine sont écrit par ce biais, notamment certains livres des collections Eyrolles et O'Reilly.
Compiler un document LATEX consiste à faire vérifier sa syntaxe, puis demander à un programme de créer le fichier dvi, ps ou PDF correspondant au code que vous avez écrit. Malheureusement il n'existe pas une unique méthode pour installer les outils de compilation. Cette méthode dépend du système d'exploitation sur lequel vous travaillez.
Sur les systèmes de type UNIX, comme Linux ou Mac OS, il faut installer les paquets nécessaires à la compilation. Par exemple sous la distribution Ubuntu, un petit tutoriel d'installation se trouve ici. Après avoir effectué cette simple commande, le logiciel Kile ainsi que les paquets nécessaires à la compilation seront installés. Pour MacOs, plusieurs options s'offre à vous : installer le paquets texLive par le biais de MacPorts ou Fink, qui sont des logiciels permettant d'accéder à des dépots de paquets de logiciels libre, à la manière d'apt-get sous linux, ou alors utiliser i-Installer.
Une fois tout cela installé, il existe deux manière de compiler : soit votre logiciel, comme par exemple Kile (linux) ou Textmate (MacOS), permet de lancer directement la compilation par un raccourci clavier ou un bouton sur lequel cliquer, et vous indique également les éventuelles erreurs, ou alors vous aurez à vous familiariser avec le terminal, et utiliser la commande pdflatex.
Enfin, sous Windows, il existe un package appelé MiKTeX qui contient tout ce qu'il faut pour créer des documents LATEX.
Mon but n'étant pas dans cet article d'expliquer en détail la compilation et la résolution des différents bugs engendrés, mais plutôt de donner une idée globale de ce langage, je n'irai pas plus loin.
Bien que plus adapté et accessible aux scientifiques et programmeurs, LATEX permet, après un temps d'adaptation, de créer assez rapidement des documents préformatés, pour des comptes rendus dans le cadre de mes études en ce qui me concerne. Mais il peut aussi s'agir d'un outil très pratique pour écrire un dossier à plusieurs et regrouper les différentes parties par le biais de la commande \input{fichier.tex}, et il existe beaucoup de commandes et d'astuce pour personnaliser ces documents.
Pour finir, je ne pouvais pas écrire un article sur LATEX sans donner le lien de la très très complète FAQ de l'équipe Grappa, qui répond probablement à toutes les questions qui trottent dans votre tête.

Écrit le 02/12/2007 à 16:37 dans la catégorie PWAR
Article lié à :
anti-spam, blog, programmation
Depuis quelques jours, j'ai un très grand nombre de messages quotidiens en commentaires. Sympa, non ? Sûrement pas, puisqu'il s'agit de spam.
Les spammeurs utilisent des robots qui fouillent le web, probablement par le biais de google, et cherchent des formulaires à remplir automatiquement. Mon site commence à être référencé, et j'en paye les frais. Il me faut donc un moyen d'empêcher ces robots de laisser des messages.
Il y a en fait deux solutions à cela. Dans un premier temps, il est possible de traiter tous les messages reçus et d'analyser le contenu pour déterminer si oui ou non il s'agit de spam. Il existe des scripts que l'on peut intégrer à ses pages personnelles, comme Akismet. Ce-dernier apprend progressivement à reconnaître les spams de par son expérience.
L'autre possibilité et de faire remplir une case d'une manière spécifique dans le formulaire d'ajout de commentaire. On appelle ça un Captcha. J'ai choisi cette option, en tous cas pour le moment, pour sa simplicité.
Le robot ne sait pas en effet de lui-même comprendre ce qu'il doit écrire dans la case correspondante. Mais vous, lecteurs, comprenez vite qu'il vous suffit de taper PWAR! pour que votre commentaire soit accepté. Facile, non ?
page 1/4 | Page suivante