File ne détecte pas le bon mime-type pour des fichiers PDF

Le mime-type de certains fichiers PDF est mal détécté par la commande file ou tout code utilisant la librarie libmagic.

C’est le cas lorsque le fichier PDF contient un espace avant la chaîne « %PDF-1.4″ ou « %PDF-1.3 … »

La solution est de modifier le fichier /etc/magic et de rajouter ceci


1 string %PDF- PDF Document
!:mime application/pdf

Le premier chiffre correspond à l'offset dans mon cas les fichiers PDF générant ce problème n'avait qu'un offset de 1bytes.
"string" est le type de la chaîne à trouvé
Le mimetype doit être défini dans la ligne suivante le match avec "!:mime" suivit du mimetype

http://127.0.0.1:8083/

Installer psycopg2

Comment installer psycopg2 sous ubuntu ?


sudo apt-get install libpq5-dev
sudo apt-get install python-dev
easy_install psycopg2

Undo git reset – -hard

Pour annuler un git reset --hard , il suffit d’utiliser la commande git reflog

$ git reflog
1012a45 HEAD@{1}: HEAD~2: updating HEAD <--- Par erreur
9a2246b HEAD@{2}: commit: Commit 2
33db08a HEAD@{3}: commit: Commit 1
$ git reset --hard 33db08a

This file is too big. Your php.ini upload_max_filesize is 50M.

Lors d’un upload de fichier, WordPress peut emettre ce message d’erreur indiquant que le fichier est trop grand même si la taille est inférieure à la limite qu’il indique.

En réalité, le problème n’est pas seulement la clé upload_max_filesize. Il faut en vérifier d’autres.

Pour résoudre le problème, il faut chercher et éditer votre fichier php.ini en modifiant les valeurs des clés suivantes :

  • upload_max_filesize = 50M
  • post_max_size = 50M
  • memory_limit = 50M

memory_limit peut être overridé dans le fichier de configuration de wordpress wp-config.php

  • define(« WP_MEMORY_LIMIT », « 50M »);

Instagram, le hype pour les nuls

Vous connaissez certainement déjà Instagram, cet outil qui permet d’appliquer des filtres sur vos photos et de les partager avec vos amis.

Malgré la notoriété grandissante de cet outil, je n’adhère pas du tout.

  • Tout d’abord, Instagram n’est propulsé que par les personnes qui collent les mots buzz/hype et vintage à tout bout de champ
  • Les filtres d’instragram ne font que détruire l’information contenu dans la photo. Lorsqu’un ami partage la photo d’une manifestation, il m’a fallu 10 secondes pour comprendre le contenu de l’image.
  • Je me demande également combien d’utilisateurs d’InstaGram regardent leur photos sur InstaGram. Je ne suis pas sûre qu’il vérifie la qualité avant d’envoyer.

Ces remarques sont purement subjectives à prendre avec des pincettes.

Trier des strings contenant des nombres en python

Voici un code que j’ai du écrire pour un de mes projets. Il permet de trier des strings contenant des chiffres de manière naturelle et non alphabétique.

# Natural sorting utils
NUMBER_RE = re.compile(r'(\d+)')

def null_function(s):
  return s

def natural_sort_key(key=null_function):
  def wrap(s):
    return [word.isdigit() and int(word) or word for word in NUMBER_RE.split(key(s))]
  return wrap

def natural_sort(array, key=None):
  return sorted(array, key=natural_sort_key(key))

Exemples :


simple_values = ["1ab", "12b", "3d", "12c"]
sorted_simple_values = natural_sort(simple_values)

complex_values = [{'code': '1ab', ...}, {'code': '12', ...} ]
sorted_complex_values = natural_sort(complex_values, key=lambda c: c['code'])

Export CSV d’une requête postgresql

Afin d’exporter une requête SQL à partir d’une base de données Postgresql, il suffit d’utiliser la commande COPY.

Dans un terminal psql :

Copy (select id, firstname, name,  email from users) To '/tmp/export_users.csv' With CSV;

Quelques points perso pour une meilleure gestion de projets

Cela fait un bon moment que je participe ou gère divers projets.

Je résume donc ici quelques points qui me semble importants à ne pas négliger les prochaines fois.

Attention, ces notes sont purement le fruit d’observations personnelles.

  • Ne jamais négliger le travail d’estimation du temps qu’il faut pour la réalisation
  • Mieux vaux estimer en trop que pas assez, cela ne peut qu’être bénéfique aux deux parties
  • Le client a toujours besoin d’un temps d’accompagnement pour prise en main de la solution que l’on délivre. Dans le cadre du développement agile cela peut se faire à chaque itération. Cela permet plusieurs choses :
    • Créer un lien de confiance et de transparence entre les deux parties
    • Comprendre au mieux les besoins du client et rectifier le tir en cours de route si nécessaire
  • Toujours commencer par les tâches les plus compliquées et intercaler des tâches plus faciles afin d’éviter la saturation et la perte de temps sur un même problème
  • A défaut d’un cahier des charges bien remplie, il est nécessaire d’avoir un document définissant les conditions de clôture du projet
  • Un projet peut être découpé en plusieurs types de tâches qui s’effectuent durant toute la réalisation du projet :
    • Réunions
    • Analyse
    • Développement
    • Estimation du temps de travail
    • Accompagnement du client
    • Déploiement
    • Infrastructure
      • Installation et configuration
      • Backups
      • Redondance
      • Réseau
    • Tests et simulations

Convertir base de donnée Mysql en latin1 vers utf8 sous linux

Voici comment convertir une base de donnée encodée en latin1 en une DB utf8 sous mysql.
Il faut tout d’abord dumpé la DB en latin1 avec soit phpmyadmin soit mysqldump.

Créer une base de donnée utf8

mysql -u USER -pPASSWORD TARGET_DB_NAME default character set utf8;

Remplacer tous les latin1 en utf8 dans le fichier de dump. Exemple sous vim

:%s/latin1/'utf8'/g

Restorer le dump sans oublier de définir l’encoding du client.

mysql -u USER -pPASSWORD --default-character-set utf8 TARGET_DB_NAME < DUMP_FILE_NAME

Contrôler la vitesse des ventilateurs d’un Macbook Pro sous Ubuntu 10.04

Le Macbook Pro a tendance à fort chauffer sous Ubuntu. Les ventilateurs ne changent de vitesse qu’à une très haute température.
De plus la coque de ces machines sont fait en aluminium et que les poignets se reposent dessus.

Voici les lignes de commandes pour passer à un minimum de 4000 tours par minute :

echo 4000 > /sys/devices/platform/applesmc.768/fan1_min
echo 4000 > /sys/devices/platform/applesmc.768/fan2_min