MacOS High Sierra : grosse grosse faille de sécurité qui vous affecte tous ! #rootgate

C’est un cheveu dans la soupe pour High Sierra ! Déja bien critiqué, la liste des bugs étant déja longue, là c’est le ponpon. A peine sortie, l’affaire est déja nommée, Rootgate.
Lemi Orhan, d’Agile Software vient de découvrir que vous n’avez pas besoin du mot de passe pour accéder à la machine de manière physique, ou en remote desktop… pire… tout le monde peut se connecter en root par une simple manip !

La faille est tellement énorme que j’ai cru à un calunar, mais effectivement après vérification, elle est bien réelle !

Pour tester si votre système est impacté, allez sur un écran qui demande l’authentification (les paramètres par exemple). Il suffit simplement de taper « root » en nom d’utilisateur et pas de mot de passe. Le système va vous refuser l’accès, mais si vous retenez une 2ème fois, ça passe !! Et moi qui m’embête depuis des mois à verrouiller ma session, et à avoir malgré tout activé Touch ID..

faille-high-sierra-exemple

Apple promet une mise à jour, en attendant il faut que vous fassiez vous-même quelque chose. Ce qui est rigolo c’est que beaucoup de gens ne font pas les mises à jour… j’ai hâte de tester ça chez des amis ^^

Une solution existe tout de même

Lire la suite « MacOS High Sierra : grosse grosse faille de sécurité qui vous affecte tous ! #rootgate »

Bug PHP : Fichiers ou dossiers manquants avec readdir() sur volume Samba

Voici une astuce pour ceux qui s’arrachent les cheveux sur ce bug plus qu’étrange.

Cela fait plusieurs fois que je tombe dessus. Mes recherches sur le net n’ont jamais rien donné de très concluant.

Il s’avère que la fonction readdir() qui permet de parcourir un dossier a un comportement aléatoire dans certains cas. Plus précisément, le problème se situe au niveau du couple readdir() / driver Samba. En effet cela dépend également du driver utilisé…
Le problème se produit parfois, si vous lisez le contenu d’un dossier contenant beaucoup de fichiers ou sous-dossiers directs, le tout sur un volume monté issu d’un partage Samba. Il y a des chances qu’il vous manque des fichiers.
D’un appel à l’autre, la lecture du dossier ne se fait pas de la même manière, d’ailleurs on peut voir parfois des minis freeze dans la console quand on liste les fichiers (en PHP).

Mauvaise utilisation :

$dir = opendir('/mnt/toto');
while($files[] = readdir($dir)) continue;
$nb_files = count($files);

$nb_files va varier d’une exécution à l’autre du simple au double !!

Solution : remplacer readdir() par scandir(), ou utiliser les iterators :

$files = scandir(’/mnt/toto');
$nb_files = count($files);

$nb_files sera toujours correct !

Si quelqu’un a la solution plus propre pour corriger au niveau de Samba, je suis preneur :-)

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 rowspan on 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