x871kx6167ss7 Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 Hehe, greide den selv. Jobber meg framover, har gjort oppgave 2,3,4,5,6,7,9,10 og 11. Proever meg paa 12 naa. Angaaende koden din for oppgave 7, faar den ikke til aa funke. Tror jeg har skrevet av riktig(bruk [ code]-tag for aa faa med mellomrom. ). Proevde du den foer du la den ut? Lenke til kommentar
genstian Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 endret til . Virker fint her. Lenke til kommentar
Arne Skrevet 20. januar 2008 Forfatter Del Skrevet 20. januar 2008 Ser kult ut med dei mattematiske oppgåvene! Eg har no laga RSS-lesaren i OOP, men han verker ikkje heilt som planlagt. Veit de kva som kan vere feil? http://pastebin.com/m4321aa2f God natt! Lenke til kommentar
x871kx6167ss7 Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 Hehe, jeg maa laere meg OOP. Ser saa mye bedre ut. Kan ikke si hvorfor det ikke funker. Men som steingrim sa til meg, saa finnes det moduler for aa behandle xml, saa tror det funker bedre dersom man bruker det. Lenke til kommentar
Arne Skrevet 21. januar 2008 Forfatter Del Skrevet 21. januar 2008 Ja, det gjer jo det, men alt eg lagar no i starten kjem ikkje til å ha nytteverdi i den forstand, det er berre for å lære/praktisere det eg har lært. Lenke til kommentar
x871kx6167ss7 Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Etter aa ha provd litt ser jeg at ifsetningene naar du skal hente inn informasjon for aa skrive databasen ikke funker. Dersom du setter inn "print 'ok'" inne i hver ifsetning ser du at ingen av dem trigger. Dersom jeg lurer paa om noe funker saa pleier jeg aa skrive ut verdier og ting som "ok" inne i ifsetninger osv for aa se hvor feilen kan ligge. Men jeg ser dessverre ikke hvorfor det ikke funker hos deg... Lenke til kommentar
Arne Skrevet 21. januar 2008 Forfatter Del Skrevet 21. januar 2008 (endret) Hmm buffer = open('buffer.txt') for line in buffer.readline(): print line Gir meg berre Klikk for å se/fjerne innholdet nedenfor <? x m l v e r s i o n = ' 1 . 0 ' e n c o d i n g = ' U T F - 8 ' ? > Med andre ord vert det kun iterert (sikkert feilskrive) over den fyrste linja i tekstfila. Endret 21. januar 2008 av Arne Lenke til kommentar
steingrim Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Hmm buffer = open('buffer.txt') for line in buffer.readline(): print line Med andre ord vert det kun iterert (sikkert feilskrive) over den fyrste linja i tekstfila. Kanskje ikke så rart hvis du leser koden. Du kaller buffer.readline() -- du mener nok buffer.readlines(). Merk 's' på slutten Lenke til kommentar
Vipera Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Har kommet til oppgave 19 på projekt Euler, begynner å bli litt vanskeligere der oppe, men går greit nok enda Lenke til kommentar
Arne Skrevet 21. januar 2008 Forfatter Del Skrevet 21. januar 2008 Eg har funne ut at denne lesaren kanskje ikkje er så nyttig likevel, sidan det er så mange ting som kan gå gale. Tenk om ein tag går over fleire linjer? Eg bør nok kanskje bruke noko som allereie er laga! Har høyrt at xml.minidom skal vere ok å bruke. Innvendingar? Lenke til kommentar
steingrim Skrevet 22. januar 2008 Del Skrevet 22. januar 2008 Eg har funne ut at denne lesaren kanskje ikkje er så nyttig likevel, sidan det er så mange ting som kan gå gale. Tenk om ein tag går over fleire linjer? Heh, jeg så ikke på koden din tidligere, men det er en del XML den ikke takler ja Eg bør nok kanskje bruke noko som allereie er laga! Har høyrt at xml.minidom skal vere ok å bruke. minidom er finfin den. En gyllen anledning til å lære seg hva DOMen er. En annen ting du kan gjøre er jo å lage din egen XML-parser. Et hint er at du må bruke en stack for å få det til skikklig. Lykke til Lenke til kommentar
Arne Skrevet 22. januar 2008 Forfatter Del Skrevet 22. januar 2008 Å lage min eigen? Korleis meiner du med eigen? Lenke til kommentar
steingrim Skrevet 22. januar 2008 Del Skrevet 22. januar 2008 Å lage min eigen? Korleis meiner du med eigen? Å lage din egen xml-parser, det finnes jo mange måter å gjøre det på og det kan være gøy. Men hvis du heller vil fort i gang med RSS-lesing kan du bruke feks minidom eller en annen xml-modul for python. Uansett; det er morsommere å programmere enn å stille spørsmål her, er det ikke? Lenke til kommentar
Arne Skrevet 22. januar 2008 Forfatter Del Skrevet 22. januar 2008 Jojo, det er jo gøy å programmere, og eg kunne godt tenkt meg å lage ein RSS-lesar heilt frå børjan av, men eg har ikkje clue her... Kan jo ikkje berre begynne å programmere utan å vite kva eg skal programmere. Lenke til kommentar
x871kx6167ss7 Skrevet 24. januar 2008 Del Skrevet 24. januar 2008 Hei hå! Tenkte jeg skulle prøve meg på rss-oppgaven en gang til. Ble litt bedre resultat nå. Sånn rent praktisk så er det vel bare øæå som ikke funker. Vet ikke helt hvorfor. Bruker wget i stedefor urllib2 siden urllib2 ikke søtter unicode etter hva jeg fant ut. (Ikke det at det hjalp så mye...) Uansett, her er resultatet. Klikk for å se/fjerne innholdet nedenfor #!/usr/bin/env python import sys import modPxml class client: def start(self): try: self.rss = modPxml.pxml() except: print "ER: Could not connect to modPxml." print "Bye, bye. *EXIT*" quit() try: self.showing_x_lines = "" self.config = open('.rcpxml') while True: self.line = self.config.readline() if len(self.line) == 0: break if self.line.startswith("showing_x_lines"): self.showing_x_lines = self.line self.showing_x_lines = \ int(self.showing_x_lines.replace\ ("showing_x_lines ", '')) self.config.close() if self.showing_x_lines == "": self.showing_x_lines = 10 except: print "Could not load config-file, loading default." self.showing_x_lines = 10 def showFeed(self, cmd): try: if cmd == False: self.listOfTableNames = self.rss.namesOfTables() try: if cmd == False: print "Enter number of the feed you want to see." for i in range(0, len(self.listOfTableNames)): print "#%s - %s" % (str(i+1), self.listOfTableNames[i]) self.choice = raw_input(">>> ") self.wantedTableName = self.listOfTableNames[int(self.choice)-1] self.listFromReturn = self.rss.getInfo(self.wantedTableName, [0,1,1,1,0,1,0,0,0]) self.listTitle = self.listFromReturn[0] self.listLink = self.listFromReturn[1] self.listDescription = self.listFromReturn[2] self.listDate = self.listFromReturn[3] except: print "ER: Error fetching from database." try: if self.showing_x_lines >= len(self.listTitle): self.showing_x_lines = len(self.listTitle) for i in range(0, self.showing_x_lines): print "==============================" print "=>>", self.listTitle[i] print ("(" + self.listLink[i] + ")") print "=>>", self.listDate[i] print self.listDescription[i] except: print "ER: Error printing list." except: print "EE: Could not retrive feed-names from database." raw_input("EE: Try to add a feed or update feeds.") def addItem(self, cmd): if cmd != True: try: self.name = raw_input("Enter a name. The name will distinct diffrent\\nfeeds from eachother.\n>>> ") self.url = raw_input("Enter url to the feed.\n>>> ") except: print "Error entering data,\n \tYOU WIN!" try: self.rss.download(self.url, self.name) except: print "Error: Could not add feed to database." print "Are you sure the data entered is correct?" def updateFeed(self): try: self.listOfNameAndUrl = self.rss.getNameAndUrl() self.listOfName = self.listOfNameAndUrl[0] self.listOfUrl = self.listOfNameAndUrl[1] try: self.choice = raw_input(\ "Please choose:\ \n1\tUpdate all\ \n2\tSelect") if self.choice == "1": for i in range(0, len(self.listOfName)): self.rss.download(self.listOfUrl[i], self.listOfName[i]) if self.choice == "2": for i in range(0, len(self.listOfName)): print "#%s - %s" % (str(i+1), self.listOfName[i]) self.choice = raw_input("Please list the \ feeds you \nwant to update, use space to seperate.\n>>> ") self.choice = self.choice.split(" ") for i in range(0, len(self.choice)): print "Updating: %s" % self.listOfNames\ [int(self.choice[i])-1] self.rss.download(self.listOfUrl[int\ (self.choice[i])-1], self.listOfNames\ [int(self.choice[i])-1]) except: print "Error: Only enter integers." except: print "ER: Error retriving info from database." raw_input("Try to add a feed.") def prefrences(self): try: self.config = open('.rcpxml') while True: self.line = self.config.readline() if len(self.line) == 0: break if self.line.startswith('showing_x_lines'): self.showing_x_lines = line self.showing_x_lines = self.showing_x_lines.\ replace('showing_x_lines ','') self.config.close() except: print "Could not load config-file." print "==============================" print "This will decide how many items from a seed that is show." print "\t-Entering 0 will print all." print "\t-Only pressing enter will leave unchanged." print "Currently", self.showing_x_lines, "is chosen." self.wanted_showing_x_lines = raw_input(">>> ") try: if self.wanted_showing_x_lines == "0": self.showing_x_lines = 0 elif int(self.wanted_showing_x_lines) > 0: self.showing_x_lines = int(self.wanted_showing_x_lines) except: print "ER: Could not change option." print "Onlt use integer." try: self.config = open('.rcpxml','w') self.temp = "showing_x_lines" + str(self.showing_x_lines) self.config.write(self.temp) self.config.close() except: print "ER: Error saving config-file." raw_input("Setting probaly not saved, try to save again.") def cligui(): feed = client() feed.start() igjen = True while igjen: print "==============================" print "Menu:" print "1\tView feed" print "2\tAdd feed" print "3\tUpdate feed(s)" print "4\tSettings" print "5\tExit" choice = raw_input(">>> ") try: if choice == "5": igjen = False elif choice == "4": feed.prefrences() elif choice == "3": feed.updateFeed() elif choice == "2": feed.addItem(True) elif choice == "1": feed.showFeed(False) except: print "An unknown error occured." def clicmd(): arg = [] for i in range(1, len(sys.argv)): arg.append(sys.argv[i]) if arg[0] == "-a" or arg[0] == "--add": if len(arg) == 3: feed = client() feed.start() url = arg[1] name = arg[2] feed.url = url feed.name = name feed.addItem(True) elif arg[0] == "-p" or arg[0] == "--print": if len(arg) == 2 or len(arg) == 4: feed = client() feed.start() name = arg[1] feed.wantedTableName = name if len(arg) == 4: n = arg[3] feed.showing_x_lines = int(n) feed.showFeed(True) else: print """You can controll pxml with arguments so you do not have to go through all the menus. Here are the available arguments: -h, --help:\n\tdisplay this -a, --add url name:\n\tadds the feed to database -p, --print name -n n:\n\tprints the feed "name" out, -n(optinal) sets number of items to be printed out.""" if __name__ == "__main__": if len(sys.argv) > 1: clicmd() else: cligui() Klikk for å se/fjerne innholdet nedenfor #!/usr/bin/env python # -*- coding: UTF-8 -*- """modPxml.py is a module that download, save and returns information from xml-feeds""" import os import codecs from pysqlite2 import dbapi2 as sqlite def removeHTML(text): text = text.replace('<', '<') text = text.replace('>', '>') text = text.replace('&', '&') text = text.replace(''', "'") text = text.replace('"', '"') return text class pxml: def download(self, url, name): connection = sqlite.connect('pxml.db') cursor = connection.cursor() try: cursor.execute('CREATE TABLE info \ (id INTEGER PRIMARY KEY, \ name VARCHAR(20),\ url VARCHAR(100), \ xmlversion VARCHAR(5),\ rssversion VARCHAR(5), \ title VARCHAR(50), \ link VARCHAR(60), \ description VARCHAR(100), \ language VARCHAR(20), \ subdate VARCHAR(40), \ lastbuild VARCHAR(40), \ generator VARCHAR(40), \ managerinfo VARCHAR(50), \ webmaster VARCHAR(50))') except: something = 22 # Dont have anything better to do... try: os.remove('temp.xml') except: a = 22 ########################################### # Download to file, import file to string,# # manipulate string, split to list # command = "os.system('wget -q -O temp.xml %s')" % url exec command f = open('temp.xml') contentOfFile = "" while True: line = f.readline() if len(line) == 0: break contentOfFile = contentOfFile + line contentOfFile = contentOfFile.decode('UTF-8','ignore') contentOfFile = contentOfFile.replace('<![CDATA[', '[!CDATA[') contentOfFile = contentOfFile.replace('\n', ' ') listOfContent = contentOfFile.split("<") ################################################ # image-tags are not supported, seek'n'destory:# listOfLineToDelete = [] record = False while True: record = False for i in range(0, len(listOfContent)): if listOfContent[i].startswith("image>"): record = True if listOfContent[i].startswith("item>") \ or listOfContent[i].startswith("/image>"): break if record == True: listOfLineToDelete.append(i) if record != True: break for i in range(len(listOfLineToDelete)): listOfContent.pop(listOfLineToDelete[0]) ########################################################## # First we find out what there is to know about the feed.# # Iterate through list until we hit first item. # # Things that match tag is saved in apropiat strings, # # and in the end added to the "info"-table. # xmlversion = ""; rssversion = ""; title = ""; description = "" language = ""; pubdate = ""; lastbuild = ""; generator = "" managingeditor = ""; webmaster = "" for line in listOfContent: if line.startswith("item>"): break elif line.startswith("?xml version"): xmlversion = line xmlversion = xmlversion[14:17] elif line.startswith("rss version="): rssversion = line rssversion = rssversion[13:16] elif line.startswith("link>"): link = line link = link.replace("link>", '') elif line.startswith("title>"): title = line title = title.replace("title>", '') elif line.startswith("description>"): description = line description = description.replace("description>", '') elif line.startswith("language>"): language = line language = language.replace("language>", '') elif line.startswith("pubDate>"): pubdate = line pubdate = pubdate.replace("pubDate>", '') elif line.startswith("lastBuildDate>"): lastbuilddate = line lastbuilddate = lastbuilddate.replace("lastBuildDate>", '') elif line.startswith("generator>"): generator = line generator = generator.replace("generator>", '') elif line.startswith("managingEditor>"): managingeditor = line managingeditor = managingeditor.replace("managingEditor>", '') elif line.startswith("webMaster>"): webmaster = line webmaster = webmaster.replace("webMaster>", '') try: number = "" cursor.execute('SELECT * FROM info') for row in cursor: if name == row[1]: number = str(row[0]) if number != '': cursor.execute('DELETE FROM info WHERE id = ?', (number)) finally: cursor.execute('INSERT INTO info VALUES \ (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', \ (name, url, xmlversion, rssversion, title, link, \ description, language, pubdate, lastbuild, generator, \ managingeditor, webmaster)) #################################################### # Since we now know the information about the feed,# # we delete everything untill first item. # num = 0 i = 0 while True: if listOfContent[i].startswith("item>"): break num += 1 i += 1 for i in range(num): del listOfContent[0] ########################################### # Now we goes loop through the items. # # In the same way as with the info, # # we check each line for tags and # # adds what we find to strings. # # When we reach a new item, what we have # # found is written to database, and # # the variables is emptied for a new item.# nameForSQL = '"' + name + '"' try: cursor.execute('CREATE TABLE %s \ (id INTEGER PRIMARY KEY, \ title VARCHAR(100), \ link VARCHAR(100), \ description VARCHAR(200), \ guid VARCHAR(40), \ pubdate VARCHAR(40), \ author VARCHAR(30), \ category VARCHAR(30), \ comments VARCHAR(100))'\ % (nameForSQL)) except: something = "0" title = "";link = ""; description = "" guid = ""; pubDate = ""; author = "" category = ""; comments = "" for line in listOfContent: if line.startswith("/item>"): cursor.execute('INSERT INTO %s VALUES \ (null, ?, ?, ?, ?, ?, ?, ?, ?)' \ % (nameForSQL), \ (title, link, description, guid,\ pubDate, author, category, comments)) title = "" link = "" description = "" guid = "" pubDate = "" author = "" category = "" comments = "" elif line.startswith("title>"): title = line title = title.replace("title>", '') if title.startswith('[!CDATA['): title = title.replace('[!CDATA[', '') title = title.replace(']]', '') else: title = removeHTML(title) elif line.startswith("link>"): link = line link = link.replace("link>", '') elif line.startswith("description>"): description = line description = description.replace("description>", '') if description.startswith('[!CDATA['): description = description.replace('[!CDATA[', '') description = description.replace(']]>', '') else: description = removeHTML(description) elif line.startswith("guid>"): guid = line guid = guid.replace("guid>", '') elif line.startswith("pubDate>"): pubDate = line pubDate = pubDate.replace("pubDate>", '') elif line.startswith("author>"): author = line author = author.replace("author>", '') if author.startswith('[!CDATA'): author = author.replace('[!CDATA[', '') author = author.replace(']]>', '') else: author = removeHTML(author) elif line.startswith("category>"): category = line category = category.replace("category>", '') if category.startswith('[!CDATA['): category = category.replace('[!CDATA[', '') category = category.replace(']]>', '') else: category = removeHTML(category) elif line.startswith("comments>"): comments = line comments = comments.replace("comments>", '') ########################################################## # Finnished with updating, save and close the connection # # with database. # connection.commit() cursor.close() connection.close() def namesOfTables(self): connection = sqlite.connect('pxml.db') cursor = connection.cursor() ######################## # Selec cursor.execute('SELECT name FROM info') listOfTableNames = [] for row in cursor: listOfTableNames.append(row[0]) cursor.close() connection.close() return listOfTableNames def getInfo(self, name,listOfWanted): listId = []; listTitle = []; listLink = []; listDescription= [] listGuid = []; listDate = []; listAuthor = []; listCategory = [] listComments = [] connection = sqlite.connect('pxml.db') cursor = connection.cursor() name = '"' + name + '"' cursor.execute('SELECT * FROM %s' % name) for row in cursor: if listOfWanted[0] != 0: listId.append(row[0]) if listOfWanted[1] != 0: listTitle.append(row[1]) if listOfWanted[2] != 0: listLink.append(row[2]) if listOfWanted[3] != 0: listDescription.append(row[3]) if listOfWanted[4] != 0: listGuid.append(row[4]) if listOfWanted[5] != 0: listDate.append(row[5]) if listOfWanted[6] != 0: listAuthor.append(row[6]) if listOfWanted[7] != 0: listCategory.append(row[7]) if listOfWanted[8] != 0: listComments.append(row[8]) cursor.close() connection.close() listToReturn = [] if listOfWanted[0] != 0: listToReturn.append(listId) if listOfWanted[1] != 0: listToReturn.append(listTitle) if listOfWanted[2] != 0: listToReturn.append(listLink) if listOfWanted[3] != 0: listToReturn.append(listDescription) if listOfWanted[4] != 0: listToReturn.append(listGuid) if listOfWanted[5] != 0: listToReturn.append(listDate) if listOfWanted[6] != 0: listToReturn.append(listAuthor) if listOfWanted[7] != 0: listToReturn.append(listCategory) if listOfWanted[8] != 0: listToReturn.append(listComments) return listToReturn def getNameAndUrl(self): connection = sqlite.connect('pxml.db') cursor = connection.cursor() cursor.execute('SELECT name, url FROM info') listName = []; listUrl = [] for row in cursor: listName.append(row[0]) listUrl.append(row[1]) listToReturn = [listName, listUrl] cursor.close() connection.close() return listToReturn if __name__ == "__main__": print "This is a module!" quit() Tror nok det finnes mer elegante måter å gjøre det på. Lenke til kommentar
qebaba Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 Flott å se at denne tråden enda er aktiv, og at folk føler de har noe igjen for den! Men angående det mattematiske hintet til primtall: Mattematisk hint: Husk at halvparten av tallene er delbare på 2. Du trenger derfor bare å sjekke halvparten av tallene. Dette er sant, men metoden din er også ikke det mest optimale. Tidskompleksiteten til denne algoritmen vil være O(n) for å verifisere at et tall er et primtall. Nedenfor viser jeg en metode som reduserer dette til O(sqrt(n)) for å verifisere at et tall er et primtall. Anta at et tall n, kan deles på k hvor 1 < k < n. Da kan også n / k dele n, fordi begge vil være faktorer, og (n / k) * k = n (Naturligvis). Anta så at k = n / 2. Da er naturligvis 2 den andre divisoren. Altså finnes det en "speiling" av alle divisorene. Det viser seg at enten: 1) k < sqrt(n) => n / k > sqrt(n) fordi sqrt(n) * sqrt(n) = n. 2) k > sqrt(n) => n / k < sqrt(n) av samme grunn. 3) k = sqrt(n) => n / k = k. Med andre ord, hvis du har sjekket alle divisorene opp til (og med) sqrt(n), og ingen deler n, så er n et primtall. La oss videre anta at vi vil sjekke alle tallene opp til 50 om de er primtall. Vi definerer her 0, og 1 til ikke å være primtall. La oss videre si at tallene er sortert i stigende rekkefølge, slik at 2 ligger først, for øyeblikket. Så sjekker vi om noen av tallene som er mindre enn eller lik sqrt(2) kan dele 2, og det er ingen av dem i vår rekke, så vi markerer 2 som et primtall. Deretter sjekker vi det samme for 3, det kan heller ikke deles, så vi står nå med: 2 3 4 5 ... 4 kan derimot deles på 2, så vi setter inn 0 her. 2 3 0 5 ... Fortsett slik, og du har en tidskompleksitet på O(n * sqrt(n)) som er relativt god. Du må naturligvis ikke dele på 0 underveis, og når du vil returnere resultatet, bør du filtrere ut 0'ene, for eksempel slik: return filter(lambda x: x != 0, tall) Les mer om denne algorithmen på http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes Som hotstian nevne, kan vi eliminere halvparten av tallene allerede fra starten av. Faktisk, kan vi eliminere 1/2 + 1/3 - 1/15 = 23/30 av tallene, trivielt (Mer enn dette blir vanskelig...) En funksjon som finner primtall kan dermed se slik ut: def primtall(n): kandidater = [0] * n # n er antall ønsket kandidater. kandidater[:3] = [2, 3, 5] for i in xrange(3, len(kandidater)): if i % 2: # Alle odde indekser kandidater[i] = kandidater[i - 1] + 2 else: # Alle par indekser kandidater[i] = kandidater[i - 1] + 4 # Bruk sieve of Erastosthenes: grense = sqrt(kandidater[-1]) i = 0 while i <= grense: if kandidater[i]: # Del aldri på 0. for j in xrange(i + 1, len(kandidater)): if kandidater[j]: # Sjekk at vi ikke har fjernet dette tallet allerede if kandidater[j] % kandidater[i] == 0: # Fjern kandidater[j] = 0 i += 1 return filter(lambda x: x, kandidater) Fordi vi eliminerer 23 / 30 tall før vi begynner, vil resultatet ha iterert over (30 / 7) * n tall. Vi kan bruke x / ln(x) til å estimere antallet primtall <= x. Dette er stygg python kode, ikke skriv slikt ellers men den er rimelig effektivt. Kan komme til nytte på senere tidspunkt. Har forøvrig gjort en god del av oppgavene på project euler (under nicket qebab), så hvis man ønsker tips er det bare å poste her Lenke til kommentar
Jonas17 Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 (endret) Heisann, jeg måtte bare registrere meg da jeg så denne posten. Python så gøy ut og jeg har erfaring fra php scripting og bash så jeg tenke å hoppe uti og ta utfordringen fra første side. Det her er første gangen jeg har prøvd på python så nå sitter jeg litt fast. Jeg har laget en socket "server" som lytter på en port og en client som kan sende tekst strenger til serveren, men det jeg trenger er et lite hint om hvordan jeg kan koble bruker id'er sammen. Altså så serveren veit hvor den skal sende meldinen. Edit: Altså et IM system Edit2: Jeg har tenkt litt på saken og tenker veldig php føler jeg. Men det jeg har kommet fram til er hvis jeg lager et "registrer bruker passord" opplegg som lagrer brukernavnet i en database og når du sender MSG bruker melding så legger serveren den i en database og et anna daemon ligger i bakgrunnen og konstant sjekker etter nye innlegg og sender de til riktig bruker. Kunne det funket eller finnes det raskere og bedre alternativ? Endret 1. februar 2008 av Jonas17 Lenke til kommentar
qebaba Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 Strengt tatt ikke så Python relatert som nettverksrelatert (Ikke at det er noe problem). Dessverre noe jeg ikke kan altfor mye om, men jeg kan anbefale deg: Unix Network Programming av W. Richard Stevens Computer Networks av Andrew Tanenbaum dersom du ønsker å lære mer om nettverk. Lenke til kommentar
genstian Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 Heisann, jeg måtte bare registrere meg da jeg så denne posten. Python så gøy ut og jeg har erfaring fra php scripting og bash så jeg tenke å hoppe uti og ta utfordringen fra første side. Det her er første gangen jeg har prøvd på python så nå sitter jeg litt fast. Jeg har laget en socket "server" som lytter på en port og en client som kan sende tekst strenger til serveren, men det jeg trenger er et lite hint om hvordan jeg kan koble bruker id'er sammen. Altså så serveren veit hvor den skal sende meldinen. Edit: Altså et IM system Edit2: Jeg har tenkt litt på saken og tenker veldig php føler jeg. Men det jeg har kommet fram til er hvis jeg lager et "registrer bruker passord" opplegg som lagrer brukernavnet i en database og når du sender MSG bruker melding så legger serveren den i en database og et anna daemon ligger i bakgrunnen og konstant sjekker etter nye innlegg og sender de til riktig bruker. Kunne det funket eller finnes det raskere og bedre alternativ? Du kan jo lage en tråd istede for en ny daemon og du kan bruke minne fremfor database. Ellers er den vel egentlig grei. Lenke til kommentar
Arne Skrevet 5. februar 2008 Forfatter Del Skrevet 5. februar 2008 Jonas17: Du kan jo leggje til kvar brukar som legg seg til i ein dict, t.d users = {"per": "192.168.0.1"} Og så når nokon skal snakke med "per", så sender du meldingen til ipen som står i dicten. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå