Thursday, September 5, 2013

The Next Phase

It's been almost 4 years since I posted something on this blog.  The blog was originally intended to fulfill a requirement for my ICS 413 and 414 Software Engineering classes at UH Manoa. 

Within the 4 years since graduation a lot has happened in my life.  But I will only focus on my career.  After receiving my diploma from UH I got a job doing tech support with the Attorney General's computer crime lab. I set my career path on doing computer forensics and helping put away bad guys.  About a year into my stint with the AG I get a call from the Director of Engineering at Hawaii News Now.  I will not go into details but the former DoE at HNN was my old boss and the station needed computing help.  In a nutshell the GM and my old boss made an offer I could not refuse the compensation was life changing.  Presto! I am the new IT Manager for Hawaii News Now responsible for all things computing at the TV station.  Fast forward to Fall 2012 the DoE decides to retire which created vacancies that needed filling.  Basically, I go from IT person to Assistant Chief Engineer almost overnight.  For students reading this because Professor Johnson recommended my blog as an example.  I have over 20 years of working in television that is why I got to Assistant Chief Engineer not because I was the IT Manager and was next in line.  In my current position I am responsible for all things technical which includes TV equipment and computers.

In my next blog I will layout how television and IT are intertwined.  The images that appear on your screen at home is due to software engineering in which a lot of the code is concurrent programming intensive.

Monday, May 11, 2009

ICS 499: 499 The End

Introduction
I am thankful for being able to participate in ICS 499. For a three credit course we need to spend at least 9 hours of study time or in the case of ICS 414 coding time. Much of my study time during the semester was spent developing code for Devcathlon. I estimate I average at least 20 hours on coding, blogging, and meeting with the Devcathlon team. So it was nice to have ICS 499 to apply the extra work hours.

What did 499 do for me
Each week I had to do a summary of what I learned and developed in ICS 414. There were weeks where I had no idea in what to write about. So ICS 499 forced me to think about what new skill did I add to my software engineering tool belt? Or what did I discover about software development that will make me a better programmer? Over the course of the semester I tackled and got tackled by various areas of software development in ICS 414/499 which included HTML, CSS, Wicket, Hashmaps, group work, and Devcathlon. I used HTML and CSS to implement the Scoreboard in Devcathlon. Using a hashmap I can keep track all types of data from Hackystat. With Wicket I can build dynamic webpages using Java. Group development taught a lot about myself and how I should interact with the less than perfect teammate. Devcathlon gave my practical experience with code development.

Conclusion
Did ICS 499 make me a better programmer? Absolutely, I feel I know a little more about software engineering than the previous semester. When employers ask me about my programming experience I can always say my ICS 414/499 blog is quite detailed as it talks what I have developed in the last year. If a student asks me which classes he or she should take in the Spring without hesitation I will tell them ICS 414 with 499. ICS 414 gives you the knowledge and 499 reinforces everything that is learned.

Wednesday, May 6, 2009

Devcathlon Critique

Introduction
The user testing phase of Devcathlon is under way and is going through an evaluation from all team members. Devcathlon is a working system that needs a database which will be implemented this Summer. There are several issues that will be addressed in the next build which includes more unit tests.

Issues
There is an understanding that all systems in its infancy are not perfect. Devcathlon has many issues which seem to be mainly cosmetic and not affecting the functionality. The list is an overview of the May 9 build.
  • Teams: The only issue with Teams is when a user accepts an invitation he or she becomes a member of all created teams.
    There should be only 4 members in this team.
  • Matches
    • Matches tab: Something should display in the Match Details panel.
    • Matches Manage tab: Something should display in the Match configuration panel.
  • Scoreboard
    • The matches panel(left panel) needs to be paginated *already done*.
    • The Event panel needs to be paginated *already done*.
    • The Teams List should display names not emails, that function is part of the implementation not sure what is wrong.
    • Display the date of an invoked Event in Events panel *done, date needs formatting*.
The Review
To critique system I asked Peter Rodrigues an ICS graduate 2007 to examine Devcathlon. To checkout the system, Google's Chrome on a Dell was used. Naturally Devcathlon is not intuitive each section had to be explained. Peter liked the overall design thought it was clean. One major error we found while doing the review was in the match details panel when clicking on the headers a NullPointerException popped up. The panel with the NullPointerException.

Other minor issues we stumbled accross.
  • Not all user IDs (email addys) are clickable, the page below is from the Browse Profile.
  • Matches Manage page should display something
  • Peter did not like the dynamic panels because the user name at the bottom of the page moves and is distracting.
  • Its difficult to understand the layout in the Matches panel(the list of matches). It is not clear what one needs to do within the page. What does the user do with this page?
Top Five Lessons Learned from ICS 414
  1. Patience in team development - Cannot expect perfection when developing code with a group of five or more. All users must be strongly encouraged to constantly communicate with each other. Get all developers to write daily emails about their progress and implementations.
  2. HTML and CSS - First time using CSS for a real project took some adjusting but finally figured it out. I found CSS to be useful and easy to manage.
  3. More Wicket - I wonder if Wicket will catch on? I hope so, it would be a shame to throw away everything I learned. I complained about Wicket in previous blogs which was more out of frustration because I am a novice with the framework.
  4. More Java - Got more practice implementing code in Java. Got to use Hashmaps and Hashsets in production code. It was interesting to see how Java interacted with different languages and frameworks.
  5. Presentation of a System - A lot of preparation needs to go into a presentation before showing it off to management. It can get uncomfortable when explaining a section of the project that is either incomplete or not working. Nothing like blank or angry stares from the boss to make you sweat.
Conclusion
Developing Devcathlon was frustrating yet fruitful I got to work on a system that will be used for ICS 413 in Fall 2009. I believe my software development skills are much sharper. I feel more confident and less fear when working with code. I hope the students in ICS 413 have fun with Devcathlon.

Sunday, May 3, 2009

ICS 499: The ICS 414 Experience

Introduction
The semester is coming to a close and Devcathlon is in beta-testing mode. Devcathlon is not the subject of this week's blog but what was learned while developing the system. The experience of putting together a medium size system like Devcathlon was both fruitful and frustrating.

Web Design
Prior to ICS 414 my web design skills were limited to modifying html script for a page. With Devcathlon I had to tackle html, css, and Wicket to design the Scoreboard. The process of developing the Scoreboard page was a lot of trial and error. My main source of information for coding the board was the internet w3 schools provided a lot of help with css scripting. For the future I plan on taking a graphic design or art class to improve my design skills. I think the Scoreboard is rather plain and could use a little more flair.

Wicket
The more I work with Wicket the more I find it to be a frustrating framework. I am having trouble wrapping my brain around the concepts in Wicket. Much of my annoyance is with the structure of Wicket, the nesting methods and too much going on in the constructor. However, Wicket does its job in making dynamic webpages. Wicket is not a widely accepted framework, yet. I think over time more developers will find Wicket to be more powerful than Javascript to make webpages dynamic.

Teamwork
While developing Devcathlon I learned something interesting about teamwork in the software engineering world. The lack of team cohesion can kill a project. Not communicating can kill a project. Not working daily will definitely kill a project. The team should feel fortunate Professor Johnson understands the perils of developing a project with 8 individuals. A real client would be intolerant of teamwork issues. The real trick for a project lead or manager is unifying the team. I admit, I was playing the "lone ranger" with the Scoreboard. I was frustrated with how the team was devolving and consumed with the board design. In the future, instead of shutting myself off from everyone else because no one else wants to play together figure out a way to get people to play nicely together.

Conclusion
ICS 414 is a tremendous learning experience and I will encourage all Computer Science students to take the plunge. Despite my frustrations with teamwork I can say my coding skills have improved plus I learned a little web design using html and css. I hope I can parlay the skills I learned in ICS 413 and 414 into a career. Oh, yeah I plan on going for my SCJP over the summer.

Sunday, April 26, 2009

ICS 499: Milestone 6.1 and Work Improvements

Introduction
The team was given a reprieve for Milestone 5 and was given an extension for Milestone 6 which I am calling 6.1. The Scoreboard has progressed quite nicely and is ready for display. Got into a jam with the sorting of a Map. Quite a productive week for the Devcathlon project.

Scoreboard
The Scoreboard is fully functional and takes live data via the Initialization class.
  • All active matches
  • All users in a match
  • Match scores, events, and comments
There are some cosmetic issues that need to be address with the headers in the events panel and scores next to names. I think the Scoreboard is about 90 percent complete.

Sorting a Map
The last major hurdle of the scoreboard was to implement a top performers panel. The panel displays the top point getters of a match. To associate scores to users I employed a map to store the points. Now it makes no sense to display points arbitrarily the tallies should be in descending order. But sorting values from a Map is not a simple task. A magical method to sort a Map does not exist in the API. I had employ a TreeSet to sort the values and then used points as a keys to associate a user to a score.
    List userScores = new ArrayList(userScoreMap.values());
    TreeSet sortedSet = new TreeSet(userScores);

    Object[] scoreArray = sortedSet.toArray();
    
    List scores = new ArrayList();
    
    int size = sortedSet.size();
    
    for (int i = size - 1; i >= 0; i--) {
      scores.add((Integer) scoreArray[i]);
    }
The code is not pretty and it maybe prone to buginess. I will be working on improving the Map sorting algorithm in the next Milestone to conjure something more elegant.

Group Improvement
Up until last Monday April 20th the group was limping along in fact there were issues with presenting Milestone 5. After going through group therapy with Professor Johnson which, I felt was beneficial for everyone. I saw improvements in all facets of development: communication, coding, and team morale. I feel like that I am part of a team and Devcathlon will be completed by the end of the semester.

Friday, April 17, 2009

ICS 499: Milestone5 and Playing Nicely with Others

Introduction
Devcathlon is currently at Milestone 5. My responsibilities continue with the Scoreboard and added the match invitations to help out. I took on the leadership of the Match and Scoreboard team. Although, I am not sure if the group needs three chiefs. I think one leader is sufficient at this point, with only three weeks left in the semester. The group needs to be working together and hearing one voice. Not three different opinions which stifles productivity.

The Scoreboard
The Scoreboard now takes in real data showing the details of a chosen match. Right now the system is set up for two teams to compete. Eventually, Devcathlon will allow more than two teams to play each other. Of course this means the Scoreboard will need to go through a redesign to accommodate three groups or more. The team lists still needs to have members linking back to their profile. Also the Events details needs headings to make the panel easier to read.

Group Work
I have learned a lot about group development this semester. Throughout my professional life I have been a participant in a team where success was dependent on communication and working as a unit. Without cohesion and dialogue the team cannot meet its goals. Members maybe doing redundant work or a task requires multiple bodies for completion. Furthermore, the unit cannot work efficiently if two or three members are not performing the tasks needed to get the job done. The team will get stuck in the mud and cannot meet its deadline.

Friday, April 10, 2009

ICS 499: Data in the Scoreboard

Introduction
This week's milestone requires us to implement real data into Devcathlon.

Digging for Match Data
I initially took on the task of implementing the Initialization class which is used to create data to test Devcathlon. However, I encountered a set of issues that prevented from finishing the application.
  • Could not connect with the host (Sensorbase).
  • Did not have data to work with (User data).
Not being able to connect to the sensorbase was not too bad there were ways to workaround that issue. Not having the data was the bigger problem because the system needs information for it to work. Once the group figured out a direction which included sharing data: names, emails, and passwords. It should be noted the passwords are retrieved locally and not accessible to the public.

Retrieving data for display.
A lot of the implementation in Devcathlon is the digging for data. Every aspect of the system has data: matches, teams, users, and events its our job to pull out the info for display. Retrieval is fairly simple, Hackystat and Devcathlon APIs have the needed methods for extraction. The interesting part of the development has been the display of information using Wicket. Throughout Devcathlon the info needs to be presented as a link using the snippet.
 
        item.add(new Link("MatchLink") {
          private static final long serialVersionUID = 1L;

          /** Upon clicking this link, go to Match page */
          @Override
          public void onClick() {
            try {
              setResponsePage(new MatchDetailPage(mItem));
            }
            catch (Exception e) {
              // if there is an exception error
              e.printStackTrace();
            }
          }
        });
The code sets a Match name as a link and directs to the match detail page.

Page Layout with CSS
One of the challenges I have been encountering with the development is the layout design of the scoreboard. To the dismay of some of my teammates I have been using Devcathlon as an opportunity to learn html and css. The process has been painful at time however, I am learning about inheritance and how changing one value in one page can affect the layout in a different page.

Conclusion
The group got hit pretty hard with Milestone 3 due to a lack of sufficient progress. I think Milestone 4 will be an improvement and I think we built pretty neat system thus far.