Gimp et Python-fu script : vecteurs et strokes : exemple

J’ai eu énormément de mal à trouver un exemple de script python-fu qui fonctionne.

Après avoir réussi à automatiser certaines tâches grâce à Gimp, je voulais créer des vecteurs, et y appliquer la brosse en cours.

Voici l’exemple de code qui fonctionne :


  new_image = pdb.gimp_image_new( new_image_width, new_image_height, RGB )
  new_layer = pdb.gimp_layer_new(
    new_image, new_image.width, new_image.height,
    RGBA_IMAGE, _("Background"), 100, NORMAL_MODE)
  pdb.gimp_image_add_layer(new_image, new_layer, -1)
  pdb.gimp_drawable_fill(new_layer, fill_type )
  new_layer = gimp.Layer(
    new_image, _("New Layer"),
    new_image.width, new_image.height,
    RGBA_IMAGE, 100, NORMAL_MODE)
  pdb.gimp_image_add_layer(new_image, new_layer, -1)
  pdb.gimp_drawable_fill(new_layer, fill_type )

  new_vectors=pdb.gimp_vectors_new(new_image, 'Vectors!')
  t = int(round(step / 1.5))
  pdb.gimp_vectors_stroke_new_from_points(
    new_vectors,
    0, # 0 = Beziers Curve
    30,
    # {controle1} {centre} {controle2}
  [ x-(step-t), y, x-step, y, x-(step-t), y,
      x, y+(step-t), x, y+step, x, y+(step-t),
      x+(step-t), y, x+step, y, x+(step-t), y,
      x, y-(step-t), x, y-step, x, y-(step-t),
      x-(step-t), y, x-step, y, x-(step-t), y],
      False) # Closed = True

  pdb.gimp_image_add_vectors(new_image, new_vectors, 0)

  pdb.gimp_context_set_foreground( (255,255,255) )
  pdb.gimp_context_set_brush( "Circle (07)" )
  pdb.gimp_edit_stroke_vectors(new_layer, new_vectors)

  gimp.Display( new_image )

Maintenant avec cet exemple, si vous voulez faire des vecteurs et les dessiner avec la brosse en cours, ainsi qu’avec mon article sur l’automatisation de Gimp, vous devriez arriver à faire beaucoup de choses !

Steam : d’où l’intérêt de travailler avec des gens compétents

Je vous fais part du message du directeur de steam, à vous d’en penser ce que vous voulez :

10 février 2012
Chers utilisateurs Steam et des forums Steam :

Des investigations sont en cours avec l’aide d’experts en sécurité informatique depuis l’intrusion dont nous avons été victime l’année dernière. Dans ma dernière communication à ce sujet, je décrivais comment les intrus avaient pu accéder à notre base de données Steam sans avoir trouvé d’évidence sur une captation d’information à partir de cette base de données.

Récemment, nous avons appris qu’il est probable que les intrus aient obtenu une copie du fichier de sauvegarde contenant les transactions effectuées sur Steam entre 2004 et 2008. Ce fichier de sauvegarde contenait les noms d’utilisateurs, les adresses email, les adresses encryptées de facturation et les informations encryptées des cartes bancaires. Ce fichier ne contenait pas les mots de passe Steam.

Nous n’avons aucune évidence nous permettant de penser que les informations bancaires encryptées ou que les adresses de facturation (également encryptées) aient été compromises. Cependant, comme je vous en informais en novembre, il convient de surveiller l’activité de vos cartes bancaires et/ou de crédit. Il est également une bonne idée d’activer Steam Guard sur votre compte Steam.

L’enquête poursuit son cours et nous travaillons avec les autorités compétentes. Certains états nécessitent un mode de communication plus formel et vous recevrez l’information en conséquence mais je souhaitais vous tenir informé de l’évolution de la situation.

Gabe

Trackmania 2 : labyrinthe, C et scripts Nadeo

J’ai crée un générateur de labyrinthes en BASIC.

Puis je l’ai ré-écrit. En Delphi (Pascal Orienté Objet, plus facile que tous ses concurrents (C++, Java, etc)).

Il générait des scripts « JavaScript » pour Photoshop. J’ai ainsi pu générer des labyrinthes immenses avec du Scripting Photoshop, mais j’ai rapidement vu les limites de ce dernier.

Alors je l’ai ré-écrit. En mieux, et beaucoup, beaucoup, beaucoup plus évolué. Plusieurs étapes de génération. Générateur de labyrinthes en C sous Linux, tout en ligne de commandes. J’ai donc dû apprendre vim, et je ne regrette rien, bien au contraire !

A partir de là, j’ai pu générer beaucoup de types de script :

  • J’ai commencé à générer des scripts Autohotkey pour Trackmania 1 : ici et ici.
  • Puis généré un petit jeu de mémoire, que vous pouvez voir ici.
  • Puis est sorti Trackmania 2. J’ai donc modifié mon générateur pour faire des scripts complets Trackmania : ici

Et comme pas mal de personnes ont trouvé ça sympa, voire certains ont carrément essayé de les terminer (plus de deux heures de route pour l’un), une personne a fait un petit article sur moi ici.

Voici la vidéo qui est originale, et vous pourrez voir évoluer mon script :

Des travailleurs tués en Chine pour le compte d’Apple

Oui, le titre n’est pas exagéré, vous pouvez le lire ici :

Travailleurs tués en Chine pour Apple.

Le téléphone sonne à la maison de Mr. Lai. « Êtes-vous le père de Lai Xiaodong ? » demande-t-on. Six mois plus tôt, le jeune homme de 22 ans a déménagé pour Chengdu, au sud de la Chine, pour devenir l’un de ces millions d’employés qui font fonctionner le plus grand, le rapide et le plus sophistiqué de tous les systèmes de manufacture sur terre. C’est ce système qui a donné la possibilité à Apple et d’autres compagnies, de créer des choses aussi rapidement qu’elles en rêvaient.

« Il a de gros problèmes, venez à l’hôpital aussi vite que vous pouvez », dit la voix au téléphone.

Sur la décennie, Apple est devenue une des plus riches compagnies au monde. En grosse partie par la gestion de la manufacture. Apple et ses amis de la haute technologie ont réussi à atteindre une rapidité d’innovation presque jamais atteinte dans l’histoire de l’humanité.

Néanmoins, les travailleurs qui assemblent les iPhones, iPads et autres outils « high tech », travaillent dans des conditions très dures, voire inhumaines : il suffit juste de parler avec les employés qui sont dans ces manufactures, d’écouter leurs avocats, mais même tout simplement lire les documents officiels publiés par les compagnies elles-même. Les problèmes sont très variés et concernent, entre autres, des problèmes de sécurité qui peuvent aller tout simplement jusqu’au handicap définitif, ou la mort.

Les employés travaillent de manière excessive, entre 10 et 20 heures par jour, souvent sept jours par semaine, et dorment entassés dans des dortoirs, comme du vulgaire bétail. Certains employés avouent qu’ils devaient rester si longtemps debout qu’ils en arrivaient à ne plus sentir leurs jambes et lorsqu’ils devaient se déplacer, il n’arrivaient presque plus à marcher. Les enfants ont toujours travaillé pour construire les produits Apple, et ses fournisseurs ont depuis toujours ignoré la gestion des déchets toxiques et crée de faux enregistrements, si l’on lit les documents de groupes de défense qui sont, en Chine, considérés comme des sources fiables.

Il y a deux ans, 137 travailleurs pour Apple en Chine de l’ouest on été gravement intoxiqués après qu’ils aient commandé des produits de nettoyage inappropriés pour nettoyer les écrans d’iPhones.

Durant les sept derniers mois, deux explosions dans les usines d’iPad ont tué quatre personnes et en ont blessé 77.
Pourtant, avant ces explosions, Apple avait été alerté des conditions dangereuses dans l’usine de Chengdu plant, si l’on en croit le groupe de défense qui a publié officiellement cet avertissement.

« Si Apple avait été avertie et n’a rien fait, c’est répréhensible par la loi », explique Nicholas Ashford, un représentant du NACOSH (National Advisory Committee on Occupational Safety and Health), un groupe qui conseille le département de travail des État-Unis (United States Labor Department).

Mais ce qui est moralement répugnant dans un pays, est accepté comme des pratiques commercial dans un autre, et des compagnies se servent de ce principe.

Cela correspond bien au comportement (qui est en totale opposition avec ce que beaucoup de médias diffusent) qui a toujours été celui de Steve Jobs.

Si vous en voulez plus :

Travailleurs tués en Chine pour Apple.

ExtJS 4 first look : le livre que j’ai révisé est sorti !

Voilà, on m’a demandé d’être relecteur technique (technical reviewer) du livre « Ext js 4 first look » que vous pouvez trouver ici :

http://www.packtpub.com/ext-js-4-first-look/book

Ce livre parle de ExtJS 4 et de toutes les (nouvelles) possibilités qu’offre le nouveau framework de Sencha, ansi que des comparaisons avec les anciennes versions, pour ceux qui connaissent déjà ExtJS.

Je suis au début :

Livre Ext js 4 first look

C’est un livre très pédagogique, qui vous servira bien si vous débutez.
Vous aurez certainement quelques marque page, notamment en ce qui concerne le MVC, qui n’est pas facile à appréhender (selon moi). J’avais d’ailleurs fait un howto ici.

Mon conseil serait : achetez-le, il est très bien.

Notez cependant qu’il faut un bon niveau JavaScript pour comprendre le livre.

Chrome et perte de session : comment faire ?

J’ai rencontré un problème incroyable : tout fonctionnait correctement sur tous les navigateurs : Internet Explorer, Firefox, et Safari. Mais pas sur Chrome ! Une fois n’est pas coutume, ce n’était pas Internet Explorer qui était le problème majeur !

Le problème est simple à expliquer : lorsqu’on s’inscrit sur http://papdevis.fr/ ou qu’on fait une recherche, j’enregistre le choix dans la session du côté du serveur. Rien dans les cookies.

  • Quand on clique sur « valider le devis », j’enregistre tout dans des variables de session côté serveur, et j’affiche un résumé de l’offre/proposition de devis.
  • De là, quand on clique sur « valider », hop, j’envoie simplement une variable "valider=1"

Seul problème : sur Chrome, le devis ne se validait pas parce que l’identifiant de session était réinitialisé ! Incroyable.

Grâce à ce lien, ma vie a changé : session-data-lost-in-chrome-only.

En fait, il fallait mettre un favicon, sinon Chrome continue à le chercher en boucle, et s’il ne le trouve pas, réinitialise la session.

Le genre d’erreur impossible à trouver (à moins d’avoir de la chance), parce qu’on n’arrive pas à imagine que le problème puisse venir du navigateur !

J’espère que mon article a évité à certains de se faire des cheveux blancs…

Pap devis : mon site est sorti !

Enfin !

Mon site est sorti !

Sur ce site tout est gratuit, il n’y a aucune publicité. Rien.

http://www.papdevis.fr/

Le principe du site est simple : vous êtes un particulier, vous voulez qu’on vous contacte pour un devis, par exemple, baby sitter. Inscrivez vous, faites une « demande de devis ».

Les professionnels qui sont sur le site reviendront vers vous.

Tout est gratuit, il n’y a aucune publicité. Rien.

Côté technique, je laisse les professionnels de l’informatique regarder et dire ce qu’ils pensent du site à la fois côté esthétique mais aussi côté technique (c’est un des sites les plus rapides… au monde).

N’hésitez pas à laisser des suggestions, elles seront bienvenues !

ExtJS : exemple d’un développement

Voici une petite capture d’image d’un Intranet que j’ai développé.

Temps de développement : trois jours à temps plein.

Tout fonctionne parfaitement, en AJAX, synchronisation, etc.

Tout ça pour dire que ExtJS est vraiment une librairie formidable dans ce type de cadre :

Image d'exemple de développement d'un intranet en ExtJS

Astuce jQuery : accepter un clic une fois, une seule fois, pas de double clic

A lieu de faire

$('#mon_element').on('click', function() {
  mafonction();
} );

c’est pas « on » c’est « one » :

$('#mon_element').one('click', function() {
  mafonction();
} );

En fait une fois qu’on a cliqué sur l’élément en question, jQuery supprime l’évènement avec la fonction unbind().

Serveur Apache et mod_rewrite : mémo / astuces / hints / tips

Voici mes notes de règles de ré-écriture. Principalement des expressions régulières dont j’ai souvent besoin et que je n’ai pas en tête :

Problème :
Apache ajoute automatiquement des slashes / si c’est un répertoire.
Solution :
DirectorySlash Off
Risques de sécurite si ça n’est pas bien géré.

Problème :
Chercher une variable dans les paramètres _GET, y compris en plein milieu (les solutions en général ne sont valides que si la variable est au début dans le _GET)
Solution :
RewriteCond %{QUERY_STRING} (^|&)nomvariable=valeur(&|$)

Problème :
Prendre en compte toute une séquence de caractères sauf le slash
Solution :
RewriteRule ^/([^/]+)/?$ page.php?page=$1 [L]
ou encore prendre tout sauf le slash et le point :
RewriteRule ^/([^/\.]+)/?$ page.php?page=$1 [L]