Gå til innhold

lnostdal

Medlemmer
  • Innlegg

    490
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av lnostdal

  1. lengesiden jeg har sjekket, men sist så leste ubuntu ntfs-partisjoner "out of the box" ja ..(skriving av ntfs er fortsatt litt iffy tror jeg).. både lesing og skriving av fat32-partisjoner har linux og ubuntu "alltid" hatt støtte for

     

    du har markert den første disken og partisjon 1 der .. ønsker du å mounte den slik at du får tilgang må du spesifisere en katalog der den skal mountes og klikke enable

  2. Det er kun et fåtall som har råd til å kjøpe Flash. I tillegg er det slik at det ikke en gang fungerer under Linux, så om jeg hadde hatt råd kunne jeg ikke brukt det der uten å ty til emulering v.h.a. Wine eller VMWare Player.

    [/rant]

     

    Dog det ser ut til at du kan navngi grafiske objekter og gjøre ting som map._xscale += 5; ..ganske enkelt altså.. videre kan du binde denne koden til events som f.eks. museknapp 4 og 5 som vil si at brukeren ruller med scroll-wheelen på musa. Sjekk:

    http://www.sitepoint.com/forums/showthread.php?t=157075

  3. slik:

     

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    //leser inn et ord og returnerer det
    string readAWord(){
     string str;
     cin >> str;
     return str;}
    
    
    //returnerer en ny streng som representerer
    //en reversert versjon av `str'
    string reverseStr(string str){
     string rev;
     for(string::reverse_iterator i = str.rbegin(); i != str.rend(); i++)
       rev.append(1, *i);
     return rev;}
    
    
    //returnerer true eller false alt ettersom
    //om `str' er et palindrom
    bool isPalindrom(string str){
     return str == reverseStr(str);}
    
    
    int main(){
     string ord;
     
     cout << "Tast inn et ord: ";
     ord = readAWord();
     cout << "Ordet du tastet inn er '" << ord << "'" << endl;
    
     cout << "Ordet '" << ord << "' reversert er '" << reverseStr(ord) << "'." << endl;
    
     if(isPalindrom(ord))
       cout << "Ordet '" << ord << "' er et palindrom." << endl;
     else
       cout << "Ordet '" << ord << "' er ikke et palindrom." << endl;  
       
     return 0;}
    

     

    lars@ibmr52:~/programming/c$ g++ -g -Wall b.cpp -o b && ./b

    Tast inn et ord: abc

    Ordet du tastet inn er 'abc'

    Ordet 'abc' reversert er 'cba'.

    Ordet 'abc' er ikke et palindrom.

    lars@ibmr52:~/programming/c$ g++ -g -Wall b.cpp -o b && ./b

    Tast inn et ord: abba

    Ordet du tastet inn er 'abba'

    Ordet 'abba' reversert er 'abba'.

    Ordet 'abba' er et palindrom.

    lars@ibmr52:~/programming/c$

     

  4. Om du bruker Wintendo: http://www.mingw.org/ (GCC om du bruker Linux; følger med som standard der)

     

    Eventuelt http://www.bloodshed.net/dev/devcpp.html , men om du har planer om å være litt "seriøs" - ikke sånn kjedelig C++-programmerer jeg-lurer-egentlig-meg-selv seriøs, men generellt sett forstå litt av det her, så må du også kunne bruke kompileren fra konsollet:

    http://www.network-theory.co.uk/docs/gccintro/

     

    edit:

    tror forresten dette hører hjemme i en egen tråd eller i den andre sticky-tråden ...

  5. edit: antar at du har en eller annen bok du driver å leser på; hvis ikke må du ordne deg dette.

     

    Begyn med det første og test ett og ett skritt om gangen:

     

    * lese inn et ord (sjekk at du får til dette ved å skrive ut det innleste ordet på skjermen)

    * skrive ut baklengs (sjekk på samme vis)

    * skrive ut en melding som forteller om det er et palindrom

     

    string readAWord(); // leser inn et ord og returnerer det

    string reverseString(string str); // returnerer en ny streng som representerer en reversert versjon av `str'

    bool isPalindrome(string str); // returnerer true eller false alt ettersom om `str' er et palindrom

     

    hakker du c++ så bruk ting som nevnt her:

    http://www.cppreference.com/cppalgorithm/reverse.html

    http://www.cppreference.com/cppstring/index.html

  6. Antar at du har normalen `N' til et triangel (kryssprodukt av 2 edges).

     

    T er en vektor mellom to vilkårlige edges i triangelet. (edit: vilkårlige blir kanskje litt galt; du må velge to punkter på flaten som representerer "retningen" til kurven) Jeg antar at du her må velge et triangel som godt representerer "kurven" i gjeldende overflate. N står 90 grader i forhold til T - eller selve triangelet. Man finner da B ved å ta kryssproduktet av T og N:

     

    B = T x N

     

    Jeg er ikke 100% stø på dette; så folk må rette meg om noe er galt.

     

    edit: T er altså tangenten, N er normalen og B binormalen

  7. edit: det må taes forbehold når man leser denne posten; jeg er visst ikke helt edru :}

     

    JNI brukes til å:

     

    * laste inn C-biblioteker

    * kalle C funksjoner

    * lese av globale variabler i C-biblioteker

    * angi Java-metoder som kan kalles fra C

     

    edit: Det jeg sier her er litt galt, for det finnes nemlig flere språk enn C som spytter ut biblioteker (.dll eller .so-filer); Lisp f.eks. :)

     

    Ta f.eks. `strlen' som er en del av glibc (noe som bør regnes som en del av at hvilket som helst desktop-OS). Jeg kan kalle `strlen' helt direkte, rett fra Lisp, slik:

     

    cffi> (foreign-funcall "strlen" :string "blah" :size-t)
    4
    

     

    I C er strlen deklarert slik: size_t strlen(const char* s). Jeg kan laste inn C-biblioteker og kalle funksjonene i dem. Regner med at du kjenner til GTK:

     

    cffi> (load-foreign-library "/usr/lib/libgtk-x11-2.0.so")
    #P"/usr/lib/libgtk-x11-2.0.so"
    

     

    .so-filer under Linux er forresten det "samme som" .dll-filer i Windows.

     

    Dette kan gjøres i de fleste høynivåspråk, og gjøres altså i Java v.h.a. JNI.

     

    Litt Off Topic, men ta også en titt på RFFi, som er en ting jeg duller med innimellom for å kalle funksjoner på andre maskiner over TCP/IP (derav navnet Remote Foreign Function Interface):

    http://nostdal.org/~lars/programming/lisp/rffi/rffi.html Serveren kan selvfølgelig være skrevet i "hva som helst"; ikke nødvendigvis Lisp som i mitt tilfelle her.

     

    Hm - tja; tolkeren er en native binary, tolkeren omtolker java-binary til native binary. Det spiller ingen rolle, for C må også tolkes om - forskjellen er kun _når_ og _hvordan_ det skjer.

     

    Angående dette med "OS" så er det bare et spørsmål ved hvor en ønsker å sette grensa. Tradisjonelt forståes et OS kun som det ene tynne laget som ligger rett over maskinvaren og har et API som klienter (programmer) kan ta i bruk, men et OS kan også defineres mer generelt som et hvilket som helst lag med et API. For meg er OSet Gnome, Firefox, Openoffice, Emacs eller dette forumet .. for Gnome er OSet GTK .. for Gtk er OSet Glib .. for GLib er OSet glibc .. for glibc er OSet Linux o.s.v. Det snakkes jo om at webben er i ferd med å bli et gigantisk distribuert OS også, med ting som webservices o.l. (RFFi også! :}). Det hele ligger i ordet "services"; ting som kan utføre tjenester - og det er det et OS også gjør.

     

    Tilslutt - i hvertfall i noen tilfeller (hehe) når man det ytterste "laget", og man oppnår en komplett sirkel: "request -> response -> request -> response". Man har et lukket "levende" system. Dette laget er altså brukeren for de som ikke har forstått hva jeg "babbler om". Siden jeg snakker så generelt som jeg gjorde her innser man plutselig at dette "laget" vi kaller brukeren i realiteten kunne vært programvare - og illusjonen av at et OS er en bestemt lukket ting "der nede" forsvinner når man ser at det ikke kan eksistere (eller oppstå) alene, men kun i form av en ting eller "rolle" koblet til andre ting på "begge sider" av en request-response-sirkel. Man vet ikke lengre hvor kjernen i det som før var et enkelt tre er, i det det blir til en graph ( http://en.wikipedia.org/wiki/Graph_%28mathematics%29 ); altså et nettverk eller sirkler.

     

    Plutselig innser man altså at det hele kun handler om hvor man ønsker å sette grensen. I ditt tilfelle antar jeg at du ønsker å lære eller forstå hvordan man hånderer resurser som f.eks.:

     

    * minne

    * tråder/prosesser/scheduling

    * filsystemer, disker

    * netverksrelaterte ting (tcp/ip)

     

    Disse tingene må man håndtere både oppe og nede, men i forskjellige former. Du er sansynligvis ute etter å re-implementere, eller forstå et lag som håndterer disse tingene og samtidig er nært knyttet til selve maskinvaren. Så for din del blir OSet "der nede" i det som tradisjonellt kalles "kjernen" eller "kernelen", men som etter min mening ikke er noen kjerne i noe som egentlig ikke er et tre med én rot (altså kjerne).

     

    ..vel; nok snakk om sirkler - folk kan jo tro jeg er en av disse gale hippi-typene..

     

    Det folk i hvertfall må få med seg er at det er ikke nødvendig - eller en gang hensiktsmessig - jeg vil t.o.m. si at det er idiotisk, å skrive større programvare i C bare fordi de underliggende lagene er i C eller ASM! :) Det er _lett_ og _lurt_ å kalle ting i/fra de underliggende og overliggende lagene v.h.a. høynivåspråk som Lisp, Java, o.s.v.

  8. Hei. Har drevet en del med Java for tiden, men irriterer meg over at man ikke kan jobbe direkte mot hardware.

     

    Nærmest alle språk har støtte for kommunikasjon med OS o.l. siden OS som regel er skrevet i C. Via OSet igjen har man direkte tilgang (for rette betydning av "tilgang") til maskinvare; det er liksom litt av poenget med et OS.

     

    Sjekk JNI siden du bruker Java: http://en.wikipedia.org/wiki/Java_Native_Interface

    ( jeg bruker CFFI: http://common-lisp.net/project/cffi/manual/cffi-manual.html )

     

    Du gjør sansynligvis en stor feil om du tror at du kommer til å spare tid ved å porte hele prosjektet ditt over til C/C++ basert på det at "det er tungvinnt å nå C-biblioteker fra Java".

     

    Det som streifet tankene mine var om jeg skulle prøve meg på å lage mitt eget lille OS, for å lære mest mulig om hvordan datamaskinen er bygd opp. Derfor tenkte jeg kanskje at C++ var et bra valg? Har hørt at linux kjernen osv er skrevet i C, men er det egentlig noe forskjell på dette?

     

    Nå skifter plutselig temaet totalt - husk det; utvikling av OS havner ikke i samme kategori som det du snakker om over.

     

    Hold deg til C i kjernen og i driverene. Det er mange grunner til dette, men jeg orker ikke gå inn på dem akkurat nå. Holder det å si at du bør stole på meg - siden det er lørdag?

     

    Så fort du i OSet ditt merker at du trenger et kraftigere mer høynivåish språk til ting som f.eks. GUI så hopper du rett over C++ og går for ting som Lisp, Python o.s.v.

     

    Jeg kan ikke si at jeg er proff i programmering, men det var vel ingen av oss i starten  :D  Har noen tips om hvordan jeg burde angripe dette temaet? Jeg må selfølgelig lære meg språket først, men det er jo sikkert en del stoff om hvordan man bygger et OS...

    6789426[/snapback]

     

    Bestill og les `The C Programming Language' og en eller annen bok om operativsystemer fra amazon.com så er du 0.00000000001% nærmere målet ditt ang. utvikling av OS. Det er dog ikke umulig å bruke andre språk her også. En norsk kar med navn Frode utvikler et OS i Lisp kallt Movitz: http://common-lisp.net/project/movitz/

  9. så noe slikt da:

     

    cl-user> (defun associativep (operation &optional (x 1) (y 2) (z 3))
               (flet ((opr (p q) (funcall operation p q)))
                 (= (opr x (opr y z))
                    (opr (opr x y) z))))
    associativep
    cl-user> (associativep #'+)
    t
    cl-user> (associativep #'-)
    nil
    cl-user> (associativep #'*)
    t
    cl-user> (associativep #'/)
    nil

     

    regner med at du ser hva som foregår - ta dette som pseudokode; jeg gidder ikke rote med C ATM :}

     

    edit: forumet ødlegger indenteringen igjen

×
×
  • Opprett ny...