OMG, ils ont tué MS Paint !

Ils ont osé !

Un pan entier d’Internet va s’effondrer ! Microsoft annonce qu’ils vont totalement revisiter l’interface du logiciel Paint. Cette nouvelle peu faire sourire, mais elle n’amusera pas les fervents adorateurs de ce logiciel archaïque.

Personnellement cela fait un bail que je ne suis plus sous Windows, mais cela fait quand même un petit pincement au coeur 😉

Qui n’a jamais passé des heures à dessiner une image pixel par pixel, fabriquer un fake horrible à grands coups de copier-coller, de gomme et de sélection transparente. Qui ne connait pas autant voir plus ses raccourcis clavier que ceux de Starcraft ? Lire la suite « OMG, ils ont tué MS Paint ! »

10350 jeux Amiga en libre service sur navigateur !

Internet Archive, qui depuis une vingtaine d’années déjà s’assujettie à garder trace de toute vie numérique, vient de publier près de 10350 jeux Amiga. Ceci vient compléter la longue liste des titres déjà dispos. Le truc sympa c’est qu’ils sont jouables directement depuis votre navigateur.

Dune, Monkey Island, Another World, Sim City et j’en passe… amusez-vous !

Another World sur Amiga

Lire la suite « 10350 jeux Amiga en libre service sur navigateur ! »

On devient des pigeons

Un pas de plus vers la transformation !

pigeon

Maintenant on peut se faire implanter pour 350$ une puce sous la peau permettant de trouver le Nord facilement. En effet celle-ci possède la particularité de se mettre à vibrer lorsque vous regardez le Nord. De là à se transformer en pigeon voyageur, il n’y a qu’un pas !

L’article est disponible ici en anglais : http://qz.com/716095/this-company-will-help-you-become-a-cyborg-one-implanted-sense-at-a-time

Idée pour une prochaine évolution, une puce qui vibre lorsque vous vous rapprochez de chez vous, pratique pour rentrer après une fête un peu trop arrosée…

Astuce du jour PHP, concaténer tableaux

Je tenais à faire un bref rappel. Il est tout bête, mais aujourd’hui, nombre de développeurs PHP ne connaissent toujours pas cette fonctionnalité qui est pourtant une des bases du langage… j’ai l’impression de faire un post sur un hello world :-)

Vous devez tous connaître les fonctions php array_unshift() et array_push() qui placent un ou des éléments en fin ou début d’un tableau, mais qui ont la fâcheuse tendance à réindexer toutes les clés du tableau si elles sont numériques. Ce n’est pas super pratique si on a des clés discontinues et dans le désordre. Je suis encore tombé hier sur une personne qui avait écrit une petite fonction maison pour remplacer array_unshift() en gardant les clés… encore un coup d’épée dans l’eau.

Savez-vous que l’on pouvait simplement concaténer 2 tableaux avec un simple « + », et ce, en préservant vos clés ? De cette manière vous ajoutez votre élément où vous le souhaitez !

array('cle3' => 'val3', 'cle4' => 'val4') +  array('cle1' => 'val1', 'cle2' => 'val2')

Array
(
    [cle1] => val1
    [cle2] => val2
    [cle3] => val3
    [cle4] => val4
)

array('cle3' => 'val3', 'cle4' => 'val4') +  array('cle1' => 'val1', 'cle2' => 'val2')

Array
(
    [cle3] => val3
    [cle4] => val4
    [cle1] => val1
    [cle2] => val2
)

Javascript InDesign, générer des tableaux à partir d’HTML

Dans le cadre du boulot, il a fallu automatiser l’intégration depuis un flux XML, en autres, des tableaux au format HTML directement dans des boîtes de texte InDesign.

Oui mais comment faire ? Absolument rien de trouvable sur le net, pas un bout de code, rien ! A part des manipulations à base d’Import Excel ou autres…
Je me voyais déjà avoir à gérer les rowspan et colspan en galérant bien comme il faut. Devoir calculer les index des cellules des lignes qui suivent un ou de multiples rowspan… En fait c’était tout bête…

Par chance, InDesign fonctionne de la même manière qu’en HTML sur ce coup là. A savoir, que si une cellule de la ligne A est mergée avec une cellule de la ligne B, alors cette cellule n’existe pas dans la ligne B. Autrement dit, pour un tableau de 4 colonnes sur 2 lignes, si on merge les cellules d’une colonne, alors la ligne 1 possède 4 « cells », et la ligne 2 en possède 3. Du coup si on parcourt les cellules d’une ligne, une td X côté HTML est également une cell X côté indd, et ce, même si on a mergé des cellules, tant qu’on le fasse dans l’ordre.

Et en plus, oh miracle, je me suis aperçu qu’en appelant la fonction de merge sur les 2 cellules extrêmes, on pouvait directement traiter les colspan en même temps que les rowspan.

Bref, voici le code :

function drawTableFromHtml(indd_table, xml_table) {
    var xml_tbody = xml_table.children();    

    // On compte les lignes et colonnes et on ajuste le tableau (on peut faire sans mais c'est plus clair comme ça)
    indd_table.bodyRowCount = xml_tbody.children().length();
    var nb_cols = 0;
    var row_0 = xml_tbody.children()[0];
    for ( var i = 0 ; i < row_0.children().length() ; i++ ) nb_cols += (Number(row_0.children()[i].attribute('colspan')) > 1) ? Number(row_0.children()[i].attribute('colspan')) : 1;
    indd_table.columnCount = nb_cols;

    // Pi on merge les cellules
    for ( var iRow = 0 ; iRow < xml_tbody.children().length(); iRow++ ) {
        var xml_row = xml_tbody.children()[iRow];
            
        for ( var iTd = 0 ; iTd < xml_row.children().length(); iTd++ ) { var xml_td = xml_row.children()[iTd]; // pour le rowspanon est pas embété par les cellules qui n'existent pas dans le html sur les lignes suivant un rowspan car elles n'existent pas non plus côté InDesign !! var colspan = (Number(xml_td.attribute('colspan')) > 1) ? Number(xml_td.attribute('colspan')) : 1;
            var rowspan = (Number(xml_td.attribute('rowspan')) > 1) ? Number(xml_td.attribute('rowspan')) : 1;
            
            if (colspan > 1 || rowspan >1)
                indd_table.rows[iRow].cells[iTd].merge(indd_table.rows[iRow + rowspan - 1].cells[iTd + colspan - 1]);
        }       
    }
}

var text_frame = app.documents.add().text_frames.add();
drawTableFromHtml(text_frame.tables.add(), xml_table);
text_frame.fit(FitOptions.frameToContent);
HTML table to InDesign

Voici le rendu, plus qu’à retravailler un peu les colonnes :

Tableau HTML sous InDesign
Tableau HTML sous InDesign

Un cloud illimité pour 6 euros

Je viens de découvrir un hébergeur que je ne connaissais pas : o2switch. Je ne sais pas comment ils y arrivent, mais ils arrivent à proposer une offre d’hébergement web illimitée à 5€ HT (5.98 TTC) ! C’est d’ailleurs leur seule offre. 1&1 font une offre équivalente mais j’ai été fort déçu par le passé par leurs performances exécrables et leur service technique déplorable.

Une bonne occasion de monter son propre cloud pour pas grand-chose. DropBox étant assez onéreux pour un particulier, ownCloud et Pydio qui sont gratuits sont une très bonne alternative et passent sans aucun souci. Personnellement j’utilise Pydio, je n’ai noté aucun manque de performances, de plus les applis client de synchro sont top.

C’est sur http://www.o2switch.fr

Les RC Coke Cans sont arrivées !

Peut-être certains d’entre vous connaissent depuis longtemps, mais moi je viens de découvrir ceci, c’est la folie !

RC Coke Can, petit bolide radio télécommandé
RC Coke Can, petit bolide radio télécommandé

Ce sont des petites voitures radio télécommandées. Elles ont la taille des Majorettes que vous aviez étant petit, sauf que là, le rêve, elles se pilotent ! De quoi ranger les voitures à rétrofriction au placard ! Le tout à un prix ridicule… Lire la suite « Les RC Coke Cans sont arrivées ! »

JETS.js, ou comment faire de la recherche rapide

Parfois la recherche d’éléments dans une page HTML peut être gourmande en ressources côté navigateur, relevant un petit lag au passage. Pour cela il existe une solution, il suffisait d’y penser ! Utiliser la recherche CSS native de celui-ci, c’est ce que fait le script Jets, publié par Denis Lukov.

http://nexts.github.io/Jets.js

L’exemple donné sert à filtrer une liste d’éléments en fonction d’une saisie, mais il est possible d’aller bien plus loin. Chaque balise HTML étant utilisable.

Présentation du pcDuino

Qu’est-ce que le pcDuino ?

Le pcDuino est un mini ordinateur. Il combine les avantages du Raspberry Pi et de l’Arduino.

Pour faire simple, vous pouvez faire tout ce que permet un ordinateur, avec presque tout ce que permet l’Arduino. Vous allez me dire « Oui mais on peut déjà le faire avec le Raspberry ». Oui mais non.

  • Le Raspberry ne possède que des broches GPIO, le pcDuino possède quant à lui des GPIO ainsi que 6 broches PWM. Ce qui vous permet de contrôler directement un  tas de trucs en plus sans carte intermédiaires (servo moteurs, radio, etc.)
  • Une bonne partie des shields Arduino sont compatibles avec le pcDuino, vous pouvez les enclipser directement dessus.
  • Le pcDuino est plus puissant. Lire la suite « Présentation du pcDuino »