Wednesday, May 14, 2014

Another one bites the dust...

I am super stoked on what groups were able to put together by the end of it all.  Typically in classes like this there is one group that stands on stage and shows off their unit tests because they have nothing.  I was pleasantly surprised that this did not happen.

One group that I believe did not get the credit that they were entitled was PowderAde.........Oh uh Carve Companion.  This app is dope!  I am going to bug Brandon until he lets me put it on my phone.  Just making an app is a super impressive feat.  I have tried my hand at it and when my Hello World app crashed for a week, I said screw it.  Their application is solid and I am really going to use it this coming snow season.  Hell even at the skate park.  They really put in a ton of work for the Google Play and Google Map integration and for that I give them props.

Well another semester is gone and I can't say I am not glad to see it go.  Last semester I told myself "next semester is going to be cake compared to 351".  Now this semester I am saying "next semester will be cake compared to 460".  **Commence infinite loop**.  This was way harder than I thought.  This was actually probably my hardest CS class.

 I am not a business man at all, I am the troll banging on the keyboard.  At least I want to be.  This class really opened my eyes that funding comes from somewhere and this is what you need to do to get it out of investors/customers pockets and into yours.  I learned that no matter what, you must sell yourself and your product.  People will not see that you wrote a project in Erlang and just throw money at you.  Ok maybe they will, but still.  Now I know what needs to be done to sell a product to someone who has never seen it.  I have also made huge progress in writing.  By doing so much writing with the pitches and the reviews and the evaluations, I am now much better at doing things that I will be doing at a company for the rest of my days.  Now I really see that changing the world through software is not just changing the world through software.  It's coming up with an idea, developing it, convincing people this is a good idea, trying again to convince people this is a good idea, coming up with a business model, theeeeeen changing the world through software.  This is quite a daunting task for most of us, but we all pulled it off.

Congrats to Mechanapp for their second place victory.  Those guys are solid talent and they earned it.  I am excited to see if they keep going with the application, or if they drop everything and enter into the job market.  Either way, they should be very proud.

Thanks to my team Dan, Zach, Kellen, and honorary member Katie.  This app would be nothing without you all.

A huge thanks goes out to Professor Ackley for kicking my ass in 251, 351, and 460.  I have gained more knowledge and lost more sleep than I knew was possible.  By being such a tough teacher, he weeds out the "tourists" as he would say, and pushes everyone else to give 150%.  After every class period, I felt like I gave 3 pints of blood, but I am a much stronger developer for it.  


Tuesday, May 13, 2014

We Did it

I cannot believe that our project was picked as the top software engineering project of 2014.  I feel that the whole thing came together very solidly.  I was nervous at first since our project was not evaluated on the content, but on the quality of the speech.  One thing is for sure though, I am so glad that we had two practice pitches before this one.  The biggest benefit in my mind is that it gave us a chance to really nail down our timing.  If we had gone on stage today and been four minutes short on our talk as we had previously done, we would have had no chance.  The practice talks got us very comfortable with our speeches and I was not nearly as nervous for today as I thought I would be.  We have a long way to go though.

I do believe that we can use this application to change the world through software.  In fact, with our winnings, I believe that we are going to upgrade our Amazon server and try to get this thing out by October.  I feel that by winning today, we have made a great impact on the class and now we must make an impact on the rest of campus.

A big thanks to Professor Ackley, the guest judges, and my fellow students for this class.  It has helped me grow as a Software Engineer.

Tuesday, May 6, 2014

Bug Whisperer

One of the biggest things that I have contributed to my team through this whole project is being able to break things.  I have been able to find many issues with our project (and I am continuing to).  This is I have managed to find bugs and unexpected behavior that my other ream members have not noticed, which we have fixed soon after.  This is helping our project be more solid and ensure that we do not have something terrible happen during our presentation.

I did have an interesting scare the other day.  Brandon Lites asked me if we are sanitizing our SQL queries and I looked at him like a deer in the headlights.  After convincing him not to do some horrible SQL injection on our project,  I brought the issue up with my team.  We did some research thinking that we would have to write some kludge in back end to make the site less vulnerable to attack.  Not so.  We are using Hibernate as our Java Persistence framework and it actually sanitizes queries for you!  Looks like Bobby Tables won't have a problem attending UNM (ha).

 On a serious note though, we learned an important lesson from this.  This class is about designing software for the real world and getting us ready to go from school to shipping code to a customer.  Now, in school we have never really had to worry about security issues like this, the goal has just been to get the project finished.  In the real world, if we had shipped a product that was vulnerable SQL injection, I am sure that it would be exploited in less than a day.  Even though Hibernate took care of the vulnerability, it was a reminder to keep security in mind and always stay sharp on how something is implemented.      

Thursday, May 1, 2014

Thoughts On Continued Development

So, it has been a topic that had been brought up a lot so I figured it was worth mentioning.  A lot of people that I have talked to have expressed interest in using the VisualScheduler application and have been asking for the URL.  Most of them have also said that they would definitely pay five dollars a semester for our schedule generator.  Zach has showed the application to a UNM recruiter and they were very impressed with the application.  She gave us the name of someone named Cinnamon Blair to talk to about money and if we will be allowed to make profit off of the application.  I firmly believe that if we talk to UNM about making profit off of the application, people will use it and it will be successful.  Soon in the future, we plan to get more server space than the micro instance we have right now so we can support many more users.  One of the starting places to kick off the application will be the UNM subreddit to get the word out to other people at this University.  We will also be setting up social media pages soon to get people involved with the application.  I do not see a reason why UNM would provide something like OpenData if they did not want an application like this to be made, so I feel as though me and my team have filled a giant hole in the registration process.

Monday, April 28, 2014

Misc. Ranting

Presentations

The last day of presentations are over and everyone really improved. Here are a few of my reactions to the pitches and the projects in general.

Automaton:
I really liked that this team made a project that they basically built from the ground up.  Talking to the team, it seems like the only technology they used was node.js everything else they made.  Seeing the final product, I was impressed with how much work they did in so little time.  Another thing I noticed is that the majority of the speech is a demo.  That really isn't that big of a deal I mean they have a lot to show and the point is to really show everything the application is capable of, right?  It would be nice to hear some a business plan or something that tells me how they will maintain the application because I am kind of curious.  The game itself is a little confusing, but its a cool idea and I really like it.

VisualScheduler:
Basically, I wanted to do a small review of our pitch just to write out some changes we should make.  I thought our pitch went well.  Way better than I thought it would.  Some things that I would change though is that we really need to talk about our technology.  We are using so many different libraries and languages, I think it would be neat to mention.  I have programmed in Java for years and we are using things that I had never heard of as of a few months ago so I feel our audience would like to know what was happening under the hood.  Ackley also made a good point today about having a time with us during our presentation.  If we had had one, then we would have been able to tell that we were short on our time and blab for another 40 seconds.  Another good point was to really push the schedule generator.  This feature is a main part of our business model and is really cool.  Talking about if for ~30 seconds was not nearly enough and selling that will be a big move for us.  I really want to win the best project and with our final talk, I think we can really drive that bad boy home.

G.E.R.A
This is a project that I think people would be into because "going green" has been the latest fad (for lack of a better word).  For me, I can't really see myself using it just because it is not really a topic I care about.  Ben is a good public speaker and, though there were a few bumps, he is animated and engaging.  I don't mean to sound overly pessimistic, but there are a few things about this application that rub me the wrong way.  I am not the biggest fan of the website layout.  It is not bad by any means, I just think it could be done a little cleaner and less clunky.  I really want to see what the missions look like to.  One of the big selling points of their pitch is that many applications are simply data entry.  For me, I can't really see how it wouldn't be merely data entry so I would love to see a small example.  Overall, their pitch was very solid.

Thoughts on the Team:
I am very happy with the team that I worked with.  Everyone worked super hard and gave it everything they had to make an outstanding application.  We worked very well as a team and, even though there were some disputes, we were able to back the final choice and make it work.  This project was a ton of work, but it was a great team experience and a great learning experience.  Dan and Zach know so much about programming and I was able to use the past few months to pick their brains and learn a ton.  In a few short months, Zach went from never looking at a line of Javascript to being a master of Javascript and AngularJS.  It is obvious that he put a lot of time and research into doing what he was assigned and doing it well.  Dan was the duct tape for the whole team.  No matter what part of the project I was working on, I was able to ask him what my next move should be and he always came up with insightful information.  Kellen came through with the static web pages and made them look exactly like the mock ups.  The biggest benefit of this project is that it is Dan's baby.  He is so close to the project and wants it to succeed so bad that he killed himself and made us to the same to make it perfect.  No matter what, there was something that Dan wanted us to do better which really helped to make the application what it is.



Wednesday, April 23, 2014

Final Push

It's almost time to call it a semester, but there is still a lot to do before we are done.  We have run into a couple little bugs that we need to fix to make our project sturdy and reliable.  One thing that I was surprised by is that screen resolution can really mess things up.  When using existing applications on my phone, laptop, and desktop the application always magically scales.  Sometimes not super well, but pretty good.  When trying our application on different devices, a lot of the styling gets really messed up.  It has been harder than I thought to fix this problem.  In fact, before trying the application on different devices, I didn't even know that this would be a problem.

Another very unfortunate bug that we have is that whenever we try to access our site from a phone's browser, we get an error saying that this type of address is unsupported.  I again did not think that this would be a problem.  I just figured that a browser was a browser and it should work.  Even though I carry my laptop with me everywhere, I really hate having to pull it out and I always search the web on my phone.  If this is going to be a practical application for college students, this issue needs to be resolved since students practically live on their phones.

The schedule generator is going rather well.  I have always struggled with JUnit testing, but I wrote some tests for the generator that make us pretty certain that it is functioning correctly.  These tests are not as robust as Ackley's tests (whose are?), but I am trying to get to that point.  One weird issue I ran into with making tests is that for the meeting time, start date, and end date, we are using the java.util.Date class.  When my test was receiving the JSON object from the backend, Jackson was unable to parse the fields of the JSON into these Date objects since we did it in an odd way.  After some internet research, I figured out that I needed to make time and date deserializers so that Jackson knows how these fields should be parsed into Dates.  This made the test suite work and I was then able to use assert statements to make sure the object was correct.

I am excited for the demo on Monday and I think everyone is going to be really impressed.  We really need to meet our time limit this go-round and talk about our business model.  If we have a killer presentation, I have the utmost confidence that our project will be selected as the winner of this semester.

Monday, April 21, 2014

2nd Round Of Presentations

Overall, everyone really stepped up with their second presentations.

Mechanapp:

This group delivered a solid first presentation, but showed a lot of improvement in their second one.  I really liked how James and Alan switched between talking and shedding light on different parts of the project.  Also, the demo was much improved and really gave a great flavor as to the usefulness of their application.

Demigod:

This group still has a long way to go,  but they were again much better than their first performance.  It is obvious that Matt does not like presenting, but the always acts lively to get the audience involved in the presentation.  Having a demo this time really helped me stay engaged rather than just watching a video of how it worked.  The only thing I noticed was that the other Matt (running the computer) was biting his nails the entire presentation and was really distracting.  Hopefully there is a challenge on their application to help people quit nail biting.

Powderade:

The presentation was much more engaging since the group was presenting and not on a video the entire time.  Contrary to what Ackley said, I did not find it to be that big of a deal that the snowboarder and the application demo did not match up.  I thought it was cool just to see the numbers change while someone was snowboarding.  If the video worked smoother next time around, I really liked the direction that there presentation went.

Friday, April 18, 2014

Progress Report

So we had our meeting on Wednesday with Ackley and he seemed pretty distraught that our schedule generator was not started.  He did have a valid point that it should have been completed earlier, but it will not be too difficult to implement.  All this feature is going to do is take the classes a user inputs and show them how they fit together.  That's it.  It will not be looking for all art classes that fit into a specific time and that are for seniors or something, we are just showing conbinations of exact classes.  While writing the backend for this feature though, I did realize that we made a huge mistake early on.

I think all of us were really excited about our project and were ready to get to hacking.  It turns out that that was a bad idea.  Obviously, teachers are always saying "develop requirements" and "develop a program structure" which is where we failed.  We did establish requirements and talk about structure somewhat, but not nearly enough.  We neglected to think about our future features and now implementing them is a pill.  If we had planned out our design more, the features would just fall into place, but it does not really feel as though that is the case.  I am hoping to do a large refactor to make the code more abstract, modular, and maintainable.   

Friday, April 11, 2014

Calendar Joy

Well I have been looking into the calendars that we can use for our web application.  I think I have decided that the Angular UI calendar is the best bet.  With the Google API, from what I gathered, even if we don't want to access a user's personal information we still have to authenticate them with Google.

Writing a calendar for the application has been really difficult.  I have been working on back end development for the majority of the project and I have been having to learn Javascript and Angular JS in a matter of days.  Javascript is similar to Java, but the scope is really messing with me.  I have been confused on what can be accessed, who can see variables, and so on.  I have been writing a calendar, but I am unfamiliar with this language so I am getting errors that I have had no idea how to solve.  The majority of my time has been spent on Google trying to debug something I don't fully understand.

As we approach the end of the semester, the thought that this project may not get done is scary.  We have so much to do, and no time to do it.  It has been really difficult having a team mate who lives out of town (and similar issues) to have team meetings because we do not meet nearly as much as other teams.  I feel like this is the cause of our lack of progress.  We have had a lot of hardships on the team and it has been tough to accomplish anything effective.  Hopefully, we can work hard to get the project done, but I wish we had more time to make it great.

Wednesday, April 9, 2014

Progress Report

Well, its the Thursday before our demonstration in class and we have a lot of work to do to get where we need to be.  We have four days to get a calendar up and going to add classes to, as well as allowing a user to accept a schedule and obtain the class CRNs.  The calendar is not as clear cut as we thought it would be and we are considering different technologies.  I know, it's way too late to be doing this.  We have been looking at Google Calendar API as well as the Angular UI.  The Google API is rather complex and would require our users to have a Google account to use the application.  The Angular UI is simple, but is hideous.  If we want to have a great UX, then the Angular calendar needs a visual overhaul.  The cool thing about the Google Calendar is that is can send push notifications to the user.  This would be so sweet!!! Also, we can communicate with the API using a REST interface, which is already all set up.  It would be trivial simply sending the API a POST request with the JSON that a user would like to add.  The Google API is what I am leaning towards, but we will see how it goes.

Sunday, April 6, 2014

Backend Finished

Well, it happened way way later than we would have liked but the backend is done.  Anything that the user wants to search like courses, instructors, etc is supported. This should have been finished way earlier and we are now down to the wire on finishing the application that we promised.  Our meeting with Ackley the other day made me realize how much we have left to do.  I am now being moved to the front end and have been doing hours of internet research to catch up with the rest of my team on AngularJS and Javascript.  I feel I have a good understanding of the framework and, luckily, I have usede MVC for many projects in the past.  Since AngularJS basically forces an MVC architecture, I should have no trouble catching up.  I am excited to make things look great for our user and to contribute to an outstanding user experience.  

Monday, March 31, 2014

The big UX

User Experience

Well after devoting the majority of my blogging time to the actual code and development, I think it is time to talk about the user experience that we are trying to achieve.  So we have some mock ups of what the site design will look like and, from my client hat point of view, I really like the design.  It has a very professional feel to it as well as being very clear and concise.  The help section is very clearly marked and easy to find in case the user is unsure of how to use the product.  Below is a link to see what we have so far as far as mock ups go, and implementing the site to look this way is currently in progress.

UNM Visual Design Mock Ups

The user experience of this product is significantly better than what UNM is currently using for purposes of scheduling.  Personally, every time I have made up a schedule on the UNM website, I search my classes beforehand and jot down the CRN numbers and times of classes I need to take in a spreadsheet.  If I am registering and a class I put in my schedule is full, then I basically must rush through this whole process again to rearrange my schedule.  The UNM Visual Scheduler improves user experience by having all the necessary tools for a user in one place.  With a built in calendar and schedule generator, this whole terrible registering process becomes automated and all the user has to to is choose their preference of schedule.  In my mind, the design is clean, elegant, easy to use, and will provide people the information they need in a readable format.  Once this design is implemented, I know that our users will keep coming back semester after semester.


Saturday, March 29, 2014

Progress Report

Progress

Well after only about 4 hours in Starbucks and being pushed into buying a hobo lunch, I have made a significant amount of progress.  I got the backend returning any kind of entity that a user specifies and performing accurate database queries.  I had accomplished this before, but it had a very brute force feel to it that looked terrible and was hard to follow so I am slightly happier with this new implementation.  There are some repeated parts of code that look very copy-paste and I have been trying to think of a way to further abstract this.  For now though, there is a 95% working implementation.  I must still implement this to work with specified meeting times and instructors, but for now it seems to work well for everything else.

The progress is looking good for the demo on Wednesday and I am hoping to really impress Ackley.  After hearing about some of the meetings that other teams have had, I am nervous about the cosmetic appearance of our application.  I do feel that our mock ups will help us implement a site with a friendly user experience and nice flow.  I am super stoked about how programming went today and am excited for the rest of the team to check it out and provide feedback.

Tuesday, March 25, 2014

Progress Report

Progress

I have made a backend that can construct queries to the database based on how much or how little information is provided to the backend.  As of right now, it returns only section entities, but will soon return any type of entity that is specified.  Integrating the backend with the angularJS frontend, however, has proven to be more difficult than expected.  It has been hard to get the front end to actually make a post request to the backend and it doesnt appear that they even talk at all.  I have written a small test class for the backend as a proof of concept, but I am hoping to have the front and back end communicating for the demo tomorrow.

Saturday, March 22, 2014

Progress Report

I've been trying to get back into the programming groove after spring break and it has honestly been hard to get motivated.  I have been thinking of how to implement the backend in an abstract way rather than having to brute force all the possible queries a user can make.  I have found it hard to find a pattern in all of the data and have been doing a brute force approach right now to hopefully figure out how to abstract all of the code.  I am also trying to figure out how to construct queries with meeting time and instructor as this data is not directly correlated with classes in the database. Hopefully this will be finished in time for a killer demo on Wednesday.

Sunday, March 9, 2014

Progress

Progress

I have been working on making the Model and Controller for the unmvisual project.  I was hoping to get this done by the weekend, but it turns out that I went down a rabbit hole all day yesterday and was not able to get anything concrete accomplished.

In doing this though, I learned a lot about how JSON objects really work and I have a great idea to get this part of the project done.  Using JPA 2.0, if an argument that is accepted into a function is defined as JSON in the annotations of the method, it will be automagically parsed and made an instance of said object.  I did not realize this and worked on making a JSON string parser which took hours and was a waste.

I really want to up the pace of our project as it feels like we have been stuck where we currently are forever.  If we can get the front end and back end communicating properly, then we can all dog pile on the javascript front end and focus on making it look as pretty and be as user friendly as possible.  The fact that most of our project is in javascript is mildly unnerving because none of us have ever written any javascript, so it will take some time to learn.  




Saturday, March 8, 2014

Midsemester Evaluations

Evaluation of Myself

 I am nervous about writing my midsemester evaluation and trying to convince somebody that I have been working hard.  To me, I know I have been working hard and making progress to benefit my group, but convincing someone of that is not as easy as it sounds.

When it comes to the project, I have been working on it at least a little bit everyday.  Progress is slow but that is because the technology I am working with requires a huge learning curve.  I have never worked with the Java Persistence API, Jersey, Maven, JSQL and many other technologies that are key in my role of making the backend.  I have put a ton of research time into learning these technologies and have made many little proof of concept programs to really figure out how they work.
Yesterday, I did some test programs with constructing JPQL queries using JPA 2.0 and I am going to implement what I learned in the backend today.  


Friday, March 7, 2014

Progress Report

Progress Report

Well today we had our team meeting with Ackley and, unfortunately, I missed it.  I was working late on the project and slept through my alarm.  This is the worst thing that could happen because I had a demo ready to show about what me and the team have been doing so I feel as though I let them all down.  This is very unprofessional and I should have come up with a plan to ensure that this didn't happen.

On the bright side, I have successfully made a JerseyTest that calls the backend and can send JSON objects back and forth.  Also, the backend is able to successfully query the database and return a JSON. Right now, the backend will spit out everything in one table and only accepts path arguments.  As the front end will be making very specific queries, the team and I were thinking of sending the request as a JSON to the server using the POST method in REST so that the URI does not get too long or complicated.  From what I have read, it is common practice to send large queries as POST requests so this should not be considered bad practice.

To query the database, I am making a JSON parser using Jackson to parse these large JSON queries from the front end.  The trick is going to be constructing a JPQL query from the relevant information provided.  This part of the project should, hopefully, be done by the weekend.    

Wednesday, March 5, 2014

The Frustration Ensues...

Progress and Problems

At the last meeting, my task was to make very simple queries to a database based on a request from the front end.  This has not been going well  My problem right now is a never ending circle of dependency issues.  It seems like every time I start up the project, something new is broken and I am wasting hours fixing it.  Hopefully, these will get resolved soon and productivity will exponentially increase.

On a bright side, I have made all of the entity class objects for Dan to throw into the database using JPA and it seems to be working very well.  Also, half of our group has started using Intellij full version rather than Eclipse as it has many tools to help with Javascript editing.  Seeing as how the entire group will be working with Javascript soon, we figured this would be a wise choice.

Today, I am trying to fix a 404 error that is being thrown because, for some reason, I cannot access the URI that I specified using REST.  Hopefully this will get sorted out soon.

Thursday, February 27, 2014

Project March:

Progress:

As the project really starts to heat up, I am super excited about what I have been able to accomplish and learn.  This week, I have been doing research on the REST interface and have made an REST server that takes JSON objects and returns JSON objects back.  I have also been doing a lot with the parser.  I have been researching XPath in a DOM parser and have made some really neat spikes.  I have been able to successfully parse the large UNM opendata file that we have to turn into a database.  Right now, I am focused on being able to retrieve a JSON object from the front end of our program and turn it into a mySQL database query.  So far, everything has been going great and I feel as though the work I have been doing has contributed to the team.