Publié le 30 Juin 2011

Cette erreur concerne l'utilisation d'un index( ou d'une clé primaire) avec le partitioning.

 

Dès qu'on utilise le partitioning tous les champs utilisés pour partitionner la table doivent être inclus dans un index unique ou dans la clé primaire.

 

Il n'y a pas vraiment de solution à ce problème, il faut définir un index ou une clé utilisant tous les champs utilisés pour le partitionnement. Après je pense qu'on peut définir un index unique sur 1 seul des champs de la clé primaire. à vérifier....

Voir les commentaires

Rédigé par Bliz

Publié dans #MySQL

Repost 0

Publié le 22 Juin 2011

J'utilise la propriété user.agent dans mon fichier .gwt.xml pour ne compiler que la permutation pour Firefox (qui au passage s'appelle gecko1_8).

 

Aujourd'hui je voulais ajouter une permutation Chrome pour tester mon application sur ce navigateur.

Et bien le user.agent pour Chrome ne s'appelle pas Chrome (mais Safari). Pourquoi ?

 

Parce que Chrome utilise le moteur de rendu Webkit qui est aussi celui utilisé dans Safari.

 

Voilà l'explication. Au passage en remplaçant la permutation gecko1_8 par safari je gagne presque 40% de temps à la compilation. Cool !

 

Voir les commentaires

Rédigé par Bliz

Publié dans #GWT

Repost 0

Publié le 20 Juin 2011

Il m'arrive de lancer des commandes depuis un terminal et ces commandes durent parfois longtemps.

 

Dans ce cas il est intéressant de pouvoir basculer le processus en tâche de fond et de récupérer la main sur le terminal pour effectuer autre chose.

 

Et bien ceci s'effectue très simplement sous Unix/Linux (à condition de connaître la commande car ça ne s'invente pas).

 

Le passage en tache de fond se fait en 2 étapes:

 

1/ On suspend le processus en effectuant un Ctrl+Z. Ceci permet de reprendre la main mais le processus est suspendu.

2/ On passe le processus en tâche de fond avec la commande bg (comme background) sans paramètre.

 

Voir les commentaires

Rédigé par Bliz

Publié dans #Linux

Repost 0

Publié le 15 Juin 2011

Voilà ça fait longtemps que je me plaignais de devoir fermer mon navigateur (ou en utiliser un deuxième que j'aime moins) pour utiliser un deuxième compte google.

 

Et bien je viens de découvrir que ça n'est pas nécessaire puisque google propose la connexion multicompte.

Bien sûr tout n'est pas parfait, ce n'est qu'en version bétà et non compatible avec le mode offline mais c'est déjà pas mal.

 

Pour l'activer il faut aller dans "Paramètres du compte" puis cliquer sur "Modifier" au niveau de la "connexion multicompte".

Voir les commentaires

Rédigé par Bliz

Repost 0

Publié le 14 Juin 2011

Lorsqu'on fait un select dans une table qui contient beaucoup de champ on obtient rapidement quelque chose d'illisible.

Pourtant il existe une option qui permet d'afficher les résultat en colonnes au lieu de lignes.

 

Cette option est très utile lorsque le SELECT retourne un nombre assez faible d'enregistrement.

 

Pour activer cette affichage il faut terminer la requête par un '\G' au lieu d'un ';'.

 

mysql> select * from ventes limit 2\G
*************************** 1. row ***************************
   mois: janvier
 client: M.A
montant: 2045
*************************** 2. row ***************************
   mois: fevrier
 client: M.A
montant: 678
2 rows in set (0.00 sec)

 

au lieu du classique:

 

mysql> select * from ventes limit 2;
+---------+--------+---------+
| mois    | client | montant |
+---------+--------+---------+
| janvier | M.A    |    2045 |
| fevrier | M.A    |     678 |
+---------+--------+---------+
2 rows in set (0.00 sec)

Voir les commentaires

Rédigé par Bliz

Publié dans #MySQL

Repost 0

Publié le 10 Juin 2011

cron permet de lancer des commandes à des heures définies. Toutes les commandes sont définies dans la 'crontab'.

 

On peut utiliser les commandes suivantes pour y accéder:

crontab -l: pour afficher la crontab de l'utilisateur courant

crontab -e: pour editer la crontab de l'utilisateur courant

 

Ces commandes ne permettent pas d'accèder à la crontab principale qui se trouve dans /etc/crontab.

Pour accèder à cette crontab il faut passer directement par un éditeur genre vi: vi /etc/crontab

 

Chaque ligne de la crontab correspond à une commande et s'utlise avec la syntaxe suivante:

0 0 * * * root find /var/log -mtime +7 -type f -name "*.log" -exec rm -f {} \;

| | | | |
| | | | |____ jour de la semaine (dimanche = 0)
| | | |______ mois (de 1 à 12)
| | |________ jour (de 1 à 31)
| |__________ heure (de 0 à 23)
|____________ minute (de 0 à 59)
 

La ligne ci-dessus sera lancé tous les jours à 00:00 en tant que 'root' est effacera tous les fichiers de log de plus de 7 jours.

 

* est un joker qui signifie tous

/ est un caractère spécial qui permet de spécifier un interval par exemple:

*/5 * * * * signifie toutes les 5 minutes

Voir les commentaires

Rédigé par Bliz

Publié dans #Script

Repost 0

Publié le 9 Juin 2011

On peut bien sûr utiliser les flèches haut et bas mais pas très pratique car il faut remonter toutes les commandes une par une.

 

On peut également ouvrir le fichier ~/.bash_history à l'aide d'un "less" ou "vi" et y effectuer une recherche à l'aide du "/" ou du "?".

 

Mais le plus pratique reste la commande <CTRL>+R qui permet de taper la chaine à rechercher.

Pour rechercher les occurences passées il suffit de répéter <CTRL>+R sans entrer de caractères de recherche.

Voir les commentaires

Rédigé par Bliz

Publié dans #Script

Repost 0

Publié le 8 Juin 2011

La copie d'une table MySQL s'effectue très facilement à l'aide de 2 commandes SQL:

- la première pour créer la structure de la table

- la deuxième pour y copier les données

 

mysql> CREATE TABLE ma_copie LIKE mon_original;

mysql> INSERT INTO ma_copie SELECT * FROM mon_original;

Voir les commentaires

Rédigé par Bliz

Publié dans #MySQL

Repost 0

Publié le 7 Juin 2011

Cette erreur se produit lorsqu'un script exécuté automatiquement (cron, cgi, etc), donc sans terminal (tty) essaie de lancer une commande en utilisant sudo.

 

Une des restrictions de sudo est qu'il ne peut être qu'utilisé que depuis un terminal.

 

Cette erreur est d'autant plus sournoise que si le script est exécuté depuis un terminal il s'exécute sans problème. Il faut donc bien analyser les fichiers de logs pour trouver cette erreur (encore faut il que l'erreur soit capturée dans les logs).

 

J'utilisé sudo pour lancer une commande avec un autre utilisateur que celui de process appelant.

Dans ce cas j'ai pu contourner le problème en utilisant setuid pour lancer le script directement avec l'utilisateur que je voulais.

 

setuid se met en place de la façon suivante:

 

$ chown <user> mon_script.sh

$ chmod +s mon_script.sh

 

 

lorsque mon_script.sh sera appelé depuis un autre process il sera donc exécuté en tant que <user>.

Voir les commentaires

Rédigé par Bliz

Publié dans #Script

Repost 0

Publié le 6 Juin 2011

Je dois calculer et afficher des valeurs dans une application GWT. Le soucis concerne le formattage des nombres car une fois le calcul effectué, l'affichage des valeurs n'est pas très "user friendly": genre 1.347002890098%.

 

J'aurais préférer un simple 1.35% par exemple.

 

Et bien heureusement on peut obtenir facilement ce résultat sans se prendre la tête avec les arrondis et autres, en utilisant simplement la class NumberFormat qui est justement faite pour ça.

 

Dans la pratique ça donne:

 

double value = 12.3456789;
NumberFormat format = NumberFormat.getFormat("0.00");
Window.alert(format.format(value)+"%"); // affiche 12.35%

 

On peut également préciser le signe % dans le format mais ceci a pour effet de multiplier la valeur par 100:

 

double value = 0.123456789;
Number format format = NumberFormat.getFormat("0.00%");
Window.alert(format.format(value)); // affiche 12.35%

 

On n'est pas toujours obligé de spécifier un format. On peut utiliser les formats prédéfinis qui tiennent compte des locales.

Attention donc pour l'affichage monétaire si l'utilisateur utilise une locale différente.

 

double value = 12345.6789;
Number format format = NumberFormat.getDecimalFormat();
Window.alert(format.format(value)); // affiche 12 345.6789

 

double value = 12345.6789;
Number format format = NumberFormat.getCurrencyFormat();
Window.alert(format.format(value)); // affiche 12 345.68€

etc ...

 

Le javadoc de la classe NumberFormat est disponible ici: http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/i18n/client/NumberFormat.html

Voir les commentaires

Rédigé par Bliz

Publié dans #GWT

Repost 0