MightySETIInfo
Copyright (C) 2002 All Rights Reserved Drake Christensen

http://www.mightydrake.com/SetiAtHome/MightySETIInfo/

This file is starting out as mostly a brainstorming tool for myself.  As I go
along I'll probably use it to record my progress

The Plan and estimates -------------------------------------------------------
Set up project with sample Fox app (5 hours) Actual: 6.5
Read SETI files on local machine (2 hours) Actual: 1.0
Display in editbox (1 hour) Actual: 2.0
Parse input file (1 hour) Actual 2.75
Wrap C file funcs? (1 hour) (skipped this) Actual: 0.0
Set up prefs architecture (3 hours) Actual: 6.0, then abandoned
Done with prototype.  Start new project (1 hours) Actual 1.0
Decent architecture (2 hours) Actual 5.0
Write to sig file, fixed format (1 hour) Actual 1.0
File Open and Save As for configuration (1 hour) Actual 4.75
Package it up (1 hour) Actual 0.5
- Release 1.0 (19 hours, 18 days, Sun Sep 29) Actual 30.5 hrs, 49 days
Make UI much more user-friendly (2 hours) Actual 1.25
Package it up (1 hour) Acutal 0.75
- Release 1.1 (3 hours, 1 day, Mon Sep 30) Actual 2 hrs, 1 day
Singular/plural (1 hour)
Debug output (2 hours) Actual 1.0
Write to HTML, fixed format (2 hours) Actual 1.5
Find FTP code (5 hours) Actual 23.0 (gack!)
Package it up (1 hour)
- Release 2.0 (11 hours, 3 days, Tue Oct 3) (Actual Nov 22, 31 Hrs, 51 days)
Update UI to have Enable checkboxes for each output (1 hour) Actual 3 hrs
Implement string replacement in sig (3 hours) Actual 7.0 Hrs
Implement string replacement in HTML (1 hour) Actual 0.25 Hrs
Add template input fields (1 hour creep) Actual 0.75
Put email sig and HTML display boxes in splitter window (0 hours creep)
   Actual 0.5
Move input/output fields to configuration dialog? (2.0 hours creep) Actual
   5.75 hrs
Implement scheduled writes (0.5 hours) Actual 5.75 hrs
Package it up (1 hour)
- Release 3.0 (8 hours, 3 creep, 2 days, Fri Dec 21) Actual Jan 21, 17.75 hours,
   6.25 creep, 61 days
Add <%RandomText%> (2 hours creep) Actual 4.5 (FXRex bug)
Revisit regex and do multiple replacements in one file (1 hour) Actual 0.1 hrs
Countdown timer to next write? (2 hours) Actual 1.5 hrs
Need an "Okay, done" indicator of some sort (0.5 hrs) Actual 1.5 hrs
Find current SETIHide info showing local machine (1 hour) Actual 3.0 hrs
Debug flags (2 hours creep) Actual 5.5 hrs
Drop Transfer done box after timeout (0.5 hrs creep) Acutal 0.5 hrs
Compiler bug: Daylight Stupid Time (0.5 hrs creep) Actual 4.0 hrs
Package it up (1 hour)
Release 4.0 (7 hours, 5 creep, 2 days, Sat Jan 25) Actual Apr 25, 6.0 hrs, 11
    creep, 95 days
Write documentation in HTML (3 hours) 3.0? hrs
Make app icon (0 hours creep) 1.75
Hide/show app (0 hours creep) 4.5
Read the state.sah file for progress (1 hour creep) Actual 1.0
Only read SETI files when needed (2 hours creep) Actual 1.5
Rewrote Main config dialog to use FXMatrix (0 hours creep) Actual 3.0
Settle on a license agreement for the source files (1 hour creep)
-->
Package it up 2.0 hours
Release 4.5 (3 hours, 4 creep, 2 days) Actual 4.75 hours, 10.0 creep, 67 days,
    Jul 3
Conditional string replacements (if non-zero days output number, otherwise
    empty string)
What Did We Last Do on main screen.  Display errors where user can see them
 (3.0 hours)
Show icon in task tray (3 hours)
UI for designating source directory of other machines (2 hours)
Split out reading SETI files into list of info (4 hours)
Read Setihide.log (3 hours)
Implement error message system (6 hours)
Consider a minimalist main window (4 hours)
Implement Blowfish encryption (4 hours)
Package it up (2 hours)
Release 5.0 (31 hours, 9 days, Mon Jul 13)
Asynch FTP transfer (6 hours) (1.5 hrs already prior to v4.0)
Capture all FTP error messages into my own error system (3 hours)
Read SETI@Home user XML files (3 hours)
Read group page (4 hours)
Match machines to group page (2 hours)
Package it up (2 hours)
Release 6.0 (20 hours, 6 days, Sat Jul 19)

Screen layout ----------------------------------------------------------------
v3.0
Add enable checkboxes to right of Sig and HTML browse buttons
Add FTP server display, plus config button and enable checkbox right below
other text fields
Add Update Once then exit checkbox in line with Do It button
Rewrite button at the top?  Or bottom-right?
Need to move input/output selections to their own dialog?
Complete redesign.  Config stuff into its own dialog.  Main window has enable
checkboxes and last written/next write for each output
Leave input/output config choices in config menu.  That means putting those
commands back into enum in main window class

v2.0
Leave main screen as-is, ugly as it is
Add FTP enabled and Passive mode flags to main window
Make rest of FTP info a separate dialog
v1.1
Textfield with input name and browse button
Textfield with output name and browse button
Debug menu with
  Main settings log
  User info log
  Work unit log
  Straight log
  Save all to file

v1.0
Editbox with info like input .sah location, sig output location, etc
Editbox with parsed user info
Editbox with parsed WU info
Editbox with sig output

Brainstorming ----------------------------------------------------------------
Save off random seed of last write
Need Edit buttons to edit input templates
When user types in intervals, warn if they're extra long or extra short
Match LAN machines to group members
Mark one as "Main" acct (optional)
Look up user info on each LAN machine
Speed button to jump immediately to \\machine\c\program files\seti@home
Listbox with machines?  Progress, Time spent/remaining, WUs complete
  Extended info, Name on group page, caches
report .sig size
Logged data
FTP asynch
Read ftp timeout from ini file
Similar to debug flags, I should have a way to tag text added to the app log.
  That way, I can have lotsa stuff dumped into it and have and easy way to hide
  what I don't want just that minute
Output to bitmap
Better error handling
Write debug info to file
Multiple output files of each type.  For example, one for personal email, one
  for newsgroup posts, some txt, some html
  Prolly want a single listbox with intermingled txt/html files
Add pointer to latest certificate.  Prolly some standardized naming scheme?
  Prolly <&User&>Certificate.jpg
Use SETI@Home XML http://setiathome.ssl.berkeley.edu/individual.html
If I'm not creating a new sig/html, should I read the previous from the
  output file?  (For display in UI)  I think not
Try to build it on Linux
Logistics
  Directory layout of source, lib, 3rd party lib, exes, etc
  CVS
  Automated build of entire package
  Update diffs

INI entries ------------------------------------------------------------------
[Machines]
Root=SETI@Home folder
Email=Email address of "main" SETI acct
Alias=Name of "main" acct on group page
Group=Group ID
[MachineName1] (The machines will be enumerated above?)
Root=SETI@Home folder on xth LAN machine
Email=Email of xth acct
Alias=Group page name of xth acct
Group=Group ID

[Sig]
Enabled=0 or 1 (default=1)
OnStartupOnly=0 or 1 (if 0 then update when time expires)
LastWritten=Date/time sig was last written (YYYY-MM-DD HH:MM:SS)
Interval=Time in seconds between sig updates (24 hours = 86400)
Input=Path and filename of template file (default=SETIHideInfoSigInput.txt)
Output=Path and filename of sig file (default=SETIHideInfoSig.txt)
LimitWarning=When to warn that file is too large (default = 500)
LimitBlock=When to prohibit/truncate the file (default = 1000)

[@Home}
GroupURL=Guess
UserBaseURL=Base url of user info pages

[HTML]
Enabled=0 or 1 (default=1)
Input=Path and filename of template file (default=SETIHideInfoHTMLInput.htm)
Output=Path and filename of sig file (default=SETIHideInfoHTMLOutput.htm)
LastWritten=Date/time HTML was last written (YYYY-MM-DD HH:MM:SS)
Interval=Time in seconds between HTML updates (24 hours = 86400)

[FTP]
(No interval entry here.  If FTP is enabled then I'll simply upload it
immediately after writing the HTML)
Enabled=0 or 1 (default=1)
PassiveMode=0 or 1 (default=1)
Server=FTP Server
Directory=Path (include trailing /)
Username=FTP account name
Password=*WARNING* Password is stored in the open.  Don't use this feature if
   you have any question about who has access to this machine.  Suggestions
   for encryption ideas welcome

   If anyone wants to explain these firewall types to me so I can include
   documentation here I'd appreciate it
Firewall=0=None (default)
	 1=Site
	 2=Proxy
	 3=User With Login
	 4=User With No Login
   How these are used depends on the type of firewall you have
FirewallServer=
FirewallUser=
FirewallPassword=

[Quotes]
Input=Input file (default=MightySETIInfoQuotes.txt)
Delimiter=See Fox documentation for regex syntax.  (default="\n\n" which is a
blank line with no spaces between each quote)
DelimiterAdjustFront=Used to strip off delimiter from front of quote
	(default=0) Depending on the delimiter you use, sometimes the regex
	will leave a coupla characters of the delimiter itself on the
	beginning or the end of the string.  These will let you strip them off
DelimiterAdjustBack=Used to strip off delimiter from end of quote (default=0)

[System]
UpdateOnceThenExit=0 or 1 (default=1)
UsingSetiHide=0 or 1 (default=0)
HideWindow=Hide the window on startup 0 or 1 (default=0)
UnhideKey=Keycode to display window (default=65, 'A' key)
UnhideKeyModifiers=Alt, Ctrl, Shift, WindowsKey (default=9, Alt+WindowsKey)
WindowX=Save window position
WindowY=Save window position
WindowW=Width
WindowH=Height

Procedures -------------------------------------------------------------------
To make new icon
 - Be sure to save to .ico
 - MakeIcon filename   (Leave off .gif.  .bat will add it automagically)

Checklist for release --------------------------------------------------------
Search for and eliminate bugbugs
Postmortem
Change version number
Update docs
  Readme.txt
  Compile.txt
  Release.bat (new files)
  \\Mightymouse...\MightySETIInfo.html
  Screenshots
Update default
  MightySETIInfo.ini
  MightySETIInfoInput.txt,
  MightySETIInfoInput.html
  MightySETIInfoTemplateTest.txt (tests all replacement strings)
Build in release mode
Exit DevStudio (to make sure .dsp is written)
Check in source (checkin v00)
Copy to releases (release v00)
Put in v00 and v00\docs in MightySETIInfo.zip
Put src in MightySETIInfoSource.zip
Put Src zip in main zip
Copy to FrontPage /Files
Make extra copy of zip version-named in /SetiAtHome/MightySETIInfo
Update description page on site with new Readme
Burn CD
