Cijfers encoden in minder bytes?

Pagina: 1
Acties:
  • 241 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50
Hoi!
Ik vroeg me af of er een eenvoudig algoritme bestaat om cijfers in minder bits te encoderen dan 'gewoon' in bytes.
Een byte bestaat uit 8 bits, waarmee er 256 mogelijkheden zijn. Als je een getal encode, gebruik je er daar maar 10 van. Volgens mij zou je dus met 4 bytes 16 mogelijkheden hebben, meer dan genoeg, en dus 2x zoveel cijfers kunnen encoden per byte als je een aantal cijferreeksen wilt oversturen, of bijvoorbeeld 2 cijfers (getal tot 100) in 7 bytes.
Bestaan hier eenvoudige algoritmes voor? Het gaat om een javaprogramma'tje dat van een telefoon cijferreeksen moet doorsturen naar een webserver. Aangezien je hier per byte betaalt, is elke byte besparing er een, en zou je hiermee vrij veel kunnen besparen.
Ik begrijp dat ik zelf wat zou kunnen maken, maar ik vroeg me af of er al wat bestaat, of dat er bepaalde keywords zijn waar ik goed op kan zoeken. Ik heb sofar nog niets gevonden, en standaard zipfuncties lijken niet echt iets nuttigs te doen op ditsoort strings.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PanMan schreef op dinsdag 07 november 2006 @ 01:25:
Hoi!
Een byte bestaat uit 8 bits, waarmee er 256 mogelijkheden zijn. Als je een getal encode, gebruik je er daar maar 10 van. Volgens mij zou je dus met 4 bytes bits 16 mogelijkheden hebben, meer dan genoeg, en dus 2x zoveel cijfers kunnen encoden per byte als je een aantal cijferreeksen wilt oversturen, of bijvoorbeeld 2 cijfers (getal tot 100) in 7 bytes.
Euh, hoe sla jij 25 op dan? Dat zou bij jou in 2 bytes moeten, namelijk een "2" en een "5". Bij mij past 25 (en 255 ook nog :P ) in 1 byte ;)

Je haalt bits/bytes door elkaar denk ik. Een byte = 8 bits (bruggetje: "By eight" ~ "Byte")
En anders haal je de "ASCII-representatie" door elkaar met de binaire representatie/waarde.

Even een tabelletje voor je:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1   00000001
2   00000010
3   00000011
4   00000100
5   00000101
...
10  00001010
11  00001011
12  00001100
13  00001101
14  00001110
...
25  00011001
...
253 11111101
254 11111110
255 11111111


En mocht ik je toch onverhoopt verkeerd begrijpen, kijk dan eens naar BCD :Y)

Wat je uiteindelijk dus gewoon wil is je cijfer in "binary mode" doorgeven aan de webserver en dus niet als ASCII.

Hoe stuur je die cijferreeksen overigens naar de server? In de URL met een GET?

[ Voor 109% gewijzigd door RobIII op 07-11-2006 01:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • BèR
  • Registratie: Mei 2002
  • Laatst online: 20-11-2022
Ja, inderdaad, binair doorgeven is te doen, mits de ontvangende partij dat weer naar losse decimale cijfers kan omzetten als dat nodig is. Met 4 bits words of een VBR schema (sommige cijfers 3, andere 4 bits) valt het redelijk optimaal te doen.

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 15:46
Je kunt natuurlijk wel gaan shiften e.d., zodat je bijvoorbeeld 2 4-bits waarden in een byte kwijt kan.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Binary coded decimals (4 bits per decimaal) worden wel vaker gebruikt hoor, de x86 CPU heeft zelfs speciale instructies om ermee te rekenen. En "of daar algoritmes voor bestaan", tja, het is vrij basic, ik denk niet dat iemand ooit moeite heeft gedaan dat soort dingen te bespreken in een paper oid :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MadMarky
  • Registratie: Augustus 2001
  • Niet online

MadMarky

Begint eer ge bezint

Die 4-bits waarden worden ook wel een nibble genoemd, via google zijn vast wel wat voorbeelden te vinden over het gebruik van nibbles icm Java.

🖥️ | 🚗


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50
RobIII schreef op dinsdag 07 november 2006 @ 01:29:
Euh, hoe sla jij 25 op dan? Dat zou bij jou in 2 bytes moeten, namelijk een "2" en een "5". Bij mij past 25 (en 255 ook nog :P ) in 1 byte ;)
Je haalt bits/bytes door elkaar denk ik. Een byte = 8 bits (bruggetje: "By eight" ~ "Byte")
Volgens mij weet ik wel hoe bits en bytes werken, maar wellicht leg ik het niet goed uit. Wat ik bedoel: Als ik hier een cijfer intype (de 2 uit jou 25, bv), dan kost dat, in de transfer en de GoT database, 1 byte, omdat het een van de 256 mogelijke inputs is. Normaal, als tekst, wordt jou 25 dus in 2 bytes opgeslagen. Als ik echter vantevoren weet dat de input alleen uit cijfers (en een scheidingsteken) zal bestaan, is het zonde om die zo te coderen dat er nog 245 mogelijkheden zijn, terwijl ik weet dat die niet gebruikt gaan worden. Ik vroeg me dus af of dat efficienter kan.
BCD ga ik naar kijken, het lijkt dat dat inderdaad iets heeft van wat ik zoek.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PanMan schreef op dinsdag 07 november 2006 @ 01:43:
BCD ga ik naar kijken, het lijkt dat dat inderdaad iets heeft van wat ik zoek.
Trust me (us :P ), dat is wat je zoekt ;)
edit:

Hier stond onzin; het is al laat :X

Ook in BCD heb je nog wat "slack" in je beschikbare ruimte; je gebruikt de bits niet optimaal. wil je ze optimaal gebruiken dan kun je uiteindelijk nog het beste gewoon de "binary" value sturen; dat dat raar uit ziet in ASCII is jammer dan.

Zo past het getal 34423445452 (11 digits) in 5 bytes:
code:
1
00001000 00000011 11001100 00010111 11001100

De ASCII representatie is dan iets "onleesbaars", maar exact dezelfde waarde (duh; het draait om een representatie van bits)

Om wat voor "cijferreeksen" gaat het?

[ Voor 36% gewijzigd door RobIII op 07-11-2006 01:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • burne
  • Registratie: Maart 2000
  • Niet online

burne

Mine! Waah!

RobIII schreef op dinsdag 07 november 2006 @ 01:48:
Trust me (us :P ), dat is wat je zoekt ;)
Als je 11 mogelijkheden (10 cijfers en een separator) in 4 bits encode verspil je 0.6875 bit. Da's zonde en meestal niet nodig. :P

I don't like facts. They have a liberal bias.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
burne schreef op dinsdag 07 november 2006 @ 01:51:
[...]

Als je 11 mogelijkheden (10 cijfers en een separator) in 4 bits encode verspil je 0.6875 bit. Da's zonde en meestal niet nodig. :P
Dat zeg ik... ;)

[ Voor 13% gewijzigd door RobIII op 07-11-2006 01:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

.oisyn schreef op dinsdag 07 november 2006 @ 01:41:
Binary coded decimals (4 bits per decimaal) worden wel vaker gebruikt hoor, de x86 CPU heeft zelfs speciale instructies om ermee te rekenen. En "of daar algoritmes voor bestaan", tja, het is vrij basic, ik denk niet dat iemand ooit moeite heeft gedaan dat soort dingen te bespreken in een paper oid :)
Dat heet hexidecimaal :)

Acties:
  • 0 Henk 'm!

  • Ricvdp
  • Registratie: Juni 2005
  • Laatst online: 19-09 17:21
HEX != BCD.

Acties:
  • 0 Henk 'm!

Verwijderd

Mocht de cijferreeks die je gaat verzenden van een vaste lengte zijn (bijvoorbeeld iedere keer 10 getallen) dan is er een eenvoudige mapping te maken naar de "unsigned" waarde van een getal. Daar valt verder niet veel aan te minimaliseren.

Mocht de lengte van de cijferreeks erg variëren dan is het ook mogelijk om een variabele lengte integer te gebruiken om de data te representeren. Hierbij wordt er bijvoorbeeld 1 bit per byte gebruikt als vlag om aan te geven of de volgende byte ook nog deel uit maakt van het getal.

Ofwel er zijn vele verschillende manier om een cijferreeks te mappen op een aantal bytes.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Dat is niet waar.

BCD is een andere representatie van de getallen, maar is geen ander tallenstelsel. BCD kent geen A tot en met F.

Voorbeeld: 127 in bits in BCD notatie: 0001 0010 0111
0001 = 1
0010 = 2
0111 = 7
Letterlijk dus elk decimaal getal in bits gerepresenteerd.

127 in HEX = 7F. 7F gerepresenteerd in bits: 1111111. Toch wel een klein verschil dus :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
PanMan schreef op dinsdag 07 november 2006 @ 01:43:
Normaal, als tekst, wordt jou 25 dus in 2 bytes opgeslagen.
Beetje offtopic, maar wat je hier zegt is ook niet altijd waar, ivm character encoding. 1 teken != 1 byte.

{signature}


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Voor wie interesse heeft in het rekenen in BCD in hogere programmeertalen:
Jones on BCD Arithmetic

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, maar de BCD string in hexadecimale notatie geeft wel precies dezelfde tekstuele representatie als dat getal in decimale notatie.

Getal in decimaal: 123
Dat wordt geencodeerd als 0001 0010 0011
In hex is dat: 123

.edit: en het wordt tijd dat ik eens topics ga lezen voor ik reageer :+
Gisteren had ik overigens nog een mooi verhaaltje over huffman coding getikt, maar mijn provider besloot dat het wel handig was om op dat moment onderhoud te gaan plegen, dus mijn verhaaltje is naar /dev/null. Maar goed, hier kun je daar meer over lezen :Y)

[ Voor 34% gewijzigd door .oisyn op 07-11-2006 11:23 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50
RobIII schreef op dinsdag 07 november 2006 @ 01:29:
[...]
Hoe stuur je die cijferreeksen overigens naar de server? In de URL met een GET?
Dat was wel mijn bedoeling, ja. Maar deze vraag heeft me wel aan het denken gezet: Een GET kan natuurlijk niet alle karakters aan. En om het te gaan urlencoden, levert ws in totaal alleen maar een verlies op... Toch nog maar's kijken of ik in de praktijk hier echt iets mee opschiet.. Binnenkort maar's wat voorbeeldjes coden...

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • Paul C
  • Registratie: Juni 2002
  • Laatst online: 14:02
PanMan schreef op dinsdag 07 november 2006 @ 15:01:
[...]


Dat was wel mijn bedoeling, ja. Maar deze vraag heeft me wel aan het denken gezet: Een GET kan natuurlijk niet alle karakters aan. En om het te gaan urlencoden, levert ws in totaal alleen maar een verlies op... Toch nog maar's kijken of ik in de praktijk hier echt iets mee opschiet.. Binnenkort maar's wat voorbeeldjes coden...
URLencoden schiet je niets mee op, want dan ga je een byte vervangen door drie bytes. Het is misschien wel interessant om je eigen codering toe te passen:
"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."
Dat levert dus 10+26+26+11=73 bruikbare bytewaardes. Maak hiervoor je eigen encoder en decoder (is niet zo moeilijk) en je kunt 2log(73n) bit binaire gegevens kwijt in n-bytes URL.

Als je hier zoveel moeite voor gaat doen, dan is het natuurlijk ook interessant om de rest van je URL zo kort mogelijk te houden, dus ik weet niet wat je serverside voor mogelijkheden hebt, maar een korte domeinnaam, geen 'www.' en een goede mod_rewrite (oid) kunnen je ook al veel besparen!

edit: Base64 is natuurlijk ook geen slecht idee:
http://en.wikipedia.org/wiki/Base64#URL_Applications

[ Voor 3% gewijzigd door Paul C op 07-11-2006 15:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hexadecimaal is van 1 tot en met 16. Je zou dit in 4 bits kunnen opslaan ({42}4x4=16). Zoiets heet compressie en daar hebben we het ook over. Dat bedoelde ik dus :)

Dit topic lijkt erg op het LZ77 principe (Lempel-Ziv) welke op NTFS gebruikt wordt als compressie. Hier gaat het om strings van vaak vvoorkomende reeksen en hier kan de ASCII tabel voor gebruikt worden om maar 1-8 bit en niet altijd 8-bit te gebruiken voor een teken. De E en de N komen het meeste voor en krijgen de minste aantal bits toegewezen.
Van BCD heb ik niet zo heel veel kaas gegeten. Ik weet wel dat LZ77 een van de snelste vormen van compressie is zonder overhead en niet extreem rekenintensief.

een gecomprimeerde NTFS partitie kan in veel gevallen zelfs sneller zijn dan zonder compressie. De disk levert de data te traag aan om de CPU op 100% te zetten.

Heel rekenintensieve compressie met grote bibliotheken zoals PPMd of LZMA zijn traag met encoden en decoden en daardoor minder geschikt voor dagelijks gebruik. Ook kost het veel geheugen om terug te coderen wat bij LZ77 niet het geval is (64 KB bij LZ77).

PS: Mijn schijven zijn altijd gecomprimeerd geweest en ik merk geen verschil met andere identieke systemen zonder compressie. UT2004 is er zeker vlugger door geworden en ook 3,4 GB kleiner.

[ Voor 7% gewijzigd door Verwijderd op 07-11-2006 18:35 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
PanMan schreef op dinsdag 07 november 2006 @ 15:01:
[...]


Dat was wel mijn bedoeling, ja. Maar deze vraag heeft me wel aan het denken gezet: Een GET kan natuurlijk niet alle karakters aan. En om het te gaan urlencoden, levert ws in totaal alleen maar een verlies op... Toch nog maar's kijken of ik in de praktijk hier echt iets mee opschiet.. Binnenkort maar's wat voorbeeldjes coden...
Als elke bit zo belangrijk is kan je dan niet beter gewoon een simpel protocolletje schrijven. Dan kan je nog veel meer besparen.
Als dat niet mogenlijk is kan je denk beter gewoon Post variabelen versturen en dan gewoon in binaire vorm.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

tjah, het lijkt me dat adaptive huffman encoding voor dit geval wel het meest geschikt is.

Misschien dat Runlength Encoding bovenop BCD ook wel iets heeft.

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op dinsdag 07 november 2006 @ 18:33:
Hexadecimaal is van 1 tot en met 16. Je zou dit in 4 bits kunnen opslaan ({42}4x4=16). Zoiets heet compressie en daar hebben we het ook over. Dat bedoelde ik dus :)
Dat heet absoluut geen compressie en heeft daar ook weinig mee te maken. Waar het alles mee te maken heeft is grondtallen.
Dit topic lijkt erg op het LZ77 principe (Lempel-Ziv) welke op NTFS gebruikt wordt als compressie. Hier gaat het om strings van vaak vvoorkomende reeksen en hier kan de ASCII tabel voor gebruikt worden om maar 1-8 bit en niet altijd 8-bit te gebruiken voor een teken. De E en de N komen het meeste voor en krijgen de minste aantal bits toegewezen.
Van BCD heb ik niet zo heel veel kaas gegeten. Ik weet wel dat LZ77 een van de snelste vormen van compressie is zonder overhead en niet extreem rekenintensief.
ZUlke rocketsience is LZ77 ook weer niet hoor ;) (komt zelfs al uit '77), daarnaast is een andere toepassing wel iets bekender. Iedereen kent immers wel de LZW gebruikende GIF bestanden

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
H!GHGuY schreef op dinsdag 07 november 2006 @ 18:59:
tjah, het lijkt me dat adaptive huffman encoding voor dit geval wel het meest geschikt is.
Da's is nog enigzins te doen. Misschien is adaptief coderen helemaal niet nodig (maakt het een stuk makkelijker om een efficiënt algoritme te maken).
Misschien dat Runlength Encoding bovenop BCD ook wel iets heeft.
Ik denk dat dat voor geen meter opschiet. Je hebt dan minstens vier dezelfde cijfers in een telefoonnummer nodig om twee dezelfde bytes te krijgen (én die cijfers moeten goed gealignd zijn), en dat is vrij zeldzaam.

Ik denk dat concreet BCD gewoon het praktisch is, of de TS moet handig een zip-library kunnen gebruiken. Zelf een compressor implementeren lijkt me eerlijk gezegd gewoon veel te veel werk, en ook een beetje zinloos.

edit:
Verwijderd schreef op dinsdag 07 november 2006 @ 18:33:
Dit topic lijkt erg op het LZ77 principe (Lempel-Ziv) welke op NTFS gebruikt wordt als compressie. Hier gaat het om strings van vaak vvoorkomende reeksen en hier kan de ASCII tabel voor gebruikt worden om maar 1-8 bit en niet altijd 8-bit te gebruiken voor een teken. De E en de N komen het meeste voor en krijgen de minste aantal bits toegewezen.
Dit laatste is nu juist wat LZ'77 niet doet. Het coderen van symbolen zo dat vaak-voorkomende kortere codes krijgen is entropie-codering (.oisyn noemde al Huffman codering), maar LZ'77 is een dictionary-coder. Het principe daarbij is als een substring meerdere keren voorkomt, je 'm maar één keer hoeft te versturen en je er daarna referenties naar kunt coderen, waarmee je ruimte kunt besparen als de substring langer is dan een referentie ernaar.

Entropie-codering lijkt mij hier veel zinniger; LZ'77 is vooral nuttig als de invoer zelf vaak-voorkomende substrings bevat (in de praktijk zijn compressors zoals zip en LZMA een combinatie van een dictionary-encoder en een entropie-encoder).

[ Voor 40% gewijzigd door Soultaker op 07-11-2006 20:38 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

PanMan schreef op dinsdag 07 november 2006 @ 01:25:
Het gaat om een javaprogramma'tje dat van een telefoon cijferreeksen moet doorsturen naar een webserver. Aangezien je hier per byte betaalt, is elke byte besparing er een, en zou je hiermee vrij veel kunnen besparen.
Hoeveel bytes denk je te gaan besparen en hoeveel kost de tijd die jij hier inmiddels al aan hebt besteed en nog al aan zal moeten besteden?

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Confusion schreef op dinsdag 07 november 2006 @ 20:58:
[...]

Hoeveel bytes denk je te gaan besparen en hoeveel kost de tijd die jij hier inmiddels al aan hebt besteed en nog al aan zal moeten besteden?
Dat vraag ik me inmiddels ook af, los van het feit dat ik me niet kan voorstellen dat 1 byte zo duur is. Ik neem aan dat je per KB (of zelfs per MB ) betaalt?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50
Tuurlijk vallen de kosten wel een beetje mee. Maar als je hiermee je traffic zou kunnen halveren, zou het toch leuk zijn, toch? Zeker als je, per MB, tot 15E betaald, bij GPRS verkeer. Het gaat om een app die continu zou draaien, en bijvoorbeeld elke min een update zou doen.
Bovendien vind ik het gewoon wel leuk om er over na te denken, het hoeft niet altijd even efficient te zijn, het moet ook een beetje leuk blijven. :)
Maar ik zit wel te twijfelen of het in de praktijk efficient is om hier naar te kijken: Een HTTP request is al snel 50 bytes, en daar kan je al niet op besparen (wel met een korte hostname, enzo, maar je houdt een bepaald minimum).

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949

Pagina: 1