CIS Capstone Course: Lessons Learned

When I started this class I was somewhat worried about the capstone project. I had heard from some upperclassmen how challenging the project could be and how important it was to “pick the right team.” When I found out that I would be able to propose an organization to do my project for, however, I grew very excited about the possibility of helping the non-profit I have been volunteering for since last year – the Be a Leader Foundation. Perhaps, that was my first learning experience of this class – I learned that how difficult (or dreadful) a project is, really depends on how excited you are about doing it.

 how difficult (or dreadful) a project is, really depends on how excited you are about doing it.

After my project was selected, I was very excited and wanted to make a big difference for the foundation. I contacted the project sponsor and learned that she had difficulties with the backend of their website, so I gave her my ideas on how to restructure their website to make it more user-friendly and also more appealing to the teenagers the foundation works with. Along with my team, we started to brainstorm how to make their website more likeable for teenagers and how we could revamp their social media channels while integrating all of it into their website. Nonetheless, we did most of this inventive work in isolation from the client’s feedback. We thought that if we could “surprise” our client with great ideas she would be really happy with our work – of course, that didn’t turn out well. So, the second main lesson I learned from this class is the importance of communicating with the client constantly. After having spent time and effort working on our ideas for the renewed website, we put together a draft for the Project Overview Statement (POS) and set a meeting with our client. To our surprise, during that meeting we learned that our sponsor had new plans for the website and would be hiring a company to build the website from the ground up.

We thought that if we could “surprise” our client with great ideas she would be really happy with our work – of course, that didn’t turn out well.

After learning the news from the website, our project sponsor told us about another process she had been thinking of improving somehow – the Senior Boot Camp (SBC). Our sponsor gave us some background information on the process and pointed us in the direction of using a database to improve their current spreadsheet-based system of tracking student information. After having to drop the work we had started for the website, everyone in my team felt pressured to work quickly to put together something for our Sprint 1 presentation. We decided to focus on the database while still keeping the social media component that we had been working on. Because of the time-crunch we decided to all focus on researching database options and come up with pros and cons – we then learned that this was not very efficient. This rush taught me the next two lessons I learned in this class: it is important to keep constant internal communication, and it is necessary to let things go when they are not in scope.

it is important to keep constant internal communication, and it is necessary to let things go when they are not in scope.

Because of the rush, we all ended up doing a lot of duplicated effort and researching some of the same database technologies which was ultimately counterproductive as it created stress in our group – we then realized that this issue was caused by poor internal communication. Similarly, during our first presentation, the guest grader our professor brought to give feedback in our project told us that our scope was unclear and it really seemed that we were attempting to combine two different projects into one (that is, a social media project and a database project). After this helpful feedback, we realized that we needed to let the social media portion of our project go. From this I learned that in spite of all the time and effort we had spent on this portion of our project, it is more important to have a focused scope than trying to hold-on to things that will ultimately hinder the project’s success.

 a great team is not born, it is built through good communication and effort.

After having learned these valuable lessons, my team focused on communicating more often with our new contact person (the SBC process owner) and we were able to keep better internal communication. Following this strategy resulted very productive for our team and we were able to accomplish a lot more than we had before. This taught me one of the greatest lessons I’ve learned from any class – a great team is not born, it is built through good communication and effort. Although some people could have argued that our team was not “the right team” to pick, we grew through several difficulties as a team and were able to successfully deliver a project that made our client very happy.

BP 5 – Google AppsScript

This week in my CIS 440 class we learned about Google AppsScript – a cloud-based scripting programming language based on JavaScript that connects to most Google Apps and many other applications across the web.

One of the really neat things that one can do with this application is to create customized functions to use in a spreadsheet.  Although MS Excel is certainly a useful and powerful tool for data analysis, it doesn’t offer a quick and easy way to create customized functions to do things like fetching current stock prices from the internet, or translating words from English to Italian.

Selection_102

One of the ways I am thinking of using Google AppsScript for my benefit is to create a mail merge script for DISC – a CIS club where I am an officer. I think that DISC can take advantage of a mailmerge function by using attendance data from Google forms. Because of that, I went online and looked more into the topic until I found a tutorial that I have modified for this blog post.

As you will see in the tutorial, you start by creating a Google Form which is attached to a results spreadsheet.

Selection_089

Selection_090

Once you’re done with your form and have all the records you would like to send emails to, you will need to go to “Tools” and  then “Script Editor.” Once you get in the script window,  you need to make sure to look  for the dropdown menu next to the play and bug buttons and select the “sendEmails” function and then hit the play button.

Selection_091

You’ll probably see an authorization screen and confirmation once accepted.

Selection_093 Selection_094

After you run the function, you should receive an email with the information input in the form.
Selection_095

You can follow the instructions in the last part of the tutorial if you want to modify the code to get data from new columns.

Selection_101

Although this was a relatively simple tutorial, it gave me a better idea of how powerful Google AppsScript can be in automating repetitive tasks that are otherwise time-consuming. Overall, a great tool to explore!

Challenge 2: Intro to Windows Azure on Microsoft Virtual Academy

After having worked on Windows Azure for my first challenge, I decided to expand my knowledge on this great platform by completing the intro course on Microsoft Virtual Academy. Completing this tutorial taught me several neat things about Azure.

From the first tutorial, I really liked the visual representation of what Azure is.

Selection_059

Then it was interesting to learn about the major pieces that make Azure work:

Selection_060

One of the nice things I learned about Azure, is that it lets you use any tool you choose to create Windows Azure applications. Specifically, one of the documents I read said that “while Windows Azure provides add-ins for Visual Studio, using this development environment isn’t required. A developer who has installed PHP, for example, might choose to use another tool to write applications.” I thought this is especially nice since a few years ago Microsoft’s integration with other tools was very poor, and in some cases they seemed to intentionally forced users to use all Microsoft-compatible tools. Therefore, I think Microsoft deserves a big Kudos for offering developers the freedom to choose the tools they’re most comfortable with.

I also found interesting the way in which Azure’s storage works using Blobs (structures that contain binary data in chunks of up to 1TB), Tables that are not relational but rather use OData structure to allow for greater scalability, and Queues that allow asynchronous communication between Azure’s roles. Also, the fact that all data stored in Azure is replicated 3 times and backed up in a separate data center is a big plus for data recovery and fault-tolerance. In fact, as the tutorials explained “When you deploy your applications to the Windows Azure platform, the Windows Azure Fabric Controller is responsible for deploying your application into different fault domains, with the guarantee your application will use at least two fault domains.”

Selection_061

I also learned a new concept called upgrade domains that basically guarantees that upgrades to several instances of a role are done one by one to avoid disruption or downtime.

upgrade domain

 

Another interesting feature is the Content Delivery Network which basically looks for ways to cache data closer to the user to be more efficient in delivering content to the user.

Selection_062

Another interesting thing I learned is that developers can  create scripts using PowerShell to create deployments, and do many other things (such as those listed in the table below).

Selection_063 Selection_066

These scripts can also be run inside the virtual machine using remote desktop (similar to how I did for my first challenge).

rdp

Overall, I feel that I learned quite a bit more about Azure and I certainly look forward to keep learning about this and other cloud platforms.

Challenge 1: Building a HTML5 CSS3 Website on Ubuntu under Windows Azure

For my first challenge I decided to do a Ubuntu VM in Windows Azure – available here: http://168.62.162.254/

Being a Linux enthusiast, and having heard my coworkers talk about Windows Azure in the past, I could not help but doing this challenge instead of the others available. Little I knew it was going to be so difficult – it took me over 10 hours and 2 days of work!

When I started the challenge, I tried following Jeff’s tutorial to the letter and added a few screenshots of my own (this was the first day when I thought I’d take less than 3 hours in the whole thing). I noticed that Jeff’s tutorial was missing a few screenshots (although he did provide a link that had all of these, so still a great tutorial). One interesting feature I learned about is that Windows Azure offers the option to connect virtual machines to balance the load of traffic to your application and it also offers what they call “availability set” which allows you to create a set of virtual machines across multiple domains to make sure that your application is not affected by single points of failure.

2

3

I found these two features very interesting because these are topics I have heard about at my work and are certainly more difficult to implement that a single click of a button.

As Jeff pointed out, the process to install the machine does take a while but you can check the status by clicking on the bottom information button.

4

I also found it very interesting that you can “load-balance traffic on an existing endpoint,” which I guess allows you to load-balance the connections to specific ports.

5

One of the first “road-blocks” I hit during the tutorial was testing out the apache installation. I wasn’t getting the “It works!” page and I thought it was an issue with my browser/OS (I’m using Ubuntu) so I tried my Windows 7 virtual machine and still couldn’t get it to work. However, then I changed my endpoint from port 85 to port 80 and it worked just fine!

8

After installing apache and getting the “it works!” page however, I got stuck and could not get to phpmyadmin. After several attempts, I finally gave up and restarted my machine into Windows 7 thinking that doing so would solve my problem – and of course it didn’t!

I then researched how to install phpmyadmin on Ubuntu server, and came across this page: https://www.digitalocean.com/community/articles/how-to-install-and-secure-phpmyadmin-on-ubuntu-12-04

From there, I found instructions to manually add phpmyadmin to apache’s config file and that did it!

9

Note however, that you will need to press Ctrl X to exit the editor and then confirm “Y” to save changes and press enter to confirm the path of the file (leave that unchanged). Then, as the instructions in the link above state, you’ll need to restart apache.

10

After a while of fighting with the command line, I decided to give the tutorial a spin-off and decided to install a desktop for my server. I then found this tutorial: http://blog.appliedis.com/2012/11/05/remote-desktop-to-ubuntu-in-windows-azure/. Upon preparing for the installation, I realized that installing the desktop would take over 1GB of disk space, so I decided to run a command to know how much space I had available.

14

15

After ensuring that I would have enough disk space, I went for it and installed the Ubuntu desktop. If you’re doing this, it will take a while, so you should expect to wait a few minutes. After a bit, it’ll stop downloading and updating stuff.

16

After that, I went ahead and installed the RDP software, set up the endpoint, and clicked connect in the main screen as explained in the tutorial above.

17

18

Once you download the “.rdp” file, you’ll probably have to accept a few windows security screens like these ones:

19

20

As the tutorial says, make sure to change your username in the Xrdp and put the password for it.

21

And… voila!

22

After spending nearly 2 hours trying to get a WordPress installation to work, I decided to take another approach and use FTP to upload files to my VM instead. For that I used Vsftpd following these two tutorials:

http://blogs.msdn.com/b/avkashchauhan/archive/2012/06/18/installing-and-running-vsftpd-in-centos-gallery-image-available-at-windows-azure-virtual-machines-for-linux.aspx

https://www.digitalocean.com/community/articles/how-to-set-up-vsftpd-on-ubuntu-12-04

24

After I got filezilla to connect to my VM, I went to /var/www and changed the name of the existing index.html to something else and then I tried to upload my files from my local machine, however, this turned out to be more complicated that I thought. After researching all over the internet, I realized that the issue was that the files in my “www” folder in the VM were owned by “root” so I had to change the ownership of my files (used this link to learn about changing ownership: http://manpages.ubuntu.com/manpages/lucid/man1/chown.1.html)

28

29

After changing ownership, I was able to upload my files using Filezilla and got the website we built for CIS 425 on my page – I would’ve done something cooler but I already spent way too much time on this challenge.

30

31

And finally, the ultimate test (site running from within the server’s GUI):

32

It was A LOT OF WORK, but certainly worth the learning!

BP 2 – BizAgi Process Modeler

For this post, I worked with BizAgi Process Modeler. This software allows the user to create Business Process Modeling (BPMN) diagrams in a very easy way using drag and drop. Since I hadn’t used it before, I followed the video tutorials and created a diagram for an employee travel request.

Yonathan Model

Besides the graphical diagram, the software allows to fine tune each of the elements used in the diagram using advanced settings such as adjusting timers and defining multiple instances for a sub process, including the way in which they can be performed (in sequence or parallel).

Advanced Properties

Although I did not use the feature, I watched the tutorial (available here) on how the collaboration tool works and I think this could be very useful in nearly any work environment. This feature allows users to interactively make changes to the process and make comments on the go having sort of a chat interface. Unlike a simple chat, the software allows to make comments at different levels (diagram, element, etc.) which I think would be very useful in companies that manage large projects with multiple users working in different parts of the same process diagram. Also, the fact that this software allows to share the file on a company’s file server makes it even more useful given that the file doesn’t have to leave the company’s network, and therefore, it doesn’t run the risk of being exposed to security threats.

collab

Being a Supply Chain Management and CIS double major, I think that process models are very helpful not only in software development, but also in process improvement in general. Although I have heard that creating good process models can be a very time-consuming task, it can also be rewarding in finding inefficiencies and making processes easier to improve. At a DISC meeting last semester I learned from my classmate Julie Hernandez just how involved process modeling can be (she created a very large process model at her internship), and also learned that one of the most challenging tasks in doing so is gathering input from the different process owners. However, I think that tools like BizAgi’s collaboration feature can make this process easier and bring value to companies. Therefore, I will definitely keep BizAgi in mind the next time I come across a process modeling project.

BP 4 – Unconference Reaction

A few days ago in my CIS 440 class, our class hosted unconferences. During this session, I learned about some interesting things.

The first interesting thing I learned about is what Qualtity Assurance (QA) is about (presented by my classmate Josh – blog here). Although I have been working for several months with a team of developers who are in constant interaction with QAs, I didn’t really know what QA is about. Talking to Josh, he explained to us that QA really is about “breaking stuff” for the purpose of testing it. In fact, I learned that QA is not only done in software as it is done at my work, but it can also be done for hardware. One of the most interesting things Josh told us about is that he has written several PERL scripts to do the testing for him, which actually saves him a lot of time while allowing him to do a more effective testing. He did make the point, however, that not all QAs have to have programming skills (he said he knows many who don’t), as it really depends on what the QA is doing testing for. I also learned from Josh that QA is very important in avoiding costs since finding bugs early is much cheaper than finding them once a product has been deployed.

Another interesting topic I learned about is Hadoop (presented by my classmate Sumit – blog here). Although I had only heard about Hadoop once before (because of my involvement with DISC), I didn’t really know what it was about. As it turns out, Hadoop is open source software that “allows for large amounts of data (multiple terabytes) to be processed across multiple computers or simultaneously within a system.” One interesting thing Sumit told us about it is that the project started at Yahoo and it’s now used by them in their spam detection as well as in other companies for different things. Although it doesn’t escalate well with a small number of machines, Hadoop has several benefits including faster processing time, and lower data failure. Finally, the fact that it is open source promises to bring improvements that may reduce or eliminate its limitations.

During the unconference, I also enjoyed learning about some of the improvements in Windows 8 (presented by my classmate Mathew – blog here). One of the most interesting things I learned from Mat is that Windows 8 actually has some great security improvements such as improved BIOS management, built-in antivirus that loads before other programs, and improved cache. I also liked the fact that Mat touched on some of the issues that have plagued Windows 8 such as user discontent from lacking a Start button, and also some driver problems with specific manufacturers.

Lastly, I found Chris’ presentation on Excel Pivot Tables interesting (blog here). Although I have been exposed to pivot tables in some of my classes, I had not heard about “Pivot Slicers.” According to Chris, adding a pivot slicer allows you to filter data by a single click in multiple ways. In fact, Chris explained to us that you can use slicers when creating a pivot chart which makes the chart much more interactive and effective.

Overall, I learned a lot of different things at the unconference and really wish other classes had something similar.

BP1: IFTTT Assignment

Although I had heard a little about web services being used at my work for some complex systems, before taking my capstone CIS class I had never heard about web service automation for personal use, and that is how I learned about IFTTT, (shorthand for “If This Then That”) and Zapier. These two websites work fairly similar, allowing you to select a series of triggers that initiate an action.  One of the cool uses I have found for this is to stay informed about the weather. Since I bike to work and school every day, I figure that it would be really helpful to receive an email alert with the forecast for the next day if it’s going to rain – I got a little rained on once and it’s not fun.

Here a few screenshots of just how easy it is to set up a IFTTT recipe:

Get your trigger

1

Setup the email:

2

Hit save and that’s it!  You can modify it later and see the status in their Dashboard:

12

Using IFTTT, I also created a recipe (this is what they call the trigger-action combination) to alert me whenever a mini-fridge became available for sale on Craigslist, and it has already sent me several emails without having to spend a single second looking for them! I find this to be extremely efficient as I actually had to look for a mini fridge once on Craigslist and recall spending several hours browsing seemingly endless pages… Now with IFTTT it only took a few minutes!

4

As part of my class assignment I was asked to create a zap that would be useful for my current job function. At the beginning of my current internship, I was tasked with documenting over a dozen ASP.NET applications and I had very little knowledge on how to use Visual Studio 2010, which made it hard to browse the source code. Because of this, I spent quite a bit of time looking for and reading about tips and tricks on how to use Visual Studio for things other than coding. Therefore, I thought that one useful thing would have been to use IFTTT or Zapier to receive email alerts when a new blogpost that talks about tricks for Visual Studio becomes available.

As before, it was very quick to setup with IFTTT:

6

11

And it’s done!

5

Although the assignment required creating a zap for this purpose, I decided to do it both with Zapier and IFTTT to see some differences and learn both of them.

Following a similar drag and drop process I got the same result in Zapier:

7814

The main difference I noticed is that Zapier offers more features for their emailing options such as sending to multiple addresses (IFTTT  allows only one email address at a time), adding one or multiple CC emails, one or multiple Bcc emails,  and even adding a “From Name” similar to the way MailChimp lets you edit the sender’s name.

10

Looking at these features, it became evident that Zapier is targeted towards businesses while IFTTT targets the common user. In either case, I am thrilled about the possibilities these websites have to offer me, whether it is to alert me from rain and save me a bad day, or to help me find information quicker for work.