Tuesday, April 22, 2008

Feels nice to submit something

The group took a liking to the work I did and I went ahead and submitted it. However, we're still at the same location we were before where we need to display the Google map, Jason is primarily working on this while I finish up my code. I was really satisfied with how my stuff is working. When I ran a couple of tests it was actually close to the distance Google Maps posted.

We also made our site live and for the most part it works, but there are a few quirks to it. However, things feel like they're moving a lot more smoothly now and we may be done by the end of the week and can begin testing next week. We'll see how that goes!

On a side note, I'm going to get busy again with other classes so hopefully I can put in some decent hours here. CS451 is kicking my ass and with a measly 28 on the f'n midterm, I'm a little concerned so I'm trying to give it a little more prime time than before.

Last semester sucks!

Monday, April 21, 2008

Some surprsing progress (for me)

I've managed to have broken the PHP barrier and have begun to understand how it's functionality works - however the Drupal connection still doesn't make sense to me, not entirely.

I spent the rest of Sunday night trying to come up with a clever way to implement the Find module. Since we want to find all of the CD's within a distance of a user's current location, I figure we can use Google maps' latitude and longitude measurements and some calculation to pick out the CD's nearest the search location. As far as I know, the call to Google we're making and the values we're pulling from the return are in degrees so using something like the Great Circle Distance Formula may actually feasible. Here are some steps I think can be followed:
  1. Have the user input the address they're located, city, state, and maybe zip code
  2. Search the data base for CD's in given location (more on this regarding problems in a bit)
  3. Go through list and calculate distances, only keeping points that are within specified distance
  4. Render map with points on it (have info regarding distance of sorts)

I think it should work, but there is an issues we'll have to contend with. If we're searching through a city, there may be many CDs that are returned. The Great-Circle Distance formula uses sine, cosine, and arcosine to calculate the distance, this may cause some inefficiencies.

I have to run this approach with the rest of the group. As I've mentioned before, Jason is working on this as well, but I have not heard anything from him, so I'm not sure what kind of progress he's made. If this works and the group goes along with it, all we would need to do is put the Google map on the page and it should be working (I've managed to have gotten most everything working, just have to double check the distances).

One final note, I'll have to double check and make sure this matches the requirements document. Don't want to go about just adding things al troche-moche. But we'll see!

Sunday, April 20, 2008

Spend a night in the box

I've spent part of Saturday and a good portion of Sunday going over PHP tutorials and some Drupal stuff so I can stop fighting over this code (for the record, my ass hurts, and I'm tired of this office). One of the books we got from Prof. Bridges, Drupal: Creating Blogs, Forums, Portals, and Community Websites hasn't been as helpful as I was hoping. I think the other book may help some. Anyways, I spent a good deal looking at the tutorials and seeing how or what our code is doing in relation to this. I've gotten a better grasp of stuff, i.e. I understand how arrays work. But the Drupal connection still isn't solid for me. Jared keeps saying it uses hooks, so where are these hooks called? What change can I make and how can I see it? Yarr!

The code Jared had written does everything we need and all we have to do now is just display a Google map with those marker locations. I'm trying to figure this out, but still not sure how. I can't find where this is done in the other modules, but I'm still searching.

So I can stop wasting time I've done the following things:
  1. Asked Jason if he's still working on the find module (as far as I know he is) and if he needs me to do anything. I don't want to work on something and it turn out that he had finished it all along.

  2. Emailed the rest of the group if there's anything else I can do. I don't want to hold up the process and I want to stop feeling like I'm not contributing anything. Also, hopefully by doing this the group will realize I'm not slacking and am trying to be a providing member.

  3. Start reviewing documents and see what else can or should be done. Also, at this point, I guess I'll be a language lawyer but only in the sense of the project.

I'm very conscientious about what I provide to the group, so right now it's killing me that I haven't produced code. I hope, that by providing other types of support I can still pass this class and not be seen as a bad engineer.

Infinite frustration

For the former part of the week I got stuck working on a parallel programming project so that took up a lot of my time. I finished that up Wednesday night and started "working" on the MixCD project on Thursday... to no avail.

For the most part I'm still confused on the PHP, I'm trying really hard on figuring out how Drupal interacts with the code we write. Jared has explained it a few times, but I still fail to see the connection.

But back to the project and the Find module I'm supposed to be working on with Jason. I've tried to get a hold of Jason so we can collaborate on the module, but I can't seem to get a response. He had sent a message to the group, primarily to Jared, regarding some info on the module, but he didn't state if he had made any progress on it either or if he wanted me to do anything. I'll try again to message him and see what I can do to help.

Speaking of Jared, on Thursday I spoke with him and apparently he wrote a good 80% of the find module. It basically takes information out of the database, based on Zip code or State and, for the moment, prints out the returned array. This has utterly made me feel useless and my frustration is growing that I haven't actually produced any code or anything tangible (aside from documentation).

I'll keep looking at what we have and try and figure stuff out. However, I may have to request to work on something else. Maybe do more documentation or figure out a way to test the site. I'll see what the group says.

(group) Meeting 2 (Wednesday 4/23)

We've accomplished a great deal on our site and the meeting was mostly what we should be doing and where we were at.

I have been assigned to help Jason with the MixCD find functionality. What this is is: A user who wants to search for a CD in his/her area can put in the city they are in, then their area code and the site will do a search through the database of CD's that may be in that Zip code. We would like to make it so it can do it at a certain radius, but for the moment we're sticking with the area code. This way a person can go searching for the CD.

I'm still confused with the Drupal/PHP concept here, so hopefully I'll be able to pick it up and make something useful.

Meetings (Monday 14th)

Had a meeting with Bridges on this day. Obviously we discussed our project and how it was going. He was satisfied with the work we've done and liked our documents. However, he did say we need to relate our testing document back to our requirements document. Makes sense. I was responsible for the main test cases of the document, so I should have done that, but I was mostly in the mindset of "test the functionality of it". We'll make the appropriate updates as we continue on.

Only two more weeks though.... a little scary!

Tuesday, April 8, 2008

Extreme Programming

Since this is a blog about my Software Engineering class, I figured I would cover a Software Engineering strategy (?) called eXtreme Programming also known as XP. So what is XP?

extremeprogramming.org states:
Extreme Programming (XP) is actually a deliberate and disciplined approach to software development....
XP is successful because it stresses customer satisfaction. The methodology is designed to deliver the software your customer needs when it is needed. XP empowers your developers to confidently respond to changing customer requirements, even late in the life cycle.
This methodology also emphasizes team work. Managers, customers, and developers are all part of a team dedicated to delivering quality software. XP implements a simple, yet effective way to enable groupware style development.
XP improves a software project in four essential ways; communication, simplicity, and courage. XP programmers communicate with their customers and fellow programmers. They keep their design simple and clean. They get feedback by testing their software starting on day one. They deliver the system to the customers as early as possible and implement changes as suggested. With this foundation XP programmers are able to courageously respond to changing requirements and technology.
XP is different. It is a lot like a jig saw puzzle. There are many small pieces. Individually the pieces make no sense, but when combined together a complete picture can be seen. This is a significant departure from traditional software development methods and ushers in a change in the way we program.

There are 4 major rules/strategies that are followed:
  1. Planning
    • User stories are written.
    • Release planning creates the schedule.
    • Make frequent small releases.
    • The Project Velocity is measured.
    • The project is divided into iterations.
    • Iteration planning starts each iteration.
    • Move people around.
    • A stand-up meeting starts each day.
    • Fix XP when it breaks.

  2. Designing
    • Simplicity.
    • Choose a system metaphor.
    • Use CRC cards for design sessions.
    • Create spike solutions to reduce risk.
    • No functionality is added early.
    • Refactor whenever and wherever possible.

  3. Coding
    • The customer is always available.
    • Code must be written to agreed standards.
    • Code the unit test first.
    • All production code is pair programmed.
    • Only one pair integrates code at a time.
    • Integrate often.
    • Use collective code ownership.
    • Leave optimization till last.
    • No overtime.

  4. Testing
    • All code must have unit tests.
    • All code must pass all unit tests before it can be released.
    • When a bug is found tests are created.
    • Acceptance tests are run often and the score is published.


We have covered different types of development cycles, i.e. Cascading/waterfall design, XP on the other hand is a bit different. Below is the flow chart used for development.


This type of methodology may seen like a good practice, it does have its own set of controversial aspects. Wikipedia lists some of them such as:
  • Requirements are expressed as automated acceptance tests rather than specification documents.
  • Requirements are defined incrementally, rather than trying to get them all in advance.
  • Software developers are required to work in pairs.
  • There is no Big Design Up Front. Most of the design activity takes place on the fly and incrementally, starting with "the simplest thing that could possibly work" and adding complexity only when it's required by failing tests. Critics fear this would result in more re-design effort than only re-designing when requirements change.
  • A customer representative is attached to the project. This role can become a single-point-of-failure for the project, and some people have found it to be a source of stress. Also, there is the danger of micro-management by a non-technical representative trying to dictate the use of technical software features and architecture.


Personally, I have some reservations regarding this methodology and don't fully believe in all of the tenets. Also I believe testing is perhaps the most beneficial aspect. I haven't worked at any professional software development companies, so I am not sure how a lot of Software Engineering practices are put to use. The only real work I've done was with Pfizer, however, I was just an intern and was given my subset of work.

Finally, the name is horrible. I don't understand why they decided to use a name with 'extreme' in it. I feel like the creators of this methodology are trying to entice me to use it like Mountain Dew commercials. Should I be writing my code while skydiving, skateboarding, or even snowboarding? I don't think so. There is nothing extreme about this, it is only a different way of looking at doing things.

Have a nice day....