Coupe du Monde 2014 Brésil – Les pronostics sont ouverts – Une PS4 à gagner

Posté par seiyar81 le 5 juin 2014 | Laisser un commentaire (0)
Golden Frog World Cup Challenge

Un petit billet pour vous faire part du concours de pronostics mis en place par Golden Frog, les créateurs de Giganews et Giganews, pour la Coupe du Monde 2014 qui démarre au Brésil dans une semaine.

Via le site de la chaîne de sport ESPN il est possible de créer un bracket et de prédire les résultats de la prochaine compétition, les partagez avec vos amis et/ou via les réseaux sociaux avec à la clé des cadeaux intéressants :

  • 1er Prix : une PS4 avec le jeu Fifa 14
  • 2ème Prix : 1 an d’abonnement à VyprVPN Premier
  • 3ème Prix : 1 an d’abonnement à VyprVPN Pro

Pour participer rien de plus simple il suffit d’aller sur cette page et de cliquer sur le boutton Créer un pari pour accéder au groupe Golden Frog sur ESPN.

Rendez-vous donc le 13 Juillet pour savoir qui dominera la planète Football !

Pronostic personnel : le Brésil bat l’Espagne en finale 2-0 :)

Catégorie: Brèves, Internet | Laisser un commentaire (0)

Devenez anonymes avec ces distributions Linux

Posté par seiyar81 le 4 juin 2014 | Laisser un commentaire (0)
Whonix

L’anonymat sur Internet ou tout du moins la minimisation des informations personnelles et traces laissées lors de nos aventures sur Internet devient une nécessité en ces temps d’espionnage mondialisé de la part des gouvernements et des sociétés privées.

S’il est bien évidemment possible d’installer des logiciels comme Tor sur une station de travail classique pour anonymiser ses connexions, il existe des distributions Linux qui vont plus loin.

Pour commencer Whonix. Basée sur Debian et le réseau Tor, elle repose sur un principe d’isolation de l’utilisateur via deux machines virtuelles : la workstation où l’utilisateur est isolé pour travailler et la gateway vers qui tout le traffic de la workstation est routé via un réseau isolé pour ensuite être routé à nouveau via Tor.
Le tout est décrit dans l’image ci-dessus.

Cette distribution est avant tout destinée à être installée sur une partition physique et non utilisée en live-CD.

Dans le même genre il existe également la distribution Tails qui elle propose, à l’instar de Whonix, de router tout le traffic sortant via le réseau Tor mais étant destinée à une utilisation live-CD afin de ne laisser aucune trace sur la machine de l’utilisateur.

Tails

Si vous cherchez donc à avoir une persistence de vos données orientez-vous plutôt vers Whonix et pour du one-shot plutôt vers Tails.

Catégorie: Geek, Internet, Linux | Laisser un commentaire (0)

C++11 : conversions standards entre nombres et strings

Posté par seiyar81 le 26 avril 2014 | Laisser un commentaire (0)

Dans la version C++03 il n’y avait pas de façon standard de convertir des nombres en strings, il fallait passer par un stringstream.

int i = 666;
std::stringstream stream;
stream << i;
std::string s = stream.str();

Ou passer par une version template pour la conversion nombre / string ou string / nombre.

template <typename T>
std::string toString(T const & value)
{
   std::stringstream stream;
   stream << value;
   return stream.str();
}

template <typename T>
T valueOf(std::string const & text)
{
   T value;
   std::stringstream stream(text);
   stream >> value;
   return value;
}

Mais avec C++11 on dispose maintenant de fonctions standars pour effectuer ces conversions. Il suffit d’inclure le header <header>.

auto s  = std::to_string(666);
auto ws = std::to_wstring(6.66);

Fonctions qui retournent respectivement une std::string ou une std::wstring.

Et pour les conversions dans le sens string vers nombre il existe les fonctions suivantes :

  • stoi: integer signé
  • stol: long signé
  • stoll: long long signé
  • stoul: long non signé
  • stoull: long long non signé
  • stof: float
  • stod: double
  • stold: long double

Il faut retenir que ces fonctions jetent des exceptions en cas d’entrée invalide.

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

Version mobile du site

Posté par seiyar81 le 6 avril 2014 | Laisser un commentaire (0)

Une news rapide pour informer qu’une version mobile du site est maintenant disponible pour tous ceux qui y accèdent via leur téléphone ou tablette (et cela représente de plus en plus de monde par rapport aux utilisateurs PC classiques).

Et en raison du spam qui continue d’augmenter, j’ai été forcé de rajouter un Captcha dans le formulaire de commentaire, bien que je trouve que cela gêne plus les utilisateurs “normaux” que les spammeurs …

Très bientôt de nouveaux articles !

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

Java : créer une archive Zip en mémoire avec ZipOutputStream

Posté par seiyar81 le 3 avril 2014 | Laisser un commentaire (0)

Une petite class utilitaire pour générer des archives Zip en mémoire, sans rien écrire sur le disque, le tout aussi bien à partir de fichiers physiques ou de texte brut.

package fr.yriase.tools;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletOutputStream;

public class ZipFileWriter {

  /**
  * Flux de l'archive zip
  */
  private ZipOutputStream zos;
  
  /**
  * Constructor: creation d'une nouvelle archive directement dans le stream passé en paramètre
  * @param OutputStream out
  * @throws FileNotFoundException
  */
  public ZipFileWriter(OutputStream out) throws FileNotFoundException {
  	this.zos = new ZipOutputStream(out);
  }
  
  public ZipOutputStream getOutputStream()
  {
  	return this.zos;
  }
  
  /**
  * Ajouter un fichier depuis le disque dur au zip
  * @param String fileName
  * @throws FileNotFoundException
  * @throws IOException
  */
  public void addFile(String fileName) throws FileNotFoundException, IOException {
    FileInputStream fis = new FileInputStream(fileName);
    int size = 0;
    byte[] buffer = new byte[1024];
    
    //Ajouter une entree à l'archive zip
    File file = new File(fileName);
    ZipEntry zipEntry = new ZipEntry(file.getName());
    this.zos.putNextEntry(zipEntry);
    
    //copier et compresser les données
    while ((size = fis.read(buffer, 0, buffer.length)) > 0) {
    	this.zos.write(buffer, 0, size);
  	}
  
  	this.zos.closeEntry();
  	fis.close();
  }
  
  /**
  * Ajouter un fichier depuis un array de bytes au zip
	* @param 
  * @param fileName
  * @throws IOException
  */
  public void addFile(byte[] bytes, String fileName) throws IOException {
    //Ajouter une entree à l'archive zip
    ZipEntry zipEntry = new ZipEntry(fileName);
    this.zos.putNextEntry(zipEntry);
    
    //Copier et compresser les données
    this.zos.write(bytes, 0, bytes.length);
    
    this.zos.closeEntry();
  }
  
  /**
  * Fermer le fichier zip
  * @throws IOException
  */
  public void close() throws IOException {
  	this.zos.finish();
  	this.zos.close();
  }
}

A utiliser comme ceci dans une action Struts par exemple :

public class DownloadZipAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
	
		ServletOutputStream out = response.getOutputStream();

		response.setHeader("Content-Type","application/zip");
		response.setHeader("Content-Disposition", "attachment; filename=\"test.zip\"");

		ZipFileWriter zip = new ZipFileWriter(out);

		zip.addFile("<?xml version=\"1.0\" encoding=\"UTF-8\"?><test>var1</test>", "test.xml");
		zip.addFile("C:/test.xml");
		
		zip.close();

	}

}

A garder sous le coude, ça peut toujours servir.

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

Prestashop Advanced Sitemap: v1.5 et sitemaps multiples

Posté par seiyar81 le 26 février 2014 | Laisser un commentaire (19)

Une petite news rapide pour informer de la nouvelle version du module qui passe en 1.5 avec au menu une fonctionnalité demandée depuis quelques temps :

  • Génération de sitemaps multiples
  • Compression gzip des sitemaps générés
  • Sauvegarde des paramètres sans regénérer le sitemap
  • Stabilité du code

Cette fonctionnalité permet d’éviter un refus du sitemap par Google si le nombre d’URLs dépasse 50 000 ou si la taille est supérieure à 50 Mo.
Le module fonctionne maintenant ainsi :

  • vous définissez une limite à ne pas dépasser par sitemap (10 000 par défaut, car il faut tenir compte des images)
  • une fois cette limite atteinte lors de la génération, le module sauvegarde un premier fichier et passe au second
  • et ainsi de suite jusqu’à avoir traité toutes les URLs
  • une fois la génération terminée, le module génère un Sitemap Index qui regroupe tous les sitemaps générés et le transmet aux moteurs de recherche
  • si la limite définie n’est pas atteinte, un fichier sitemap simple est généré.

Vous pouvez ensuite choisir de compresser ou non tous les fichiers générés.

La prochaine étape sera maintenant de proposer une génération par langage !

Tout ça se récupère sur GitHub.


MAJ v1.5.1 : version mineure pour corriger 2 petits bugs
- Ajout forcé d’un ‘/’ à la fin des URLs personnalisées (si non présent) pour éviter les URLs malformées
- Correction de la génération du sitemap XML pour la validation XSD

La prochaine version vera l’ajout des fournisseurs/marques et éventuellement la sélection du type d’image à ajouter et/ou la possibilité de ne pas les ajouter au sitemap.

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

L’offre VyprVPN s’enrichie avec Chameleon

Posté par seiyar81 le 4 février 2014 | Commentaires fermés
Vyprvpn

Comme vous le savez probablement déjà l’équipe dérrière Giganews propose une solution de VPN, qui est d’ailleurs offerte avec les offres Diamond, appellée VyprVPN.

Comparée aux autres solutions payantes du marché, VyprVPN offre 41 destinations réparties sur 4 continents (Europe, Asie, Océanie, Amérique du Nord), des applicaitons mobiles ainsi que plus de 700 serveurs eux aussi répartis sur les 4 continents et 700 000 adresses IP.

De quoi satisfaire les besoins de tous et d’offrir une expérience Web sécurisée.

Mais l’équipe va aujourd’hui plus loin et vient d’ajouter à ses offres Pro et Premier un nouveau protocole (en plus de ceux déjà proposés : PPTP, L2TP/IPSec et OpenVPN) : Chameleon.

Ce protocole a pour particularité de masquer le traffic afin de ne pas être identifié comme étant du traffic VPN (par un système de DPI par exemple) le tout en 256bits.
A quoi cela sert ?
Et bien tout simplement à contourner la censure et à s’ouvrir les portes d’un Web sans frontières ni blocage tout ça sans contrainte de vitesse ou de qualité de connexion.

Pour l’avoir personnellement testé je n’ai en effet pas noté de perte de vitesse entre Chameleon et OpenVPN.

Le protocole est pour l’instant disponible sur Windows, Mac OS X, Linux et Android et est disponible sur les 41 locations proposées.

Voici d’ailleurs deux offres intéressantes si vous souhaitez souscrire à une offre VyprVPN :

- [ -10% ] tous les mois
- [ -50% ] sur un mois d’abonnement (idéal pour tester la solution à moindre coût)

A tester d’urgence si vous êtes justement victime de ce type de blocage ou bien si vous souhaitez dissimuler le fait que vous surfez derrière un VPN.

Catégorie: Geek, Internet | Commentaires fermés

Développer en ligne avec Koding

Posté par seiyar81 le 30 janvier 2014 | Laisser un commentaire (0)
Koding

Une petite news rapide pour préciser que le site Koding offre à tout nouvel inscrit un espace de 4Go pour développer ses applications en ligne (dans la limite de 100 To pour tout le monde).

Pour information Koding est un service qui offre une VM accessible via une interface Web et avec tout ce qui va avec : terminal, explorateur de fichiers, applications etc …

Idéal lorsqu’on travaille sur plusieurs machines en même temps ou que l’on souhaite tester un bout de code rapidement.

Plus intéressant encore, Koding permet de travailler en collaboration avec d’autres utilisateurs ! Voir la vidéo ci-dessous :

Un outil à tester d’urgence car le tout est plutôt fluide et simple à utiliser !

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

jQuery UI DatePicker : désactiver certains jours de la semaine

Posté par seiyar81 le 28 janvier 2014 | Laisser un commentaire (3)
jQuery UI DatePicker

jQuery UI propose bon nombre de widgets très utiles lorsqu’on développe des applications Web dynamiques.
Parmis ces derniers le DatePicker, ou calendrier, qui propose plusieurs options de configuration très précises.

Prenons par exemple le cas suivant : le client pour qui vous développez une application de réservation de restaurants vous informe que tous les réservations ne sont pas possibles les lundis et jeudis.

Et bien pas de problèmes, la fonction beforeShowDay permet de pré-filtrer chaque date et de définir si elle est sélectionnable ou pas.
Ce qui donne dans notre cas :


	jQuery(document).ready(function() {
		jQuery("#calendar").datepicker({
			beforeShowDay: function (date) {
				if (date.getDay() == 1 || date.getDay() == 4) { // La semaine commence à 0 = Dimanche
					return [false, ''];
				} else {
					return [true, ''];
				}
			}
		});
	});

Et voilà c’est tout simple.

On peut également utiliser la même méthode pour supprimer certaines semaines ou mois de l’année (vacances par exemple) :


	jQuery(document).ready(function() {
		jQuery("#calendar").datepicker({
			beforeShowDay: function (date) {
				if (date.getMonth() == 6 || date.getMonth() == 7) { // Mois Juillet et Août
					return [false, ''];
				} else {
					return [true, ''];
				}
			}
		});
	});

Si vous souhaitez par contre mettre une date minimum, utilisez plutôt l’option minDate :


	jQuery(document).ready(function() {
		jQuery("#calendar").datepicker({
			minDate: new Date(2014, 1 - 1, 1)
		});
	});

A vos claviers !

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

Java : sérialisation personnalisée de ses objets en JSON avec Flexjson

Posté par seiyar81 le 16 janvier 2014 | Laisser un commentaire (0)
JSON - Flexjson

Si vous travaillez sur des applis Web et Java et que vous vous retrouvez à devoir sérialiser vos données en JSON, il y a de fortes chances pour que vous utilisiez la bibliothèque Flexjson.

Les fonctionnalités de sérialisation sont puissantes et permettent par exemple de sériliaser un objet en profondeur.

Un exemple plutôt simple :


public class Yriase {
	
	private String name;

	public Yriase {
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

}


public static void main(String[] args) {

	Yriase y = new Yriase();
	y.setName( "yriase" );

	System.out.println( new JSONSerializer().exclude("*.class").serialize(yriase) );

}

Devrait vous renvoyer la chaîne suivante :

{
	name: "yriase"
}

Imaginons maintenant un cas un peu plus complexe. Vous avez créé une classe, et vous vous attendez à ce que les objets soient formattés d’une façon bien définie.
Pas de chance vous tombez dans le cas où le formattage par défaut de Flexjson ne vous convient pas.

Aucun problème, la bibliothèque vous offre la possibilité de définir vos propres Transformer pour vos données.

Prenons la classe template suivante :


public class Pair<String, Integer> {
	private String key;
	private Integer value;
    
	public Pair() {
	}
    
	public Pair(String k, Integer v) {
		this.key = k;
		this.value = v;
	}
    
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public Integer getValue() {
		return value;
	}
	public void setValue(Integer value) {
		this.value = value;
	}
}

Le formattage par défaut donnera ceci :

{
	key: "keyname",
	value: 10
}

Or on préfèrerait avoir le formattage suivant :

[ "keyname", 10 ]

Et bien il suffit d’implémenter une classe qui étends AbstractTransformer.
Voici donc la solution au problème :


public class PairTransformer extends AbstractTransformer {
	
	@Override
	public void transform(Object object) {
		Pair<String, Integer> p = (Pair<String, Integer>) object;
		
		getContext().writeOpenArray();
		
		getContext().writeQuoted( p.getKey());
		
		getContext().writeComma();
		
		getContext().write( String.valueOf(p.getValue()) );
		
		getContext().writeCloseArray();
	}
	
}

Et pour terminer il nous faut précisier lors de la sérialisation que l’on a un Transformer customisé :


JSONSerializer serializer = new JSONSerializer();
serializer.transform(new PairTransformer(), 	new Pair<String,Integer>().getClass());

Le tour est joué !

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