Initialiser une std::map avec C++11

Posté par seiyar81 le 17 novembre 2013 | Laisser un commentaire (0)
C++11

Une petite astuce, si l’on peut appeler ça comme ça, sur l’utilisation des maps en C++11. Cette nouvelle version du langage a en effet introduit les initializer_list et le principe de l’uniform initialization.
Je ne détaillerai pas plus en détails les méchanismes ni les possibilités apportées par ces fonctionnaliés mais je vous conseille de vous y intéresser dans un premier temps sur Wikipédia.

Imaginons que vous disposez d’une map à initialiser sur plusieurs niveaux, voilà ce que vous pouvez maintenant faire avec les nouveaux principes évoqués ci dessus :

std::map<int, std::map<int, int>> my_map = {
    {1, 
			{
				{2, 3}
			}
		}
};

Vous gagnez ainsi de nombreuses lignes à écrire et sans y perdre en visibilité.

Catégorie: C++ | Laisser un commentaire (0)

Des div toujours visibles avec Sticky, un plugin jQuery

Posté par seiyar81 le 5 juillet 2013 | Laisser un commentaire (1)
Sticky

Lorsqu’on développe des sites ou applications Web, on peut être amenés à vouloir garder une partie de la page toujours visible lorsqu’on scroll.
Que ce soit pour un effet esthétique ou pour une question de praticité comme avec une barre d’actions ou un menu de navigation par exemple.

Plusieurs manières existent pour réaliser cet effet, mais je parlerai ici d’un plugin jQuery : Sticky.

Ci-dessous un petit exemple d’un header toujours visible :

  Sticky
  
  
  
  

  
  

Une première div qui va disparaître.

Une deuxième div qui va disparaître.

Une troisième div qui va disparaître.

Nous centrons donc notre header en CSS et nous indiquons ensuite à Sticky via la propriété center:true que l’on souhaite qu’il reste centré une fois collé en haut de la page.

Sticky est léger et configurable via 5 options :

  • topSpacing: Pixels entre le haut de la page et le haut de l’élément
  • bottomSpacing: Pixels entre le bas de la page et le bas de l’élément
  • className: Classe CSS ajouté à l’élément et à son wrapper quand il est collé
  • wrapperClassName: Classe CSS ajouté au wrapper
  • getWidthFrom: Sélecteur d’un élément utilisé pour régler la largeur fixe de l’élément collé

Libre à vous d’utiliser le CSS que vous souhaitez pour placer/dessiner votre élément.

Pour récupérer le plugin ou y contribuer, direction Github.

Catégorie: Développement Web, Javascript | Laisser un commentaire (1)

Prestashop Advanced Sitemap: v1.4.4 et CRON

Posté par seiyar81 le 15 juin 2013 | Laisser un commentaire (2)

Suite aux nombreuses demandes reçues en ce sens, j’ai modifié le plugin pour y ajouter une fonction CRON afin qu’il puisse être lancé automatiquement depuis n’importe quel service CRON.

Vous devrez d’abord créer une clé de sécurité via l’interface d’administration du plugin, ceci pour éviter que n’importe qui puisse faire appel au service.
Ensuite vous pourrez appeler le module via cette adresse :

[URL de la BOUTIQUE]/modules/gadvsitemap/cron.php?mode=cron&secure_key=[CLE de SECURITE]

Concernant les services CRON, si vous disposez d’un serveur sous Linux avec l’accès à crontab la configuration suivante suffira :

crontab -e
0 0 * * * wget [URL COMPLETE] 1>/dev/null 2>&1

Sinon vous pouvez faire appel à un service externe tel que :
webcron, cronless.com, easycron.com, ousetcronjob.com.

Pour télécharger la nouvelle version du module ça se passe sur GitHub.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (2)

PHPUi : Du nouveau et des examples

Posté par seiyar81 le 26 février 2013 | Laisser un commentaire (0)

PHPUi Logo

Beaucoup de changements pour PHPUi, on avance petit à petit vers une librairie utilisable pour développer et créer ses interfaces utilisateurs.

La réécriture de la librairie avec les namespaces de PHP5 a apporté entre autres une meilleur abstraction et modularité des fonctionnalités.

Le support de jQuery ( et de jQuery Ui ) est toujours d’actualité mais est complété par le support de Javascript basique.
Cela nous permet de mieux intégrer dans nos pages des fonctionnalités simples mais nécessaires telles que l’ouverture de popup ou le clic sur un bouton sans avoir besoin d’un framework complet.

Un petit exemple :

	$button = new Xhtml\Element('button', array('onClick' => PHPUi::getInstance()->js()->console->log('[OnClick] Hello world !')), true, 'Click me !');
	$button->onMouseOver = $button->js()->console->log('[MouseOver] Hello world !');
	echo $button;

        $button2 = new Xhtml\Element('button', array('onClick' => PHPUi::getInstance()->js()->window->open("http://localhost/phpui/examples/","PHPUi Examples","menubar=1,resizable=1,width=350,height=250")), true, 'Open pop-up !');
        echo $button2;

Comme vous pouvez le voir, le chaînage des appels Javascript est pleinement supporté.

Cette fonctionnalité devrait également faire son apparition dans l’adapter jQuery en plus du support des spécificités de ce dernier.
A l’heure actuelle vous pouvez déjà réaliser ceci :

        $gs = PHPUi::getInstance()->gs(array('columns' => 16));
        $gs->addChild(new Xhtml\Element('h2', null, true, '16 Column Grid - 960Gs'));
        $gs->jquery()->click( $gs->js()->console->log("Hello from the console") ); 
        $gs->jquery()->click( 
            $gs->jquery()->ajax( 
                array( 
                    'url' => 'ajax.php', 
                    'type' => 'POST', 
                    'data' => array( 'html' => $jsonString ), 
                    'dataType' => 'html',
                    'success' => 'function(data) { $(".container_16").append(data); }' 
                ) 
            ) 
        );
        echo $gs;

Le chaînage des appels Javascript dans un appel jQuery est actuellement supporté.

Pour plus d’exemples ou d’informations voyez le GitHub du projet.

Catégorie: Développement Web, Javascript, PHP | Laisser un commentaire (0)

Qt : Convertir une QImage en noir & blanc

Posté par seiyar81 le 27 décembre 2012 | Laisser un commentaire (0)

Qt, actuellement en version 4.8 et 5.0 RC2, possède un certain nombre de fonctionnalités propre aux graphismes et au dessin.
Notamment une bonne gestion des différents formats d’images comme vous pouvez le voir dans le tableau suivant :

Format Description Support de Qt
BMP Windows Bitmap Read/write
GIF Graphic Interchange Format (optional) Read
JPG Joint Photographic Experts Group Read/write
JPEG Joint Photographic Experts Group Read/write
PNG Portable Network Graphics Read/write
PBM Portable Bitmap Read
PGM Portable Graymap Read
PPM Portable Pixmap Read/write
TIFF Tagged Image File Format Read/write
XBM X11 Bitmap Read/write
XPM X11 Pixmap Read/write

S’il est possible de base de manipuler les images en changeant le mode RVB, en modifiant les pixels ou les couleurs, il faut passer par une manipulation manuelle pour convertir une image en niveaux de gris.
Pour cela rien de plus simple que la fonction suivante :

void toGrayscale(QImage & image)
{
    Q_ASSERT(!image.isNull());
    Q_ASSERT(image.width() > 0 && image.height() > 0);

    QRgb col;
    int gray;
    int width = image.width();
    int height = image.height();
    QImage alpha = image.alphaChannel(); // On sauvegarde le canal alpha pour la transparence
    for (int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; ++j)
        {
            col = image.pixel(i, j);
            gray = qGray(col);
            image.setPixel(i, j, qRgb(gray, gray, gray));
        }
    }
    image.setAlphaChannel(alpha);
}

L’opération n’est pas des plus légères puisqu’elle modifie un à un tous les pixels de l’image, toutefois elle fait ce qu’on lui demande.

Catégorie: C++, Qt | Laisser un commentaire (0)

Google Advanced Sitemap disponible pour Prestashop 1.4

Posté par seiyar81 le 3 juin 2012 | Laisser un commentaire (36)

EDIT 15/06/2012 : J’ai créé un dépôt Github afin de pouvoir partager les modifications apportées au plugin.

https://github.com/seiyar81/prestashop-advanced-sitemap

Suites aux remarques et à plusieurs demandes, j’ai fais évoluer le support des langages.
Vous pouvez maintenant, en plus de sélectionner quels langue inclure dans le sitemap, sélectionner l’URL sur laquelle se baser pour la génération et ce pour chaque langue.

EDIT 03/06/2012 : Nouvelle version du module avec support des langages (merci à roselan sur le forum de Prestashop) et génération d’un sitemap correctement formaté.

  Google Advanced Sitemap (13,9 KiB, 751 hits)


Suite aux nombreuses demandes reçues je me suis enfin décidé à porter mon module de génération de sitemap vers Prestashop 1.4.
Depuis la version 1.4 l’équipe de développement de Prestashop a intégré le support des images des produits et des différentes langues activées sur la boutique.

Je suis donc reparti de cette base solide et stable afin de ré-inclure mes fonctionnalités de ping des moteurs de recherche.
Ainsi le module est capable de pinger les moteurs suivants :

  • Google
  • Bing (comprends Yahoo qui a fusionné avec l’index de Bing)
  • Ask.com

Potentiellement tous les moteurs de recherche peuvent être ajoutés, n’hésitez donc pas à me faire part de vos requêtes.

Sachez également qu’à chaque ajout, édition ou suppression de produit, le sitemap est ré-généré automatiquement.

Je reste bien évidemment ouvert aux propositions d’améliorations, de nouvelles fonctionnalités etc… et disponible s’il y a des problèmes.
Encore merci à tous pour vos remarques et suggestions.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (36)

Réaliser une requête POST en PHP avec cURL

Posté par seiyar81 le 10 mai 2012 | Laisser un commentaire (0)

Voici un snippet d’une fonctionnalité que l’on ne trouve pas facilement dans la documentation de PHP : uploader un fichier avec la librairie cURL.

Cette dernière nous offre en effet de nombreuses possibilités pour gérer nos requêtes et ce qui nous intéresse plus particulièrement ici : les requêtes HTTP à l’instar de wget par exemple.


function curlUploadFile($url, $fileName) {

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_VERBOSE, 0);
  curl_setopt($ch, CURLOPT_USERAGENT, "MY_USER_AGENT");
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);

  $post = array(
    "upload_file"=>"@".str_replace("\\", "/", $fileName),
  );
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
  $response = curl_exec($ch);

  if(!curl_errno($ch))
  {
    return $response;
  }
  else
  {
    return curl_error($ch);
  }

}

Voilà en espérant que cela dépanne certains !

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (0)

QtBlogger : QtAmbassador et futur du projet

Posté par seiyar81 le 5 février 2012 | Laisser un commentaire (1)

Qt Ambassador

Logo QtBlogger

Cela fait plusieurs mois que le projet n’a pas avancé, on peut même dire qu’il était en pause.
Il faut dire que beaucoup d’évènements se sont enchaînés et qu’il n’a pas été facile pour moi de poursuivre les développements : déménagement, mémoire de fin d’études, entrée dans la vie active etc…

Toutefois le projet n’est pas mort ! Je compte bien poursuivre les développements et fournir un jour une première version de QtBlogger au téléchargement.

Pour rappel QtBlogger permet de gérer via une seule et même interface tous vos Blogs et CMS en s’interfaçant avec les différentes plates-formes existantes telles WordPress, Joomla, Drupal etc…
Ajoutez à cela une API permettant le développement de plugins, de nombreuses fonctionnalités présentes de base comme l’édition ou la recherche directe d’images sur le Web et vous obtenez un logiciel polyvalent.

De plus QtBlogger a eu l’honneur de rejoindre le programme QtAmbassador offert par Nokia ce qui est d’ores et déjà une première reconnaissance du travail effectué jusqu’à présent.

J’espère être en mesure de pouvoir fournir une première Beta très rapidement cela dépendra toutefois du temps que je pourrai consacrer au projet !

Catégorie: Geek, Qt, Yriase | Laisser un commentaire (1)

Plugin pour Prestashop : Google Advanced Sitemap

Posté par seiyar81 le 17 février 2011 | Laisser un commentaire (26)

EDIT 16/02/2012 : Une nouvelle version du module, compatible 1.4 vient de sortir ici.

EDIT 23/11 : Pas de nouveaux articles depuis un moment, le temps libre me manque, toutefois j’ai reçu beaucoup de demandes concernant des mises à jour où des évolutions pour le module. Il faut savoir que le module de base de Prestashop 1.4 (Google Sitemap) intègre de base le support des images, d’une manière plus stable que mon module ce qui le rend obsolète.
Si je trouve un jour le temps, je le mettrai peut-être à jour pour la version 1.4 avec le ping des autres moteurs et sûrement d’autres fonctionnalités.
Merci à tous pour vos retours et suggestions.

EDIT 17/02 : Mise à jour du module : ajout du ping des moteurs Bing et Yahoo.

Ayant travaillé récemment sur la solution e-commerce Prestashop, proposé par la société éponyme, j’ai cherché à mettre en place le classique fichier sitemap.

Il existe un module, intégré de base à la solution qui permet de générer un fichier avec tous les liens du sites : produits, catégories, CMS etc…
Mais bizarrement, ce module appelé Google Sitemap ne gère pas les images, pourtant partie intégrante d’une boutique en ligne.

Qu’à cela ne tienne, j’ai modifié le module afin d’ajouter :

  • le support des balises <image:image>
  • quelques statistiques en plus lors de la génération du fichier
  • la possibilité de pinger Google directement

et ainsi est né Google Advanced Sitemap !

L’archive zip du module est téléchargeable via le lien ci-dessous. Il est bien évidemment distribué sous la licence GPL.

  Google Advanced Sitemap (13,9 KiB, 751 hits)

Je le mettrai peut-être à jour avec quelques fonctionnalités en plus d’ici quelques temps.

Catégorie: Développement Web, Internet, PHP | Laisser un commentaire (26)

QtBlogger : quelques nouvelles

Posté par seiyar81 le 15 octobre 2010 | Laisser un commentaire (0)

Logo QtBlogger

Pas de news depuis un moment, essentiellement à cause du temps que prend le développement de QtBlogger et aussi mon activité professionnelle.
La moindre des choses est donc de donner des news de l’avancement du projet !

Plusieurs fonctionnalités sont maintenant pleinement opérationnelles :

  • Gestions des articles et des pages
  • Gestion des commentaires (par articles ou bien tous)
  • Gestion des mots-clefs/catégories
  • Gestion des médias : partie très importante de QtBlogger
    • l’éditeur d’image possède un système de plugin pour lui ajouter des fonctionnalités
    • filtrages des médias par mots-clefs
  • Gestion des paramètres : tous les paramètres du blog peuvent être gérés via QtBlogger

Voilà pour une liste succinte des fonctionnalités présentes, les principales à venir sont :

  • Gestion des plugins du blog : activation/désactivation, mises à jour, et prise en charge des options
  • Suggestion d’image pendant la rédaction des articles/pages
  • Gestion des liens, des templates, des widgets et enfin un éditeur pour modifier les fichiers (coloration syntaxique etc)

Maintenant on retourne travailler avant de revenir donner d’autres nouvelles !

Catégorie: Qt, Wordpress, Yriase | Laisser un commentaire (0)