iOS 6 First Impressions

by Michael Clark
September 25, 2012 10:03 AM

iOS 6 was released to the public on Wednesday the 19th. I was looking forward to seeing what Apple had in store (I hadn't been able to play with any of the beta releases) so I quickly downloaded and installed the new software. Here's my first impressions of the things I like and didn't like about iOS 6.

Like

  • App Store - I'm a big fan of the new App Store. It's much easier to use and a lot less annoying. The biggest thing I like is how it no longer kicks you out when downloading a new app or an update. I'm all the time perusing the top lists to find something new to try and find it annoying to have to re-open the App Store and find my spot again. With iOS 6, I don't have to.
  • Maps - The horror! Consider me one of the few that likes the new Maps app. Granted, I don't live in the largest of cities (large city and Henderson are not two things that are ever used together). Sure, it may place random restaurant X in the wrong place or gas station Y doesn't exist, but as long as it gets me in the general vicinity I can usually find my way. I love how the maps are vector based so it's clear no matter the zoom level and the turn by turn directions are good enough for me.

Dislike

  • New Stock Apps - I don't like a lot of apps on my iPhone. In fact, I've shoved as many of the stock apps that I don't use into an  Apps folder (Compass, Voice Memos, Stocks, etc.). I don't see myself using the new Passbook app mainly because I don't use the services it provides (movie tickets, airline passes, etc.). To me it's just more clutter I have to manage.
  • Facebook Sync - Let me be clear and say that I love the Facebook integration. I hardly ever post on Facebook (my last post was August 23rd), but I find it handy that I can post to Facebook directly just as I can Twitter. That said, I hate the Facebook contact sync. I'm friends with people on Facebook that I haven't talked to in 5 or more years. I have no need to sync their contact information and creating more clutter. I really wish I could do a selective sync of my Facebook contacts.

Overall, I consider the jump from iOS 5 to iOS 6 to be a big improvement and well worth it. Now I'm looking forward to iOS 7!


Campus Directory Preview

by Michael Clark
August 30, 2012 5:01 PM

Now that Class Roster is finished and released, I've spent the past few weeks putting the final touches on a new Campus Directory application. Campus Directory will be the 4th app released in FHU's new set of Classroom Apps. You might have used the old Directory app, but it was written several years ago, and had grown limited in its functionality. The new application provides several new features that I'm very excited about.

Upon first log-in, the user sees an interface similar to the one presented in Class Roster. If the user is a student, they'll get a one-time prompt requesting them to save their profile. For students, this is what determines what is visible in search (if anything at all). Students have the option to hide their phone number, birthday, dorm room or their entire profile in general.

The search is pretty robust and allows the user to search on first name, last name or account name. There is an autocomplete that will display in case you can't quite remember that person's name. After searching, the user sees a table of contact "cards" that can be clicked on to bring up details about that person.

One piece of Campus Directory I'm particularly proud of is the inclusion of Class Lists. On the right hand side of the screen, the app comes pre-loaded with every course the student or faculty member is enrolled in that semester. There's even an indication of how many students are enrolled in the the course. Clicking on the class will bring up a customized search that returns every person in that course. There is also a handy "email" link included in case you need to send an email to the entire course.

Like I said, I'm very excited for Campus Directory to hit the ground running. I hope you're looking forward to it.


Roster App is Coming

by Michael Clark
July 6, 2012 9:51 AM

Over the past couple of weeks, I've been working heavily on finalizing the latest changes to the new Roster application. This application will be a replacement for the old iKnow application used for taking attendance and boasts several new and useful features.

Upon first accessing the application, the faculty member will see a list of their courses to the left as well as some tools listed below. The tools right now include merge courses, remove merged courses and search, but more on these later. At the top, the faculty member has options to take roll, manage and view reports.

After first selecting a course on the left, the faculty member will see the take roll option load up with the students in that course. Each student is represented by an attendance card with their picture, first name, last name, and attendance status. Taking roll is a simple matter of clicking on the attendance card to cycle through the respective options - present, tardy, absent, excused. You can also use the date picker above the student cards to choose a previous date to take or modify attendance.

In the manage option, the faculty member has the ability to re-order the students in their course. This view is similar to the take roll option in that students are represented by attendance cards. The faculty member can set the number of rows and columns for their course (up to a maximum of 6 columns), then move the students around however they choose. This is handy for something like mimicking a seating chart.

The last option related to individual courses is the report view. After selecting a course, the faculty member is presented with a grid of their students and a summation of any attendance violations for that course. Clicking on an individual student name presents a detail view displaying the date of violation, violation and options to edit the violation from the report (useful for quickly modifying a backdated excuse).

On to the tools available for faculty members. The first tool is the merge courses tool. This allows faculty members, as its name suggests, to merge multiple courses into one logical course for the purposes of the roster app. This is useful for courses with different IDs or sections that meet at the same time. Attendance is still relative to the original course so the faculty member can even combine two completely different courses! To use this tool, the faculty member selects the courses they'd like to merge, gives the new merge a unique name, and clicks the merge button.

The faculty member also has the ability to remove a merged course and restore the original courses using the remove merges tool. To use this tool, the faculty member selects the merged course they'd like to remove (the system will display all courses under this merged course next for verification) then clicks the remove merge button.

The last tool available for faculty members is search. This works as suggested - allowing the faculty member to search by student name. Search is limited to students currently in the faculty member's courses and includes a handy autocomplete function that begins to fill in after two characters are typed. After finding a student, the faculty member is presented with a view similar to the reports detailed above.

The student view will be function similar, but will be restricted to just allowing the student to view their attendance record for a given course similar to the report view mentioned above.


What I've Learned (4 of 4)

by Michael Clark
April 16, 2012 9:05 AM

The last post in this series takes me back to one of the first projects I worked on - Only1 Version 4. I previously wrote a post about this project detailing how the new version was different than its previous incarnations. This post will attempt to describe how the image verification process works.

When working on this project, we looked at various options to do image verification - including licensing a third party product. In the end, we decided to write our own solution. 

To accomplish this, I first started by parsing a username (mclark, jdoe, etc.) into a set a 10 integers ranging from 1-100 using an encryption library released on CodePlex called CTI Text Encryption. This library has a set of options that allowed me to determine the output block size (2 in this case), output format (numbers only), encryption key, and even the separator. It's a pretty powerful library. For instance, the username "jdoe" might encrypt to 2-10-72-64-98-32-33-66-7-99. The library will return duplicate numbers so I had to handle those cases in my code by incrementing one of the duplicates by one.

Once I got the encrypted name into a set of 10 integers, I matched up each integer with a row in our database. The filenames of each of our images were placed in a database with unique ID numbers - for instance, "dog1.jpg" may be ID1. I then returned the file names to my code and placed them on the page.

Sounds pretty easy, but there was quite a bit of research and thought put into this. Overall, I was very pleased with how it turned out.


What I've Learned (3 of 4)

by Michael Clark
April 2, 2012 10:13 AM

The third piece of knowledge I've picked up on recently also comes from the Admissions Checklist site. The site allows each user the ability to update their profile with new addresses, phone numbers, social media accounts, etc. It also provides an upload feature so the prospective student can add an image to their profile. This proved to be a little tricky at first, but that was mainly because I was unfamiliar with parsing a JSON object.

The goal behind this was to allow the user to upload the image, have it display in a thumnail while editing their profile, then click to save their changes once finished - all without a postback. To facilitate this, I used the jQuery File Upload plug-in. The plug-in provides several options such as multiple file upload, file type restrictions, drop zones, etc. The HTML code to use the file upload plug-in uses a simple HTML input tag with a type of "file".

Once that is in place, the javascript to use is -

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="js/vendor/jquery.ui.widget.js"></script>
<script src="js/jquery.iframe-transport.js"></script>
<script src="js/jquery.fileupload.js"></script>
<script>
$(function () {
    $('#fileupload').fileupload({
        dataType: 'json',
        url: 'path/to/handler',
        done: function (e, data) {
            $.each(data.result, function (index, file) {
                $('<p/>').text(file.name).appendTo(document.body);
            });
        }
    });
});
</script>

The file upload handler was probably the trickiest part. I had never written one before so I was pretty lost for a couple of days trying to figure it out. I ended up writing mine as a C# .ASHX file. The important things to keep in mind are that the handler interfaces with IHttpHandler (so I could process the HTTP request with my custom handler) and IRequiresSessionState (so I could name the file appropriately using session variables). Once getting the request, it was a simple matter of getting the file information from the HttpContext.

Once saving the user's image to a temporary location, I then implemented a Javascript call to a web method that wrote the user's profile changes to a database.

Looking back on it now this all seems pretty simple to me, but at the time, it took me a week or so to get this implemented properly.