Gå til innhold

slacky

Medlemmer
  • Innlegg

    882
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av slacky

  1. Kommer nok litt ann på helhetsplanen, størrelse, og bruksområde. Men det er tre språk jeg er veldig komfortable med, Object Pascal (Delphi/FPC), Python, PHP. Fra tid til annen tukler jeg med C, men kun i sammenheng med Python.

    Object Pascal: Har en veldig elegant og strukturert syntaks. Her fremmes en del av grunnene til at jeg nyter FPC/Delphi: http://www.pascal-central.com/compare.html ... Språket består av mye ord ovenfor masse merkelig tegnsetting slik som i C,C++, og flere andre språk.

    Python: Stort standard bibliotek, stort community, lite kode stort resultat. Det meste du trenger har blitt laget av noen andre, så det er ikke mye arbied som må til.

    PHP: (med HTML+JS) Flott hjelpemiddlel når en en skal lage en pen userinterface mot en database (akà en nettside).


    Jeg tuker av og til med kildekode fra andre språk en det som er nevnt, men er slett ikke komfortabel med disse. Når jeg møter mer kompleks C++, Haskell, eller Java så spyr jeg, for å så vurdere selvmord.

    For å nevne det, så er Java nr.1 på min liste i fæle populære språk.. "public static point myfunc() throws Exception {" ... like WTF? Skal alt det der til for å opprette en enkelte funksjoner?? Akkurat her, så synes jeg at Pascal er fantastisk.

  2. Dette tilhører ikke PHP-kategorien. Her diskuteres egentlig PHP-programmering.

    Personlige preferanser (når det skal gjøres kjapt og enkelt):

    1. One.com er billig og enkel.

    2. Noen gigabytes holder lange for et enkelt forum

    3. *SMF, PHPBB, MyBB, IP.Board (brukes her på diskusjon.no), vBullitin.
    - alle er brukbare, men de to siste koster penger.

    4. Filezilla annbefales.

    * SMF = Simple Machine Forums.. Min (gratis) forvoritt, den er enkel, og gir deg det du normalt sett trenger. PHPBB på den andre siden gir deg nok litt mer kontroll.

    Må nevne at jeg normalt sett ikke bruker noen av de nevnte forumene, har utviklet mitt eget forum som inneholder det jeg behøver (og utvider det om det trengs).

    Les gjerne litt om de forskjellige alternative forumene, velg den du selv mener passer dit behov.

  3. Orket ikke lese hele første posten, da den var smått forvirrende.. Så jeg gjetter..

    lst = ["Dette er linje 1, 42.32",
           "Dette er linje 2, 42.43",
           "Dette er linje 3, 34.744",
           "Dette er linje 4, 34.12" ]
    
    
    data = [l.split(',') for l in lst]
    data.sort(key=lambda x: float(x[1]));
    print [(',').join(l) for l in data]
    
    >> ['Dette er linje 4, 34.12', 
        'Dette er linje 3, 34.744', 
        'Dette er linje 1, 42.32', 
        'Dette er linje 2, 42.43']
    
    
    # Alternativ
    # Det er nok mere effektivt å endre til float før vi sorterer (ferre casts)..
    # 
    cast = lambda k: (k[0],float(k[1]))  
    data = [cast(l.split(',')) for l in lst]
    data.sort(key=lambda x: x[1]);
    
    merge = lambda x,glue: x[0] + glue + str(x[1]);
    print [merge(l,', ') for l in data]
    >> ['Dette er linje 4, 34.12', 
        'Dette er linje 3, 34.744', 
        'Dette er linje 1, 42.32', 
        'Dette er linje 2, 42.43']
    
  4. Skal dem gå rett i strupen på DirectX bør dem strengt tatt lage noe som faktisk fungerer på ALT av skjermkort og ikke bare 4 av AMD sine egne kort.

     

    ??

    Mantle er ikke knyttet opp til kun AMD, og dette blir også påpekt i artikelen. Det meste av mantles funksjonalitet kan fungerer på de aller fleste moderne grafikkchips, hvordan ytelsen av dette blir er vel heller ukjent.

    • Liker 2
  5. Eh nei, tredjepartsmoduler er heilt vanleg for kvart miljø, og er troleg den største grunnen til at Java er meir populært enn nokonsinne.

    Programvare skrevet i Java med en rekke tredjeparts biblioteker tvinger ikke brukeren til å laste ned alle modulene.. Python er ikke slik, skal koden kjøre så må du ha alle modulene. Jeg synes dette er et forfedelig klumeste system. Enkelte moduler kan være et herk og installere, tenker mest på "C extension" moduler, som kjeldent kommer pre-kompilert.

     

    Er ikke få ganger jeg har diklet med kompileringen, og har måtte lete frem sider med ferdig-kompilert moduler (http://www.lfd.uci.edu/~gohlke/pythonlibs/).

    En vanlig bruker skal i størst mulig grad slippe dikkelet.

     

     

  6. @siDDis: Tredjeparts biblioteker er ikke alt, og det at du er tvungen til å utvide med C for å oppnå fornuftig hastighet er idiotisk. Selv om du kjenner Numpy/Scipy veldig bra så kommer du ikke utenom sinkene i CPython, da er det ofte at Cython, Numba, eller C-modul må til.. Det er klumsete å være tvungen til å ha en rekke tredjeparts biblioteker.

    Har fin erfaring med PyPy: Det jeg skriver går fortere (oftest), i særtilfeller så oppnår jeg nesten samme hastighet som samme kode skrevet i Delphi. Jeg utelukker deres CPyExt - Den er brukbar kun om du planlegger å kalle funksjoner som bruker tid, vil heller brukt CFFI, eller Ctypes.


    La nylig merke til https://pypi.python.org/pypi/pyirrlicht (Irrlicht Engine).

    Noen her som faktisk har kjenskap til http://irrlicht.sourceforge.net - om så, hva tenker dere om motoren?

  7. ....
    line = re.search("""<a href=("|')(.+?)('|")""", chunk)
    if line:
        print line.group(1)
    

    I følge python doc, så skal man kunne sjekke etter både " og ' ved å skrive ("|'), men noe er tydligvis feil.

    Ser nermest korrekt ut.. ville ha gjort det litt anderledes, putte "or"-statement ("|") inni "firkant-parantes", og backslashet hermetegnet (fungerer også med re.search):

    import re
    
    if __name__ == '__main__':
      ptrn = re.compile( r"<a href=[\"|'](.+?)['|\"]" )
     
      chunk = '<a href=\"www.blabla.com\"> bla bla.. </a>' + \
              '<a href=\'http://www.lala.com\'> la la.. </a>'
              
      groups = re.findall(ptrn, chunk)
      print groups
  8.  

     

    Er det noe forskjell på og se det online og laste ned??

    Teknisk sett, ja. Realistisk sett, nei. På én måte blir hele innholdet lastet ned til PC-en din, selv om kanskje ikke hele ligger i minnet samtidig.
    Er det lik straff?

    Såvidt jeg har lest så er det ikke straffbart å se filmene gratis på nett. "Smitthull i systemet."

    > http://www.itavisen.no/nyheter/%E2%80%93-lovlig-%C3%A5-se-streamet-piratfilm-8167

    > http://www.dagbladet.no/2010/02/15/kultur/film/tekno/10409638/

     

  9. Stacking av funksjonskall er lite pent, og gjør koden uoversiktelig (ref: snake.py).

    Annbefaler deg å kjøre main-loopen, og alt som nødvendigvis ikke trenger være globalt inn i en / eller flere funksjon(er). Tilgang til lokale variabler er mye mer effektivt enn globale variabler. Stort sett alt du gjør i python er mer effektivt i en funksjon/lokalt enn i det globale virkeområde.

    Jeg ville ikke brukt tab til indentering, annbefaler deg å gjøre som mange andre python-programmerere: 4 space, og simpelthen forsøke og følge PEP-8. http://www.python.org/dev/peps/pep-0008/#indentation

  10. PyPy er ikkje så raskt som alle skal ha det til....i nokre tilfeller vil det vere raskare og i andre tilfeller treigare.

    Det som derimot er meir viktig er å få ting til å fungere, så å knote med PyPy er ikkje å anbefale.

    http://stackoverflow.com/questions/18946662/why-shouldnt-i-use-pypy-over-cpython-if-pypy-is-6-3-times-faster

    Meh... PyPy sin hastighet øker konstant, og veldig kjapt. Det er relativt få ting i pypy som er tregere en i CPython. Generelt sett så er det mye raskere, alt som er relatert til matematikk går kjappere, og loops er merkbart MYE kjappere. Det er enkelte ting i pypy som burde gjøre anderledes, altså som et eksempel "string + string"/ "str += str2", det burde gjøres på en annen måte om du vil ha optimal hastighet.

     

    Akkurat i dette tilfellet annbefaler jeg PyPy om det viser seg at CPython er en hindring, noe som sansynligvis kommer til å vise seg, om han når langt nok med prosjektet.

  11. Pyglet fungerer også på PyPy, noe som etter min erfaring er nesten nødvendig når det er snakk om 3D-spill (når du kommer et stykke). CPython sliter veldig med den store hastighets-begrensingen, men PyPy fiker dette i en stor grad.. Når vi ser på 3D-looper (for z.. for y.. for x..) så blir det fort et stort antall iteratsjoner, og spill inneholder endel matematikk (i disse loopene), noe som igjen CPython sliter VELDIG med.. Loops med mattestykker gjennomføres opp til ti-talls ganger rasker i PyPy.

    Du finner forresten også noen små spill (3D) som er skrevet med PyGlet, kun for å lære bort hvordan det "fungerer", kommer på denne Minecraft-inspirerte demoen:
    https://github.com/fogleman/Minecraft/

    • Liker 1
  12. Annbefaler og bruker klasser, og "self"... Ditt eksempel (Bind-to-key) fungerer ikke på Windows XP (Py 2.7), og heller ikke på noen av mine Linux-distroer (Py 2.7).

    Her er et eksempel, med noe jeg tror fungerer slik du ønsker.

    from Tkinter import *
    
    data = [None,None]
    data[0] = ['1','a','alpha']
    data[1] = ['2','b','beta']
    
    class ListThing:
        def __init__(self, parent=None):
            self.labelText = StringVar()
            self.labelText.set('Not pressed')
            Label(root, textvariable=self.labelText).pack()
    
            lb = Listbox(root)
            lb.insert(END, 'first')
            lb.insert(END, 'second')
            lb.bind('<Return>', self.listEnter)
            lb.pack()
            self.lb = lb
             
            self.rescurrent = None;
            resbox = Listbox(root)
            resbox.pack()
            
            self.resbox = resbox
    
        def listEnter(self, event=None):
            wdg = event.widget
            index = int(wdg.curselection()[0])
            value = wdg.get(index)
            self.labelText.set(value)
            
            if self.rescurrent != index:
                self.resbox.delete(0, 'end')
                for item in data[index]:
                    self.resbox.insert(END, item);
                self.rescurrent = index;
                
            self.resbox.focus_set()
            self.resbox.selection_set(0)
    
    root = Tk()
    ListThing(root);
    root.mainloop()

    Linjene verd å merke er:
    self.resbox.focus_set()
    self.resbox.selection_set
    (0)

  13. Det å kalde variabler med en strenger er hacky og tregt ikke noe jeg annbefaler deg, det finnes heller ikke dynamisk... Men løsningen er slik:

    lst1 = ['banan', 'sølv', 'ku']
    lst2 = ['eple', 'gull', 'gris']
    lst3 = ['kiwi', 'bronse', 'hest']
    
    how_many_lists = 3;
    print [vars()['lst'+str(x)][0] for x in range(1, how_many_lists+1)]

    Det er mulig å opprette variabler med streng også, ikke bare kalde dem.
    >>> vars()['lst' + str(id)] = ['what', 'ever']
    Men det er slett ikke en god måte å gjøre det på, krever også at du holder styr over antall variabler, og hver variabel vil gjøre sitt innspill på å gjøre Python-interpreteren tregere en den allerede er... Bruk heller en 2D liste som vist under..

    lst = [None]*3 #set størrelsen til 3
    lst[0] = ['banan', 'sølv', 'ku']
    lst[1] = ['eple', 'gull', 'gris']
    lst[2] = ['kiwi', 'bronse', 'hest']
    
    newlist = [x[0] for x in lst]
    print newlist
    

    Det er nok så effektivt som du får det.. Skal du legge til enda en liste så bruker du bare lst.append(['ost', 'kobber', 'sjimpanse'])..

    map + itergetter, eller lambda kan også brukes i denne sammenheng:

    lst = [['banan','solv','ku'], ['eple','gull','gris'], ['kiwi','bronse','hest']]
    shit = []
    for i in range(len(lst[0])):
        shit.append(map(lambda x: x[i], lst))
    
    print shit #Gir deg [['banan', 'eple', 'kiwi'], ['solv', 'gull', 'bronse'], ['ku', 'gris', 'hest']]
    

    ---------------------------

     


    men det finnes en funksjon som gjør akkurat det du vil (case 1).

    zip(lst1, lst2, lst3)

    Så enkelt, og så meningsløst. :)


    men, det løser ikke case1 på noen dynamisk måte uansett.. Han må fremdeles skive liste-navn for hånd.. Altså ikke dynamisk, så dermed: 2D-liste fra første stund.

  14. Men ja, dette kan regnes på følgende måte:

    x % y = (x / y) * x

    Jeg aner ikke hvordan du får det der til å fungere...

    mod = ((x / y) - floor(x / y)) * y ... I python så vil dette altså kreve at enten x, eller y er flytepunkt.

     

     

    Med den formelen så kan vi lage dette eksempelet:

    from math import floor
    
    def mod(x,y):
      d = x / float(y);
      return (d - floor(d)) * y;
    
    //Eller kortere variant, men mer kalkulasjon:
    def mod2(x,y):
      return ((x / float(y))-(x // y)) * y
    
    print [mod2(10,-3.6),  10 % -3.6]
    print [mod2(-10, 6),   -10 % 6]
    print [mod2(27, 2),    27 % 2]
    

    Dette er funksjonen jeg bruker for å oppnå pythons modulus-funksjon når jeg programmerer i C eller Delphi.

     

    Nå er det sansynligvis billigere måter å gjøre dette på, men fungerer fint for meg.

     

  15. Varierer (kommer ann på OS, prosjekt-størrelse o.l): Notepad++ når jeg skriver lengre prosjekter på Windows, på linux foretrekker jeg Sublime. Men for å leke meg litt, og prototype funksjoner benytter jeg meg av mitt eget lille program som jeg har utviklet i Python..

    PS: Linken leder deg tol en ganske tidlig utgave av "editoren" min.

  16. Min erfaring med Zyxel P2812 er så som så... Men, slik er det også med de 4 (muligens 5) andre modemene jeg har testet. Jeg klarer lett å kresje dem, dog usikker på hvorfor jeg klarer dette (de er merkvedig ustabile), og de fleste av dem må gis (minst) en daglig rebot. Alle er testet lenge (måneder), og stort sett altid bridget, da mot en ASUS RT-n16. Zyxel's P2812 er vel blandt de beste, men jeg fåretrekker Inteno DG301, men den er forferdelig å bridge, altså det å finne ut hvordan jeg skulle bridge den tok en halv evighet, og litt til.

    Intenoen står sterke grunnet mer RAM, faktisk dobbelt så mye: 256MB. Har noe lavere CPU-clock en Zyxelen, men tror virkelig ikke Zyxels CPU (en VRX288?) er sterkere en Intenoens BCM63268 (som er en 400MHz dual-core). Selv lillebror til denne vil jeg si utkonkurerer Zyxel P2812, da snakker jeg om DG201(b).. DG201 bruker BCM6368-chipsettet, som integrerer TO 400MHz MIPS32 Viper-kjerner, men de er gjerne på lik linje, men grunnet lite ram, så havner Zyxelen og DG201 på ganske lik linje.

    Jeg konkluderer med at OM du skal ha et saftig (router)modem så har Inteno DG301 mye å tilby. Men, det er heller vanskelig å fa tak i denne. NextGenTel har vel såvidt begynt å levere ut denne.

    PS, som jeg skrev på første linje: Alle modemene jeg har testet yter litt "så som så".

     

    Edit: Så ikke at posten var en måned gammel... =P

  17. For multilinje ifstatement så bruker man "\" i slutten av hver linje.
    EG:

    original = 'ostekake'
    if (len(original) > 0) and (original.isalpha()):
        word = original.lower()
        first = word[0]
        if first == "a" \
          or first == "e" \
          or first == "i" \
          or first == "o" \
          or first == "u" \
          or first == "y":
    
            print "vowel"
    
        else:
            print "consonant"
    else:
        print 'empty'
    

    Men, som nevnt over: Dette gjøres mye kortere med pythons this in that spørring :)

×
×
  • Opprett ny...