Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  14 1317
Vet ikke hvordan dette skal løses...

Illustrasjon:
http://bildr.no/thumb/558767.jpeg

Altså:

1. Programmet må motta informasjon fra internett
2. Det bearbeides og sendes videre til et 'console' program, veldig likt cmd.exe f.eks
3. Outputen skal sendes tilbake til programmet
4. Som da igjen sendes videre til internett\database.


Er dette løselig med noe enkele triks? Det som skjer i "console" programmet skal helst være skjult slik at det ikke popper på skjermen, ettersom man må skrive inn kommandoer fysisk til vanlig.
Ja, dette er helt fint mulig. Hvordan det skal gjøres er ikke godt å si når du ikke nevner programmeringsspråk eller spesifikasjoner på dette opplegget: Mengder data, responstid og så videre.
med fruktkjøtt.
Tias's Avatar
Crew
Når du sier motta informasjon fra internett, betyr det at det finnes andre programmer på nettet som aktivt vil sende til programmet ditt, i.e. du må implementere en klient basert på konkrete spesifikasjoner, eller betyr det at programmet ditt skal være den aktive parten, og skal be om data fra spesifikke kilder?

Når det gjelder hvorvidt det lar seg gjøre: sure! Det er bare til å sette i gang
esl
twist?
esl's Avatar
Trådstarter
Mengder data som hentes fra internett er veldig lite. Programmet skal være den aktive parten og be om data.
Den outputn som kommer ut fra consoleprogrammet kommer i hundrevis av linjer som skal 'streames' til en database.
Responstid skal være kort.

Ser helst at dette skjer ved java, ellers er vel c++ godtatt ettersom det skal læres i år via skole.

Dette er et prosjekt som skal brukes litt kveldstid på frem til sommer'n, og det vil bli bli portert til linux.
Derfor sliter jeg litt med å finne hvilket språk og hvilken løsning som fungerer best.
skal du bruke en del linux er vel C en god anbefaling, eventuelt python og/eller java. C++ kan og fungere, men sammen med linux anbefaler jeg C over C++.
Jeg anbefaler Python! Der får du gjort mye med lite kode

Først kan du prøve å finne ut hvordan du kan hente noe fra nettet. Se f.eks. http://www.python.org/doc/2.6.4/howto/urllib2.html

For å lære litt kort og godt om Python så kan du f.eks. se gjennom hva han her har skrevet: http://www.swaroopch.com/notes/Python (ca 110 siders pdf som er lett å lese!)

Hva du skal motta aner jeg ikke, men dette kan være en god start
Kan du forklare litt mer hva du vil programmet skal kunne gjøre?

Det er antagelig ikke så veldig vanskelig bare vi vet litt mer om hva som skal skje.. Jeg ville gjort det i Ruby da det fungerer på alle platformer uten behov for forskjellig kode.
Det er ikke så vanlig at programmer motar informasjon fra internett.
Tipper programmet skal hente info og lagre det i en db.
Det kommer veldig hva slags informasjon du snakker om.
Om det f.eks er rss feeds er det ikke så vanskelig.

Kaizen
esl
twist?
esl's Avatar
Trådstarter
Det som hentes fra nettet er bare "ord" på 4-5 bokstaver, som blir oppdatert ca. hvert 5 minutt, og det skal sendes videre til det console programmet (skal kunne kjøre flere instanser av programmet samtidig).

Ny illustrasjon:
http://bildr.no/thumb/559353.jpeg

Det som jeg skal lage må skjule all inputten som gjøres til dette programmet, ettersom det blir uheldig om det popper opp mange vinduer.
Går fint om dette er et 'learn-by-doing' prosjekt.

Men hvis dette går an med python, går det an med PHP da? Serveren med alt på skal kjøres lokalt, så kan bruke alt av plugins.
Dette kan du klare i nesten hvilket som helst språk.

Lykke til.
esl
twist?
esl's Avatar
Trådstarter
Har valgt python og er igang.
Men finner ikke hvordan man kan kjøre flere instanser f.eks 'dos-console-program' (lik cmd.exe) programmer inni python. Poenget er at scriptet skal skrive inn i dette 'consolet' (ikke argumenter etter filnavnet) og returnere svarene tilbake fortløpende per gang det skjer en output i dette consoleprogrammet.

Har lest i timesvis og prøvd med os moduln, og systemcall etc, men får ikke tid.
Threading er tingen.
Threading som |d13m0b foreslår kan du bruke.
Python har en build-in threading module.
Har testet noe kode og forandret så den passer bedere til deg kansje,men ikke sikkert.

Kort forklaring av hvordan dette fungerer.
Jeg kjører lokalt når jeg tester.
Starter server,den vil nå lytte etter klienter.
Server har multi-threading kapasitet.

Starter klient.
Klient vil nå kjøre 5 thread og da motta 5 meldinger(someList) hvor pickle modulen blir brukt.
Hver klient kan nå sende 5 beskjeder til server.

Ja,et eksempel på bruk av thread module.
For database er build-in sqlite grei og bruke.
For på enkel og avansert nettverk styring er Twisted bra.

Et bilde av hvordan dette ser ut.
http://bildr.no/thumb/560158.jpeg

Kode

## Server.py
import pickle
import socket
import threading

# We'll pickle a list of numbers
someList = [1, 2, 7, 9, 0]
pickledList = pickle.dumps (someList)

# Our thread class
class ClientThread (threading.Thread):    

   # Override Thread's __init__ method to accept the parameters needed
   def __init__ ( self, channel, details ):
      self.channel = channel
      self.details = details
      threading.Thread.__init__ ( self )

   def run ( self ):           
      print 'Received connection:', self.details [0]
      self.channel.send (pickledList)
      for x in xrange (10):
         mes =  self.channel.recv (1024)
         print mes         
      self.channel.close()
      print 'Closed connection:', self.details [0]

# Set up the server
server = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
server.bind (( '', 2727 ))
server.listen (5)

# Have the server serve "forever"
while True:
   channel, details = server.accept()
   ClientThread ( channel, details ).start()

Kode

## Client.py
import pickle
import socket
import threading
import time

# Here's our thread:
class ConnectionThread (threading.Thread):

   def run (self):
      # Connect to the server:
      client = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
      client.connect (('localhost', 2727 ))

      # Retrieve and unpickle the list object
      print pickle.loads (client.recv (1024))

      # Send some messages
      time.sleep(1)
      m = raw_input('Message: ')  # we can send 5 threads to server
      client.send (m)

      # Close the connection
      client.close()

# Let's spawn a few threads
for x in xrange (5):  # we will recive 5 threads from server
   ConnectionThread().start()
Jeg gjorde noe lignende under TG en gang.

Jeg koblet sammen et mIRC-script, webside og et bashscript i en lignende situasjon.
mIRCscriptet og bash-scriptet kjørte kommandoer som sendte data/mottok data fra en webside jeg hadde satt opp.
websiden var et enkelt CGI-script som bare mottok ?=webcam (f.eks), fant fram resultatliste, laget en side som het resultat.txt og scriptet fikk dermed beskjed fra websiden at den var laget, hentet ned resultat.txt og gjorde resten av utregningen selv.

jeg elsker bash <3
esl
twist?
esl's Avatar
Trådstarter
Har fått det meste til, men det er en ting som plager meg som jeg ønsker å få til uten å lage hundre linjer med suppekode.
Linjene som programmet spytter ut er:

Kode

info mpv 10 dpth 4 scr cv -9 time 149 nd 153 nps 1051 pv bla1 bla44 3bla2 etc
Ønsker å få ut:
etter mpv ->0-uendelig
etter dpth -> uendelig
etter cv -> (+|-)uendelig
etter nd -> 0-uendelig
etter nps -> 0-uendelig
etter pv -> alt

eks på hvordan det skal tenkes å løses:

Kode

pattern = "info mpv ([0-9]+) dpth ([0-9]+) scr cv ((-)[0-9]+) time ([0-9]+) nd ([0-9]+) nps ([0-9]+) pv (.*)

match1 = re.match(pattern, line).group(0)
// Hvor group 1 er tallet etter mpv.
Dette skal da mates inn i en database etterpå.

Ser for meg at det må finnes noe som kan gruppere dette med en eneste regex uten å hente ut èn og èn, men finner ingenting i python...
Sist endret av esl; 4. januar 2010 kl. 14:35.