{"id":283,"date":"2011-04-22T02:27:30","date_gmt":"2011-04-22T01:27:30","guid":{"rendered":"http:\/\/julia2.lucaamore.com\/?p=283"},"modified":"2024-02-09T21:29:45","modified_gmt":"2024-02-09T19:29:45","slug":"erlang-fuga-verso-linfinito-frattale","status":"publish","type":"post","link":"https:\/\/www.lucaamore.com\/?p=283","title":{"rendered":"Erlang e frattali: fuga verso l&#8217;infinito&#8230;"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nello <a title=\"Rappresentazione dell\u2019insieme frattale di Mandelbrot in perl\" href=\"https:\/\/www.lucaamore.com\/?p=331\">scorso articolo<\/a>, tramite poche righe di codice perl, abbiamo curiosato all&#8217;interno del frastagliato universo frattale, rappresentando gli insiemi di Mandelbrot e Julia in modalit\u00e0 rigorosamente monocromatica.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_418d4bf7-012c-4531-9555-f08575cdcbf1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_418d4bf7-012c-4531-9555-f08575cdcbf1-1024x1024.png\" alt=\"\" class=\"wp-image-1591\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_418d4bf7-012c-4531-9555-f08575cdcbf1.png 1024w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_418d4bf7-012c-4531-9555-f08575cdcbf1-300x300.png 300w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_418d4bf7-012c-4531-9555-f08575cdcbf1-150x150.png 150w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_418d4bf7-012c-4531-9555-f08575cdcbf1-768x768.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">E&#8217; davvero meraviglioso quando la natura ci sorprende facendo coesistere l&#8217;infinitamente semplice con lo smisuratamente complesso come in questo caso. Solo Lei pu\u00f2 permettersi di farlo in modo cos\u00ec raffinato ed esuberante: una banale successione quadratica nel dominio dei numeri complessi, apparentemente insignificante ed innocua, \u00e8 in grado di generare ricorsivamente &#8220;uno dei pi\u00f9 complessi oggetti della matematica&#8221;; cos\u00ec \u00e8 stato definito l&#8217;insieme di Mandelbrot da&nbsp;<a title=\"Beno\u00eet Mandelbrot\" href=\"http:\/\/en.wikipedia.org\/wiki\/Benoit_Mandelbrot\">Beno\u00eet Mandelbrot<\/a>,&nbsp;<a title=\"Heinz-Otto Peitge\" href=\"http:\/\/en.wikipedia.org\/wiki\/Heinz-Otto_Peitgen\">Heinz-Otto Peitgen<\/a> e <a title=\"John H. Hubbard\" href=\"http:\/\/en.wikipedia.org\/wiki\/John_H._Hubbard\">John H. Hubbard<\/a> suoi iniziali divulgatori.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il comportamento dei sistemi caotici ha ancora misteriose propriet\u00e0 che l&#8217;uomo non \u00e8 stato ancora in grado di decifrare; mattoncini matematici che la natura ha combinato per la costruzione dell&#8217;universo e di cui &#8211; forse &#8211; potremmo parlare nei prossimi articoli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Erlang e frattali<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In questo articolo, ho deciso di realizzare un&#8217;applicazione distribuita per la rappresentazione in Erlang degli insiemi frattali di Mandelbrot e Julia in Erlang introducendo anche i colori.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un bel frullato di: caos, frattali, colori, concorrenza, programmazione funzionale, emozioni, infinito.&nbsp;Una frizzante e fatale alchimia di argomenti dalla quale non \u00e8 possibile esser risucchiati!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m4-1024x1024.png\" alt=\"\" class=\"wp-image-564\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m4-1024x1024.png 1024w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m4-150x150.png 150w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m4-300x300.png 300w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m4.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Mandelbrot,&nbsp;I: 500 Z: -0.981,-0.6457 x 0.0169, 0.3527<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Erlang<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;<a title=\"Erlang\" href=\"http:\/\/en.wikipedia.org\/wiki\/Erlang_(programming_language)\">Erlang<\/a> \u00e8 un <a title=\"Functional Language\" href=\"http:\/\/en.wikipedia.org\/wiki\/Functional_language\">linguaggio funzionale<\/a> progettato da <a title=\"Joe Armstrong's blog\" href=\"http:\/\/armstrongonsoftware.blogspot.com\/\">Joe Armstrong<\/a>, per conto di Ericsson, con lo scopo di favorire lo sviluppo di applicazioni: distribuite, soft-realtime, con un elevato grado di concorrenza ed affidabilit\u00e0 nel campo delle telecomunicazioni. La prima versione proprietaria del linguaggio \u00e8 stata rilasciata internamente nel 1986 mentre, dopo varie vicessitudini, nel 1998 Erlang \u00e8 stato distribuito opensource.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Concorrenza e gestione dei processi<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The world is concurrent<br>Things in the world don&#8217;t share data<br>Things communicate with messages<br>Things fail&nbsp;&#8211; Joe Armstrong<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Erlang \u00e8 progettato per la concorrenza massiva. Per spingere tale caratteristica a livelli estremi, si \u00e8 ben pensato di progettare un gestore di processi ed uno scheduler interni alla virtual-machine.&nbsp;Tali componenti non delegano i loro compiti al kernel del sistema operativo (come fa la quasi totalit\u00e0 degli altri linguaggi) e sono in grado di gestire processi con un&#8217;efficientissima gestione della memoria e dello scheduling.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/J1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/J1-1024x1024.png\" alt=\"\" class=\"wp-image-546\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/J1-1024x1024.png 1024w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/J1-150x150.png 150w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/J1-300x300.png 300w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/J1.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Julia, I: 150 K: -0.835+0.2321i Z: -1.8,1.8 x -1.0, 1.0<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Scrivere applicazioni distribuite, scalabili e robuste in Erlang \u00e8 normalmente pi\u00f9 semplice che in altri linguaggi.&nbsp;I processi possono esser distribuiti trasparentemente su pi\u00f9 core oppure su pi\u00f9 macchine e comunicano tramite message-passing asincrono.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Apprendere l&#8217;Erlang<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se siete semplicemente curiosi di conoscere la sintassi del linguaggio, potreste provare questo breve tutorial online che simula via web la shell di Erlang:&nbsp;Tryerlang.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per un corso online \u00e8 possibile visitare: <a title=\"Learn You Some Erlang\" href=\"http:\/\/learnyousomeerlang.com\/\">Learn You Some Erlang<\/a> oppure&nbsp;Erlang for Skeptics<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I libri che non possono mancare nella biblioteca di chi ama tale linguaggio (sui quali ho studiato l&#8217;Erlang):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a title=\"Erlang Programming, O'Reilly Media\" href=\"http:\/\/www.amazon.com\/ERLANG-Programming-Francesco-Cesarini\/dp\/0596518188\">Erlang Programming: A Concurrent Approach to Software Development, Francesco Cesarini and Simon Thompson,&nbsp;O&#8217;Reilly Media<\/a><\/li>\n\n\n\n<li>Programming Erlang: Software for a Concurrent World, Joe Armstrong, The Pragmatic Bookshelf<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Applicazione Erlang: frk<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Segue il codice sorgente in Erlang, del modulo principale, che ho scritto per la mia applicazione: frk.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: erlang; gutter: false; title: ; notranslate\" title=\"\">\n-module(frk).\n-author(&#039;LucaAmore&#039;).\n-export(&#x5B;save\/11, save\/9, julia\/9, mandelbrot\/7]).\n\n% extract all screen coords\nscreen(W, H)-&gt;\n    &#x5B; {X,Y} || Y &lt;- lists:seq(0, H - 1), X &lt;- lists:seq(0, W - 1) ].\n\n% convert bitmap point to complex point\ncomplex(X, Y, MinX, MinY, FactX, FactY)-&gt;\n    { MinX + X * FactX, MinY + Y * FactY }.\n\niterate(_, _, _, _, MaxIterations, Iterations) \n    when Iterations &gt;= MaxIterations -&gt; Iterations;\n\niterate(Zre, Zim, _, _,  _, Iterations) \n    when Zre * Zre + Zim * Zim  &gt; 4 -&gt; Iterations;\n\niterate(Zre, Zim, Cre, Cim, MaxIterations, Iterations)-&gt;\n    iterate(\n        Zre * Zre - Zim * Zim + Cre, \n        2 * Zre * Zim + Cim, \n        Cre, Cim,\n        MaxIterations, Iterations+1\n    ).\n\n%------------------------------------------------------------------------\n% Julia&#039;s set\n%\n% Z1 = C0, Zn+1 = Zn^2 + K\n%------------------------------------------------------------------------\njulia(X, Y, MinX, MinY, FactX, FactY, Kre, Kim, MaxIterations)-&gt;\n    {Cre, Cim} = complex(X, Y, MinX, MinY, FactX, FactY),\n    iterate(Cre, Cim, Kre, Kim, MaxIterations, 0).\n\n%------------------------------------------------------------------------\n% Mandelbrot&#039;s set\n%\n% Z1 = 0, Zn+1 = Zn^2 + C0\n%------------------------------------------------------------------------\nmandelbrot(X, Y, MinX, MinY, FactX, FactY, MaxIterations)-&gt;\n    {Cre, Cim} = complex(X, Y, MinX, MinY, FactX, FactY),\n    iterate(0, 0, Cre, Cim, MaxIterations, 0).\n\n% Julia&#039;s set exploration\ngenerate(julia, W, H, MinX, MaxX, MinY, MaxY, Kre, Kim, MaxIterations) \n    when W &gt; 0, H &gt; 0, MaxX &gt; MinX, MaxY &gt; MinY, MaxIterations &gt; 0 -&gt;\n    FactX = (MaxX - MinX) \/ W,\n    FactY = (MaxY - MinY) \/ H,\n    &#x5B; julia(X, Y, MinX, MinY, FactX, FactY, Kre, Kim, MaxIterations) || \n        {X, Y} &lt;- screen(W, H) ].\n\n% Mandelbrot&#039;s set exploration\ngenerate(mandelbrot, W, H, MinX, MaxX, MinY, MaxY, MaxIterations) \n    when W &gt; 0, H &gt; 0, MaxX &gt; MinX, MaxY &gt; MinY, MaxIterations &gt; 0 -&gt;\n    FactX = (MaxX - MinX) \/ W,\n    FactY = (MaxY - MinY) \/ H,\n    &#x5B; mandelbrot(X, Y, MinX, MinY, FactX, FactY, MaxIterations) || \n        {X, Y} &lt;- screen(W, H) ].\n\n% save Julia&#039;s set in ppm format\nsave(julia, W, H, MinX, MaxX, MinY, MaxY, Kre, Kim, MaxIterations, FileName) \n    when W &gt; 0, H &gt; 0, MaxX &gt; MinX, MaxY &gt; MinY, MaxIterations &gt; 0 -&gt;\n    M = &#x5B;\n            paletteblu:color(Iterations, MaxIterations) || \n                Iterations &lt;- generate(\n                    julia, W, H, MinX, MaxX, MinY, MaxY, Kre, Kim, MaxIterations\n                )\n    ],\n    ppm:save(image, W, H, 255, FileName, M).\n\n% save Mandelbrot&#039;s set in ppm format\nsave(mandelbrot, W, H, MinX, MaxX, MinY, MaxY, MaxIterations, FileName) \n    when W &gt; 0, H &gt; 0, MaxX &gt; MinX, MaxY &gt; MinY, MaxIterations &gt; 0 -&gt;\n    M = &#x5B;\n            palettered:color(Iterations, MaxIterations) || \n                Iterations &lt;- generate(\n                    mandelbrot, W, H, MinX, MaxX, MinY, MaxY, MaxIterations\n                )\n    ],\n    ppm:save(image, W, H, 255, FileName, M).\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Per non appesantire troppo il codice ho deciso di utilizzare come formato delle immagini dioutput <a href=\"http:\/\/netpbm.sourceforge.net\/doc\/ppm.html\">PPM<\/a> (tra i pi\u00f9 semplici disponibili) e poi convertirlo in PNG, tramite script bash, utilizzando l&#8217;utility <a href=\"http:\/\/www.imagemagick.org\/script\/convert.php\">convert<\/a> di <a href=\"http:\/\/www.imagemagick.org\/script\/index.php\">ImageMagick<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_4bb7197c-b6e2-425f-917c-434d967faa75.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_4bb7197c-b6e2-425f-917c-434d967faa75-1024x1024.png\" alt=\"\" class=\"wp-image-1661\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_4bb7197c-b6e2-425f-917c-434d967faa75.png 1024w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_4bb7197c-b6e2-425f-917c-434d967faa75-300x300.png 300w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_4bb7197c-b6e2-425f-917c-434d967faa75-150x150.png 150w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_steampunk_fractals_into_a_monitor_4bb7197c-b6e2-425f-917c-434d967faa75-768x768.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutte le immagini dei frattali di questoarticolosono stati generati da frk.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m3-1024x1024.png\" alt=\"\" class=\"wp-image-542\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m3-1024x1024.png 1024w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m3-150x150.png 150w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m3-300x300.png 300w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/m3.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Mandelbrot,&nbsp;I: 40 Z: -1.825,-1.705 x -0.06, 0.06<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;applicazione frk. rilasciata come <a href=\"http:\/\/www.gnu.org\/philosophy\/free-sw.it.html\">software libero<\/a> sotto <a href=\"http:\/\/www.gnu.org\/licenses\/gpl.html\">licenza GNU\/GPL<\/a>,&nbsp;\u00e8 disponibile presso:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/lookee\/frk\">Repository GIT su GITHUB di FRK<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nello scorso articolo, tramite poche righe di codice perl, abbiamo curiosato all&#8217;interno del frastagliato universo frattale, rappresentando gli insiemi di Mandelbrot e Julia in modalit\u00e0 rigorosamente monocromatica. E&#8217; davvero meraviglioso quando la natura ci sorprende facendo coesistere l&#8217;infinitamente semplice con &hellip; <a href=\"https:\/\/www.lucaamore.com\/?p=283\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1586,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[31,22,23,32,28,24,30,166,165],"tags":[84,82,83,86,85],"class_list":["post-283","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-caos","category-erlang","category-fractals","category-freesoftware","category-julia","category-mandelbrot","category-parallel-processing","category-programming","category-top","tag-chaos","tag-erlang","tag-fractal","tag-julia","tag-mandelbrot"],"_links":{"self":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts\/283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=283"}],"version-history":[{"count":200,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts\/283\/revisions"}],"predecessor-version":[{"id":1662,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts\/283\/revisions\/1662"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/media\/1586"}],"wp:attachment":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}