Saturday, January 14, 2012

Starting a project

My wife asked me how I start my programming projects. I explained it is a lot like having to write a paper for a class and is often times the hardest part of the project. Small projects start easily and are finished quickly since they have a goal in mind and relatively little to code. Big projects like Raven take a lot more time.

To start I researched some of the things that I would need in-order to accomplish what I wanted to do. Things like IMAP support and the new features of Windows.

I drew up plans for what the program would do, and the basic outline for the modules. I also planned out an rough guess of what the forms would look like. I spend quite a bit of research trying to find out what interfaces work best for the program I am making so that users will be able to easily use the program.

Something that may seem unrelated is my website, yet it is not. A strong web presence is important since I don't sell my software in stores or anything. Another step in starting my project involved redoing my site and adding a section for Raven. I have decided to do a few things differently then I did with SGA in terms of the website. SGA updates through the update form and can automatically down the files needed on the click of a button. Raven will alert a user to an update and link to the website where the update can be found. This will make the website more of a source for users and will make it possible for me to only maintain one setup version. Each update will have a dedicated page that will have useful information for users so that they can download files easily.

With having the update section of the website started, I was able to begin the Raven project with the updating part of my code. It made sense to add that first because with a project that is underdevelopment, having a way to update to new versions will be important for testing. Rather than using the text file that SGA uses, Raven is using the more robust XML file:

        ' Load data into variable
        Dim update As updateInformation
        With update
            .major = CShort(document...<version>...<major>.Value)
            .minor = CShort(document...<version>...<minor>.Value)
            .month = CShort(document...<version>...<month>.Value)
            .day = CShort(document...<version>...<day>.Value)
            .text = document...<text>.Value
            .URL = document...<URL>.Value
            .requiredUpdate = CBool(document...<required>.Value)
        End With


From there I started designing my forms. It is important to me that all the forms have a uniform look. Coming up with a nice design from the beginning is important so that I don't have to redo all the forms later in development. SGA went through many different versions because the UI was always being improved and the underlying code was always being rewritten for efficiency. I am trying to make Raven better from the start.

So since I stated the actual coding, I figured it would be best to make a documentation file of all the things that I actually finished for my own record. It helps to know what you worked on and what your ideas were, my memory is not good enough where I can just remember everything.


     NOTES


     Things to do:
     Add application variables to remember system settings.
     Implement detection for the computer going idle so that alerts show once 

       user returns.
     Start alert windows, and client GUI.
     ------------------------------------------------------------------------
     January 8, 2012
     Cleaned up code and removed additional form that was the startup form.
     Moved account code to the same file into a new module.
     Started making send email window.
     Some performance enhances.
     More testing of present functions.
     Added IMAP stop function
     Added power mode handler
     Added windows shutdown handler
     Added display changes handler
     ------------------------------------------------------------------------
     January 7, 2012
     Experimented with IMAP IDLE (push) support
     Worked on client UI and added meesages to display
     ------------------------------------------------------------------------
     January 5, 2012
     Created a account management window UI
     ------------------------------------------------------------------------
     January 4, 2012
     Designed message checking system that loads new messages in to each accounts       

       queue and to a new message queue.
     Using events to alert the program to completed message checking, messages 

       are passed to the function to initiate alerts and update the ui
     various supporting functions were added.
     A toolstrip along the bottom showing the progress of message checking and 

       program status added.
     Did some testing to get emails to see if program would run correctly.
     ------------------------------------------------------------------------
     January 3, 2012
     Updates:
     Started working on the startup commands. Switch -exit shutdown the program.
     Added some IMAP support
     Added classes to cover accounts and messages
     Added the start of an alert messaging system
     Did research on how IMAP works.
     ------------------------------------------------------------------------
     January 2, 2012
     Icons:
     http://www.webiconset.com/category/free-icons/
     http://mediadesign.deviantart.com/art/HP-Dock-Icon-Set-71481581
     http://www.freeiconsweb.com/Free-Downloads.asp?id=1700
     Updates:
     Fixed debug error that was prevening me from using breakpoints
     Added update function the the application startup as a seperate function 

       that can be easily called from anywhere.
     Included forced update for alpha and beta versions
     created sample xml file on server for updates
     Designed update window interface
     Added taskbar icon that looks like an envelope
     Started settings window design
     Made post on dream in code for UI designs on settings.
     Added tabless tabs to the settings page to ease design process and make 

       things more efficient.
     Add my name and a link to my website.
     setup general, display, connection, sounds, technical, security, contacts, 

       and credits tabs.
     Started design on a comments window to allow users to easily contact me.


I am working slowly on Raven to make it better. My college classes have resumed and I am back to work after having a holiday break, so development will probably be even slower now. Yet so far, Raven is interfacing with IMAP and able to display messages. It is far from finished, but it is a start.

No comments:

Post a Comment