This review is for the Project Overviewer widget for the Informative Workspace Project.
Installation and Developers Guides:
Installing the Overviewer was fast and simple by following the Installation Guide, but going through the Developers Guide took a while in my case since I reformatted my computer. I didn't have the environment variables setup aside from what's needed for Hackystat so that took extra time to go through - Probably the same amount of time as someone who hasn't had much experience working in a Java environment. I also had to look for different versions of the tools, although I think the Emma version listed was a typo since build 2.1.5312 doesn't exist. After the variables were set up I tried to do an ant verify that didn't work initially because ant was complaining about my ANT_ARGS variable being unspecified from an xml file so I took that out. Not sure if anyone else ran into that or if it was just me. Verify passed afterwards.
Code:
Overall the code looks good with a decent amount of documentation. I think that it could use a little cleaning up though - just spaces in between lines of code to improve readability. I also fiddled with getting the iHacky repository to show instead of the Informative Workspace (IW) repository and ran into a bug.
All I did was change the relevant information such as repository address, and Hackystat project owner and members. After I made the changes, I compiled the program and deployed it on Tomcat. When I clicked on the IW Project link it wouldn't load. After an hour of looking over the code and making a minor change based on a hunch, I recompiled the program and deployed it back on to Tomcat. The problem was that the Overviewer didn't like having 3 developers in developersList. I didn't test for any higher value though so once I removed a developer from the list, it finally showed the iHacky repository.
As for the use of Wickett, I initially thought that it would have been more of a pain to use over Stripes, but after finally seeing it work it seems pretty much the same. Instead of jsp and Action Beans, we have html pages and ... Pages.
Usefulness
Right now the overviewer displays all of the files in a project's repository, or displays information about the project such as features and upcoming milestones. On the CSDL Telemetry Wall where the IW project is being tested on, the overviewer is currently taking up two screens. If I remember correctly, the team has stated that the overviewer will eventually just take up 1 screen and act as a focal point for any other data in the other screens.
This is supposed to be an overviewer, but I'm not getting a sense of how looking at the entirety of a repository gives a good overview. According to a quote on the project's webpage "when an interested observer walks into your team space, s/he should be able to get a general idea of how your project is going in 15 seconds, and be able to get a deeper perspective on real or potential problems by looking more closely." Having a countdown of a milestone and having a feature list seems like it fits that description, but I can't picture that information along with the repository view all on one screen giving the observer a general idea in 15 seconds. I don't even see how automation will help to improve it once automation is implemented. I guess I would suggest that the repository view be something that the interested observer be able to access when they want to get the deeper perspective. Replace the repository view on the front page with something simpler to get the observer to interact with the IW and make the text larger on the milestone countdown and features so it can be seen from a longer distance.
Tuesday, April 1, 2008
Tuesday, March 18, 2008
Arthur C. Clarke (December 16, 1917 - March 18, 2008)
I was saddened to find out about Sir Clarke's death as I am a fan of his Odyssey and Rama novel series and firmly believe that 2001: A Space Odyssey is still THE BEST Sci-Fi movie to date. I was listening to Eve Radio around 1:00pm (-10 GMT) and the DJ made a comment that Clarke was not dead, but merely with aliens. It seemed like an odd thing to say so I went to check the news through iGoogle and there it was, a headline announcing his death.
Clarke is best known to most people as a grand master of science fiction, but he is also a visionary. He popularized the ideas of geosynchronous satellites and space elevators, and although the ideas did not originate with him, he did elaborate on them. He predicted that satellites in geosynchronous orbit would be great for telecommunication relays, and authored books going over their technical details. In his 1979 novel, The Fountains of Paradise, he introduced his ideas for space elevators. He also wrote a two part article in 1981 called "The Space Elevator: 'Thought Experiment', or Key to the Universe?" He supposedly said that space elevators will be his legacy and I hope it's true.
Up until the end of his life and through his deteriorating health from post-polio syndrome, Clarke continuously worked on something - a novel, a cause, an idea. He received many awards, honors, and even knighthood. It amazes me and makes me wonder where his drive to do all that he has done came from, and I hope I have even a tiny bit of the drive he had as I go on with the rest of my life past college.
Goodbye Sir Arthur Clarke.
Clarke is best known to most people as a grand master of science fiction, but he is also a visionary. He popularized the ideas of geosynchronous satellites and space elevators, and although the ideas did not originate with him, he did elaborate on them. He predicted that satellites in geosynchronous orbit would be great for telecommunication relays, and authored books going over their technical details. In his 1979 novel, The Fountains of Paradise, he introduced his ideas for space elevators. He also wrote a two part article in 1981 called "The Space Elevator: 'Thought Experiment', or Key to the Universe?" He supposedly said that space elevators will be his legacy and I hope it's true.
Up until the end of his life and through his deteriorating health from post-polio syndrome, Clarke continuously worked on something - a novel, a cause, an idea. He received many awards, honors, and even knighthood. It amazes me and makes me wonder where his drive to do all that he has done came from, and I hope I have even a tiny bit of the drive he had as I go on with the rest of my life past college.
Goodbye Sir Arthur Clarke.
Monday, March 17, 2008
Continuous Integration with Hudson
Today I learned about continuous integration using the Hudson server system and before this I didn't know anything about continuous integration. It was pretty simple for me to get up and running by just following the tutorial on this site (just make sure you register on IBM first). It may take longer though if you do not already have some prerequisite software installed such as the Java JDK, ANT, and JUnit.
Continuous integration (CI) is a process where projects are automatically built to make sure that any issues encountered will be detected as early as possible in the software development cycle. This automated process requires various types of tools to work. The minimum tools required are an automated build system, a testing framework, and a code repository. Other tools can be used as well to increase the quality of the project such as PMD and FindBugs. For my trial of Hudson, I used the Ant build system, JUnit test framework, and subversion code repository.
So the way the CI process works is pretty simple. The user specifies the code repository's url, when and how often the repository must be checked for a new build version of the project, and then it is downloaded, built, and tested when a new version is found. It's such a simple process to run, but its usefulness and success depends a lot on the developers.
The process of CI alone will not ensure a quality system. There are practices called anti-patterns in this article that developers follow that can make CI a failure for them. A couple of the anti-patterns mentioned in the article that I find myself guilty of doing:
As I mentioned earlier, I used Hudson to get a feel for continuous integration. Installation was pretty simple and the only problem I ran into, which was pretty stupid, was when I couldn't get Hudson to load on my system after using the "java -jar hudson.war" command. At the time I had my Apache HTTP server running, and it too was using port 8080. After a few minutes (yes it took me minutes) to realize that I could just stop the server! The rest of the Hudson installation and configuration went smoothly afterwards. Oh, and I used the ambientHackystat project to test out Hudson.
CSDL Hudson Server
Getting the ambientHackystat project working on the CSDL server won't take much effort since it is a Java project. I suspect that the server is already setup with Ant and JUnit so all that's left to do is create a new project, specify the subversion repository url, the interval for Hudson to check the ambientHackystat code repository, that Ant should be executed when Hudson has downloaded the recent build, then specify the location for the test reports xml file.
Continuous integration (CI) is a process where projects are automatically built to make sure that any issues encountered will be detected as early as possible in the software development cycle. This automated process requires various types of tools to work. The minimum tools required are an automated build system, a testing framework, and a code repository. Other tools can be used as well to increase the quality of the project such as PMD and FindBugs. For my trial of Hudson, I used the Ant build system, JUnit test framework, and subversion code repository.
So the way the CI process works is pretty simple. The user specifies the code repository's url, when and how often the repository must be checked for a new build version of the project, and then it is downloaded, built, and tested when a new version is found. It's such a simple process to run, but its usefulness and success depends a lot on the developers.
The process of CI alone will not ensure a quality system. There are practices called anti-patterns in this article that developers follow that can make CI a failure for them. A couple of the anti-patterns mentioned in the article that I find myself guilty of doing:
- Checking code in to the repository infrequently. The idea behind this is that code should be checked in frequently so that other team members know what's going on with development and allow them to give their own input before changes go too far.
- Submitting broken code. Broken code can remain unfixed for a long time even if other members try to fix it, but it can also hold up development in the long run.
As I mentioned earlier, I used Hudson to get a feel for continuous integration. Installation was pretty simple and the only problem I ran into, which was pretty stupid, was when I couldn't get Hudson to load on my system after using the "java -jar hudson.war" command. At the time I had my Apache HTTP server running, and it too was using port 8080. After a few minutes (yes it took me minutes) to realize that I could just stop the server! The rest of the Hudson installation and configuration went smoothly afterwards. Oh, and I used the ambientHackystat project to test out Hudson.
CSDL Hudson Server
Getting the ambientHackystat project working on the CSDL server won't take much effort since it is a Java project. I suspect that the server is already setup with Ant and JUnit so all that's left to do is create a new project, specify the subversion repository url, the interval for Hudson to check the ambientHackystat code repository, that Ant should be executed when Hudson has downloaded the recent build, then specify the location for the test reports xml file.
Wednesday, March 12, 2008
Code Review: Visual Studio 2008 Hackystat Sensor
I am reviewing the Visual Studio 2008 Hackystat Sensor project.
Installation
I was able to get both the sensor working and the source code compiled by following the Project's Installation Guide and the Developer Guide. If I hadn't been informed earlier that the source code wouldn't compile due to a missing package called NUnit and hadn't been provided with a newer release of the source code, compilation would have failed.
Others may not agree, but I think that it was enough to state in both guides that in order to use this sensor, the user would need to download the Hackystat sensorshell. The link provided went directly to the Hackystat sensorshell page too which had its own installation guide for the user to follow. Good enough for me as a user.
The Code
The Visual Studio sensor is programmed in C#. I was briefly exposed to C# for a database course I took a couple of years ago when I had to create an application for a MS SQL database. It's funny to see how much has changed. Back then, syntax such as functions followed C++ convention by utilizing the underscore and sometimes the "m_" prefix was used for variables. Even commenting was simply using inline tags. Now code convention looks more like Java and commenting includes XML tags.
As far as the project's code, I can't really provide good input since I never really got into C# (although I always meant to). One thing I would recommend though is sticking to a 100 max characters per line to avoid the ugly wrap-around of long code.
Testing
To test the sensors, I used a project from another class written in C++ as well as looked at the User Guide to see what data would be available on the Hackystat sensordatabrowser. Each data listed on the user guide excluding the NUnit related data appeared. Beyond this, I didn't know what to test for.
Addition: I just got an error about the sensor not starting up when I started a second instance of Visual studio to view some old C# code.
Usefulness
The current data that the sensor monitors is pretty limited for now, but I expect that as development continues, there will be more. I must say though that I do not see the need of having separate events for opening, closing, and saving a file. It could all be combined to one event. Simply state that the file was opened and if it was edited, set it to true which implies that the file was saved. I don't think I even need to know that I closed a file while working in Visual Studio.
As far as what data I'd like the sensor to pick up, I was thinking of events that when combined, would reveal information on what a programmer's work environment was like. I'm not sure if the sensor could do it, but if it was able to grab the screen resolution that the programmer used while working in Visual Studio and see if a programmer was using multiple display screens (i.e. multiple monitors or projects) and combine that with how they arrange their visual studio workspace (e.g. do they use auto hide for other windows like properties or solution explorer?), we could see the optimal environment that a programmer works in. I'm not sure though if this idea is useful for an individual, but I could imagine software development companies finding the information handy.
Conclusion
I think the project is on a good track. It just needs more useful dev events.
Installation
I was able to get both the sensor working and the source code compiled by following the Project's Installation Guide and the Developer Guide. If I hadn't been informed earlier that the source code wouldn't compile due to a missing package called NUnit and hadn't been provided with a newer release of the source code, compilation would have failed.
Others may not agree, but I think that it was enough to state in both guides that in order to use this sensor, the user would need to download the Hackystat sensorshell. The link provided went directly to the Hackystat sensorshell page too which had its own installation guide for the user to follow. Good enough for me as a user.
The Code
The Visual Studio sensor is programmed in C#. I was briefly exposed to C# for a database course I took a couple of years ago when I had to create an application for a MS SQL database. It's funny to see how much has changed. Back then, syntax such as functions followed C++ convention by utilizing the underscore and sometimes the "m_" prefix was used for variables. Even commenting was simply using inline tags. Now code convention looks more like Java and commenting includes XML tags.
As far as the project's code, I can't really provide good input since I never really got into C# (although I always meant to). One thing I would recommend though is sticking to a 100 max characters per line to avoid the ugly wrap-around of long code.
Testing
To test the sensors, I used a project from another class written in C++ as well as looked at the User Guide to see what data would be available on the Hackystat sensordatabrowser. Each data listed on the user guide excluding the NUnit related data appeared. Beyond this, I didn't know what to test for.
Addition: I just got an error about the sensor not starting up when I started a second instance of Visual studio to view some old C# code.
Usefulness
The current data that the sensor monitors is pretty limited for now, but I expect that as development continues, there will be more. I must say though that I do not see the need of having separate events for opening, closing, and saving a file. It could all be combined to one event. Simply state that the file was opened and if it was edited, set it to true which implies that the file was saved. I don't think I even need to know that I closed a file while working in Visual Studio.
As far as what data I'd like the sensor to pick up, I was thinking of events that when combined, would reveal information on what a programmer's work environment was like. I'm not sure if the sensor could do it, but if it was able to grab the screen resolution that the programmer used while working in Visual Studio and see if a programmer was using multiple display screens (i.e. multiple monitors or projects) and combine that with how they arrange their visual studio workspace (e.g. do they use auto hide for other windows like properties or solution explorer?), we could see the optimal environment that a programmer works in. I'm not sure though if this idea is useful for an individual, but I could imagine software development companies finding the information handy.
Conclusion
I think the project is on a good track. It just needs more useful dev events.
Tuesday, March 11, 2008
Experience with Flash CS3 & ActionScript 3.0 Part I
Lately I've been working with Flash CS3 and its programming language, ActionScript 3.0, to make little games for my game design class. ActionScript is pretty similar to O-O languages like C++, Java, and C#. As a beginner ActionScript programmer I find it irritating to work with Flash as an IDE (apparently it's considered an IDE) for solo projects and near painful for team projects, but from a design perspective it's a nice suite to work in.
My First Game
When I started learning Flash and ActionScript I put all of my code into the .fla file itself. For my first program I had to modify the example Breakout game on the Adobe website. I had to use custom art and sound provided by the class artists to replace the existing game objects, and I had to add new features . I only added a scoring system, but other programmers implemented some nice stuff like unbreakable bricks, multiplying balls, and random brick positioning.
One annoyance I ran into was the code autoformatter. It wouldn't simply format the code for me so it was readable. It would complain that there was an error in the syntax. Sometimes it even complains when there's no syntax error, which I found out is an existing bug in Flash CS3. It would also format code incorrectly. The multiline comment tags don't get properly indented with the section of code it documents so I have to go back to using inline comments to make the code look nice.
Another annoyance with Flash CS3 is the code folding feature. Unlike IDEs such as Eclipse or Visual Studio or even text editors like Notepad++ that have + and - signs along the left, Flash can only fold code that's highlighted or by using some of the marginally useful options in the right click interface. I can see where being able to hide only the highlighted code comes in handy, but it's ultimately useless when you want to hide multiple screens of code. That's where "right click -> Collapse Between Braces" comes! But not so fast! You have to be precise about where you right click because Flash considers parentheses as braces!
After that experience I thought there had to be a better alternative - a better IDE. I went straight for Eclipse since I was already working with that. Two options I ran into were the ASDT plugin and the Flex 3 SDK. ASDT was a dead end since it only supported up to ActionScript 2. I had high hopes for Flex 3 since the retail version, Flex Builder 3, uses the SDK on top of Eclipse, but that too failed me. Apparently Adobe decided not to provide instructions on making their free SDK work with Eclipse so I turned to the web in search of user made guides. I found one, but the hoops I had to jump through made it a waste of my time to try to get to work. I also found out from this site that Adobe left out (purposefully or not) a key xml file that Eclipse required to support ActionScript. In the end I settled on using Notepad++ since it at least supported the language syntax.
My Second Game
After the Breakout game, my instructor put the class into teams with 2 programmers and an artist. The ratio wasn't precise so my team ended up with an extra artist which meant 2 versions of the same game with different art (so the artists can be graded and made sure they were doing their work). Everyone in the team was responsible for providing input for the design of the game and we decided to do a sidescrolling racing game along the lines of Super Mario or Donkey Kong with 1 set of art being ninjas and the other being robots.
I decided to look into some books that taught ActionScript. This is how I found out about ".as" or actionscript files which is where source code can go. In order to use an actionscript file the main .as file needs to be defined in the document class field in the fla file. This is where it gets really irritating for me. Not only can code go into fla files, but they can also go in actionscript files.
Flash CS3 Workspace: Stage & .as file definition

Where Code Can Go

Putting almost all the code into the .fla file is not good when it comes to team projects in at least my case. Every programmer in my class initially learned to program in the same way since we all had to modify the Breakout example game - we put the code in the .fla file. When we switched to team projects, we had free reign on what kind of game we were going to develop and we started learning actionscript independently. Most if not all continued putting the code the .fla file while some like me looked into actionscript files and tried to adopt it into our project.
For my second game, I took the responsibility of trying to implement these actionscript files, but since I was just learning to do it the first time and I still wasn't completely familiar with how Flash worked my team just went with one actionscript file. Needless to say, one programmer ended up doing the bulk of the code since you really need the .fla file to test your code. My responsibility ended up getting the final code working with the final art assets and audio provided by the artists. This is where it got bad for me.
Since the other programmer did the bulk of the coding i.e. player movement, physics, and collision, I didn't really understand all too well what was happening even though we went over what his code was doing during the two times we met to work on the game. Although he was doing the actual coding, I was still trying to learn how player movement, physics, and collision worked on my own because I had to make the final layout of the 2 games. When I got the other programmer's code (that programmer didn't take software engineering with Professor Johnson) it was badly formatted and barely documented so I had to clean it up and read through it. I ended up realizing that how I learned to do player movement, physics, and collision was way different from how he did it in the code. In his code, the images were loaded programmatically. The way I learned to do it, which is also the more practical way, was to put it on the stage. I'll explain more on how this works on another post since this one is getting long. I ended up pulling an all-nighter having to redo most of the program so everything worked the way I learned it. Also, since I got the art assets real late, I was in a mad rush trying to import all the art into their respective .fla files. By the time it was due, I wasn't able to implement audio for the game or the race traps that we wanted as obstacles.
My Third Game
I won't say much about this game except that I tried to push for multiple actionscript files so both programmers could work concurrently and tried to get a consensus on how to go about programming so when we combined our code, everything would go smoothly. When it came down the line, the other programmer (admittedly the more talented programmer) chose to stick with their way because he felt more comfortable with it. Due to other circumstances none of my work got into the final product. One circumstance being that the artists (yes I got stuck with 2 artists again) were unable to give us their work early enough due to their other commitments like work which I felt was understandable. The other being that the other programmer stopped communicating with me except to say he finished the games seven hours before it was due. I spent 3 days trying to do my part which relied a lot on the art that the artists did not finish yet and for 2 of those days I tried to keep in contact with the other programmer who made it hard since he would only communicate by e-mail (seemingly ignoring my questions) and not use instant messaging which me and the artists were using when we were online.
My First Game
When I started learning Flash and ActionScript I put all of my code into the .fla file itself. For my first program I had to modify the example Breakout game on the Adobe website. I had to use custom art and sound provided by the class artists to replace the existing game objects, and I had to add new features . I only added a scoring system, but other programmers implemented some nice stuff like unbreakable bricks, multiplying balls, and random brick positioning.
One annoyance I ran into was the code autoformatter. It wouldn't simply format the code for me so it was readable. It would complain that there was an error in the syntax. Sometimes it even complains when there's no syntax error, which I found out is an existing bug in Flash CS3. It would also format code incorrectly. The multiline comment tags don't get properly indented with the section of code it documents so I have to go back to using inline comments to make the code look nice.
Another annoyance with Flash CS3 is the code folding feature. Unlike IDEs such as Eclipse or Visual Studio or even text editors like Notepad++ that have + and - signs along the left, Flash can only fold code that's highlighted or by using some of the marginally useful options in the right click interface. I can see where being able to hide only the highlighted code comes in handy, but it's ultimately useless when you want to hide multiple screens of code. That's where "right click -> Collapse Between Braces" comes! But not so fast! You have to be precise about where you right click because Flash considers parentheses as braces!
After that experience I thought there had to be a better alternative - a better IDE. I went straight for Eclipse since I was already working with that. Two options I ran into were the ASDT plugin and the Flex 3 SDK. ASDT was a dead end since it only supported up to ActionScript 2. I had high hopes for Flex 3 since the retail version, Flex Builder 3, uses the SDK on top of Eclipse, but that too failed me. Apparently Adobe decided not to provide instructions on making their free SDK work with Eclipse so I turned to the web in search of user made guides. I found one, but the hoops I had to jump through made it a waste of my time to try to get to work. I also found out from this site that Adobe left out (purposefully or not) a key xml file that Eclipse required to support ActionScript. In the end I settled on using Notepad++ since it at least supported the language syntax.
My Second Game
After the Breakout game, my instructor put the class into teams with 2 programmers and an artist. The ratio wasn't precise so my team ended up with an extra artist which meant 2 versions of the same game with different art (so the artists can be graded and made sure they were doing their work). Everyone in the team was responsible for providing input for the design of the game and we decided to do a sidescrolling racing game along the lines of Super Mario or Donkey Kong with 1 set of art being ninjas and the other being robots.
I decided to look into some books that taught ActionScript. This is how I found out about ".as" or actionscript files which is where source code can go. In order to use an actionscript file the main .as file needs to be defined in the document class field in the fla file. This is where it gets really irritating for me. Not only can code go into fla files, but they can also go in actionscript files.
You can stick code into each frame of each layer of each scene to control the behavior of each frame and it can get unwieldy. Even though everything is overall linear it can become confusing when you start jumping to different frames using the Flash equivalents of GOTO statements, which are gotoAndPlay() and gotoAndStop(). Unfortunately, these are necessary for Flash in order to switch frames if you don't want to put everything in one frame and manipulate their visibility programmatically.
Flash CS3 Workspace: Stage & .as file definition
Where Code Can Go
Putting almost all the code into the .fla file is not good when it comes to team projects in at least my case. Every programmer in my class initially learned to program in the same way since we all had to modify the Breakout example game - we put the code in the .fla file. When we switched to team projects, we had free reign on what kind of game we were going to develop and we started learning actionscript independently. Most if not all continued putting the code the .fla file while some like me looked into actionscript files and tried to adopt it into our project.
For my second game, I took the responsibility of trying to implement these actionscript files, but since I was just learning to do it the first time and I still wasn't completely familiar with how Flash worked my team just went with one actionscript file. Needless to say, one programmer ended up doing the bulk of the code since you really need the .fla file to test your code. My responsibility ended up getting the final code working with the final art assets and audio provided by the artists. This is where it got bad for me.
Since the other programmer did the bulk of the coding i.e. player movement, physics, and collision, I didn't really understand all too well what was happening even though we went over what his code was doing during the two times we met to work on the game. Although he was doing the actual coding, I was still trying to learn how player movement, physics, and collision worked on my own because I had to make the final layout of the 2 games. When I got the other programmer's code (that programmer didn't take software engineering with Professor Johnson) it was badly formatted and barely documented so I had to clean it up and read through it. I ended up realizing that how I learned to do player movement, physics, and collision was way different from how he did it in the code. In his code, the images were loaded programmatically. The way I learned to do it, which is also the more practical way, was to put it on the stage. I'll explain more on how this works on another post since this one is getting long. I ended up pulling an all-nighter having to redo most of the program so everything worked the way I learned it. Also, since I got the art assets real late, I was in a mad rush trying to import all the art into their respective .fla files. By the time it was due, I wasn't able to implement audio for the game or the race traps that we wanted as obstacles.
My Third Game
I won't say much about this game except that I tried to push for multiple actionscript files so both programmers could work concurrently and tried to get a consensus on how to go about programming so when we combined our code, everything would go smoothly. When it came down the line, the other programmer (admittedly the more talented programmer) chose to stick with their way because he felt more comfortable with it. Due to other circumstances none of my work got into the final product. One circumstance being that the artists (yes I got stuck with 2 artists again) were unable to give us their work early enough due to their other commitments like work which I felt was understandable. The other being that the other programmer stopped communicating with me except to say he finished the games seven hours before it was due. I spent 3 days trying to do my part which relied a lot on the art that the artists did not finish yet and for 2 of those days I tried to keep in contact with the other programmer who made it hard since he would only communicate by e-mail (seemingly ignoring my questions) and not use instant messaging which me and the artists were using when we were online.
Wednesday, March 5, 2008
Code Review: Ambient Hackystat
I tried out the Ambient Hackystat project using the code review release featured on the project's Google code front page (version 0.1.221). The idea behind this project is that an ambient device (e.g. Ambient Orb or Nabaztag) will perform a predefined action such as flashing a color and/or making a sound when it receives a trigger caused by activities posted onto the Hackystat sensorbase.
Installation and ANT
To install the project on my system, I followed the installation and developer guide found on the project wiki. There were environment variables that were missing from the developer guide so it was a bit of an inconvenience to find out that I hadn't set it all up. I planned on adding the variables after each time that ANT complained, but after having to restart twice so the changes took effect I remembered that all the variables needed were specified in the build path when the project was loaded on Eclipse. It was mentioned by Professor Johnson that most of these dependencies were unnecessary during the AmbientHackystat team's overview of their system, so this shouldn't be an issue for future releases.
These were the variables not mentioned in the developer guide:
HACKYSTAT_DAILYPROJECTDATA_HOME
HACKYSTAT_SENSORBASE_HOME
HACKYSTAT_TELEMETRY_HOME
HACKYSTAT_UTILITIES
RESTLET_HOME
After all this, my first task was to make sure that ant -f verify.build.xml was successful, but it failed due to size.xml missing in the project's Build/SCLC directory. Running the JUnit ANT task failed as well. One error I was able to fix was JavaMail being uninstalled correctly. After some trial and error, I found out that mail.jar goes inside the Java/jdk/jre/lib/ext directory and not the Java/jre/lib/ext directory as instructed by the Hackystat InstallingJavaMail wiki.
These are the following JUnit errors I couldn't fix:
[junit] Test org.hackystat.ambientdevice.server.TestAmbientServer FAILED
[junit] Running org.hackystat.ambientdevice.trigger.TestCommitTrigger
[junit] Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 3.152 sec
[junit] Error:
[junit] 03/05 11:11:40 Derby: previously initialized.
[junit]
[junit] Derby shutdown hook results: Derby system shutdown.
[junit] Test org.hackystat.ambientdevice.trigger.TestCommitTrigger FAILED
[junit] Running org.hackystat.ambientdevice.trigger.TestCoverageCompareTrigger
[junit] Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 2.466 sec
[junit] Output:
[junit] C:\Users\Owner/.hackystat/sensorbase/sensorbase.properties not found. Using default sensorbase properties.
There are more JUnit errors, but they all involve trigger testing which I suspect is related to derby being initialized already and having to shutdown.
Changing Colors
To test whether the system worked, I modified the configuration.test.xml so that the ambient orb turned chartreuse when an ANT build was a success. After executing ant on the project itself and waiting for about an hour, the orb finally changed to chartreuse. The whole time I thought I was doing something wrong because I kept getting a warning that the sensorbase host address I specified was incorrect (which it wasn't).
Trigger Action Language
Overall the trigger action language is understandable, but some improvements could be made. The four tags enclosed between the project tags should only have to be specified once to shorten the amount of lines in the file. I think it will affect readability when more triggers are added. The value and comparation tags should also be renamed to something more meaningful.
I've also noticed that there are other triggers, but most haven't been implemented in the xml file. These triggers also center around the testing and coverage tools so triggers for other tools would be recommended such as triggers for code style.
Java Code
The Java code looks fine for now. It just needs descriptive documentation.
Bogosities
I could only think of one and it's that it takes too long for the color to change. It's not the team's fault since they're using the ambient orb company's pager system, but it would be great if the time it took for the color to change was shortened to around 2 minutes so that the triggers were more useful for productivity.
Everything else about the implementation seems reasonable for its stage of development.
Installation and ANT
To install the project on my system, I followed the installation and developer guide found on the project wiki. There were environment variables that were missing from the developer guide so it was a bit of an inconvenience to find out that I hadn't set it all up. I planned on adding the variables after each time that ANT complained, but after having to restart twice so the changes took effect I remembered that all the variables needed were specified in the build path when the project was loaded on Eclipse. It was mentioned by Professor Johnson that most of these dependencies were unnecessary during the AmbientHackystat team's overview of their system, so this shouldn't be an issue for future releases.
These were the variables not mentioned in the developer guide:
HACKYSTAT_DAILYPROJECTDATA_HOME
HACKYSTAT_SENSORBASE_HOME
HACKYSTAT_TELEMETRY_HOME
HACKYSTAT_UTILITIES
RESTLET_HOME
After all this, my first task was to make sure that ant -f verify.build.xml was successful, but it failed due to size.xml missing in the project's Build/SCLC directory. Running the JUnit ANT task failed as well. One error I was able to fix was JavaMail being uninstalled correctly. After some trial and error, I found out that mail.jar goes inside the Java/jdk/jre/lib/ext directory and not the Java/jre/lib/ext directory as instructed by the Hackystat InstallingJavaMail wiki.
These are the following JUnit errors I couldn't fix:
[junit] Test org.hackystat.ambientdevice.server.TestAmbientServer FAILED
[junit] Running org.hackystat.ambientdevice.trigger.TestCommitTrigger
[junit] Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 3.152 sec
[junit] Error:
[junit] 03/05 11:11:40 Derby: previously initialized.
[junit]
[junit] Derby shutdown hook results: Derby system shutdown.
[junit] Test org.hackystat.ambientdevice.trigger.TestCommitTrigger FAILED
[junit] Running org.hackystat.ambientdevice.trigger.TestCoverageCompareTrigger
[junit] Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 2.466 sec
[junit] Output:
[junit] C:\Users\Owner/.hackystat/sensorbase/sensorbase.properties not found. Using default sensorbase properties.
There are more JUnit errors, but they all involve trigger testing which I suspect is related to derby being initialized already and having to shutdown.
Changing Colors
To test whether the system worked, I modified the configuration.test.xml so that the ambient orb turned chartreuse when an ANT build was a success. After executing ant on the project itself and waiting for about an hour, the orb finally changed to chartreuse. The whole time I thought I was doing something wrong because I kept getting a warning that the sensorbase host address I specified was incorrect (which it wasn't).
Trigger Action Language
Overall the trigger action language is understandable, but some improvements could be made. The four tags enclosed between the project
I've also noticed that there are other triggers, but most haven't been implemented in the xml file. These triggers also center around the testing and coverage tools so triggers for other tools would be recommended such as triggers for code style.
Java Code
The Java code looks fine for now. It just needs descriptive documentation.
Bogosities
I could only think of one and it's that it takes too long for the color to change. It's not the team's fault since they're using the ambient orb company's pager system, but it would be great if the time it took for the color to change was shortened to around 2 minutes so that the triggers were more useful for productivity.
Everything else about the implementation seems reasonable for its stage of development.
Monday, February 25, 2008
REST
REST (REpresentational State Transfer) is an architectural style as defined by Roy T. Fielding in his Ph.D. thesis and according to an InfoQ article that I read, REST is a set of principles:
Special mention to the Beauty of REST article for using the word "grok" in the second to last paragraph. Stranger in a Strange Land reference anyone?
Anyway, I am working on a project called iHacky. It involves retrieving data from the Hackystat sensorbase, saving it to the iHacky database, then sending information based on that data to Facebook to be viewed.
The Hackystat sensorbase obeys REST principles. Looking at the Hackystat sensorbase REST api, it can be seen that there are resources that can be retrieved and links properties together as well as uses the GET, POST, PUT, DELETE, and HEAD methods. One part of Hackystat that I'm unsure of with regards to following REST principles is its project viewer. It has a URI, but I see nothing about it that leads to obeying REST principles.
The Facebook api on the other hand is only REST-like. Facebook provides a REST client library for its api written in PHP. The api can only make GET and POST requests so I suppose it's why Facebook considers their interface REST-like.
With regards to iHacky, I do not think a REST interface should be provided. I consider all the data that will be stored in the database to be confidential. The user must provide their Hackystat login and password in order for iHacky to retrieve their Hackystat data. If a user wants to retrieve their Hackystat data, they can go to Hackystat, if they want to retrieve our interpretation of their data, then all they need to do is look at it through Facebook. If a user wants to view another user's data, then they must go on Facebook and add iHacky to their list of applications and only view data that the other users' wish to provide. There are unforeseeable situations so I'm not closed to the idea of making a REST interface.
- Give every “thing” an ID
- Link things together
- Use standard methods
- Resources with multiple representations
- Communicate statelessly
Special mention to the Beauty of REST article for using the word "grok" in the second to last paragraph. Stranger in a Strange Land reference anyone?
Anyway, I am working on a project called iHacky. It involves retrieving data from the Hackystat sensorbase, saving it to the iHacky database, then sending information based on that data to Facebook to be viewed.
The Hackystat sensorbase obeys REST principles. Looking at the Hackystat sensorbase REST api, it can be seen that there are resources that can be retrieved and links properties together as well as uses the GET, POST, PUT, DELETE, and HEAD methods. One part of Hackystat that I'm unsure of with regards to following REST principles is its project viewer. It has a URI, but I see nothing about it that leads to obeying REST principles.
The Facebook api on the other hand is only REST-like. Facebook provides a REST client library for its api written in PHP. The api can only make GET and POST requests so I suppose it's why Facebook considers their interface REST-like.
With regards to iHacky, I do not think a REST interface should be provided. I consider all the data that will be stored in the database to be confidential. The user must provide their Hackystat login and password in order for iHacky to retrieve their Hackystat data. If a user wants to retrieve their Hackystat data, they can go to Hackystat, if they want to retrieve our interpretation of their data, then all they need to do is look at it through Facebook. If a user wants to view another user's data, then they must go on Facebook and add iHacky to their list of applications and only view data that the other users' wish to provide. There are unforeseeable situations so I'm not closed to the idea of making a REST interface.
Monday, February 11, 2008
Introduction to Hackystat
Last night, I was introduced to Hackystat through the StackyHack tutorial. I was able to complete all parts of the tutorial successfuly. Each sensor (Ant, Junit, PMD, Checkstyle, and SVN) sent data to the Hackystat public sensor base.
I took approximately 6 hours to complete the tutorial because I was having some trouble setting up the environment. I'm not sure why, but in the past I was able to setup environtment variables on my Vista laptop and not have to restart afterwards. Now I have to. I didn't realize this after 2 hours of going over all possible mistakes I could have made. After I figured out that I had to restart, I spent another hour trying to figure out what mistakes I was making in the process of setting up the environment variables correctly for the ant sensor like putting in quotation marks for ANT_ARGS.
iHacky, the project that I am working on, will use either use Java or PHP, and mySQL. If my team decides on PHP the ant and svn sensors can at least be used. Doing brief research I found PHP equivalents for JUnit, Checkstyle, and Emma although I am not sure if these tools are mature enough to use for our project.
As for the three prime directives of Open Source Software Engineering, Hackystat fulfills at least the first two prime directives from my perspective. It accomplishes a useful task and it can be successfully installed by an outside user such as myself. As for the third prime directive, I understand the system, but I'm not sure about enhancing the system. That's what the project is for, in a way. Other developers have clearly enhanced Hackystat and understand it, so ultimately Hackystat fulfills the third prime directive.
I took approximately 6 hours to complete the tutorial because I was having some trouble setting up the environment. I'm not sure why, but in the past I was able to setup environtment variables on my Vista laptop and not have to restart afterwards. Now I have to. I didn't realize this after 2 hours of going over all possible mistakes I could have made. After I figured out that I had to restart, I spent another hour trying to figure out what mistakes I was making in the process of setting up the environment variables correctly for the ant sensor like putting in quotation marks for ANT_ARGS.
iHacky, the project that I am working on, will use either use Java or PHP, and mySQL. If my team decides on PHP the ant and svn sensors can at least be used. Doing brief research I found PHP equivalents for JUnit, Checkstyle, and Emma although I am not sure if these tools are mature enough to use for our project.
As for the three prime directives of Open Source Software Engineering, Hackystat fulfills at least the first two prime directives from my perspective. It accomplishes a useful task and it can be successfully installed by an outside user such as myself. As for the third prime directive, I understand the system, but I'm not sure about enhancing the system. That's what the project is for, in a way. Other developers have clearly enhanced Hackystat and understand it, so ultimately Hackystat fulfills the third prime directive.
Monday, January 28, 2008
Initial Results of My First Professional Portfolio
Making my professional portfolio was interesting. Using Google Pages has made it easy, but it also has its limitations. I have also come to realize something about what I have managed to accomplish.
Google Pages makes it easy to make a personal website. It has pre-made layouts and themes for users to choose from in order to make their site. At the same time, the layouts are rather limiting since I can see no way of changing the available work area for me to put my information in. At some point in the future, I will most likely try to make another professional portfolio with a site that I can customize as much as I want so I can make better use of browser space. One professional portfolio (Webguru4hire)has a similar layout to the one I am using and the owner had a lot of samples that had to be scrolled through. It would have been better if the samples were more compact so two columns could be used.
As far as my accomplishments, I haven't managed to do a lot. My only accomplishment is MyISERN and although I am proud of that because the road to its creation was hell, it was done in Java. My next project, iHacky, will also be done in Java so it distresses me a bit that I am straying away from C++ which is what I feel I should be working with in more depth. One might ask why I'm not doing a project that uses C++. Well, Professor Johnson made a good point in one of his lectures that now is the time to be specializing instead of just being exposed to a little bit of everything. I will be graduating this semester and I know I'm not going to have time to do any personal projects with C++ since I'm taking four 400 level ICS classes so all I can think is to just do what I can to become an expert on Java.
Google Pages makes it easy to make a personal website. It has pre-made layouts and themes for users to choose from in order to make their site. At the same time, the layouts are rather limiting since I can see no way of changing the available work area for me to put my information in. At some point in the future, I will most likely try to make another professional portfolio with a site that I can customize as much as I want so I can make better use of browser space. One professional portfolio (Webguru4hire)has a similar layout to the one I am using and the owner had a lot of samples that had to be scrolled through. It would have been better if the samples were more compact so two columns could be used.
As far as my accomplishments, I haven't managed to do a lot. My only accomplishment is MyISERN and although I am proud of that because the road to its creation was hell, it was done in Java. My next project, iHacky, will also be done in Java so it distresses me a bit that I am straying away from C++ which is what I feel I should be working with in more depth. One might ask why I'm not doing a project that uses C++. Well, Professor Johnson made a good point in one of his lectures that now is the time to be specializing instead of just being exposed to a little bit of everything. I will be graduating this semester and I know I'm not going to have time to do any personal projects with C++ since I'm taking four 400 level ICS classes so all I can think is to just do what I can to become an expert on Java.
Subscribe to:
Posts (Atom)