{"id":836,"date":"2018-05-29T07:38:45","date_gmt":"2018-05-29T05:38:45","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/i-diari-di-viaggio-di-mio-nonno-e-altri-task-ripetitive\/"},"modified":"2018-05-29T07:38:45","modified_gmt":"2018-05-29T05:38:45","slug":"i-diari-di-viaggio-di-mio-nonno-e-altri-task-ripetitive","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/i-diari-di-viaggio-di-mio-nonno-e-altri-task-ripetitive\/","title":{"rendered":"I diari di viaggio di mio nonno e altri task ripetitivi"},"content":{"rendered":"<p>Mio nonno, James, era un archiviatore meticoloso. Teneva dei diari scritti a mano contenenti i dettagli di qualsiasi cosa, dalle visite dal dottore alle fluttuazioni giornaliere delle azioni che possedeva. Ho scoperto questa parte della sua vita solo sette anni dopo la sua morte, quando il seminterrato dei miei si \u00e8 allagato alla Vigilia di Natale del 2011 e abbiamo trovato i suoi diari mentre pulivamo il danno. Pi\u00f9 di tutto, mi hanno impressionato i suoi archivi di viaggio. Ha documentato ogni singolo viaggio mai fatto, includendo date, paesi e citt\u00e0 visitate, mezzi di trasporto e persone con cui ha viaggiato. In totale, ha lasciato gli Stati Uniti 99 volte, visitato 80 paesi e passato 1223 giorni per mare su 48 navi.<\/p>\n<div id=\"figure1\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2018\/05\/fig1.jpg\" border=\"0\" alt=\"Una sezione del diario di viaggio scritto a mano dal nonno dell'autore\" width=\"100%\" \/><\/p>\n<p>Una sezione del diario di viaggio.<\/p>\n<\/div>\n<p>Avevo solo 24 anni quando \u00e8 morto, cos\u00ec non mi sono reso conto di aver ereditato cos\u00ec tante delle sue abitudini di archiviazione, scrittura di diari e collezionismo. E non ho mai avuto l&#8217;occasione di fargli molte domande sui suoi viaggi (come il motivo per cui and\u00f2 in Venezuela 12 volte o cosa ci faceva in Siria e a Beirut negli anni &#8217;50). Quindi, nello sforzo di scoprire di pi\u00f9 su di lui, ho deciso di creare un&#8217;infografica dei suoi diari di viaggio.<\/p>\n<p>Oggi, diamo per scontato di poter controllare i mercati sui nostri telefoni o di andare online e vedere la documentazione delle visite dal dottore. I tipi di task ripetitivi che mio nonno faceva potrebbero sembrare eccessivi, specialmente per i giovani web developer e designer che non hanno mai dovuto farli. Ma mio nonno non aveva alcun metodo di archiviazione oltre a carta e penna per la maggior parte della sua vita, quindi questa era una parte normale e specialmente vitale della sua routine giornaliera.<\/p>\n<div id=\"figure2\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2018\/05\/fig2.jpg\" border=\"0\" alt=\"Una fotografia di una nave chiamata SS Amor, scattata dal nonno dell'autore nelle Indie Occidentali nel 1939.\" width=\"100%\" \/><\/p>\n<p>SS Amor nelle Indie Occidentali. Scattata dal nonno dell&#8217;autore nel 1939.<\/p>\n<\/div>\n<div id=\"figure3\" class=\"illustration full\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2018\/05\/fig3.jpg\" border=\"0\" alt=\"Una fotografia dello skyline di New York City, scattata dal nonno dell'autore, probabilmente negli anni '30.\" width=\"100%\" \/><\/p>\n<p>New York City. Scattata dal nonno dell&#8217;autore, probabilmente negli anni &#8217;30.<\/p>\n<\/div>\n<p>Che stiate processando Sass, riducendo al minimo o usando Autoprefixer, state usando dei tool che svolgono i compiti noiosi e ripetitivi che prima si dovevano fare a mano, sebbene in un medium differente.<\/p>\n<p>Ma cosa fate quando vi trovate di fronte a un problema che non pu\u00f2 essere risolto con un plugin, come i dati di viaggio di mio nonno? Se siete un designer, qual \u00e8 il modo migliore per strutturare dati non convenzionali in modo da potervi concentrare solo sul design?<\/p>\n<p>La mia idea per la web app di viaggio era di tracciare un grafico per ogni paese basandomi sul numero di visite di mio nonno. Come paese visitato da lui pi\u00f9 volte (ventidue), Bermuda avrebbe avuto una barra del grafico che sarebbe arrivata al 100% lungo lo schermo, mentre un paese visitato undici volte (St. Thomas, per esempio) sarebbe stato lungo circa il 50%, le proporzioni leggermente aggiustate per accomodare nome e visite. Volevo anche che ciascuna barra del grafico fosse del colore principale della bandiera dello stato.<\/p>\n<p>Il grande problema per cominciare era che alcuni dati erano su carta e altri erano gi\u00e0 stati trascritti in un file di testo. Avrei potuto scrivere HTML e CSS a mano, ma volevo avere l&#8217;opzione di mostrare i dati in modi diversi. Mi serviva un file JSON.<\/p>\n<p>Ho tediosamente trascritto i dati di viaggio rimanenti in un file di testo separato da tab per gli stati. Ho aggiunto il nome, il numero di visite e il colore della bandiera.<\/p>\n<pre id=\"snippet1\" class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\nhonduras\t    <span class=\"token number\">1<\/span>    #<span class=\"token number\">0051ba<\/span>\nsyria\t<span class=\"token number\">1<\/span>\t#E20000\nvenezuela\t    <span class=\"token number\">16<\/span>    #<span class=\"token number\">fcd116<\/span>\nenewetak\t<span class=\"token number\">2<\/span>\trgb<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">56<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">147<\/span><span class=\"token punctuation\">)<\/span>\n<span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\n<\/code><\/pre>\n<p>Per le navi, ho aggiunto la data e il nome:<\/p>\n<pre id=\"snippet2\" class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\n<span class=\"token number\">1941<\/span>    SS Granada\n<span class=\"token number\">1944<\/span>    USS Alimosa\n<span class=\"token number\">1945<\/span>    USS Alcoa Patriot\n<span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\n<\/code><\/pre>\n<p>Creare a mano un file JSON avrebbe richiesto un&#8217;eternit\u00e0, quindi ho usato JavaScript per iterare nei file di testo e creare due file JSON separati: uno per gli stati e uno per le navi, che poi avrei messo insieme.<\/p>\n<p>Per prima cosa, ho usato <code>readFileSync()<\/code> e <code>trim()<\/code> di Node per rimuovere qualunque virgoletta alla fine del file per evitare un oggetto vuoto nei risultati:<\/p>\n<pre id=\"snippet3\" class=\" language-javascript\"><code class=\" language-javascript\">const fs <span class=\"token operator\">=<\/span> require<span class=\"token punctuation\">(<\/span><span class=\"token string\">'fs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">let<\/span> countriesData <span class=\"token operator\">=<\/span> fs<span class=\"token punctuation\">.<\/span>readFileSync<span class=\"token punctuation\">(<\/span><span class=\"token string\">'countries.txt'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'utf8'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>trim<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<\/code><\/pre>\n<p>Questo ha ritornato i contenuti del file <code>countries.txt<\/code> e li ha memorizzati in una variabile chiamata <code>countriesData<\/code>. A questo punto, ho mandato in uscita la variabile alla console, che ha mostrato i dati che erano stati raggruppati in una stringa gigante con un insieme di tab (<code>\\t<\/code>) e newlines (<code>\\n<\/code>):<\/p>\n<pre id=\"snippet4\" class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token string\">\"angaur\\t2\\t#56a83c\\nantigua\\t5\\t#ce1126\\nargentina\\t2\\trgb(117,170,219)\\naruba\\t10\\trgb(0,114,198)\\nbahamas\\t3\\trgb(0,173,198)\\nbarbados\\t6\\trgb(255,198,30)\\nbermuda\\t22\\trgb(0,40,104)\\nbonaire\\t1\\trgb(37,40,135)\\nguyana\\t2\\trgb(0,158,73)\\nhonduras\\t1\\trgb(0,81,186)\\nvirgin Islands\\t2\\trgb(0,40,104)\\nbrazil\\t3\\trgb(30,181,58)\\nburma\\t1\\trgb(254,203,0)\\ncanary Islands\\t1\\trgb(7,104,169)\\ncanal Zone\\t7\\trgb(11,14,98)\\ncarriacou\\t1\\trgb(239,42,12)\\n ...\"<\/span>\n<\/code><\/pre>\n<p>Poi, ho suddiviso la stringa ai line break (<code>\\n<\/code>):<\/p>\n<pre id=\"snippet5\" class=\" language-javascript\"><code class=\" language-javascript\">const fs <span class=\"token operator\">=<\/span> require<span class=\"token punctuation\">(<\/span><span class=\"token string\">'fs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">let<\/span> countriesData <span class=\"token operator\">=<\/span> fs<span class=\"token punctuation\">.<\/span>readFileSync<span class=\"token punctuation\">(<\/span><span class=\"token string\">'countries.txt'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'utf8'<\/span><span class=\"token punctuation\">)<\/span>\n<span class=\"token punctuation\">.<\/span>trim<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<\/code><\/pre>\n<p>Dopo <code>split()<\/code>, nella console, i dati degli stati vivevano in un array:<\/p>\n<pre id=\"snippet6\" class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token punctuation\">[<\/span>\n  <span class=\"token string\">\"angaur\\t2\\t#56a83c\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string\">\"antigua\\t5\\t#ce1126\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string\">\"argentina\\t2\\trgb(117,170,219)\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string\">\"aruba\\t10\\trgb(0,114,198)\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string\">\"bahamas\\t3\\trgb(0,173,198)\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string\">\"barbados\\t6\\trgb(255,198,30)\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string\">\"bermuda\\t22\\trgb(0,40,104)\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\n<span class=\"token punctuation\">]<\/span>\t\n<\/code><\/pre>\n<p>Volevo suddividere ogni item dei dati dello stato ai tab, separando il nome, il numero di visite e il colore. Per farlo, ho usato <code><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/map\">map()<\/a><\/code>, che itera e fa girare una funzione su ogni item, ritornando qualcosa di nuovo. In questo caso, suddivide la stringa ad ogni tab che trova e ritorna un array nuovo:<\/p>\n<pre id=\"snippet7\" class=\" language-javascript\"><code class=\" language-javascript\">const fs <span class=\"token operator\">=<\/span> require<span class=\"token punctuation\">(<\/span><span class=\"token string\">'fs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">let<\/span> countriesData <span class=\"token operator\">=<\/span> fs<span class=\"token punctuation\">.<\/span>readFileSync<span class=\"token punctuation\">(<\/span><span class=\"token string\">'countries.txt'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'utf8'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>trim<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>map<span class=\"token punctuation\">(<\/span>item <span class=\"token operator\">=&gt;<\/span> item<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\t'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<\/code><\/pre>\n<p>Dopo aver usato <code>map()<\/code>, <code>countriesData<\/code> era un array di array con ogni paese e i suoi dati suddivisi in item separati:<\/p>\n<pre id=\"snippet8\" class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token punctuation\">[<\/span>\n  <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"angaur\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"2\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"#56a83c\"<\/span>\n  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"antigua\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"5\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"#ce1126\"<\/span>\n  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"argentina\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"2\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"rgb(117,170,219)\"<\/span>\n  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"aruba\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"10\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"rgb(0,114,198)\"<\/span>\n  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"bahamas\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"3\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"rgb(0,173,198)\"<\/span>\n  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\n<span class=\"token punctuation\">]<\/span>\n<\/code><\/pre>\n<p>Per creare l&#8217;output finale per ogni paese, ho usato <code><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Array\/reduce\">reduce()<\/a><\/code>, che usa un accumulator e una funzione per creare qualcosa di nuovo, che sia un oggetto, un valore o un array. Accumulator \u00e8 un nome fantasioso per far riferimento al prodotto finale, che nel nostro caso \u00e8 un oggetto (<code>{}<\/code>).<\/p>\n<pre id=\"snippet9\" class=\" language-javascript\"><code class=\" language-javascript\">const fs <span class=\"token operator\">=<\/span> require<span class=\"token punctuation\">(<\/span><span class=\"token string\">'fs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">let<\/span> countriesData <span class=\"token operator\">=<\/span> fs<span class=\"token punctuation\">.<\/span>readFileSync<span class=\"token punctuation\">(<\/span><span class=\"token string\">'countries.txt'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'utf8'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>trim<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>map<span class=\"token punctuation\">(<\/span>item <span class=\"token operator\">=&gt;<\/span> item<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\t'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>reduce<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>countries<span class=\"token punctuation\">,<\/span> item<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\n\t\t<span class=\"token keyword\">return<\/span> countries<span class=\"token punctuation\">;<\/span>\n\t<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span>countries<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<\/code><\/pre>\n<p>Sapevo di volere che <code>{countries: []}<\/code> contenesse i dati. Quindi, invece di crearlo nel primo passo e testarne l&#8217;esistenza in ogni iterazione, ho aggiunto <code>{countries: []}<\/code> all&#8217;oggetto risultante. In questo modo, esisteva prima che cominciassi ad iterarvi.<\/p>\n<p>Questo processo ha ritornato un oggetto vuoto perch\u00e9 non avevo detto a <code>reduce()<\/code> cosa fare con ogni array di dati.<\/p>\n<p>Per sistemarlo, ho usato <code>reduce()<\/code> per fare la push e aggiungere un nuovo oggetto a ogni stato con il nome (<code>item[0]<\/code>), le visite (<code>item[1]<\/code>) e il colore (<code>item[2]<\/code>) nell&#8217;oggetto finale. Infine, ho usato una funzione che trasforma in maiuscolo ogni valore del nome per assicurarmi che la formattazione fosse consistente.<\/p>\n<pre id=\"snippet10\" class=\" language-javascript\"><code class=\" language-javascript\">const fs <span class=\"token operator\">=<\/span> require<span class=\"token punctuation\">(<\/span><span class=\"token string\">'fs'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\nconst cap <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token keyword\">return<\/span> s<span class=\"token punctuation\">.<\/span>charAt<span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>toUpperCase<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">+<\/span> s<span class=\"token punctuation\">.<\/span>slice<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\n\n<span class=\"token keyword\">let<\/span> countriesData <span class=\"token operator\">=<\/span> fs<span class=\"token punctuation\">.<\/span>readFileSync<span class=\"token punctuation\">(<\/span><span class=\"token string\">'countries.txt'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'utf8'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>trim<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\n'<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>map<span class=\"token punctuation\">(<\/span>item <span class=\"token operator\">=&gt;<\/span> item<span class=\"token punctuation\">.<\/span>split<span class=\"token punctuation\">(<\/span><span class=\"token string\">'\\t'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n\t<span class=\"token punctuation\">.<\/span>reduce<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>countries<span class=\"token punctuation\">,<\/span> item<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">=&gt;<\/span> <span class=\"token punctuation\">{<\/span>\n\t\tcountries<span class=\"token punctuation\">[<\/span><span class=\"token string\">\"countries\"<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>push<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>\n\t\t\tname<span class=\"token punctuation\">:<\/span> cap<span class=\"token punctuation\">(<\/span>item<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n      \t\t\tvisits<span class=\"token punctuation\">:<\/span> item<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n      \t\t\tcolor<span class=\"token punctuation\">:<\/span> item<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span>\n\t\t<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n\t\t<span class=\"token keyword\">return<\/span> countries<span class=\"token punctuation\">;<\/span>\n\t<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span>countries<span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<\/code><\/pre>\n<p>Ho usato lo stesso metodo per il file <code>ships.txt<\/code> e ho fatto il merge dei due usando <code>Object.assign<\/code>, un metodo che prende due oggetti e ne crea uno nuovo.<\/p>\n<pre id=\"snippet11\" class=\" language-javascript\"><code class=\" language-javascript\"><span class=\"token keyword\">let<\/span> result <span class=\"token operator\">=<\/span> Object<span class=\"token punctuation\">.<\/span>assign<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> countriesData<span class=\"token punctuation\">,<\/span> shipsData<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\n<\/code><\/pre>\n<p>Avrei potuto creare una funzione che prendesse un file di testo e un oggetto o creare uno strumento form-to-JSON, ma mi sembrava un po&#8217; troppo per questo progetto e avevo gi\u00e0 trascritto alcuni dati in file separati prima di concepire l&#8217;idea dell&#8217;infografica. <a href=\"https:\/\/codepen.io\/danielwarren\/pen\/QOgvBa\">Potete trovare su CodePen<\/a> il risultato JSON finale.<\/p>\n<p>Ho usato i dati JSON per creare le barre dell&#8217;infografica, definendo il layout per ciascuna con CSS Grid e stili dinamici per larghezza e colore. Guardate il prodotto finale su <a href=\"http:\/\/ninetyninetimes.com\/\">ninetyninetimes.com<\/a>. Penso che a mio nonno sarebbe piaciuto vedere i suoi diari scritti a mano trasformati in un formato visuale che mostrasse la mole dei suoi viaggi.<\/p>\n<p>\u00c8 morto nel 2005, ma mi ricordo di avergli mostrato il mio Blackberry e di avergli spiegato internet, mostrandogli come poteva guardare le foto scattate nel mondo e leggere articoli. Ha bevuto un sorso del suo Martini e ha come allontanato lo schermo con la mano. Penso preferisse le note scritte a mano e la vita fuori da internet, qualcosa che molti di noi apprezzano. Dopo aver messo in ordine i suoi diari di viaggio, ho capito pi\u00f9 chiaramente l&#8217;importanza che metteva nell&#8217;avere esperienze diverse, incontrare nuove persone ed esplorare il mondo senza paura. Per lui, i suoi viaggi erano molto pi\u00f9 che date su una pagina. Adesso sono pi\u00f9 di quello anche per me.<\/p>\n<p><em>L&#8217;autore vorrebbe ringraziare <a href=\"https:\/\/about.me\/mpj\">Mattias Petter Johansson<\/a>, la cui serie video, \u201c<a href=\"https:\/\/www.youtube.com\/funfunfunction\">Fun Fun Function<\/a>\u201d, ha ispirato alcuni ragionamenti in questo articolo.<\/em><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Quando il vostro progetto di design implica dei dati non convenzionali, come strutturate tali dati perch\u00e9 la loro manipolazione sia meno tediosa? Daniel Warren ha affrontato la questione quando ha deciso di creare un&#8217;infografica che mostrasse i decenni di lunghi viaggi che suo nonno aveva documentato in diari scritti a mano. Vediamo quali tecniche JavaScript Warren ha usato per minimizzare i task ripetitivi e dare nuova vita ai diari di viaggio di suo nonno<\/p>\n","protected":false},"author":818,"featured_media":7000841,"comment_status":"open","ping_status":"open","template":"","categories":[271,216],"tags":[],"coauthors":[528],"class_list":["post-836","article","type-article","status-publish","has-post-thumbnail","hentry","category-javascript","category-numero-239-19-dicembre-2017"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/836","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=836"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000841"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=836"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=836"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=836"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=836"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}