Tuesday, December 13, 2011

Website


I am starting slow. I know that I need to have a good foundation in order to be able to have a stable product. I cannot rush this.  I have started by updating my website; this serves two purposes: firstly, I am taking an easy HTML class and needed to get reacquainted with it, and second, the website is the first thing people see before trying the product. My site was too simple and plain.

While it is still in progress, it is getting better. I have the basic layout designed, and now need to add content. What is present is enough to get you around, but it is lacking. Everything will be uniform, even the update pages.

I have decided that updates will be different in Raven, rather than being downloaded from the program, updates will by only available for the web page. Raven will tell you there is an update and take you to the webpage. Each update will have its own page with information dedicated to that update; this should help when there are major changes through the development.

Lastly, getting some creativity from making the website better will help the rusty cogs in my mind to start turning fast enough for me to get some code into the IDE. I am trying to get myself into the programming state where I can write good code very quickly. I aam getting close to that point.

Sunday, December 11, 2011

Raven design


I am doing Raven differently. I started with paper drawing and designs of what it could be like. I wrote out all the things that it could do and determined the things that it will need to have. This is much in contrast to how I did things with Scott’s Gmail Alert.

Scott’s Gmail Alert was designed around the alerts. Once the alerts were made, I added more options until it continued to grow. Where in the problem lies, this ended up making it so that parts had to be rewritten since they were not compatible with the new code, or duplicate code with very minor differences had to be added. That is not very efficient. Also, SGA relied on the computer’s memory too much.

Raven is going to combine the strengths of SGA, Terrie’s Recipe Manager, my group project for Advanced Visual Basic class and Smart Thinking. SGA was great for its alert management and large number of options. Terrie’ Recipe Manager has a very useful interface. Smart Thinking made good use of modular code that was independent. My group project was able to maintain data using databases.

Raven needs all of these things to be successful. Memory management, being lightweight and able to silently run in the task bar are going to be the main attributes that will allow Raven to be a great email alerting client.

While I have not written any code yet, it will start soon. I am trying to get over being sick at the moment, so that I will have a clear mind when I start. I am going to begin with setting up a special directory and try to start organized – so that I finish organized. 

Wednesday, December 7, 2011

Raven


I have renewed my interest in coding. Classes are over and the break is starting. I will have a lot of time to sleep and recover from being sick. While Scott’s Gmail Alert has been very stable for this year with very few major issues reported, I have a longing to do something bigger and better than SGA. I envision a program that acts as a full-fledged email client, yet is small and runs silently in the task bar. Email should not be complicated
.
Personally, I am techier than the average person that I come across and have different needs when it comes to my email. I don’t need to ask how to attach a file. In fact, there are times I wish I could do more with my email. The client that I envision is simple to use and able to be programmed to do things no other client can do. A user may which to interface with another peripheral, run a script or manage a database. One contact may be more important than another and require a more obvious alert. The possibilities are endless for what could be done.

I am announcing my new project: Raven. With full support for IMAP protocols and the convenience of SGA merged together with new features and ideas. Raven is a sort of code name since the project has not even really started yet and has no name. I don’t want to concern myself with naming it at this time, I’d rather build it. There are many things I want to improve on with SGA, but I don’t see much future for a program limited only to Gmail.

I have decided, and hope to follow through with, that I will post progress to this web log. My thoughts and ideas, programming techniques and maybe even some code will be included. My goal is twofold: I want to document the process all while creating a great new program. Current users of SGA will be able to have a reduced upgrade price for Raven, if they wish to leave SGA; new users will have the option of either a trial version of full version for a low cost.

Raven’s user experience will start in the installer. I will not use a third party installer, instead I will create my own to ensure that from the users perspective, Raven is there to make life easier. There will be opportunities to help with the project in the future.

Raven is named after a unit in the game StarCraft 2 until a final name can be decided on.

Technique


I have learned a few things in my time programming that might save you some time. The ideas shouldn’t be new, but you might not have taken them all that seriously. The first tip is probably something that anyone working with computer has heard at least one: backup your work. The second tip: finish your work in the correct place.

Backup your work

This is more than having another copy of your code saved somewhere safe; yet still, it is a good idea to save your code in multiple places in well labeled directories so that you can find what you need, when you need it. Backup while programming is much more involved. Since your work is always changing and can contain thousands of lines of code, it is near impossible to revert back to where you started if you mess something up. Since a program is modular, you can easily finish a module and make sure it works before starting on another section. This is a great time to save your work, and make a copy. Anytime you want to veer off and try something that you are not sure will work, save your work and make a copy. My reasoning is that you will be able to go back to a point where you know the code worked. Trying to go back and revert changes can end up creating more mistakes in the long run that you have to debug and fix. If Visual Studio, or whatever IDE you are using, crashes and corrupts the file you are working on, you can go back to one that you know works.
If you are like me, you heard about backup and didn’t think it was too important. I figured I would be okay too, until one day Visual Studio corrupted everything. I could not recover any of my work and had to start over from scratch. There were other times when I made drastic changes trying to debug a problem and ended up making things worse. I hate the feeling when my head feels heavy and my blood is boiling because I can’t fix something that worked before I decided to experiment with a different idea. I was so close to being done for the night, but gave myself extra work that had to be finished… because of my second tip.

Finish your work in the correct place.

This might seem a bit abstract, but it really is an important point. Think about when you write a letter or a paper: would you take a break in the middle of a sentence? Probably not, because you want to complete the thought before it is lost. It is the same with programming. Making comments for yourself about what you are thinking and what your ideas are for continuing really help you get back on track with where you left off. Alternatively, you can send yourself emails of your ideas, if that suits you. The important thing is to remember your thought process and the ideas that you have tried and considered trying. It really is best to finish the day when the part you are working on is complete and working. This will allow you to start fresh the next time you sit down and able to pursue different parts of the program without having to get back in the mindset of a previous day.
This idea of where to stop for the day is abstract since everyone is different. You may be able to pick-up right where you left off with no issues, you may not. Just remember, if there is a serious flaw in your code and you have been trying to fix it for hours, keeping notes of where you have been and where you are headed can greatly improve your productivity. Try different methods like commenting the code and emailing yourself to see what works best. I find emailing myself can help keep the issue in the front of my mind so that I might be able to come up with a solution even while I am not sitting at the computer coding. 

Code block

I have not written much in a while. For a long time I have felt worn out and tired down to my bones; I have had no energy to do much of anything. In contrast, there have been times when I couldn’t do anything other than write code; it practically consumed me. It is for that reason that I have been burnt out for so long – I haven’t found the safe medium where I can continue to be creative and have energy to keep a healthy momentum.

The amount of energy it takes to write code is amazing. I don’t think about my project when I have time to dedicate to development exclusively – I go as far as dreaming about it in my sleep; I think about it in the shower and on the drive to the store. While this is happening I am able to get things done quickly and solve problems extremely well. The issue arises when the headaches start and my concentration becomes short. It has been so bad for me that I have dropped some of my classes in college because I could not focus on anything, even the easy stuff. I graduated Magna Cum Laude with my Associates Degree; I should be able to do it again with my Bachelors.

So what is a good way to keep things under control? From what I can tell, playing video games is a great way to avoid burn out. There is an exception: only play games that don’t require too much thinking! I have been playing StarCraft 2, which is known as a thinking man’s game because of all the strategy involved, and it has helped increase my burn out. Playing something like Left 4 Dead or Angry Birds is much better to cleanse the mind. The point here is to entertain yourself and get your brain to stop thinking so much. It needs a break!

I have felt my health declining for a little while now. I notice that when I am programming or playing games that I tend to eat too much and get no exercise. This could be one of the reasons I feel old and achy. Getting out of my comfy chair to do some activity would be a good start. My wife has been giving me vitamins that are supposed to give me more energy.

I can feel the rusty cogs in my head are starting to turn; I am getting ideas for a new project. It will be hard to change the way I do things, but it should be beneficial in the long run to try and balance my time so that I don’t get burned out so fast. Being more active and eating better will help. Working on individual sections at a time and taking break will help. Playing games will give my mind a rest.

Skills

I have been at this stuff for awhile, yet I still don't have any idea what part of programming I am best at. I always keep my interests in finding a need for a piece of software that could be useful, at least to someone. My most successful projects began as programs that I had a need for personally. Programming is not as simple as understanding the logic and syntax, you have to have the ideas and enthusiasm to complete a project all the way until it is finished. The hierarchy in picking a career path does not end once you decide to be a programmer: there are so many aspects within the programming world that you may never experience.

It seems that video game programming is the most well known, as far as I have noticed; it is also a very diverse segment in itself. It is very difficult to create a game by yourself. An individual cannot get things done as quickly as a group. An individual cannot be talented in as many areas as a group. What exactly would you do as a game programmer? It is about more than writing the code; a game requires many different types of programming to be successful:

· Logic programming to control the aspects of the game that are not static. Things like gravity, sprites, and projectiles.

· Network programming to allow for online multiplayer connections.

· Graphics programming to maximize graphical performance and have the best graphics.

· Interfacing programming so that the awesome code that was written can be used easily and fully by the user.

· And several more could easily be included.

So my point? My point is that being a programmer is like being a piece in a puzzle. While you may have the power to create applications on a small scale that doo amazing things, your power can be exponentially greater in a team of individuals with individual talents. You have to be able to work on your own or in a team. There are times when you will need to do both in order to succeed.

Even with the projects that I have worked on, I have had the help and support of other people who share an interest in the project. It is amazing how the internet allows people to come together to create something. Even if someone doesn’t have the experience to write code, they can be instrumental in helping create a great program because they have insight from a different aspect then you might have. Your program could do everything and clean the dishes, but if it is hard to use no one will want to use it.