Wednesday, November 17, 2010

Solar Decathlon Group Design Mockup

     Our class' first group project is about creating a mockup web application design for the home management system for the Team Hawaii's entry for Solar Decathlon 2011. The project itself is really interesting because it forces members of this projects especially students to be as innovative and creative as they can. This is the second mockup that I did for the same system. The first one was individual which I thought was I bit harder than the group project. This mockup is a lot easier as three students are working together. I can give and get ideas, opinions and help to/from other members of the group. We used Balsamiq Mockups to create our design, Google chart wizard to represent data and myself personally used MS Visio and Photoshop to add some kick on some of the graphics. We are to design user interfaces to monitor and/or control lightning, HVAC, energy generation and consumption, aquaponics, security and entertainment. While we worked together on some of the pages, we also assigned to create designs individually for different pages. Below is my design for the security page.


This page utilizes the current floor plan to show which part of the house needed attention for security and intruders' position if there's any. It also have security cameras which are triggered by the already existing motion and infrared sensors.
     I also designed the homepage but I spend most of the time designing the Aquaponics page. It's the most interesting one for me, not only designing the page but the system itself. It utilizes the use and reuse cycle. I'm so interested on Aquaponics that I might create one at home. Anyway, my page monitors different levels for the whole system. PH level, Oxygen level and water temperature are all essential for the fishes' health, while the fish tank and plant bed's water levels are to ensure that the whole system is running properly. The idea is to monitor all this in real time so I decided to use gauges and a digital counter to represent data.  When something goes out of the normal levels then an alert and some recommended instructions to fix it will show up on the status field. Below is my design for the Aquaponics page.

Thursday, November 11, 2010

Team Work and Project Management

Introduction

To work on the solar decathlon design mockups, the class was divided into groups of three to four students. I was paired up with Kylan Hughes and Chuan Hung. We started to talk about our design and we decided to use my previous mockup as a template for our group project. We used Google Project Hosting and SVN for our version control. 

Team Work

Since we needed to create about 8 to 12 page design mockups, we decided to divide pages that we are going to work on. We chose the pages that we really knew about. Like for example, my "Security" page design was pretty much the ideal design that we are aiming for, so I was the one who worked on it. We met multiple time just to talk about what we needed to finish, asked for others input and for help too and the rest are through email. We really didn't need to meet for a long period of time as we keep each other updated just like what I mentioned through email and through the job updates and commits on the project hosting site.


Google Project Hosting 

I have to say that Google project hosting was a huge help in finishing this project. We didn't really need to be at the same room to fully work on our project because we could just upload/commit our own page into the server and the whole group could check on it. I also have to say that we have to be careful in using this and the subversion control as it could mess up any changes made by other group member if I commit the whole project. We just have to remember to "Update" first before committing anything else. Below is our Google Project Hosting page.


http://code.google.com/p/solar-decathlon-teamhawaii-4/




All in all, the project when smoothly and we were able to really improve our designs  because we were able to focus more on small number of pages through divide and conquer.

Thursday, October 28, 2010

User Stories

Introduction

     This week's work includes creating user stories for the Solar Decathlon for Team Hawaii. User Stories are one or more sentences that captures what the user wants to achieve. It is an informal and quick way of handling customers' requirements, features and functionality of a project that can be implemented. The user stories are written by the customers for a software project and are their main instrument to influence the development of the software.
     Solar Decathlon is a competition that was created by U.S. Department of Energy that challenges 20 collegiate teams around the world. The teams were challenge to design, build, and operate solar-powered houses that are cost-effective, energy-efficient, and attractive. The winner of the competition is the team that best blends affordability, consumer appeal, and design excellence with optimal energy production and maximum efficiency. For more information about the Department of Energy Solar Decathlon click here and for Team Hawaii click here.


User Stories

      Based on the Team Hawaii's presentation and question and answer portion of it, below are the user stories that I thought occupants of the house may require on the management system:

1. As a home occupant, I want to be able to monitor both the energy that my house produces and the energy that the house consumes. 

2. As a home occupant, I want the system to do calculation and some kind of notification if my house's produced energy will be not enough for the current house's consumption for the rest of day.

3. I want the system to give me the summary of the energy consumption of each electrical appliances/equipment, specifically which one consumes the most. The system will also suggest which of these appliances should I turn off or unplug to be able to save energy.

4. As a home occupant, I want to be able to see my house's current temperature. In this way I would be able to tell whether the cold and warm air valve is working properly, if not, then I would be able to do necessary adjustments. This would keep my house very comfortable during hot summer or cold winter.

5. As a home occupant, I want to use LED lights all over the house and be able to control everything wherever I am in the house. This would make it very easy and convenient for me. This would also help save energy by immediately turning the lights off when not used.

6. To conserve even more energy, I would also like that the LED lights would turn whenever I'm around. By using IR and motion sensor, an array of LEDs would turn on and follow me wherever I go in the house. This also has to work with multiple occupants in the house.

7. To fully make my house self sustained, I want to utilize the new technology in growing food called Aquaponics. I want to be able to control and monitor the acidity and chemical level the Aquaponics system. This would make it very convenient to oversee and maintain the food growing system.

8. For entertainment, I want the existing LED lights installed in the whole house to be able to function as a visual effects on the playing music. The lights would need to dance base on the music that is currently playing. This would not only add cool points but would also keep my guests busy and entertained.

9. I want all functions and requirements above integrated if not in one system then in one device like a tablet, PC or smart cellphone or both. I want the interface to be easy to understand and easy to use, portable and convenient.

10. Because of the systems functionality, I want the whole system to be  secure especially from outside interference that may pose threat to the safety of the system and the house. I want to utilize the existing hardware that comes with the system to function as security device/alarm not only inside the house but also on its perimeter. My house would not only be very convenient and comfortable to live in but would also be safe and secure.





Tuesday, October 26, 2010

Website Usability

Introduction

     Website usability is this week's topic for our class. It is defined as the ability of a website to provide a well-designed user interfaces that targets the ease-of-use for its users. Usability itself is defined as the study of ease of use, of how quickly a user learns to use a particular human interface. It is defined in five different components:
  • Learnability: The ability of a product to enable users to quickly learn how to use it.
  • Efficiency: The ability of a product to enable users to how quickly can they perform tasks.
  • Memorability: The ability of a product to enable users the ease reestablishing proficiency.
  • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors?
  • Satisfaction: How pleasant is it to use the design? 
   Usability is very important not only to website but also in designing different products. If a website is giving a user a hard time to use, it is pretty much useless. The same thing with different products, if the users can't figure out how to use it, he or she will trash or returned it, therefore results into lost of clients/customers.

Examples of websites that have satisfactory usability:

 


     The homepage of this website pretty much tells you everything about this product and it all fits in your screen without scrolling up and down. It tells you what the product is, why use it and how to download it, and this is only on the first page. All in all, this is a very straight forward page. You don't have to visit other parts/links of the website to find out what the product is all about unless you actually interested in it.




     SpeedTest.net is a website that tests both the download and upload speed of your internet connection. As soon as you go to the site (1st pic), it automatically finds your location.  The only step that you need to take is click on the "Begin Test" and off you go. After testing, it'll show you the results (2nd pic) nicely and easily. The use of this product is very straight forward and effortless.

Examples of websites that have unsatisfactory usability: 


     Although the site and product is really straight forward (just type the location or bus stop and go), it doesn't handle typos very well. A missing single letter on a location will immediately return an error or no result. This will be very frustrating for users who are not familiar or having problem remembering street names here in Hawaii. Not very tourist and elderly friendly.




      This whole website is pretty simple, too simple that is. The homepage is just one big advertisement, which I'm guessing a PDF file from the company's weekly newspaper ad. All the pages here are static. It doesn't give you ability to search for products. It gives you some categories, but it only list different types of product and that's it, nothing specific about the products available.

Wednesday, October 13, 2010

RoboHosting

     Version Control and Configuration Management is the topic for this weeks class. To learn further on this topic, we had to download an SVN client which is a a revision/version control software. It is used to download, edit and commit changes on a project from an open source subversion host. Speaking of a subversion host, we used Google Code to create our own project host. Below are the tasks that we had to do and I completed.
  • Download and install an SVN client. Since I'm using a Mac, I had to download and install SmartSVN which is  an open source and free to download. I was surprised that the installation of this program went pretty quickly and smoothly.
  • Checkout/modify/commit an existing system hosted at Google Projects. We had to download the existing robocode program from our professor's project, modify it and commit the changes. Since the whole class is doing the same thing on the same project, we had to make sure that the program is successfully build using "ant -f verify.build.xml" after it was downloaded from the host and before I commit changes and upload back into the host.

  •  Create a new system hosted at Google Projects. This part of the task was pretty easy but there's a lot of work. I created an account  in Google Code to host my own project - robocode-ert-SpamMusubi. Additional tasks includes creating a discussion board (Google group), create a User Guide, Developers Guide, and add Committers into my project. All this were accomplished.
     I can see this newly acquired knowledge very very useful especially to classes that require group work on a programming class. Come to think of it, this is what exactly I need at work. This will help us to control and track the changes that we created on our company project.
Link:
Robot SpamMusubi Google Project 

Friday, October 8, 2010

RoboTesting

For this week's assignment, we were to create JUnit test cases for our Competitive Robot that we created (see previous post). We were to create different test cases such as behavioral and acceptance tests.

 The Easy Tests

The acceptance test is the easiest to create due to the sample code that was provided to us. This test checks how good or bad your robot is against other robots like the ones in the sample robots. I tested my robot against SittingDuck robot and should win a 100 percent of the time. I also tested my robot against Tracker, but for some reason it is giving me some confusing resultss. I built my robot to win against Tracker atleast 80 percent of the time, and it has been proven when I run it using Robocode. For some reason on the JUnit test, my robot can only win once at the most so the test case that I made keeps failing. I decided to choose another robot that I can compete with mine. Embarrassingly I can't beat any other robots so  I chose Target as my next test case which is pretty much like Sitting Duck.

The Hard Tests

The behavioral test was probably the hardest for my robot since my robot doesn't have any specific movement to follow unlike the Walls robot. My robot follows and moves parallel to its enemy this makes it hard to create a test for this specific behavior. It also moves into the center when it gets near corner. This particular behavior is the only clear and easiest test that I've created. I also created a test case the checks if my robot hits the wall and move on the opposite way. The hardest that I test case that I created is testing the fire power used by my robot. Depending on the its distance against the other robot, it fires a certain bullet power.  

Jacoco Coverage

The Jacoco revealed 96% coverage for my program. The other 4% were "if" cases in my main robot code that was not used upon running the program.

Conclusion

I feel that I could have done better in choosing test cases for my robot. Also my robot needs lots of improvements so it can easily be tested. I need to improve the way my robot moves and fires as it can only beat the stationary robot. Maybe create more predictable or patterned movements so it is easy to create behavioral test cases.

Below is the current distribution of my robot.

Download: RiceMusubi

Thursday, September 16, 2010

Competitive Robot: RiceMusubi

Overview
          After learning basics movements, targeting and strategies on previous Robocode assignments,  I created my own robot that will hopefully outlast the sample robots (Walls, RamFire, SpinBot, Crazy, Fire,  Corners, Tracker, SittingDuck) in the Robocode. This would help my robot to prepare in the coming competition in class. Below is the summary of my robot's design strategy.

Design  

Movement  
          The basic strategy for movement is just to keep on moving. It is evident from the sample robot, specifically the sample Walls robot that not staying on one place and moving in a certain distance would be very effective in dodging enemy bullets. When my robot finds and enemy, it moves its body parallel to the enemy and will 150 pixels forward but will try to maintain its position parallel to the other robot. This movement sometimes results to my robot circling around the other robot and effectively dodging the enemy's fire. In an event that my robot hits the wall, it will run towards the center of the battlefield to avoid getting cornered. And will then do its original movement.

Targeting
          For the targeting strategy, I adapted my previous robot's behavior- Boom04. It scans the nearest enemy robot and it uses its gun to keep track of that robot. The idea is to keep the gun pointing towards the enemy at all times. To be able to do this, I need to make sure that the gun and the body of my robot are able to move independently.

Firing
For the fire power, I adapted the behavior of my previous robot (Boom03), which uses its distance from the enemy to figure out how much fire power the bullets should have. The nearest the enemy, the highest the fire power will be use. As soon as my robot found another robot, it'll start shooting and will keep shooting.
    Results

              To be able to test my robot against other robots, I used the sample robots that are available in the Robocode program. Below are the results of the test.

    vs SittingDuck:
              This is a no competition, as this robot doesn't do anything. Any robot that can target and fire would win against this robot. My robot won 100% of the time.

    vs Fire:
              This robot is a pretty hard opponent against my robot. Although my robot moves a lot, the Fire robot was able to hit it a couple times before it could get away because of the number of bullets this robot fires at a time. My robots has a big disadvantage because it can only fire after it moves while this robot just sits and can keep firing. It only moves when it gets hit which makes it a hard target since my robot fires on its opponents previous position. My robot won 41% of the time.

    vs Corner:
              This robot is similar to Fire, the only difference is  this just stays in the corner and never moves. It is much easier target. My robot won 58% of the time.

    vs Crazy:
              This robot is a very hard target for my robot. That only weakness of this robot is it doesn't fire as much. It is also worth mentioning that this robot extends AdvancedRobot. My robot won 48% of the time.

    vs Tracker:
               This is a perfect opponent to show off my robots agility. My robot pretty much dodge every bullet the this thing throws. My robot won 64% of the time

    vs Spinbot:
               Similar to Tracker, my robot just pretty much dodge every bullet this thing fires. Its only advantage is it uses the maximum amount of fire power every time it fires. This is also another advanced robot. My robot won 60% of the time.

    vs RamFire:
              This is very hard to beat for my robot. My robot lost only because of the damage it cost when it rams and is pretty much dead when cornered. My robot won 35% of the time.

    vs Walls:
              My robot never had a chance on this robot. This is the robot to beat, that's why most of the other students based their robot from this. It's a very hard target. My robot never won a round.

    Conclusion
              Robocode is easiest and best way to learn programming. It not only teaches me but it also showed me that programming could be fun too. This experience thought how to be really a better programmer. It thought me read and understand APIs which. It made realize that programming takes time and I better start doing it earlier to be able to create and develop a better program. All in all, this assignment is really fun, ans I might actually like programming now. 

    Download:
     RiceMusubi Eclipse Package
     RiceMusubi robot jar file