I'm a rising Junior Computer Engineering student at Boston University. I've worked in mobile development through various clubs and workshops and looking to expand on my (read: limited) abilities through the course of the REU program at Texas State University. My LinkedIn profile can be found here: http://www.linkedin.com/pub/kevin-mannix/4a/52a/615

Kevin Mannix (Spring 2013)


This summer, I'm looking to work out at a local gym, improve my golf game at the course on campus, and only eat TexMex food.

Blog Posts:

June 4th:
Going over lectures for a few hours on Information Retrieval and Data mining. My group will also be discussing and finalizing our project for the next nine weeks with our Mentor, Dr. Gao. We have two or three options and need to evaluate which are the most feasible yet challenging.

 

June 6th:
Our group sat down with Dr. Gao and revised our project idea. It will deal with RFID tags and location based services within commercial outlets. Currently, my job is to work on the client-side portion of this project, i.e. the actual android application that will be utilized by users. I will have to work with my other two partners to ensure the application runs effeciently - Dylan is in charge of the server-side portion of the application, which my client-side portion will have to query frequently throughout the app. Missy is doing research on the RFID tags that we will deploy when demoing our work.


As for the technical portion, I encountered some difficulties today. I am trying to use an SQLite database (which stores persistent data throughout the app's closing and opening), which I've only done a few times before, so I'm still getting the hang of it. I'll also be employing a ListView, and I finally made the concession to extend the ListActivity class through my Activity, as it was too difficult and cumbersome only extending Activity when trying to access singular items in my ListView. I'm drudging through this currently, still stuck and getting many errors.

 

June 7th:
Around noon time today (while skipping lunch) I finally solved my problem. My ListView rows now have a delete or add button (depending on which Activity they are being used it), which frees up some real estate up top in my Button area, as we no longer need a "Delete Selected" button. My SQLite DatabaseHelper class and my Custom Adapters for the ListView rows are all finally working, and I'm really happy with the progress that was made - a huge step from this time yesterday. I'm using the Parcelable class to send my ListView objects (which are custom objects in an ArrayList to display in the ListView), which I've never used before but I find pretty intuitive. It's a Friday and everything is in working order, so I'll have a content week.

P.S. I really like the office - I feel like I'm working better than back at school in my room or at the library.

 

June 10th:
After a great weekend, the focus today was to start to work with the "interactive map" that will be used when a user has compiled the correct list of items they desire. I was honestly a bit perplexed on how this was going to be accomplished, and did a bit of research on Image Layers, Image Overlay, and Bitmaps in Android. I couldn't get anything to work, and my activity would either crash or not respond when I attempt to use the emulator. This also gave me my first introduction to really using the log - I've never really had the need for it before, and was often lost in the long-winded and usually unhelpful (at least to a relatively new Android user such as myself) statements it produced. However, I understand why the log is so useful - it indicated which statements and ClickListeners were being executed and which were unreachable. I finally discovered a simple fix and now the map is interactive, which a toast appearing on the user click to display what location relative to the map (divided into many small box areas) the user was clicking. While this is unneeded currently, we will definitely need it down the road.

 

June 11th:
With everything going smoothly in the past few days (although I probably just jinxed it), I know somethings going to go wrong soon. I set up a parallel SQLite database today for "Recently Found" items and my activity will trim this database to only have 10 items total, deleting all the Objects that are over limit of ten (in a FIFO method, where newer objects will be kept over older ones). This is not a necessary feature but one that I think down the line many users will appreciate. Much to my own annoyance, however, I did not prepare the main database before creating this one (much of the code is the same). I need to alter the custom objects the application is using as I realized more data will need to be stored in them. That is my current task, and I will need to alter plenty of activities and Java classes - there is much room for error.

 

June 12th:
As of now, most of the application is finished and working. While I still have to run some random-walk like tests and look for bugs, the app is working as I'd like it to. My map is now interactive to the point where a user can click on a location and see what food items or objects are at that location (this was buggy for a little while but I realized I made a stupid error in one of my methods). When speaking to Dr. Gao, he's looking for a more Google Maps-type map, while mine is relatively stationary and you cannot zoom in or out (plus the markers are custom). The rest of today and probably most of tomorrow is going to be researching how we can implement these features - I know they can be done for the iPhone. and I'm hoping Android will have the same accessibility.

 

June 13th
Today was spent mostly researching how to implement a Google Maps-type Map within the app. For now, Google doesn't provide a method for inputting custom "map tiles" into the Google Maps API, only allowing one to overlay the tiles. As our info for the store layout is not going to exist in Google Maps, we must figure out a work around. For now, I'm considering to using a scollable/zoomable ImageView. I might need to create my own class to do this, or I might try to rework some of the tips I've found on line. This is my hardest challenge so far, but it might need to wait until next week to be implemented. Android is making it incredibly difficult to utilize an API that's already been proving efficient and user-friendly. In fact, it really can't be used, so this workaround will probably take a few days to correct implement. I'm testing it in it's own project, and sometimes the "transplant" of a small project to within a bigger one can have some disastrous results and bugs.

 

June 14th
Groups in both the IR and MCPS presented their initial findings and project ideas today. It was great to see what everyone will be working on in the next few weeks and their process in hammering out the specific details of their projects. The presentations in general were all very good - I was thoroughly impressed by some groups, and interested to see where their research will lead. Our presentation went without a hitch as well, and ours was unique in the fact that we have the most tangible material to present to the group. Since we presented and it was a Friday, work ethic in the afternoon was pretty low, so a few of us cut our losses and prepared for a cultured weekend experiencing the nearby city and capital of Texas, Austin.

 

June 17th
As per usual on Mondays, iot was a relatively slow day. This is the first point that I've encountered something I've never really done before in Android development - producing a scrolling and zoomable image. After doing many hours of research online, I implemented and customized some tutorials to create a quick throw-away app that could move around an Image (unfortunately, I cannot test the zoom function on the Android emulator, as I only have one "finger" in the mouse). That's as far as I got today, but hope by the end of this week that function will be fully implemented.

 

June 19th
After a day visiting the Southwest Research Institute in San Antonio (which was an amazing and very insightful trip - I learned a lot and saw a ton of cool and up-coming technology. I'll have to keep them in mind for a future internship), I got right back to the problem of creating a zoomable and scrollable image. Fortunately, I completed the task after a few bouts of frustration. A big part in the difficulty of implementing this type of image was merging both the functions of the image and the layout in which it would be show. There will be a ListView underneath the image, and I only wanted to show the image in the little "window" I had created for it. I ended up using the Matrix functionality in Android/Java and then proceeded to set the limits in how the image could move, so a user could essentially not just move it off the screen. This took a bit of thinking and math computation as well, but as of this writing the image is fully dynamic but is contained within it's window. The next task is to figure out the most efficient and correct way to place "markers" on this map. There are many variables with these markers, as they represent items on the list and will vary in location, precedence, and number.

 

June 20th
We met with our mentor today to discuss our plans for the app in the near future. Essentially, I need to redesign my mapping Activity in a pretty self-sustaining way. In our plans to further add other store layouts, there needs to be a system in which the app can easily "draw" the map. Fortunately, Android comes with a whole Canvas class that we will most likely utilized. This is definitely gonna be a challenge and we need to thoroughly think about how to implement this the right way so we do not waste our time.

 

June 21st
It's been a pretty slow day today - as it's Friday, I've been trying to do as much research on how to read in files and use them to draw a canvas map. I haven't had much luck, but started to draw a few images, so hopefully next week this can all be finished. Time is running out quick, and we need to remember that we have a limited time to finish this project. My group is definitely motivated, but we're still working against the clock regardless.

 

June 24th
The majority of the day was spent on finalizing the map-drawing process. Since the addition of maps by stores or places on the app should be dynamic, we chose to stick with using the Canvas class provided by Java to customize and create maps on the fly, then add our markers to these maps. These maps will act just like the old static images we would use with ImageViews, so they can also be zoomed into and moved around the screen. A problem with this approach (or more of a difficulty) is deciding in which way should the map be drawn - i.e., what point should be our origin, how can we make sure the relative sizes of the different rooms are correct, and how can users input this information?

 

June 25th
Today has definitely been one of the most frustrating days - I've been working on one specific problem and can't seem to get it working at all. My focus today has been creating a method to parse XML files, and it seems that I need to take two steps back to take 1 step forward. I've deconstructed and then reconstructed my code several times and seem to run into a similar problem. Something that was working before now doesn't seem to work, etc. It's also difficult to debug, as it's removed from the Activity itself, so my usual debugging of using Toasts is pretty much useless. I'm hoping I can finish this by the end of tomorrow, but I might need to come into the office or stay later to finish this up before our trip Thursday.

 

June 26th
I finished up the XML parsing class and finally "drew" a map Bitmap using an XML file (which was a little more difficult than I imagined - I had to "draw" everything from the top-left corner, which takes some trial-and-error to get everything looking even remotely correct). This is a big step - I can draw floors and shelves, map markers to that map, and move and zoom the map. The functionality is pretty much all there. The next step is the actual guts of the project, connecting to my teammate Dylan's server and returning queries. My other teammate Missy has already successfully connected to Dylan and can emulate the information that will be passed from the RFID, so once the connection to Dylan from my Android App is up and running, we will have a fully closed connection between all parts of our project.

 

June 28th
After visiting the IBM campus in Austin yesterday (which was a great trip - very informative, and not to mention, great food!), Friday's main goal was to connect with Dylan's server via a Socket in the Android Application. We encountered the problem that the port wasn't forwarded to the 'public sphere' and I needed to be connected on the same network as Dylan was (I was using the Wi-Fi while he was using the Ethernet cord). It was a very frustrating day, to say the least. Not much tangible process was made, but many approaches were attempted, but to no avail. Let's hope next week the benefits will be reaped from this stagnated hitch in the road.

 

July 1st
More problems with connecting using the Socket today. I was able to connect using the Socket and send a query, but the problem is that I seem to only be able to read one line of the returning XML document. As of right now, I'm downloading a third-party software that will be able to get the packets that are sent to this computer to see where the problem lies - I am receiving all the data but just not reading it from my InputStream correctly, or is the server not sending me all the correct information?

 

July 2nd
It was an extremely successful day. I cleared up and tied together a lot of the problems I'd been having over the past few days. First of all, I figured out how to finally get all of the XML that was being sent to me through Dylan's server (something to do with the difference between read() and readLine() for an InputStream. Sometimes things just work for no really reason). Getting the XML, I was able to parse the information in a similar way as I did with my Map file. I'm still a little concerned about how this is going (there seems to be some spaces between the tags, and I'm not sure if this is going to affect how the parser deals with these tags). For example, I can get the Titles of these objects, but some of the other fields seem to be coming empty. I'll probably do a little troubleshooting tomorrow, and hopefully this problem won't be too hard to fix, though this XML has been a decent problem so I'm sure it won't go entirely smoothly. I also encountered (or seemingly created) a problem when translating these parsed-through-XML objects into a new Activity. Placing "markers" for where these objects would theoretically go on the map led to some areas where I hadn't previously tested Markers. The markers are going to be a little different than the map itself and will be on an independent plane from the map for more dynamic management. I had a little trouble in the past, and again today, with setting the bounds that these markers could move. I think I finally found the right way set the bounds and should patch the problem for the rest of the application's development.

 

July 8th
Sorry for the long gap in blog posts - the days and weekends have melded together during the fourth of July holiday. Today were the second presentations for the summer and it was refreshing to see how much improvement and progress everyone has made on their projects. There are a ton of interesting projects and motivated groups, and it's great to see the problems and difficulties they've had to overcome this summer. I'm excited to see the final results.

 

July 9th
My group had a meeting with our Mentor yesterday, Dr. Gao. We should receive our RFID kit within the next day or two. As for my part of the project, we are totally revamping the Android Application. It's going to have the same features as it always did, but with a more simplified interface. With research, our app cannot be too commercial - it should be as basic as possible. A lot of my Android Application had been built in a commercial sense - lots of buttons and user-friendly material that users may want to access. We are stripping it down to the bare minimum, however I will keep my old code just in case.

 

July 10th
The RFID card came in today and Missy & Dylan (my two other team members) have started playing around with it. We bought a slightly more expensive version that came with two tags and API for use to seamlessly design a program to automatically update Dylan's database. While the RFID is the most research oriented part of this project, my part does not really depend on the RFID capabilities - as long as Dylan's database gets updated, I'll be able to get the information as usual. I started revamping the app - by eliminating a page (the "Query Page"), the Application does not need to run and load another activity. Rather, the processes handled by the "Query Page" are now integrated in (what I call) the "Search Page." The "Search Page" used to show the current 'shopping list' of items you had selected. Instead, that list now shows the query results. This was a little difficult to do, as the user should be able to stay within the screen and search for multiple objects. Objects that are identical to the ones you already have in your list will have a "Deselect" button rather than "Select."

 

July 11th
Got a lot done today. The swipe function now works to go between the "Search Page" and the "Map Page", eliminating the need for a seperate button to take you between the pages (in reality, this means two buttons are now gone - one on each page). There is a little animation transition as well to make this page transfer look a bit smoother. Selected query results are added to the database correctly, those points are shown and loaded on the map that is drawn by Android through the XML file, and the map can still be moved around. LongClicks on the items in the "Search Page" will now display more information in a pop-up format. I still need to implement a "Clear All" button for the "Map Page" and LongClicks on the "Map Page" for both the list view and the map itself.

 

July 12th
Worked more on the LongClicks of the application and tested the application on an actual phone device (thanks to Dylan). The zoom function does not work exactly how I imagined, and this is impossible to test for on the emulator (as we can not use the two fingers necessary to zoom in on the map). As of now I have two layers of matrices that work in parallel, but I think some how the placement of the images using the padding and margin LayoutAttributes are causing the zoom function to act peculiar.

 

July 15th
After meeting with Dr. Gao again today, the application is to be even more simplified. The Map Screen needs more real estate for the actual map - my ListView was taking too much screen space. It will now be lowered to the bottom and will be accessible through a small button that will "open" the ListView. I also made the ListView row text smaller and replaced the subtitles with the snippets Dylan added to the database manually. I am now changing the way markers are displayed - rather than using the images I created in Photoshop, I am now just drawing these markers with the Android Draw function as red boxes with darker outlines and a number in the box. This will ensure that the zoom function will work in harmony with the markers.

 

July 16th
These next few posts will have to be written from my memory - I've been working non-stop the past few days and it's totally slipped my mind to update my blog. With only around 2 and a half weeks left, crunch time is now. My main focus has been the animation of the ListView. It will be similar to the Sliding Drawer class, but this has been deprecated in the latest API and I wanted to ensure that this would be function in all future APIs as well. I've started off with a Translate Animation. I've never used Animation before, and this has been more difficult than imagined.

 

July 17th
Working on the animation today and gave up a few hours into it. I have the animation and map parts working, but I cannot figure out why the animation "resets" when I reset the ListAdapter. While this is more of a annoyance than anything, it's been frustrating, and I worked on some other parts of the application that were simple and that I just needed some time to do, such as numbering the items in both the map and the ListView. The amount of things I have left to do on the application are dwindling, but they have become increasingly harder.

 

July 18th
I have decided to switch from using the Translate Animation to the Object Animator. While doing some research in the documentation for Android animation, I have discovered that Translate Animations don't necessarily move the actual locations of View objects, but just the pixels. While this may be great for some applications who are moving the View objects just for aesthetic value, the buttons that will be moving in this particular application will not be clickable. Object Animator will move and relocate the actual position of the view objects to be moved, which is exactly what we need for this application. I am still having a little difficultly with the ListView disappearing when I try to change the List, but at least at this point the entire animation is not resetting.

 

July 22nd
After going to Six Flags on Friday for a little R & R, I worked late Saturday and early today to finish the animation section, and I'm relieved to say it works to about 90% of what I'd like it to work as. There is still a little flicker when I change the data due to the ListAdapter resetting (which I still haven't figured out), but I solved this with an animation that resets the ListView back to where it's supposed to be located (this animation has a duration of 1 millisecond, which is where the flicker originates from). Items are able to be deleted individually or cleared as a whole list, and the map will reset their markers and numbers. I've finished essentially everything needed for the application - there are now just a few little tweaks needed to be made.

 

July 23rd
I can finally say that the application is working how it should be and I am content and satisfied with it's current progress. I think it will be ready enough for a demo in the next day or two. Today I've just been adding extra features to the application - a little outline to the floor sections of the map (which honestly make it look a lot better), and I've almost implemented a Choose Map screen starting from Scratch today (which was the fastest I've done a complete Activity like that).

 

July 24th
A visit to Intel was in store for today, and was great. I've really appreciated the times that the REU students are able to visit nearby facilities of leading companies in the eventual fields we all hope to get into. Each is a different and unique experience but gives a better insight into the way things work in "the real world." The actual Intel building was astounding and very forward, with vending machines for computer upgrades such as sticks of memory. Food was great, the people who gave the tours were great, and overall it was a pleasant time.

 

July 25th
The main focus for today was expanding the Map Activity to handle items that may be placed in multiple areas throughout the store. This required changing both the XML parser for the items and how these items were received by the Map Activity. I've separated each x and y location from other x and y locations through commas, and then split the eventual string into as many tokens as needed. It works great. I also fixed the onLongPress alert that appeared when trying to touch a button to view more information on the actual map. Some global variables had changed which was throwing off the algorithm, but it is now fixed and working exactly as planned.

 

July 26th
Our final presentation is today, so I scrambled to make some slides to present to the rest of the group all that's been done this summer. I was thoroughly impressed with everyone's projects and the few demos we saw. Only one more week left, and we can't start to slack off now. Time is of the essence but I think our project will be completed on time (hopefully I didn't jinx it!).

 

July 29th
It's finally the last week. I've really enjoyed my time here, but I think it's just time that everyone's excited to go home. However, there is still work to do on the project. Today was mostly spent writing my technical report on my specific part of the project, while Dylan and Missy kept taking measurements to further strengthen the actual RFID locating section of the project. As I've said before, I'm mostly done with my application. There is, however, one thing that's bugging me - the ListView in the Map Activity does not scroll. I'm troubleshooting currently, and hopefully will be able to figure it out by tomorrow. If not, it's not too much of a problem, and could probably be solved by someone who's had a little more time to deal with Android. The application can still function.

 

July 30th
Got that last problem fixed! It's a relief, and while it was only a minor bug it annoyed me because it limited the amount of objects that could be placed in the list. The funny thing about 'bugs' is that when you discover their source, it's usually some small thing that you didn't think had a big effect, or something you just didn't really understand about the classes you're working with. That's been my case with Android, at least. The app, I can say, is officially done, and crunch time is on now to add one more feature to the app (to get more results, which isn't really currently a problem because our database only has 50 or so objects) and complete out poster.

 

July 31st
Make-the-Poster Day has been stressful and we're not done yet. Many of the groups have their posters completed and they look great, which puts a little extra pressure on us to have a great poster as well. Working with PowerPoint has almost been more difficult than this summer's work, because it's such a crappy program. We will probably be working a little later today to get our demo and poster done.

------------

Last Updated (Wednesday, 31 July 2013 19:03)