Try to reduce runaway memory usaqe
Try to reduce runaway memory usaqe

file:b/.gitmodules (new)
--- /dev/null
+++ b/.gitmodules
@@ -1,1 +1,4 @@
+[submodule "pynma"]
+	path = pynma
+	url = git://github.com/uskr/pynma.git
 

file:b/README.txt (new)
--- /dev/null
+++ b/README.txt
@@ -1,1 +1,1 @@
-
+ffmpeg from http://ffmpeg.zeranoe.com/builds/

directory:b/pynma (new)
--- /dev/null
+++ b/pynma

file:b/run.bat (new)
--- /dev/null
+++ b/run.bat
@@ -1,1 +1,1 @@
-
+python scannr.py > output.txt

file:a/scannr.py -> file:b/scannr.py
--- a/scannr.py
+++ b/scannr.py
@@ -1,32 +1,92 @@
+import logging
+logging.basicConfig(level=logging.DEBUG,
+                    format='%(asctime)s\t%(levelname)s\t%(message)s')
+
 import snd
 import time
 from datetime import date
 import threading
+from pydispatch import dispatcher
+import wave
+import serial
+#python -m serial.tools.miniterm -p COM20 -e -b 115200 --cr
+import psycopg2
+import csv
+import sys,os
 
-filename = ""
-def worker(filename):
+
+sys.path.insert(0, os.path.join(os.path.dirname(__file__) or '.', 'pynma'))
+import pynma
+
+filename = "demo.wav"
+MIN_LENGTH = 90000
+
+
+def worker(filename, length):
+
     """thread worker function
     http://www.doughellmann.com/PyMOTW/threading/
+    https://github.com/uskr/pynma
+ffmpeg -i 2012-09-29-1348911268.34-demo.wav -ar 8000 -ab 4.75k test.3gp
+http://stackoverflow.com/questions/2559746/getting-error-while-converting-wav-to-amr-using-ffmpeg
+"""
+    print 'Worker for '+filename
+    ser.write("GLG\r")   
+    line = ser.readline()   # read a '\n' terminated line
+    print line
+    reader = csv.reader([line])
+    for row in reader:
+        #GLG,40078,NFM,0,0,CanberraBlackMnt,AustralianCapita,SES Ops 1,1,0,NONE,NONE,NONE
+        if (row[0] != 'GLG'):
+            print "uh oh"
+        if (row[1] != ''):  
+            tgid = row[1]
+            #nma.push("scannr", "ping", filename, "http://www.google.com")
+            tgname = row[7]
+            sitename = row[5]
+            """http://initd.org/psycopg/docs/usage.html"""
+            cur = conn.cursor()
+            cur.execute("INSERT INTO recordings (filename,tgid,tgname,sitename,length) VALUES (%s, %s,%s, %s, %s)",(filename,tgid,tgname,sitename, length))
+            conn.commit()
+            cur.close()
+        else:
+            print filename+" has no TGID"
 
-    https://github.com/uskr/pynma"""
-    print 'Worker for '+filename
     return
 
 def filenameMaker():
     global filename
-    while True:
-        filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav'
-        time.sleep(5)
+    filename = date.today().isoformat()+'-'+str(time.time())+'-demo.wav'
 
+def record_to_async_file():
+    "Records from the microphone and outputs the resulting data to `path`"
+    sample_width, data = snd.record()
+    print str(len(data))
+    if len(data) > MIN_LENGTH:
+        data = snd.pack('<' + ('h'*len(data)), *data)
+        path = filename
+        dispatcher.send( signal='FILE_CREATED', sender=filename, filename=filename, length=len(data))
+        wf = wave.open(path, 'wb')
+        wf.setnchannels(1)
+        wf.setsampwidth(sample_width)
+        wf.setframerate(snd.RATE)
+        wf.writeframes(data)
+        wf.close()
+        del wf
+        print("done - result "+str(len(data))+" frames written to "+path)
+    del data
 
+dispatcher.connect( filenameMaker, signal='SND_STARTED', sender=dispatcher.Any )
+dispatcher.connect( worker, signal='FILE_CREATED', sender=dispatcher.Any )
 
-threads = []
-fm = threading.Thread(target=filenameMaker)
-fm.daemon = True
-fm.start()
-print "Scannr started..."
+print "Opening serial port..."
+ser = serial.Serial('COM20', 112500, timeout=1) 
+print "Loading notifymyandroid..."
+nma = pynma.PyNMA( "a6f50f76119eda33befe4325b4b9e1dd25eef7bad2868e4f")    
+print "Connecting database..."
+conn = psycopg2.connect("dbname=scannr user=postgres password=snmc")
+print "Scannr started."
 while True:
-    print "ready to record"
-    snd.record_to_file(filename)
-    t = threading.Thread(target=worker,args=(filename,))
-    t.start()
+    print "ready to record again"
+    record_to_async_file()
+ser.close()

file:a/snd.py -> file:b/snd.py
--- a/snd.py
+++ b/snd.py
@@ -10,12 +10,14 @@
 from array import array
 from struct import unpack, pack
 import threading
+from pydispatch import dispatcher
 
 CHANNELS = 1
 THRESHOLD = 500
 CHUNK_SIZE = 1024
 FORMAT = pyaudio.paInt16
 RATE = 44100
+MAX_SILENT = 30
 
 def is_silent(L):
     "Returns `True` if below the 'silent' threshold"
@@ -88,7 +90,6 @@
         data = stream.read(CHUNK_SIZE)
         L = unpack('<' + ('h'*(len(data)/2)), data) # little endian, signed short
         L = array('h', L)
-        LRtn.extend(L)
 
         silent = is_silent(L)
         #print silent, num_silent, L[:10]
@@ -97,9 +98,12 @@
             num_silent += 1
             print num_silent
         elif not silent and not snd_started:
+            dispatcher.send( signal='SND_STARTED')
             snd_started = True
             print snd_started
-        if snd_started and num_silent > 30:
+        if snd_started:
+            LRtn.extend(L)
+        if snd_started and num_silent > MAX_SILENT:
             break
 
     sample_width = p.get_sample_size(FORMAT)
@@ -124,6 +128,7 @@
     wf.writeframes(data)
     wf.close()
     print("done - result written to "+path)
+    del data
 
 
 

file:b/trunklog.php (new)
--- /dev/null
+++ b/trunklog.php
@@ -1,1 +1,31 @@
-
+<?php
+// http://www.unitrunker.com/logs.html
+/*
+Timestamp as YYYYMMDDHHMMSS
+Site number in unformatted decimal
+Action: Call, Leaves, Joins, Login, Logout, Drop, Add, Busy, Deny, Kill
+Source type I or G
+Source ID in unformatted decimal
+Target type I or G
+Target ID in unformatted decimal
+Channel number in unformatted decimal
+Call Type*/
+$row = 0;
+echo "<table>";
+if (($handle = fopen("C:\Users\Madoka\AppData\Roaming\UniTrunker\S00000001\UniTrunker-20120411.LOG", "r")) !== FALSE) {
+    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
+        
+        if ($row > 0 && count($data) == 9) {
+            
+        echo "<tr>";
+        for ($c=0; $c < count($data); $c++) {
+            echo '<td>'.$data[$c] . "</td>\n";
+        }
+        echo "</tr>";
+        }
+        $row++;
+    }
+    fclose($handle);
+}
+echo "</table>";
+?>