I need some help writing a simple graphical app

Discuss Programming

I need some help writing a simple graphical app

Postby Void Main » Thu Jul 14, 2005 10:50 pm

This should be *very* simple for someone that knows what they are doing. I currently have something started in pygtk that has roughly the look I want. Problem is I have never programmed in Python and haven't done much with GTK either so I am a complete novice at what I am attempting to do.

Ok, first off let me tell you what I am trying to do. I have this large LED display (5 inch high numbers) that we are using to record elapsed time with starting line and finish line sensors. When I get my cable I will be able to capture these times off of the serial port (Chronomix format). I eventually want to write a database app that will record these times automatically into the appropriate record but for now I just want to get something extremely basic set up.

For now I just want a simple display of times as they come in with the most recent time going to the top of the list. I also want to record these times to a file but that part will be easy. Here's a screenshot of what I am after from the program I have so far:

Image

Here's the script:

http://voidmain.is-a-geek.net/files/scr ... ed_time.py

Notice the times are just hard coded. What I would like is the equivalent of a "tail -f filename" inside the program and as numbers are read the display is updated. Latest time on top pushing the older times down. I haven't been able to figure out how to set up a loop that will wait on input and then update the times when input is received.

Thanks for any help!

P.S. I am using an LCD font that I got from here:
http://www.spinwardstars.com/scrfonts/lcd.html
The font isn't needed to make the program work though.
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby ZiaTioN » Fri Jul 15, 2005 8:42 pm

Maybe something like the following:

Code: Select all
#!/usr/bin/perl -w

use strict;
use Tk;

my $main = MainWindow->new();
$main->title("Elapsed Time");
$main->minsize(700, 500);
$main->maxsize(700, 500);
$main->repeat(2000, \&get_time);

my $frame = $main->Frame(-background=>'black')->pack(-pady=>2,
                      -padx=>2, -ipady=>2, -ipadx=>2,
                      -side=>'top', -fill=>'both', -expand=>1);

&get_time();

MainLoop;

sub get_time {
   my @times;

   for (0..2) {
      my $rand1 = (0..9)[rand 10];
      my $rand2 = (000..999)[rand 1000];
      my $time  = $rand1.'.'.$rand2;

      push(@times, $time);
   }

   $frame->destroy();
   $frame = $main->Frame(-background=>'black')->pack(-pady=>2,
                         -padx=>2, -ipady=>2, -ipadx=>2,
                         -side=>'top', -fill=>'both', -expand=>1);

   for (reverse(@times)) {
      $frame->Label(-background=>'black', -foreground=>'red',
                    -font=>['Georgia', 100], -text=>$_)->
                    pack(-side=>'top', -anchor=>'n');
   }
}


Sorry I know perl much better then python.

Image
ZiaTioN
administrator
administrator
 
Posts: 460
Joined: Tue Apr 08, 2003 3:28 pm

Postby Void Main » Fri Jul 15, 2005 9:04 pm

Thanks. I thought about using PerlTk but was hoping to use this exercise to learn something about Python and a little more about GTK. I've tried to sit down and learn Python in the past but it's just so much different that I don't know if I really WANT to learn it. I am certainly much better with Perl and I have even written a few PerlTk apps in the past but I do very very little GUI programming.

Having said that I am rusty at best with the Tk part of it. In the PyGTK program I used a text buffer with scrollbars rather than a label. My thought was I could just keep inserting text and be able to look back on previous times by scrolling down, not that the times by themselves would mean anything beyond 2 or 3 from the latest. In your example when the times update the window disappears and then reappears. I wonder if there is a way to smoothly scroll the text down without the window disappearing? I'll play with your PerlTk start and see what I can come up with. I know I'll make better headway than I will with Python because I am already proficient with Perl which will make things go a lot faster on the database backend.

Thanks again!

P.S. I also notice that in PerlTk the edges on the LCD font I am using aren't nearly as smooth as they are in PyGTK. I am using pango in PyGTK. I wonder if there are any Tk options to make the font look nicer? This is the font param I am using now: "-font=>['lcd', 150, 'bold']"
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby worker201 » Fri Jul 15, 2005 9:29 pm

What is this for, anyway? You trying to set something up for a race? Like a Pinewood Derby? Helping the kids?
worker201
guru
guru
 
Posts: 668
Joined: Sun Jun 13, 2004 6:38 pm
Location: Hawaii

Postby ZiaTioN » Fri Jul 15, 2005 9:34 pm

Ahh ok. I thought you only wanted to see the last three or so. You can use the Scrolled along with the ROText flag to get the results you desire.

Code: Select all
#!/usr/bin/perl -w

use strict;
use Tk;
use Tk::ROText;

my $main = MainWindow->new();
$main->title("Elapsed Time");
$main->minsize(500, 500);
$main->maxsize(500, 500);
$main->repeat(2000, \&get_time);

my $frame = $main->Scrolled("ROText", -background=>'black', -foreground=>'red',
                            -font=>['Georgia', 120], -scrollbars=>'e')->pack(-pady=>2,
                            -padx=>2, -ipady=>2, -ipadx=>2,
                            -side=>'top', -fill=>'both', -expand=>1);

&get_time();

MainLoop;

sub get_time {
   my $list = $frame->get("1.0", "end");
   my @times = reverse(split(/\n/, $list));
   for (0..2) {
      my $rand1 = (0..9)[rand 10];
      my $rand2 = (000..999)[rand 1000];
      my $time  = $rand1.'.'.$rand2;

      push(@times, $time);
   }

   $frame->delete("1.0", "end");
   for (reverse(@times)) {
      $frame->insert("end", "$_\n");
   }
}


Since you wanted to see the last results at the top then some tricky read and delete then reverse and readd methods had to be used but it works.
ZiaTioN
administrator
administrator
 
Posts: 460
Joined: Tue Apr 08, 2003 3:28 pm

Postby Void Main » Fri Jul 15, 2005 9:49 pm

worker201 wrote:What is this for, anyway? You trying to set something up for a race? Like a Pinewood Derby? Helping the kids?


Actually I am the vice president of a local dirt bike club. We have hill climbs, hare scrables and enduro races. This is for our hill climb events. I talked the club into buying a new set of lights and this new one is extremely cool:

http://www.raceamerica.com/dtet.html

We bought the 6532E setup. We have an older light set that I am getting nervous about failing so we'll use it as a backup since we have the new one. I used to enter all the times manually into an OpenOffice Calc spreadsheet for each rider (around 100 riders times 2 climbs each (and some riders enter in multiple classes)). It keeps me busy without a break for about 6 hours straight. Anything I can do to automate this will be great. I figure with the new light we can mount it outside of the timer shack and we wouldn't necessarily have to be able to see it if I have a laptop hooked up to it also displaying the times in the shack. Our next climb is less than a month away so I probably wont have the super elaborate rider database done by then but I figure I can at least have a laptop also displaying the time and keeping the last few up in case the timer gets reset and we missed recording it. Fun fun fun.

Here's the old Calc spreadsheet I wrote before the first climb this year. It really worked out well compared to what we have been doing:

http://voidmain.is-a-geek.net/files/mis ... mplate.sxc
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby Void Main » Fri Jul 15, 2005 10:39 pm

ZiaTioN wrote:Since you wanted to see the last results at the top then some tricky read and delete then reverse and readd methods had to be used but it works.


Based on your previous code I have roughly what I want. I haven't figured out how to right justify the numbers though. Basically to test the script you can run it and then at the command line:

$ echo 4.234 > time.dat
$ echo 3.234 > time.dat
$ etc...

It will always have 3 decimal places so right justifying is needed. The only other thing is the font doesn't seem to be antialiased like it is with the PyGTK script. Here's what I got started so far:

Code: Select all
 #!/usr/bin/perl -w

use strict;
use Tk;
use Tk::ROText;
my $oldtime = "";
my $main = MainWindow->new();
$main->title("Elapsed Time");
$main->minsize(500, 500);
$main->maxsize(500, 500);
$main->repeat(1000, \&get_time);

my $frame = $main->Scrolled("ROText", -background=>'black', -foreground=>'red',
                            -font=>['lcd', 150, 'bold'], -scrollbars=>'e')->pack(-pady=>2,
                            -padx=>2, -ipady=>2, -ipadx=>2,
                            -side=>'top', -fill=>'both', -expand=>1);

&get_time();

MainLoop;

sub get_time {
   open(TIME,"<time.dat");
   my $time = <TIME>;
   close(TIME);

   if ($time ne $oldtime) {
      $frame->insert("1.0", "$time");
   }
   $oldtime = $time;
}
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby Void Main » Sat Jul 16, 2005 8:58 am

I've thought about this a little more and I think I want the display a little different. What would be cool is to have two large black boxes on top of each other. The top box would display what the clock currently shows and the second box would show the last actual recorded time. That way in the timing booth we can tell if the clock is set and ready for the next rider. When the clock is ready it just displays the decimal point with no numbers:

Code: Select all
"  .    "


So when it's in that state I would like to have the top box display it just the same but the second box would contain the previous time. Now, as new times are recorded the time from the second box is pushed down into a scrolling area of times below both of those boxes, with a smaller font. Also, the clock has a fixed format of course, in the format of "SSS.FFF" so there will always be 3 digits on the right side of the decimal which is why I want it right justified and need a fixed font. Everything lines up and looks much better that way. The times will almost always be below 10 seconds for our application. Fastest times are usually just over 3 seconds and slowest times are usually less than 6 seconds. It's probably just as easy to code it as it is to describe it but I probably won't get another chance to work on it until this afternoon, and I like to see what ideas other people have.

I'm still not 100% sure how much information I can get off the serial port other than just the times though. I don't know if it sends out a record when it's ready (just showing the decimal). I have to think it would but I won't know until I get my cable in the next couple of days.

I have been conversing with someone who has a similar light and is capturing times on a Linux PC for some sort of white water racing. He's going to be timing the white water events for the Pan American games as well. His timer is a little different in that they use it as a running stop watch and grab the times as the lights are broken and update a MySQL database with them. I guess they would get running time as well as elapsed time.
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby Void Main » Sat Jul 16, 2005 11:33 am

Ok, I played around a little and this is much closer to what I am looking for:

et.pl
Code: Select all
#!/usr/bin/perl -w

use strict;
use Tk;
use Tk::ROText;

my @times;
my $oldtime = "";

# Main Window
my $main = MainWindow->new();
$main->title("Elapsed Time");
$main->minsize(550, 550);
$main->maxsize(550, 550);
$main->repeat(500, \&get_time);

# Real Time Clock
my $rt_frame = $main->Frame(-relief=>'groove',
                            -borderwidth=>5,
                            -background=>'black'
                    )->pack(-side=>'top',-fill=>'x',-anchor=>'e');

my $rt = $rt_frame -> Label(-text => "",
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'red',
                            -font=>['lcd', 150, 'bold']
                    )->pack(-side=>'top',-anchor=>'e');

# Last Elapsed Time
my $et_frame = $main->Frame(-relief=>'groove',
                            -borderwidth=>5,
                            -background=>'black'
                    )->pack(-side=>'top',-fill=>'x',-anchor=>'e');

my $et = $et_frame -> Label(-text => "",
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'red',
                            -font=>['lcd', 150, 'bold']
                    )->pack(-side=>'top',-anchor=>'e');

# ET History
my $eh_frame = $main->Frame(-relief=>'groove',
                            -borderwidth=>5,
                            -background=>'black'
                    )->pack(-side=>'top',-fill=>'x',-anchor=>'e');

my $eh = $eh_frame->ROText(-background=>'black', -foreground=>'red',
                           -font=>['lcd', 24, 'bold']
                   )->pack(-side=>'top', -fill=>'x',-anchor=>'e');

&get_time();

MainLoop;

sub get_time {

   open(TIME,"<time.dat");
   my $time = <TIME>;
   close(TIME);
   chop($time);

   if ($time ne $oldtime) {
      if ($time eq "\.") {
         $rt->configure(-text=>"READY");
         $et->configure(-text=>"$oldtime");
      } else {
         $rt->configure(-text=>"$time");
         $et->configure(-text=>"$oldtime");
         $eh->insert("1.0", "$time\n");
         $oldtime = $time;
      }
   }


Image
Image

Enter times by:

Code: Select all
$ echo "." > time.dat
$ echo 3.254 > time.dat
$ echo "." > time.dat
$ echo 4.834 > time.dat
$ echo "." > time.dat
$ echo 5.155 > time.dat
$ echo "." > time.dat
$ echo 3.984 > time.dat
$ echo "." > time.dat
$ echo 3.234 > time.dat
$ echo "." > time.dat
$ echo 6.231 > time.dat
$ echo "." > time.dat
$ echo 4.234 > time.dat


I'll have another program grabbing data from the serial port and I can put it out in the above format. The only thing left is I might want to pretty it up and label the boxes something like "RT" for the first one "ET" for the second one. I wish I could justify the text box. Maybe I should also use labels there and make the history box narrower and use the rest of that space for something else. Hmmmm...
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby Void Main » Sat Jul 16, 2005 1:05 pm

Actually, this is better:

Image

But now I've lost my right justification.

Here's the new and nearly final code:

Code: Select all
#!/usr/bin/perl -w

use strict;
use Tk;
use Tk::ROText;

my $oldtime = "";

# Main Window
my $main = MainWindow->new();
$main->title("Elapsed Time");
$main->minsize(800, 420);
$main->maxsize(800, 420);
$main->repeat(500, \&get_time);

# Outer frame
my $out_frame = $main->Frame()->pack();

# Left frame
my $l_frame = $out_frame->Frame(-relief=>'groove',
                                -borderwidth=>5,
                                -background=>'blue'
                        )->pack(-side=>'left');

# Reft frame
my $r_frame = $out_frame->Frame(-relief=>'groove',
                                -borderwidth=>5,
                                -background=>'blue'
                        )->pack(-side=>'right');

# Real Time Clock
my $rt_frame = $l_frame->Frame(-relief=>'groove',
                            -borderwidth=>5,
                            -background=>'black'
                    )->pack(-side=>'top');

my $rt = $rt_frame -> Label(-width=>6,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'red',
                            -font=>['lcd', 200, 'bold']
                    )->pack();

# Last Elapsed Time
my $et_frame = $l_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black'
                       )->pack(-side=>'bottom');

my $et = $et_frame -> Label(-width=>6,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'red',
                            -font=>['lcd', 200, 'bold']
                    )->pack();

# ET History
my $eh_frame = $r_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black'
                       )->pack(-side=>'right');

my $eh = $eh_frame->ROText(-background=>'black', -foreground=>'red',
                           -width=>7,
                           -font=>['lcd', 30, 'bold']
                   )->pack();

&get_time();

MainLoop;

sub get_time {

   open(TIME,"<time.dat");
   my $time = <TIME>;
   close(TIME);
   chop($time);

   if ($time ne $oldtime) {
      if ($time eq "\.") {
         $rt->configure(-text=>"READY");
         $et->configure(-text=>"$oldtime");
      } else {
         $rt->configure(-text=>"$time");
         $et->configure(-text=>"$oldtime");
         $eh->insert("1.0", "$time\n");
         $oldtime = $time;
      }
   }
}
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby ZiaTioN » Sun Jul 17, 2005 5:22 pm

I changed your code to be a little more stable in appearance. Your code looked different on my Windows machine then it did on your Linux box. I know we don't care about Windows but designing your GUI in a more explicit way is a better option I think.

Code: Select all
#!/usr/bin/perl -w

use strict;
use Tk;
use Tk::ROText;

my $oldtime = "";

# Main Window
my $main = MainWindow->new();
$main->title("Elapsed Time");
$main->minsize(800, 420);
$main->maxsize(800, 420);
$main->repeat(500, \&get_time);

# Outer frame
my $out_frame = $main->Frame()->pack(-fill=>'both');

# Left frame
my $l_frame = $out_frame->Frame(-relief=>'groove',
                                -borderwidth=>5,
                                -background=>'blue'
                        )->pack(-side=>'left', -fill=>'both', -expand=>1);

# Reft frame
my $r_frame = $out_frame->Frame(-relief=>'groove',
                                -borderwidth=>5,
                                -background=>'blue'
                        )->pack(-side=>'right',
                                -fill=>'both');

# Real Time Clock
my $rt_label = $l_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black',
                              )->pack(-side=>'top',
                                      -fill=>'both');

my $rt_title = $rt_label->Label(-width=>20,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'white',
                            -text=>'Real Time Clock',
                            -font=>['lcd', 10]
                    )->pack();

my $rt_frame = $l_frame->Frame(-relief=>'groove',
                            -borderwidth=>5,
                            -background=>'black'
                    )->pack(-side=>'top',
                            -fill=>'both',
                            -expand=>1);

my $rt = $rt_frame -> Label(-width=>6,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'red',
                            -font=>['lcd', 100, 'bold']
                    )->pack();

# Last Elapsed Time
my $et_label = $l_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black',
                              )->pack(-side=>'top',
                                      -fill=>'both');

my $et_title = $et_label->Label(-width=>20,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'white',
                            -text=>'Elapsed Time Clock',
                            -font=>['lcd', 10]
                    )->pack();

my $et_frame = $l_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black'
                       )->pack(-side=>'bottom',
                               -fill=>'both',
                               -expand=>1);

my $et = $et_frame -> Label(-width=>6,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'red',
                            -font=>['lcd', 100, 'bold']
                    )->pack();

# ET History
my $eh_label = $r_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black',
                              )->pack(-side=>'top',
                                      -fill=>'both',
                                      -expand=>1);

my $eh_title = $eh_label->Label(-width=>20,
                            -justify=>'right',
                            -background=>'black',
                            -foreground=>'white',
                            -text=>'Elapsed Time History',
                            -font=>['lcd', 10]
                    )->pack();

my $eh_frame = $r_frame->Frame(-relief=>'groove',
                               -borderwidth=>5,
                               -background=>'black'
                       )->pack(-side=>'right',
                               -fill=>'both',
                               -expand=>1);

my $eh = $eh_frame->ROText(-background=>'black', -foreground=>'red',
                           -width=>7,
                           -font=>['lcd', 30, 'bold']
                   )->pack();

&get_time();

MainLoop;

sub get_time {

   open(TIME,"<time.dat");
   my $time = <TIME>;
   close(TIME);
   chop($time);

   if ($time ne $oldtime) {
      if ($time eq "\.") {
         $rt->configure(-text=>"READY");
         $et->configure(-text=>"$oldtime");
      } else {
         $rt->configure(-text=>"$time");
         $et->configure(-text=>"$oldtime");
         $eh->insert("1.0", "$time\n");
         $oldtime = $time;
      }
   }
}


Basically only thing I changed was expanded the widgets and "-filled" them just to make sure they look the same across platforms. Tk on Linux assumes some default things that Tk on Windows does not and expansion and fill are two of them. I also added the section labels like you referenced.

Here is what your code looked like at first on my machine:
Image

Here is what it looked like after I changed the font to 100 instead of 200:
Image

Now here is what it looks like after I changedf the GUI up a bit and added the label:
Image
ZiaTioN
administrator
administrator
 
Posts: 460
Joined: Tue Apr 08, 2003 3:28 pm

Postby Void Main » Sun Jul 17, 2005 6:09 pm

I wonder if the LCD font that I am using is the difference? I actually did a lot more work on it last night and it's really looking sweet. I started the database today and need to build a web interface to populate it. I have been thinking about how I want to do things all day and this is going to be pretty cool if everything comes together. This is basically what I have in mind:

Laptop #1: I have an old Dell Latitude CPi 366Mhz laptop that will be running the app we built in this thread. The timing light will be plugged into the serial port on this laptop. It will also be running a MySQL database and an Apache server. I have upgraded it to FC4 and just ordered some more memory and a new battery for it. I also stuck a wireless card in this laptop.

Laptop #2: My main laptop also running FC4 and has a wireless card.

We have about 4 hours before the event where the riders sign up and pay their entry fee. I will have a web app (PHP) built and running on Laptop 1 that I will connect to from Laptop #2 in the clubhouse and enter all the rider info into the database through that web app. In fact since it is a web database we could have more than one person at a time entering rider data. Before I entered it all by myself in a Calc spreadsheet.

During the event when a rider comes to the line I would like to be able to enter the rider number in the ET program we wrote in this thread, which would then pull up the rider info and display it along with the time. When the time is displayed I would like it automatically entered into the database associated with that rider number. Actually, I may need that time to be editable and have to have someone click a button to record it in the database. The reason for this is that the rider might not actually make it over the hill and we will have to record a footage rather than a time (which is the case mostly in the kids classes).

In the first climb we had this year I also had a laser printer hooked up and after each run in each class I would print out a sheet sorted by fastest rider and hang it on a bulletin board outside the timing shack. I am thinking that since I will have this on a wireless network we could have someone else bring in their laptop (laptop #3) and have a real time status page that could be browsed. It would save me a lot of printing and time not having to do that.

I am not sure if I want anyone entering data on the keyboard on laptop 1 though. I might want to do this from my laptop 2. I think leaving it as a display laptop only (and running the database and web server) is the best way to do it. I will have to enable this Tk app to recognize what rider is at the line and display their information. I guess this means that the Tk app will have to change quite a bit to also display the rider information and maybe record the rider number with the time in the history. I don't really want to worry about that until I get the web database built though.

I haven't started on the web app but I did create the tables I think I need based off of the information I have recorded in the spreadsheet. Here's the schema I have come up with so far:

Code: Select all
CREATE TABLE `rider` (
  `rid` int(11) NOT NULL auto_increment,
  `last` varchar(25) NOT NULL default '',
  `first` varchar(25) NOT NULL default '',
  `city` varchar(25) NOT NULL default '',
  `st` char(2) NOT NULL default '',
  `age` smallint(6) NOT NULL default '0',
  `dist` smallint(6) NOT NULL default '0',
  `sponsor` varchar(50) NOT NULL default '',
  `comments` text NOT NULL,
  PRIMARY KEY  (`rid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

CREATE TABLE `class` (
  `cid` char(3) NOT NULL default '',
  `rid` int(11) NOT NULL default '0',
  `bike` varchar(25) NOT NULL default '',
  `sponsor` varchar(50) NOT NULL default '',
  `comments` text NOT NULL,
  PRIMARY KEY  (`cid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `times` (
  `cid` char(3) NOT NULL default '',
  `et` varchar(6) NOT NULL default '',
  `timestamp` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


This is "roughly" what I have thought out so far. I guess in addition to getting all the data in the database I have to figure out how to signal the ET Tk app for which rider is at the line. Really the idea is pretty simple, now I just have to motivate myself to write code which is getting harder to do these days. :)

Last night before calling it a night I wrote a little script to stick different times in the "time.dat" file every 1 second alternating with a "." to put it into the READY state. I fired up a second copy of the app and had it display on my second laptop over the wireless connection. So I had two copies of the Tk app running times every 1 second all night long. I just wanted to make sure it would hold up on climb night. It passed with flying colors. The old laptop running it only has 64MB of RAM and is a 366Mhz running FC4 (as I mentioned). I also have it running the ET Tk app, the MySQL database, and web server right now and it seems to be working very acceptably even with that little amount of RAM. I should have 256MB in it by the middle of the week so it will have more than enough to do what I want.

I'm open for suggestions on any of this and if anyone is interested in helping I would certainly take it. I certainly thank you for the boost with the perl-Tk! Sometimes I just need a nudge here and there and then I can't stop myself.
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby ZiaTioN » Sun Jul 17, 2005 8:20 pm

No problem.

Sounds like what you want is very possible. I would be happy to help with any of the perl programming you need. I am very familiar with Tk GUI creation, database programming and web scripting. Also socket programming, threaded models, etc, etc, etc... Pretty much anything you can do with perl I am familiar with.

Let me know if you run into any specific issues or need any help with any of it.

Also remember the "Project Tracker" web application I wrote for you a while back. That would be a good reference for you for your database portion.
ZiaTioN
administrator
administrator
 
Posts: 460
Joined: Tue Apr 08, 2003 3:28 pm

Postby Void Main » Sun Jul 17, 2005 8:41 pm

I actually do Perl and PHP database and web programming all day every day at work which is why I have to motivate myself to do things like this. I just don't feel like doing it at night. I guess the motivation is that it is something for me rather than for someone else.
User avatar
Void Main
Site Admin
Site Admin
 
Posts: 5705
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA

Postby ZiaTioN » Thu Jul 28, 2005 12:07 pm

So how about that final application? I did not put this much time into helping you just to get stiffed on seeing the final product! LOL....

Just kidding, but seriously have you finished it yet?
ZiaTioN
administrator
administrator
 
Posts: 460
Joined: Tue Apr 08, 2003 3:28 pm

Next

Return to Programming

Who is online

Users browsing this forum: No registered users and 1 guest

cron