Lasse Reinholt

Gadget-kalenderen #8: Glem 3D-printeren - her er 1D-printeren

Med den logik, så er en almindelig blækprinter også 1-dimensionel. Hovedet kører bare fra side til side. Det sker så mens et papir kører under det på den anden led.

Jeg ville nu sige, at et udskrift fra en printer er 2-dimensionelt fordi det er en flade. Og selvom man folder en hat ud af det bliver det ved med at være en 2-dimensionel figur.

En reprap, makerbot og lign. ville jeg sige, lavede 3-dimensionelle figurer, fordi de har volumen og ikke er en flade. Godt nok er der huller i den fordi den printer med tynd smeltet tråd, men det er et ingeniørmæssigt problem; hensigten er at det er en volumen.

Men figuer fra printeren i artiklen vil jeg mene er 1-dimensionelle. Den forsøger ikke at approximere hverken en flade eller volumen. (Ok, jeg må indrømme at der måske kunne findes SVG filer til den, som prøver at forestille en flade eller noget med densitet, men det lader ikke til at være hensigten med printeren, når man ser på eksempel-figurerne).

13. december 2013 kl. 00:04
Gadget-kalenderen #8: Glem 3D-printeren - her er 1D-printeren

Jeg kom i tanker om en god analogi.

Hvis man som person springer ind i punktmængden, hvor mange frihedsgrader har man så for at bevæge sig?

Hvis du sidder inde i et stykke bøjet stålråd, kan du kun vælge at gå frem eller tilbage. Du kan ikke gå op eller ned eller til siderne (forudsat at vi taler om en teoretisk kurve som er 1 matematisk punkt i diameter).

Hvis du skal mødes med en kammerat i et bestemt punkt, og du skal give kørselsvejledning for en, som kun kan bevæge sig frem og tilbage, ja så angiver du 1 tal til ham, fx afstanden fra endepunktet. At angive x, y, z, giver overhovedet ikke mening - det er egenskaber uden for dit univers (det er i hvert fald sådan, man skal tænke på det). Der er altså tale om et R^1 vektorrum af 1 dimension.

Hvis du sidder inde i et stykke papir - uanset om det er fladt eller krøllet eller foldet - så har du 2 frihedsgrader. Du kan gå frem og tilbage, og du kan gå mod højre og venstre. Men du kan ikke gå op og ned. Det er et R^2 vektorrum af dimension 2.

Sidder du inde i et punkt, kan du ikke bevæge dig, og det er et R^0 vektorrum med dimension 0 :-)

11. december 2013 kl. 18:34
Gadget-kalenderen #8: Glem 3D-printeren - her er 1D-printeren

Jeg vil vedholde at 1D betyder at du må beskrive at der findes "noget" i nogle intervaller på 1 akse.

Ja, det er også sådan, de fleste "almindelige" mennesker opfatter det. Men det er ikke den matematiske eller fysiske definition, og heller ikke sådan man ser på det i vektorgrafik i datalogi.

Vores rum er punktmængde i R^3 vektorrummet; for at nå ethvert punkt skal du bruge 3 basisvektorer. De kunne se sådan ud: x = [1, 0, 0], y = [0, 1, 0], z = [0, 0, 1]. For at angive et punkt p tager man en bestemt mængde af x, y og z, fx. p = 5x + 2y + 7*z = [5, 2, 7].

Definitionen af et vektorrums dimension er, at Dim(vektorrum) = [mindste antal basisvektorer man skal bruge for at nå alle punkter]. Vores rum er altså 3-dimensionelt. Fint.

Men, for at nå hvert punkt på en kurve skal man højst bruge 1 basisvektor. Printeren kan kun gå i 1 retning. Den kan trække din ståltråd fremad. Hvert punkt kan angives som et multipla af 1 basisvektor x = [1], som angiver hvor meget ståltråd, der er trukket igennem.

Trådens punkter er et såkaldt 1-dimensionelt underrum af R^3. Udover at hvert punkt har en x, y, z-egenskab, så kan du fx tilføje en skiftende farve til tråden. Så bliver tråden et 1-dimensionelt underrum af R^4. Endivdere kan du måske tilføje temperatur til forskellige områder af tråden, så bliver det et 1-dimensionelt underrum i R^5.

Analogt er et punkt 0-dimensionelt og en flade (krøllet papir, fx) 2-dimensionelt. Jeg vil gerne understrege, at det ikke er nogen niche-agtig eller Rasmus-modsat/trolling-agtig måde at dreje tingene på. Det er den gængse almindelige definition af dimension.

Du kan prøve at søge efter "dimension of vector space".

11. december 2013 kl. 16:22
Gadget-kalenderen #8: Glem 3D-printeren - her er 1D-printeren

Og hvordan ved jeg hvor et punkt på tråden befinder sig i rummet, bare fordi jeg ved at det er 10 cm fra starten af tråden? Tråden kan jo være bukket vilkårligt undervejs, og ergo kender jeg ikke "trådens ligning".

Hvis du slet ikke har bøjet den, er ligningen fx (x y, z)(t) = 0, 0, t. Hvis du laver et skarpt knæk et sted, må du lave en gaffelfunktion, fx:

(x, y, z)(t) = 0, 0, t for t = [0; 10[ (x, y, z)(t) = t, 0, t for t = [10; 20[

Hvis du har bøjet den mere mærkeligt er det ikke sikkert, du kan finde nogen kontinuert ligning for det.

Uanset hvad, så er det i matematik og fysik antal uafhængige variabler, som bestemmer dimensionen. Her er der 't' og derfor er den 1-dimensionel.

11. december 2013 kl. 12:17
Gadget-kalenderen #8: Glem 3D-printeren - her er 1D-printeren

Matematisk set er ting, som er lavet af en tråd, 1-dimensionelle, også selvom de udbreder sig i x, y og z. Fordi alle punkter i figuren kan bestemmes med 1 uafhængig parameter, nemlig afstanden fra trådens start, dvs angives som et 't' i en funktion (x, y, z) = .

Analogt er alting som er foldet af papir er 2-dimensionelt, (x, y, z) = <blah blah udtryk med t og u) og alting formet af fx modelervoks er 3-dimensionelt.

11. december 2013 kl. 10:40
Nyt kæmpehack: 42 millioner dating-passwords lækket

Hvorfor gemmer de ikke passwords hashværdier i stedet?

22. november 2013 kl. 22:04
Bjarne Stroustrup: Lærebøger om C++ er elendige

Normalt, vil der opstå en trådning, hvis du f.eks. har to processer, der søger adgang til samme hukommelsescelle eller ram lager. Ved at anvende "tilfældighedsfunktionen", kan du opnå, at du beskriver, at rækkefølgen som du ønsker adgang er uden betydning, og at du altså vælger en tilfældig funktion, afhængigt af din værdi - der så optimeres, til at være bedste valg, så der undgås låsning. I praksis, medfører det, at du kan skrive parallelt til en hukommelsescelle, eller ram, og at funktionen er tilfældig, afhængigt af rækkefølgen - altså, det sker parallelt, og uden trådning. Du går på kompromiss med determinismen, men opnår parallel adgang, da du tillader tilfældig adgang.

Hvis to kerner skriver i samme cpu clock, så foregår de altså parallelt på alle arkitekturer da det sker til write buffers som flushes til L1 cachen og videre. En tilfældig af dem ender i main memory. Så hvad er det egentlig for en funktionalitet, du prøver at beskrive? :)

Jeg er "ked af", at man i C++11 har indført låse og multitrådning som en del af sproget. Det er imod "ånden" i sproget, som jo netop ikke kræver et runtime system. Hvis det var, kunne jeg altid bruge POSIX låse.

C++11 concurrency compileres til få simple interlock og fence instruktioner. De kalder ingen eksterne funktioner, hverken operativsystemets tråd-API eller noget køretidssystem eller service. Så jeg forstår ikke lige den kritik.

Jeg synes, det er lækkert, da mange systemer ikke understøtter POSIX og kræver særbehandling.

16. december 2012 kl. 19:16
Bjarne Stroustrup: Lærebøger om C++ er elendige

så tror jeg ikke at "locks" findes direkte, i indstruktionssættet, som compileren oversætter til.

C++ compilere indskyder aldrig bus lock-instruktioner automatisk... Det kræver et intrinsics statement i din kildekode (findes tit i trådbiblioteker).

Men ellers er det, du skriver om, jo bare lock free programmering :)

Altså at det er unødvendigt at tage en mutex som låser bussen hvis det, man vil have udelt tilgang til kun er en enkelt variabel som man vil udføre en simpel operation på. I så fald er det tilstrækkeligt med div. reordering fences fremfor bus lock.

Nåja, og ang. det du skrev om compileres analyse af C++ pointere - har du set på unique_ptr?

16. december 2012 kl. 14:28
Bjarne Stroustrup: Lærebøger om C++ er elendige

Lad mig gå i undervisermode en smule: Hvad nu hvis jeg har 2 skrivninger til hukommelsen. Og jeg ved, grundet en semantisk analyse, at de 2 skrivninger er til forskellige dele af hukommelsen? Kan jeg så ikke bare skrive, thi der kan ikke på nogen måde (i den nærliggende fremtid) være en konflikt mellem skrivningerne.</p>
<p>Og hvis jeg har følgende sekvens af instruktioner (bemærk at der ikke er nogen pointere her. Vi har bare et par registre),</p>
<p>A = 2 * X
B = A / 3
A = 9 * Y
Kan jeg så omordne instruktion 1 og 3 i sekvensen?

Problemet findes på to niveauer. C++ compilere må gerne ændre rækkefølgen af læse- og skriveinstruktioner til memory (*a = 123;) i forhold til rækkefølgen i C++ kildekoden hvis de ikke overlapper (hvornår compileren gerne må gætte på at noget ikke overlapper er en anden diskussion).

Men mange processorer (ARM, POWER, UltraSPARC) må også gerne ændre rækkefølgen af læsninger og skrivninger i forhold til instruktionerne. x86/x64 må dog ikke.

Så alt i alt kan trådning være pænt diffust med mindre man bruger bruger locks/barrierer/fences, som både findes på compiler og arkitekturniveau.

16. december 2012 kl. 13:28
Eksperter: Nokias kæmpe-sats på Windows Phone vil lykkes

Du læser ikke hvad jeg skriver. Efter at have haft min Desire i ca ét års tid på STANDARD rom, så var jeg så efterhånden så træt af evindelige crashes, at jeg arbejde mig igennem ROM´er på XDA - og det hjalp ikke.

Min Desire er også ustabil. Et par fejl:

  1. Den stopper tit med at lave GSM fallback fra WCDMA (medførende 0 dækning), så jeg måtte sætte den permanent på "kun GSM".

  2. Crash, crash, crash, crash, reboot, freeze, crash freeze, reboot

  3. Den mister tit evnen til at etablere dataforbindelse, og kun reboot hjælper

  4. GPS'en oplyser nogle gange en displaced position (100 meter længere mod øst, fx) hvorefter kun genstart hjælper.

  5. Proximity sensor deadlock: Meget ofte når jeg løfter røret eller har gang i en samtale, kommer jeg til at lave en uheldig kombination af at fjerne den fra øret, låse/låse op og trykke nogle taster på skærmen eller hardwareknapper.

Jeg har ikke opsnuset den problematiske rækkefølge af events (og nej, det er ikke snavs i sensoren), men det resulterer i, at telefonen forbliver låst selvom jeg fjerner den fra øret. Dermed kan jeg ikke lægge røret eller genstarte.

Eneste løsning er at tage den ud af hylsteret, hive bagklappen af og fjerne batteriet!

Næste gang bliver det en WP7 :)

26. oktober 2011 kl. 15:20
Er koden til din iPhone også 1234?

Jeg har heller ingen pinkode, men "saldomax aktiveret, så det ikke kan gå mere galt end 1000 kr. Beskytter samtidig mod trilliardregninger ved dataroaming.

18. juli 2011 kl. 13:57
Microsoft scorer to nye aftaler om Android-licens

Nu har version2 så nævnt de to mest generelle patenter, fx batteristatus. Hvad er de mere originale patenter så? Geez, jeg ville være villig til rent faktisk at betale et pænt abonnement til en avis som lavede noget mere benarbejde og upartisk viste 2 sider af en sag.

6. juli 2011 kl. 15:16
Få bykort på telefonen i udlandet uden katastrofale roaming-regninger

Desværre mangler OpenStreetMap gader, gadebetegnelser og bygningsbetegnelser rigtig mange steder i verden.

Til Android bruger jeg WorldExplorer, som er gratis og baseret på Google Maps. Jeg markerede et område på kortet, og så gik den igang med at cache 400 MB data (man kan undlade zoomniveau 19, 18 og 17, ellers fylder det for meget).

WorldExplorer er desværre noget skrammel at bruge i praksis, men sammenlignet med et par andre gratis alternativer er det det mindst ringe.

30. juni 2011 kl. 03:50
Kommune om skift til Openoffice: Fra Mercedes til Suzuki Alto

Alt det hersens grafiske effekter er i bund og grund leg uden faglig relevans.

Så mener du vel også, at idræt skal være tør cardiotræning i form af 1500-meterløb, og aldrig rundbold, som jo bare er irrationel fjollen rundt, der ikke øger ens sundhed?

26. juni 2011 kl. 12:12
Forslag kræver personlig registrering af internetbrug på biblioteker

Det var dog en utrolig trang til at registrere og kontrollere alt. Hvad med at den "arbejdsgruppe", der nævnes, begyndte at arbejde i stedet.

24. juni 2011 kl. 03:46
Ding Dong The Robot is Dead

Har du fået solstik?

10. juni 2011 kl. 14:52
Pas på: Utroskabs-datingtjeneste er usikker

Ved at oprette en profil med en smuk kvinde og tale mænd efter munden, kan man let få ofrene til at klikke på links, der installerer malware.

Det er jo at gå over åen efter vand. Hvorfor ikke "oprette en profil med en smuk kvinde og tale mænd efter munden" og dernæst bare afpresse dem med hvad de har skrevet til dig?

9. juni 2011 kl. 14:47
Battle: Er det bedst at udvikle til Android, iPhone eller Windows Phone?

Lige pt. er platformens fremtid ganske enkelt alt for usikker og i lyset af hvor få enheder der er i brug så er det en meget lille gruppe man kan ramme pt. og derved bliver omkostningerne pr. bruger ofte alt for høj.

Det er lige præcis de få brugere og antal apps, der gør den attraktiv at tjene penge på lige nu, da man har mulighed for at komme først med et bestemt produkt.

Se fx hvor stort et antal downloads de første Android widgets til at aktivere/deaktivere lydløs, har fået, mens alle de talløse efterfølgende kloner må kæmpe om brugerne :)

Det er lidt som Klondyke, bare i en meget kort periode :)

6. juni 2011 kl. 14:39
Googles jpg-dræber: WebP viser billedet før det er hentet

Det er synd at man i vores tid med store cpu'er og stor båndbredde stadig eftertragter lossy formater.

Prøv at sidde med et USB modem i din laptop eller med din smartphone uden for storbyerne.

23. maj 2011 kl. 13:35
Googles jpg-dræber: WebP viser billedet før det er hentet

Sidst jeg tjekkede kunne både png, gif og jpeg foretage progressiv indlæsning, så brugeren kunne se billedet inden det var helt in

Progressive JPG billeder indeholder en separat og uafhængig preview udgave af billedet, som har lav opløsning, og fylder måske 20% af det rigtige billede.

Som jeg forstår artiklen, behøver et WebP billede ikke denne separate preview udgave fordi hele billedet kan tegnes i lav opløsning udfra de første chunks af data i filen.

Spørgsmålet er så, om WebP stadig har en kvalitetsforskel i forhold til filstørrelse hvis man ikke anvender progressive billeder...

23. maj 2011 kl. 13:34