Messina Retrocomputing: tra storia e innovazione

Offerte Apple ricondizionati in anteprima? Iscriviti al nostro gruppo Telegram:

La storia dell’informatica è essenziale per capire come le innovazioni tecnologiche abbiano trasformato il mondo moderno. Dai primi computer ai dispositivi odierni, ogni passo ha influenzato la nostra cultura, economia e modo di vivere.
Conoscere il passato dell’informatica ci permette di apprezzare le conquiste di ingegneri e inventori, ma anche di trarre insegnamenti per affrontare le sfide tecnologiche future. Iniziative come Messina Retrocomputing aiutano a preservare questa eredità, mantenendo vivo il ricordo delle innovazioni che hanno cambiato la nostra società.

Messina Retrocomputing: preservare il patrimonio informatico

Messina Retrocomputing è un’associazione senza scopo di lucro fondata da Biagio Natoli Orioles, Alessandro Coletta, e Tonino Bisazza, con lo scopo di preservare e divulgare il patrimonio storico dell’informatica. L’associazione raccoglie ed espone computer e dispositivi che hanno segnato l’era dell’informatica, e si concentra anche sulla preservazione delle console per il retrogaming.

ASSISTENZA E RIPARAZIONE

Alessandro Coletta ha sottolineato la passione che anima il progetto, affermando: “Dicono che a volte i sogni sono contagiosi. Abbiamo creato questo progetto, con l’auspicio  di contagiarvi  con il nostro entusiasmo e il suo valore storico. Una eredità che ha avuto un grandissimo impatto sulla cultura e la società.”

Questo entusiasmo si traduce nella missione di rendere il passato della tecnologia accessibile a tutti, attraverso la raccolta e l’esposizione di computer e dispositivi che hanno segnato l’era dell’informatica.

Messina al Sud Innovation Sumit

L’associazione si è già fatta conoscere con la sua partecipazione a eventi come il Sud Innovation Summit, dove ha presentato una selezione di computer che vanno dal 1977 al 1990:

  • Commodore PET 2001 (1977)
  • IBM 5150 (1981)
  • Sinclair ZX Spectrum (1982)
  • Commodore 64 (1982)
  • Apple II (1977)
  • Commodore Amiga 1000 (1985)
  • IBM Convertible (1986)
  • Apple Macintosh SE/30 (1987)

Queste macchine storiche sono testimonianze viventi dell’evoluzione tecnologica che ha plasmato il mondo digitale di oggi. Grazie alla collaborazione con l’Istituto Tecnico Verona Trento di Messina, giovani studenti vengono coinvolti nell’illustrazione del funzionamento dei dispositivi, contribuendo a far conoscere le radici della tecnologia moderna.

Un obiettivo ambizioso: una mostra permanente

L’obiettivo a lungo termine di Messina Retrocomputing è ambizioso: creare una museo permanente dedicato alla storia dell’informatica. Questa iniziativa permetterebbe non solo di conservare in modo stabile i pezzi storici, ma anche di offrire al pubblico un luogo fisico dove poter ammirare e comprendere l’impatto rivoluzionario che questi dispositivi hanno avuto sulla cultura e sulla società contemporanea.

La mostra si propone di diventare un punto di riferimento culturale, capace di connettere il passato e il presente della tecnologia, rendendo le innovazioni del passato una fonte d’ispirazione per le generazioni future

Potrete seguire tutti gli aggiornamenti ed eventi in programma  dell’ Associazione tramite

Sito Web Messina Retrocomputing Messina

Pagina Instagram Retro Computing Messina 

Ricevi in anteprima le offerte su iPhone, MacBook, iMac e iPad ricondizionati.
Unisciti ora al nostro gruppo Telegram:

Questo elemento è stato inserito in News. Aggiungilo ai segnalibri.
/* BNO Informatica – Notebook 3D della landing Riparazione computer. Si attiva solo nelle pagine che contengono #bnoLaptop3d, quindi può stare anche nel footer globale. */ (function(run){ if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', run); } else { run(); } })(function(){ (function(){ var stage = document.getElementById('bnoLaptop3d'); if(!stage){ if(window.console) console.info('BNO 3D: in questa pagina non c\'è #bnoLaptop3d'); return; } var section = stage.closest('.inside-section') || stage.parentNode; var root = stage.closest('.bno-landing') || document; var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; // Scorrimento verso le sezioni interne gestito via JS: funziona anche con header fisso, // dentro iframe e builder che bloccano i link #ancora function goTo(hash){ var el; try { el = document.querySelector(hash); } catch(e){ return false; } if(!el) return false; var head = 90; // spazio per l'header fisso del tema var y = el.getBoundingClientRect().top + window.pageYOffset - Math.max(head, (window.innerHeight - el.offsetHeight) / 2); window.scrollTo({top: Math.max(0, y), behavior: reduce ? 'auto' : 'smooth'}); if(el.classList.contains('service')){ el.classList.add('is-picked'); setTimeout(function(){ el.classList.remove('is-picked'); }, 2200); } try { history.replaceState(null, '', hash); } catch(e){} return true; } root.addEventListener('click', function(ev){ var a = ev.target.closest && ev.target.closest('a[href^="#"]'); if(!a) return; var h = a.getAttribute('href'); if(h.length > 1 && goTo(h)) ev.preventDefault(); }); var finePointer = window.matchMedia('(pointer: fine)').matches; function fail(){ section.classList.add('no-3d'); } // Three.js si scarica solo quando la sezione sta per entrare nello schermo (non pesa su LCP) var started = false; function load(){ if(started) return; started = true; if(window.THREE) return init(); var s = document.createElement('script'); s.src = 'https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js'; s.onload = init; s.onerror = fail; document.head.appendChild(s); } if('IntersectionObserver' in window){ var io = new IntersectionObserver(function(es){ if(es[0].isIntersecting){ io.disconnect(); load(); } }, {rootMargin:'300px 0px'}); io.observe(stage); } else { window.addEventListener('load', load); } function init(){ try { build(); } catch(err){ fail(); if(window.console) console.warn('Notebook 3D non disponibile:', err); } } function build(){ var T = window.THREE; if(!T) return; var canvas = stage.querySelector('canvas'); var renderer; try { renderer = new T.WebGLRenderer({canvas:canvas, antialias:true, alpha:true}); } catch(e){ return fail(); } if(!renderer.getContext()) return fail(); renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)); renderer.shadowMap.enabled = true; renderer.shadowMap.type = T.PCFSoftShadowMap; renderer.outputEncoding = T.sRGBEncoding; renderer.toneMapping = T.ACESFilmicToneMapping; section.classList.add('is-3d'); var scene = new T.Scene(); var camera = new T.PerspectiveCamera(30, 1, 0.1, 100); camera.position.set(0, 3.7, 9.0); camera.lookAt(0, 1.0, 0); // ambiente riflesso per l'alluminio var pmrem = new T.PMREMGenerator(renderer); var env = new T.Scene(); env.add(new T.Mesh(new T.BoxGeometry(20,20,20), new T.MeshBasicMaterial({color:0x5a6068, side:T.BackSide}))); [[0,9,0,12,.2,12],[-9.5,3,0,.2,6,14],[9.5,3,2,.2,6,6],[0,3,9.5,10,5,.2]].forEach(function(b){ var m = new T.Mesh(new T.BoxGeometry(b[3],b[4],b[5]), new T.MeshBasicMaterial({color:0xffffff})); m.position.set(b[0],b[1],b[2]); env.add(m); }); scene.environment = pmrem.fromScene(env, 0.04).texture; scene.add(new T.HemisphereLight(0xffffff, 0x8a939b, 0.55)); var key = new T.DirectionalLight(0xffffff, 1.0); key.position.set(3, 8, 5); key.castShadow = true; key.shadow.mapSize.set(1024,1024); key.shadow.camera.left=-4; key.shadow.camera.right=4; key.shadow.camera.top=4; key.shadow.camera.bottom=-4; key.shadow.radius = 8; key.shadow.bias = -0.0005; scene.add(key); function mat(o){ var m = new T.MeshStandardMaterial(o); m.color.convertSRGBToLinear(); return m; } var alu = mat({color:0xc4c8cd, roughness:0.32, metalness:0.85}); var aluDk = mat({color:0xaeb3b9, roughness:0.45, metalness:0.7}); var dark = mat({color:0x1a1d22, roughness:0.55, metalness:0.1}); var pcb = mat({color:0x1d5e44, roughness:0.6, metalness:0.1}); var chip = mat({color:0x111316, roughness:0.4, metalness:0.2}); var gold = mat({color:0xd4a64a, roughness:0.3, metalness:0.9}); var batt = mat({color:0x2b2f36, roughness:0.5, metalness:0.2}); var blue = mat({color:0x33a6da, roughness:0.4, metalness:0.1}); var cast = function(m){ m.castShadow = true; m.receiveShadow = true; return m; }; function rshape(w,h,r){ var s = new T.Shape(), x=-w/2, y=-h/2; s.moveTo(x+r,y); s.lineTo(x+w-r,y); s.quadraticCurveTo(x+w,y,x+w,y+r); s.lineTo(x+w,y+h-r); s.quadraticCurveTo(x+w,y+h,x+w-r,y+h); s.lineTo(x+r,y+h); s.quadraticCurveTo(x,y+h,x,y+h-r); s.lineTo(x,y+r); s.quadraticCurveTo(x,y,x+r,y); return s; } // lastra arrotondata distesa: larghezza w (x), profondità d (z), spessore h (y da 0 a h) function slab(w,d,h,r,m){ var g = new T.ExtrudeGeometry(rshape(w,d,r),{depth:h,bevelEnabled:false,curveSegments:10}); g.rotateX(-Math.PI/2); return cast(new T.Mesh(g,m)); } function box(w,h,d,m){ return cast(new T.Mesh(new T.BoxGeometry(w,h,d),m)); } var laptop = new T.Group(); scene.add(laptop); var floor = new T.Mesh(new T.PlaneGeometry(16,16), new T.ShadowMaterial({opacity:0.16})); floor.rotation.x = -Math.PI/2; floor.position.y = -0.75; floor.receiveShadow = true; scene.add(floor); var parts = []; function part(obj, base, off, label){ obj.position.copy(base); laptop.add(obj); var p = {obj:obj, base:base.clone(), off:off, label:label}; parts.push(p); return p; } var V = function(x,y,z){ return new T.Vector3(x,y,z); }; // Scocca inferiore var bottom = new T.Group(); bottom.add(slab(3.2,2.2,0.05,0.14,alu)); part(bottom, V(0,0,0), V(0,-0.5,0)); // Scheda madre con chip e porte var mb = new T.Group(); mb.add(slab(2.9,1.0,0.03,0.05,pcb)); [[-0.2,0.05,0.34,0.3],[0.25,-0.2,0.22,0.22],[-0.95,0.2,0.18,0.12]].forEach(function(c){ var b = box(c[2],0.04,c[3],chip); b.position.set(c[0],0.05,c[1]); mb.add(b); }); [[-1.36,-0.25],[-1.36,0.05],[1.36,-0.1]].forEach(function(p){ var port = box(0.12,0.06,0.18,aluDk); port.position.set(p[0],0.06,p[1]); mb.add(port); }); part(mb, V(0,0.06,-0.5), V(0,0.38,0), {text:'Porte e scheda', href:'#svc-connettori', side:-1, anchor:V(-1.45,0.05,0)}); // Batteria var bt = new T.Group(); bt.add(slab(2.5,0.75,0.07,0.05,batt)); var stripe = box(0.5,0.005,0.75,blue); stripe.position.set(-0.8,0.072,0); bt.add(stripe); part(bt, V(0,0.06,0.5), V(0,0.6,0.5), {text:'Batteria', href:'#svc-batteria', side:1, anchor:V(1.25,0.04,0)}); // SSD var ssd = new T.Group(); ssd.add(slab(0.8,0.26,0.02,0.02,pcb)); var c1 = box(0.3,0.03,0.18,chip); c1.position.set(0.05,0.03,0); ssd.add(c1); var gc = box(0.06,0.01,0.22,gold); gc.position.set(-0.37,0.025,0); ssd.add(gc); part(ssd, V(-0.7,0.1,-0.5), V(-1.25,0.95,0.45), {text:'SSD e dati', href:'#svc-recupero-dati', side:-1, anchor:V(-0.4,0.03,0)}); // Ventola var fan = new T.Group(); var housing = cast(new T.Mesh(new T.CylinderGeometry(0.32,0.32,0.03,40), dark)); housing.position.y = 0.015; fan.add(housing); var ringF = cast(new T.Mesh(new T.TorusGeometry(0.31,0.02,8,40), aluDk)); ringF.rotation.x = Math.PI/2; ringF.position.y = 0.05; fan.add(ringF); var rotor = new T.Group(); rotor.position.y = 0.05; fan.add(rotor); var hub = cast(new T.Mesh(new T.CylinderGeometry(0.08,0.08,0.05,24), aluDk)); rotor.add(hub); for(var i=0;i<9;i++){ var bl = box(0.2,0.012,0.07,dark); bl.position.set(0.16,0,0); var holder = new T.Group(); holder.rotation.y = i*2*Math.PI/9; bl.rotation.x = 0.4; holder.add(bl); rotor.add(holder); } part(fan, V(0.85,0.09,-0.5), V(1.3,1.05,0.4), {text:'Ventola', href:'#svc-surriscaldamento', side:1, anchor:V(0.32,0.05,0)}); // Scocca superiore con trackpad var top = new T.Group(); top.add(slab(3.2,2.2,0.07,0.14,alu)); var pad = slab(1.1,0.62,0.004,0.06,aluDk); pad.position.set(0,0.07,0.66); top.add(pad); part(top, V(0,0.13,0), V(0,1.45,0)); // Tastiera var kc = document.createElement('canvas'); kc.width = 1024; kc.height = 360; var kx = kc.getContext('2d'); kx.fillStyle = '#121418'; kx.fillRect(0,0,1024,360); function drawKey(x,y,w,h){ kx.fillStyle='#262a31'; kx.beginPath(); if(kx.roundRect){kx.roundRect(x,y,w,h,8);} else {kx.rect(x,y,w,h);} kx.fill(); kx.fillStyle='#2f343c'; kx.fillRect(x+4,y+4,w-8,3); } var kw = 64, gap = 6, x0 = 12, y0 = 10, rh = 50; for(var r=0;r<5;r++){ for(var k=0;k<15;k++){ drawKey(x0+k*(kw+gap)*0.97, y0+r*(rh+gap)+ (r===0?0:6), kw*0.97-gap, r===0?30:rh); } } var y5 = y0+5*(rh+gap)+6; drawKey(x0,y5,kw*1.3,rh); drawKey(x0+kw*1.4,y5,kw,rh); drawKey(x0+kw*2.5,y5,kw,rh); drawKey(x0+kw*3.6,y5,kw*6.6,rh); for(var a=0;a<4;a++) drawKey(x0+kw*10.3+a*(kw+gap), y5, kw, rh); var ktex = new T.CanvasTexture(kc); ktex.encoding = T.sRGBEncoding; ktex.anisotropy = 4; var kb = new T.Group(); kb.add(slab(2.75,0.95,0.025,0.03,dark)); var kp = new T.Mesh(new T.PlaneGeometry(2.7,0.92), new T.MeshStandardMaterial({map:ktex, roughness:0.7})); kp.rotation.x = -Math.PI/2; kp.position.y = 0.027; kp.receiveShadow = true; kb.add(kp); part(kb, V(0,0.2,-0.3), V(0,2.0,0.05), {text:'Tastiera', href:'#svc-tastiera', side:-1, anchor:V(-1.38,0.03,0)}); // Schermo (coperchio incernierato) var lidPivot = new T.Group(); var lid = new T.Group(); lid.rotation.x = -0.3; lidPivot.add(lid); var lg = new T.ExtrudeGeometry(rshape(3.2,2.1,0.14),{depth:0.06,bevelEnabled:false,curveSegments:10}); lg.translate(0,1.05,-0.06); lid.add(cast(new T.Mesh(lg, alu))); var bezel = new T.Mesh(new T.PlaneGeometry(3.12,2.02), new T.MeshStandardMaterial({color:0x08090b, roughness:0.2, metalness:0.3})); bezel.position.set(0,1.05,0.001); lid.add(bezel); var sc = document.createElement('canvas'); sc.width = 768; sc.height = 480; var sx = sc.getContext('2d'); var stex = new T.CanvasTexture(sc); stex.encoding = T.sRGBEncoding; stex.anisotropy = 4; var screen = new T.Mesh(new T.PlaneGeometry(2.98,1.86), new T.MeshBasicMaterial({map:stex, toneMapped:false})); screen.position.set(0,1.07,0.003); lid.add(screen); part(lidPivot, V(0,0.2,-1.1), V(0,0.35,-0.75), {text:'Schermo', href:'#svc-schermo', side:1, anchor:V(1.5,1.7,0), anchorObj:lid}); var FONT = 'system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif'; function drawScreen(mode, t){ var g = sx.createLinearGradient(0,0,768,480); g.addColorStop(0,'#0e2f45'); g.addColorStop(1,'#07131d'); sx.fillStyle = g; sx.fillRect(0,0,768,480); sx.textAlign = 'center'; if(mode === 'ok'){ sx.fillStyle = '#ffffff'; sx.font = '900 150px '+FONT; sx.fillText('BNO', 384, 250); sx.fillStyle = '#33a6da'; sx.font = '700 46px '+FONT; sx.fillText('Informatica', 384, 312); sx.fillStyle = 'rgba(255,255,255,.6)'; sx.font = '600 24px '+FONT; sx.fillText('Riparazione computer · Messina', 384, 380); } else { sx.fillStyle = '#ffffff'; sx.font = '800 44px '+FONT; sx.fillText('Diagnosi in corso', 384, 130); sx.fillStyle = 'rgba(255,255,255,.12)'; sx.fillRect(134,170,500,16); var p = (t*0.45) % 1; sx.fillStyle = '#33a6da'; sx.fillRect(134,170,500*p,16); sx.textAlign = 'left'; sx.font = '600 28px '+FONT; ['Batteria','Schermo','SSD e dati','Ventola'].forEach(function(n,i){ var done = p > (i+1)*0.22; sx.fillStyle = done ? '#FFC400' : 'rgba(255,255,255,.35)'; sx.fillText((done ? '✓ ' : '• ') + n, 250, 250 + i*48); }); } stex.needsUpdate = true; } drawScreen('ok',0); // Etichette cliccabili verso i servizi var layer = stage.querySelector('.bno3d-labels'); parts.forEach(function(p){ if(!p.label) return; var a = document.createElement('a'); a.className = 'bno3d-label'; a.href = p.label.href; a.textContent = p.label.text; a.tabIndex = -1; layer.appendChild(a); p.el = a; }); // Interazione var target = {x:0,y:0}, cur = {x:0,y:0}, hovering = false, pinned = false, e = 0; function openAmount(){ return e*e*(3-2*e); } window.addEventListener('pointermove', function(e){ var r = canvas.getBoundingClientRect(); target.x = Math.max(-1, Math.min(1, (e.clientX - (r.left + r.width/2)) / (window.innerWidth*0.5))); target.y = Math.max(-1, Math.min(1, (e.clientY - (r.top + r.height/2)) / (window.innerHeight*0.5))); }, {passive:true}); stage.addEventListener('pointerenter', function(e){ if(e.pointerType === 'mouse') hovering = true; }); stage.addEventListener('pointerleave', function(e){ if(e.pointerType === 'mouse') hovering = false; }); var btn = stage.querySelector('.bno3d-toggle'); function setPinned(v){ pinned = v; btn.textContent = pinned ? 'Richiudi il notebook' : 'Guarda dentro il notebook'; btn.setAttribute('aria-pressed', pinned ? 'true' : 'false'); parts.forEach(function(p){ if(p.el) p.el.tabIndex = pinned ? 0 : -1; }); } btn.addEventListener('click', function(){ setPinned(!pinned); }); // Clic (o tocco) direttamente sul pezzo smontato: porta al servizio parts.forEach(function(p){ if(p.label) p.obj.traverse(function(o){ if(o.isMesh) o.userData.part = p; }); }); var ray = new T.Raycaster(), ndc = new T.Vector2(), hot = null; function pick(ev){ var r = canvas.getBoundingClientRect(); ndc.set(((ev.clientX - r.left) / r.width) * 2 - 1, -((ev.clientY - r.top) / r.height) * 2 + 1); ray.setFromCamera(ndc, camera); var hits = ray.intersectObjects(laptop.children, true); for(var i=0;i 0.6 ? pick(ev) : null; canvas.style.cursor = hot ? 'pointer' : ''; }); canvas.addEventListener('pointerleave', function(){ hot = null; canvas.style.cursor = ''; }); canvas.addEventListener('click', function(ev){ var open = openAmount() > 0.6; var p = open ? pick(ev) : null; if(p){ go(p); return; } if(!finePointer) setPinned(!open); // su touch: tocca per aprire, tocca fuori dai pezzi per chiudere }); // passando sui pulsanti dei componenti il notebook si apre var chipHover = false; section.querySelectorAll('.inside-chip').forEach(function(c){ c.addEventListener('pointerenter', function(){ chipHover = true; }); c.addEventListener('pointerleave', function(){ chipHover = false; }); c.addEventListener('focus', function(){ chipHover = true; }); c.addEventListener('blur', function(){ chipHover = false; }); }); function resize(){ var w = stage.clientWidth, h = stage.clientHeight; renderer.setSize(w, h, false); camera.aspect = w/h; var dist = w/h < 1 ? 9.0 / Math.max(w/h, 0.7) : 9.0; camera.position.set(0, 3.7 * dist/9, dist); camera.lookAt(0, 1.0, 0); camera.updateProjectionMatrix(); } new ResizeObserver(resize).observe(stage); resize(); var visible = true; if('IntersectionObserver' in window) new IntersectionObserver(function(es){ visible = es[0].isIntersecting; }).observe(stage); var clock = new T.Clock(), mode = 'ok', v = new T.Vector3(); function tick(){ requestAnimationFrame(tick); if(!visible){ clock.getDelta(); return; } var dt = Math.min(clock.getDelta(), 0.05), t = clock.elapsedTime; var k = 1 - Math.pow(0.0015, dt); cur.x += (target.x - cur.x) * k; cur.y += (target.y - cur.y) * k; var intro = !reduce && t > 0.8 && t < 3.6; // all'avvio si apre una volta, per far capire che si può fare var want = (hovering || pinned || chipHover || intro) ? 1 : 0; e += (want - e) * (1 - Math.pow(0.02, dt)); var ee = e*e*(3-2*e); laptop.rotation.y = -0.42 + (finePointer ? cur.x * 0.45 : (reduce ? 0 : Math.sin(t*0.5) * 0.3)); laptop.rotation.x = cur.y * 0.1; laptop.position.y = -0.15 * ee; parts.forEach(function(p){ p.lift = (p.lift || 0) + (((p === hot) ? 0.14 : 0) - (p.lift || 0)) * k; p.obj.position.copy(p.base).addScaledVector(p.off, ee); p.obj.position.y += p.lift; }); rotor.rotation.y += dt * (1 + 14*ee); var newMode = ee > 0.5 ? 'scan' : 'ok'; if(newMode === 'scan') drawScreen('scan', t); else if(mode !== 'ok') drawScreen('ok', 0); mode = newMode; renderer.render(scene, camera); var w = stage.clientWidth, h = stage.clientHeight, op = Math.max(0, Math.min(1, (ee - 0.6) / 0.3)); parts.forEach(function(p){ if(!p.el) return; (p.label.anchorObj || p.obj).localToWorld(v.copy(p.label.anchor)); v.project(camera); var x = (v.x + 1) / 2 * w, y = (1 - v.y) / 2 * h; p.el.style.transform = 'translate(' + x.toFixed(1) + 'px,' + y.toFixed(1) + 'px) translate(' + (p.label.side < 0 ? '-100%' : '0') + ',-50%) translateX(' + (p.label.side*14) + 'px)'; p.el.style.opacity = op; p.el.classList.toggle('on', op > 0.5); p.el.classList.toggle('hot', p === hot); }); } tick(); } })(); });