Programmeringstråden
70 inlägg
• Sida 2 av 3 • 1, 2, 3
lar66 skrev:för att bli en "mästare" (va e de´?) så måste man lägga ned 10.000 timmar på ett område. Alltså drygt 2 år om man ägnar nästan all vaken tid till att lära sig Java, Python, reguljära uttryck...
Den nivån har jag för länge sedan passerat kring operativsystem, assembler och C++. Det var nu ca 23 år sedan jag började med operativsystemet.
rdos skrev:lar66 skrev:Det är väl inte bara jag som tyckte att Motorola 68000 -arkitekturen var överlägsen Intel 80xx vad gällde assemblerprogrammeringen?
Vet inte då jag inte programmerat Motorola.lar66 skrev:Jag lyckades aldrig riktigt begripa hur minnessegmenteringen fungerade på Intelprocessorerna. Motorola hade en mycket mer lättförståelig kontruktion vilket gjorde assemblerkoden mer logisk.
Håller inte med. Intels 32-bitars arkitektur är den bästa som någonsin gjorts. Synd bara att såväl Intel själva (Itanium) som AMD (x86-64) skulle sabba alltsammans i 64-bitsvärlden.lar66 skrev:När jag nu förtiden läser om Intelprocessorer så känns det som att det sitter en dinosauriehjärna från slutet av 70-talet någonstans där inne, även i en Sandy Bridge -processor...
Känns snarare som att moderna processorer är dinosaurierna, vilket i grunden är ett problem med C-kompilatorer som inte klarar av avancerad minneshantering. Detta gör att moderna operativsystem är dinosaurier ifrån 70-talet med högvis av buggar p.g.a. obefintliga skydd i processorn.
32-bitarsarkitekturen har jag ingen koll på. Vad jag tänker på är den del av processorn som finns kvar från 8/16-bitars-tiden: http://duartes.org/gustavo/blog/post/memory-translation-and-segmentation, se ex avsnittet
"As programs started getting bigger and outgrowing 64K segments, segmentation and its strange ways complicated development for the x86 platform. This may all sound quaintly odd now but it has driven programmers into the wretched depths of madness." .
Man kan sedan jämföra med Motorola och NS som en hade betydligt "renare" hantering av minnet. Hela vägen från 68008-68020 fungerade samma logiska princip hos Motorola, den enda egentliga skillnaden var databussens bredd.
Betänk också datorerna som fanns ett tag. Amiga, Atari, Mac... Och där stod IBM XT/AT och harvade, med en massa egendomliga principer för minneshantering: EMS, HMA, EMM, UMA, "Conventional", "Unreal"...
En likvärdigt galen konstruktion (men ur hårdvaruperspektiv) hade Pentium 4 jämfört med samtida AMD. P4 körde s.a.s. med 1:ans växel i 200 för att hålla jämna steg med AMD XP/64, samtidigt som P4 förbrukade otroligt mycket energi.
Var det för att marknadsföringsnissarna skullle kunna skryta med 3GHz? Jag servade en 1.4GHz P4 (den första versionen?). Det var den långsammaste datorn som jag sett på nästan 5 år. Den krossades prestandamässigt av en 1.2GHz P3.
Sandy Bridge "on the other hand" är bra! Får se vad Bulldozer från AMD kan göra (inte speciellt mycket fruktar jag), tills dess kan Intel ha hunnit göra ytterligare ett motdrag. Konkurrens är bra! Men AMD har en jäkligt svår situation nu.
Jo, du är erkänt bra på operativsystem, har inte skuggan av dina djupare kunskaper. Jag håller mig nog till vanlig programmering i Linux... Synd att inte BeOS eller OS/2 finns kvar, de hade större potential än Windows, men bl.a. IBM sjabblade tyvärr bort chansen. Eventuellt med lite fult spel från Microsoft.
När Intels 32-bitarsarkitektur kom hade jag "släppt taget om" att lära mig Intel-teknik eftersom jag helt enkelt trodde att Motorola skulle vinna "slaget". Itanium är också en "shit"-kontruktion. Hur många förutom HP gillar den processorn?
lar66 skrev:32-bitarsarkitekturen har jag ingen koll på. Vad jag tänker på är den del av processorn som finns kvar från 8/16-bitars-tiden: http://duartes.org/gustavo/blog/post/memory-translation-and-segmentation, se ex avsnittet
"As programs started getting bigger and outgrowing 64K segments, segmentation and its strange ways complicated development for the x86 platform. This may all sound quaintly odd now but it has driven programmers into the wretched depths of madness." .
Jo, det är sant. Fast det var M$ missfoster (MS-DOS) som hade en stor skuld till detta helvete. Det var p.g.a. och deras tidigare Windows-versioner som byggde på detta missfoster som jag började med RDOS. För hade bara MS-DOS designats på ett bättre sätt så skulle övergången till 32-bitar varit mycket enklare.
lar66 skrev:Man kan sedan jämföra med Motorola och NS som en hade betydligt "renare" hantering av minnet. Hela vägen från 68008-68020 fungerade samma logiska princip hos Motorola, den enda egentliga skillnaden var databussens bredd.
Hos Intel så höll man snarare bakåtkompabilitet (och binärkompabilitiet), vilket inte var något lätt att ordna med tanke på de jätteskillnader som fanns mellan hur MS-DOS kördes (real mode), och hur segmentering i 32-bitar fungerar. Just att man kan blanda en massa olika minnesmodeller i samma system är ganska häftigt, även om inga moderna OS använder denna finess, vilket framförallt beror på portabilitetshänsyn.
lar66 skrev:Betänk också datorerna som fanns ett tag. Amiga, Atari, Mac... Och där stod IBM XT/AT och harvade, med en massa egendomliga principer för minneshantering: EMS, HMA, EMM, UMA, "Conventional", "Unreal"...
För att inte tala om alla möjliga DOS-extenders som sällan gick att samköra.
lar66 skrev:En likvärdigt galen konstruktion (men ur hårdvaruperspektiv) hade Pentium 4 jämfört med samtida AMD. P4 körde s.a.s. med 1:ans växel i 200 för att hålla jämna steg med AMD XP/64, samtidigt som P4 förbrukade otroligt mycket energi.
Var det för att marknadsföringsnissarna skullle kunna skryta med 3GHz? Jag servade en 1.4GHz P4 (den första versionen?). Det var den långsammaste datorn som jag sett på nästan 5 år. Den krossades prestandamässigt av en 1.2GHz P3.
Jo, Intel har oxå haft en massa hyss för sig.
lar66 skrev:Sandy Bridge "on the other hand" är bra! Får se vad Bulldozer från AMD kan göra (inte speciellt mycket fruktar jag), tills dess kan Intel ha hunnit göra ytterligare ett motdrag. Konkurrens är bra! Men AMD har en jäkligt svår situation nu.
Jo, fast än så länge så är deras processorer bra mycket billigare än Intels, för ungefär samma prestanda. Däremot så verkar de ha tappat på "hi-end" sidan. Intels hyperthreading är å andra sidan ett rent skämt. Det får det att verka som att processorn har dubbelt så många kärnor, men i realiteten så går det inte ett dugg snabbare.
lar66 skrev:Jo, du är erkänt bra på operativsystem, har inte skuggan av dina djupare kunskaper. Jag håller mig nog till vanlig programmering i Linux... Synd att inte BeOS eller OS/2 finns kvar, de hade större potential än Windows, men bl.a. IBM sjabblade tyvärr bort chansen. Eventuellt med lite fult spel från Microsoft.
Problemet var väl att Microsoft var för mycket insyltad i OS/2, och då på eget bevåg kunde lägga ned projektet.
lar66 skrev:När Intels 32-bitarsarkitektur kom hade jag "släppt taget om" att lära mig Intel-teknik eftersom jag helt enkelt trodde att Motorola skulle vinna "slaget". Itanium är också en "shit"-kontruktion. Hur många förutom HP gillar den processorn?
Ja. Jag misstänker att man försökte skaffa sig monopol på processormarknaden för PC igen genom att lansera & patentera en helt ny instruktionsuppsättning, men deras fatala misstag var att tro att emulering av x86 skulle ha någon som helst chans på marknaden med AMD som stark konkurrent.
Här är ett problem för "riktiga" assemblerprogrammerare.
Anta att du har följande maskinkod:
9A gg gg 00 00 02 00 90 90
Som betyder:
call far 0002:0000gggg
nop
nop
och vill komma till den här maskinkoden:
0E E8 oo oo oo oo
Som betyder:
push cs
call oooooooo
Förutsättning:
1. Man får bara modifiera 1, 2 eller 4 konsekutiva byte i taget.
2. Alla mellansteg måste ge protection fault på första byten. (första steget ger protection fault genom att selector 2 alltid är ogiltig), eller ha nop som första byte och ge korrekt resultat.
3. Sista steget måste ha minst en nop (90) först i sekvensen.
4. Man får anta att selektor 0,1,2,3 och större än F000 är ogiltiga (och alltså ger protection fault).
Anta att du har följande maskinkod:
9A gg gg 00 00 02 00 90 90
Som betyder:
call far 0002:0000gggg
nop
nop
och vill komma till den här maskinkoden:
0E E8 oo oo oo oo
Som betyder:
push cs
call oooooooo
Förutsättning:
1. Man får bara modifiera 1, 2 eller 4 konsekutiva byte i taget.
2. Alla mellansteg måste ge protection fault på första byten. (första steget ger protection fault genom att selector 2 alltid är ogiltig), eller ha nop som första byte och ge korrekt resultat.
3. Sista steget måste ha minst en nop (90) först i sekvensen.
4. Man får anta att selektor 0,1,2,3 och större än F000 är ogiltiga (och alltså ger protection fault).
Jag är inte riktigt i form för övningen just, nu undrar ett par saker:rdos skrev:Här är ett problem för "riktiga" assemblerprogrammerare.
Anta att du har följande maskinkod:
9A gg gg 00 00 02 00 90 90
Som betyder:
call far 0002:0000gggg
nop
nop
och vill komma till den här maskinkoden:
0E E8 oo oo oo oo
Som betyder:
push cs
call oooooooo
Förutsättning:
1. Man får bara modifiera 1, 2 eller 4 konsekutiva byte i taget.
2. Alla mellansteg måste ge protection fault på första byten. (första steget ger protection fault genom att selector 2 alltid är ogiltig), eller ha nop som första byte och ge korrekt resultat.
3. Sista steget måste ha minst en nop (90) först i sekvensen.
4. Man får anta att selektor 0,1,2,3 och större än F000 är ogiltiga (och alltså ger protection fault).
1) vad menar du med "gg.." i koden? Hexadec = 0..F, hexadec brukar betecknas med "x".
2) ( 0E= push, cs , E8 = call ? )
På vilken adress finns
push cs
call oooooooo
som man vill komma till?
Känns lite jobbigt att de lägre bitarna i adressen kommer först... Vad är fördelen med det? Lite som RPN på HP miniräknare. Jag har iofs programmerat lite Forth.
lar66 skrev:Känns lite jobbigt att de lägre bitarna i adressen kommer först... Vad är fördelen med det? Lite som RPN på HP miniräknare. Jag har iofs programmerat lite Forth.
Det har med bakåtkompatibiliteten i x86 att göra. Tanken var väl att om man börjar med LSB så behöver man bara lägga till ett varierande antal bytes, beroende på hur långa adresser man använder. Det finns en viss logik i det, men om det egentligen är nödvändigt på något sätt kan väl diskuteras. Det medgav förmodligen enklare kretslösningar i alla fall för tidigare generationer processorer.
lar66 skrev:1) vad menar du med "gg.." i koden? Hexadec = 0..F, hexadec brukar betecknas med "x".
Det är något gydtyckligt värde. Exemplet är från ett verkligt problem, och då är gggg ett 16-bitars "gate"-nummer. Det kan alltså anta vilka värden som helst, och det ska fungera oavsett vad som står där.
lar66 skrev:2) ( 0E= push, cs , E8 = call ? )
Exakt. E8 är ett "near call", alltså utan segmentregister.
lar66 skrev:På vilken adress finns
push cs
call oooooooo
som man vill komma till?
I det verkliga exemplet så är oooooooo destinationsaddressen, och kan liksom gggg vara vad som helst.
För att förtydliga. Man ska alltså modifiera maskinkoden 1,2 eller 4 byte i taget så att man får slutkoden. I det verkliga exemplet så patchar man alltså koden ifrån en ogiltig operation till ett near call till någon address (oooooooo) som finns definierad i en "gate"-tabell (index gggg).
Programmeringstråden
Mästare
För att man ska kunna bli mästare inom t.ex. C++-programmering krävs
det att man har hållit på med det i minst 10 000 timmar. Det spelar
ingen roll om man har talang för det. Det krävs ändå minst 10 000
timmar. Det är för att hjärnan behöver den tiden för att ta till
sig det man håller på med.
M.V.H. john20
För att man ska kunna bli mästare inom t.ex. C++-programmering krävs
det att man har hållit på med det i minst 10 000 timmar. Det spelar
ingen roll om man har talang för det. Det krävs ändå minst 10 000
timmar. Det är för att hjärnan behöver den tiden för att ta till
sig det man håller på med.
M.V.H. john20
Re: Programmeringstråden
Nästan allt kräver 10000 timmar för att man ska bli mästare på.
Anlednigen är för att det bara är få som klarar av så lång tid.
Däremot finns det inte människor som fötts med talang.
Anlednigen är för att det bara är få som klarar av så lång tid.
Däremot finns det inte människor som fötts med talang.
Re: Programmeringstråden
Möjligen inte med talang, men folk föds med och får definitivt olika fallenhet för det, precis som det mesta annat.
Re: Programmeringstråden
Visst, och kanske man kan födas med handikapp som gör det mycket svårare i något stadie. Sen kan man födas i rätt miljö som lär spela väldigt stor roll för att få in många timmar, inte minst i barndomen då man lär sig snabbast,hjärnan utvecklas och man inte själv behöver oroa sig över det vardagliga.nallen skrev:Möjligen inte med talang, men folk föds med och får definitivt olika fallenhet för det, precis som det mesta annat.
Men att det ska vara en speciell typ av människor som blir mästare tror jag är en vanlig missuppfattning, mer än att man ska vara enveten. Förutsättningarna bör vara det som avgör om man kan hålla på dessa timmar.
Kanske är svårt för en ordblind att bli mästare på rättstavning iofs.
Re: Programmeringstråden
Man kanske kan bli mästare på att hantera språket C++ på 10k timmar, men man blir ju knappast en mästare på allting som har med programmering att göra på den lilla tiden.
Tar säkert 10k timmar bara för att t.ex bemästra alla data structures
Tar säkert 10k timmar bara för att t.ex bemästra alla data structures
Re: Programmeringstråden
pubic interface IComponent {public void add(); public void remove(); public IComponent getChild(int i); public void doStuff();}
public class Composite implements IComponent{List <IComponent> partWhole;
public void setPartWhole(IComponent partWhole){this.partWhole=partWhole;} public void add(IComponent component){partWhole.add(component);} public IComponent getChild(int i){return partWhole.get(i);} public void doStuff(){WorldPeace.bringPeaceToThisPartOfTheWorld();for(IComponent c:partWhole){c.doStuff();}}
}
public abstract class DefaultComponent implements IComponent{
public void doStuff(){
throw UnsupportedOperationException();
}
public void add(){
throws UnsupportedOperationException();
}
//samma sak för alla metoder.
}
public class Child() extends DefaultComponent{
doStuff(){
WorldPeace.infectTheWorldWithRebellionAndWarFromLeafToRoot();
}
}
Vill man plocka subträd får ma skapa en get metod för partWhole i Composite klassen.
Orkade inte lägga in in Default abstrakt klass mellan interfacet och implementatörerna.
...
public class Composite implements IComponent{List <IComponent> partWhole;
public void setPartWhole(IComponent partWhole){this.partWhole=partWhole;} public void add(IComponent component){partWhole.add(component);} public IComponent getChild(int i){return partWhole.get(i);} public void doStuff(){WorldPeace.bringPeaceToThisPartOfTheWorld();for(IComponent c:partWhole){c.doStuff();}}
}
public abstract class DefaultComponent implements IComponent{
public void doStuff(){
throw UnsupportedOperationException();
}
public void add(){
throws UnsupportedOperationException();
}
//samma sak för alla metoder.
}
public class Child() extends DefaultComponent{
doStuff(){
WorldPeace.infectTheWorldWithRebellionAndWarFromLeafToRoot();
}
}
Vill man plocka subträd får ma skapa en get metod för partWhole i Composite klassen.
Orkade inte lägga in in Default abstrakt klass mellan interfacet och implementatörerna.
...
Re: Programmeringstråden
Vet inte riktigt om det jag behöver hjälp med går in här då meeen...
Jag har två css-filer.
Men de använder heeelt annorlunda css-språk, detta gör mig frustrerad.
Kopierar en snutt av båda:
KOD1:
/*****LAYOUT*****/
body { background: #48411d; color: #c0c49a; font-family: Verdana, Arial, Tahoma, sans-serif; font-size: 11px; margin: 0; padding: 0; }
#container { background: #373116; width: 1040px; min-width: 800px; margin: 0 auto; padding: 0 0 10px 15px; border: #000 1px solid; overflow: hidden; }
#container_wide { background: #373116; width: 97%; float: left; margin: 0 auto; padding: 0 0 0 10px; }
#content { background: #000; width: 500px; float: left; margin: 0 0 10px 0; padding: 0; clear: both; }
#content_extra { background: #000; width: 650px; float: left; margin: 0 0 10px 0; padding: 0 0 20px 20px; clear: both; }
#content_page { background: #000; width: 700px; float: left; margin: 0 0 10px 0; padding: 0 0 10px 0; clear: both; }
KOD2:
/* Backgrounds */
html {
color:#404040;
}
#outer {
background:url(images/right.jpg) no-repeat top right fixed;
}
body {
background:url(images/bottom.jpg) repeat-x bottom left fixed;
color:#404040;
}
Vad har jag missat?
Jag har två css-filer.
Men de använder heeelt annorlunda css-språk, detta gör mig frustrerad.
Kopierar en snutt av båda:
KOD1:
/*****LAYOUT*****/
body { background: #48411d; color: #c0c49a; font-family: Verdana, Arial, Tahoma, sans-serif; font-size: 11px; margin: 0; padding: 0; }
#container { background: #373116; width: 1040px; min-width: 800px; margin: 0 auto; padding: 0 0 10px 15px; border: #000 1px solid; overflow: hidden; }
#container_wide { background: #373116; width: 97%; float: left; margin: 0 auto; padding: 0 0 0 10px; }
#content { background: #000; width: 500px; float: left; margin: 0 0 10px 0; padding: 0; clear: both; }
#content_extra { background: #000; width: 650px; float: left; margin: 0 0 10px 0; padding: 0 0 20px 20px; clear: both; }
#content_page { background: #000; width: 700px; float: left; margin: 0 0 10px 0; padding: 0 0 10px 0; clear: both; }
KOD2:
/* Backgrounds */
html {
color:#404040;
}
#outer {
background:url(images/right.jpg) no-repeat top right fixed;
}
body {
background:url(images/bottom.jpg) repeat-x bottom left fixed;
color:#404040;
}
Vad har jag missat?
Re: Programmeringstråden
Kodnr 1 verkar använda sig av nån typ av java?! vad vet jag?!
kodnr2 verkar mer vara det jag kände till innan, men jag vill korsar infon mellan dessa.
Vill ha färgkoderna och beteenderna kring färger från kodnr2 till kodnr1.
Det är lite hur jag gör det som förbryllar mig
kodnr2 verkar mer vara det jag kände till innan, men jag vill korsar infon mellan dessa.
Vill ha färgkoderna och beteenderna kring färger från kodnr2 till kodnr1.
Det är lite hur jag gör det som förbryllar mig
Re: Programmeringstråden
clivia skrev:Kodnr 1 verkar använda sig av nån typ av java?! vad vet jag?!
kodnr2 verkar mer vara det jag kände till innan, men jag vill korsar infon mellan dessa.
Vill ha färgkoderna och beteenderna kring färger från kodnr2 till kodnr1.
Det är lite hur jag gör det som förbryllar mig
Man kan tydligen använda javascript i csskod, har dock inte fattat varför. Ser ingen js i din kod.
Kod 1 verkar vara mera shorthand.
Är bortrest till onsdag kväll men har med macbook och droid.
- barracuber
- Inlägg: 10992
- Anslöt: 2007-02-11
- Ort: Västsverige
Re: Programmeringstråden
clivia skrev:Vad har jag missat?
Tillbaka till skolbänken:
http://www.w3schools.com/css/default.asp
http://www.w3schools.com/css3/default.asp
Re: Programmeringstråden
Jag har nog runt 10000 timmar i konfigurering av config.sys samt autoexec.bat på PS1-dator . Hade jag i min ungdom gått en programmerings-kurs hade jag nog haft lätt att ta åt mig läroplanen och innehållet, nu har jag inte configurerat så mycket sen jag flyttade till eget, så jag har tappat lite.
( Kan ingen programmering dock idag, men har alltså suttit med lite problem-lösning / konfikgurationer typ det jag skrev i ovantstående rader. )
( Kan ingen programmering dock idag, men har alltså suttit med lite problem-lösning / konfikgurationer typ det jag skrev i ovantstående rader. )
Re: Programmeringstråden
Klart att det inte finns en hård gräns på 10000 timmar.. ens för C++, som har en särskilt komplicerad syntax. Speciellt metaprogrammeringen med templates är komplex.
Frågan är hur mycket man vinner på en rörig men kraftfull syntax... C är kanske 1/10 så komplext i sin uppbyggnad, men programmen är inte för den sakens skull mer lättlästa än de skrivna i C++.
Själv föredrar jag C# som lyft idéer från C/C++, Java och på senare år snarare leder utvecklingen inom C-liknande språk. Det går att se på t.ex. C++0x (den kommande revisionen), som har fått språkstöd för bl.a. lambdas och closures. (har funnits i C# sedan versionerna 3.0 respektive 2.0, alltså runt fem år)
Vad Java går för framtid till mötes vet jag inte, men språket som sådant verkar inte utvecklas nämnvärt. I alla fall inte mot en mer koncis syntax.
Frågan är hur mycket man vinner på en rörig men kraftfull syntax... C är kanske 1/10 så komplext i sin uppbyggnad, men programmen är inte för den sakens skull mer lättlästa än de skrivna i C++.
Själv föredrar jag C# som lyft idéer från C/C++, Java och på senare år snarare leder utvecklingen inom C-liknande språk. Det går att se på t.ex. C++0x (den kommande revisionen), som har fått språkstöd för bl.a. lambdas och closures. (har funnits i C# sedan versionerna 3.0 respektive 2.0, alltså runt fem år)
Vad Java går för framtid till mötes vet jag inte, men språket som sådant verkar inte utvecklas nämnvärt. I alla fall inte mot en mer koncis syntax.
Re: Programmeringstråden
Jag föredrar C++ utan templates o.d. Då får man C++ kod som kör på de flesta kompilatorer utan modifieringar.Vitsen med C++ är klasserna, inte templates och annat fjant.
Re: Programmeringstråden
Beror på vem du frågar. Stroustrup själv tycker nog att templates är lika viktiga som klasser.. C++ är ju ett multiparadigmspråk, inte bara avsett för OOP.
Templates i sina inte alltför extrema former stöds väl på det mesta som inte är urgammalt, om det bara finns GCC på plattformen.. Var menar du att det saknas?
Templates i sina inte alltför extrema former stöds väl på det mesta som inte är urgammalt, om det bara finns GCC på plattformen.. Var menar du att det saknas?