Sunday, September 20, 2015

September Open House 2015

Another UConn Open House for prospective students has come and gone. Thankfully, this one didn't involve any show-stopping calamities. The biggest problem was that I had only gotten 3 hours of sleep the night before and, as a result, my focus was obviously impaired. This meant it was very difficult for me to reliably control the drone with my mind as I alter my focus for different commands like taking off and spinning.

The day started bright and early as I showed up to ITE a little before 9 AM to help move stuff over to the Jorgensen for our department's table. Interestingly enough, they had made a new poster for the CS/CSE/CompE departments and I was actually in a couple of the pictures on it.

After hanging around for what felt like almost an hour waiting for students and their families to start showing up, I went back to ITE to set up my drone demo. After putting on the headset and opening up my API for interfacing between the EEG and drone, I noticed for some bizarre reason it was only sending the gyroscope data so I couldn't do much of anything, including make it take off or land.

For once it wasn't the drone being temperamental

I was frustrated for several minutes but then remembered I still had my ad-hoc program to fly the drone with the headset although I wouldn't have as much control over it since I wouldn't be able to access the gyro data. It was good enough since we had a short time limit for the presentations but I still wasn't terribly happy I had to use the old program. It had worked fine back in May and I was convinced I hadn't changed anything about it since.

The department tried their best to be systematic and punctual with the tours and timing, yet we still encountered widely different time spans for presentations and sizes of tour groups. At one point we had a 20 minute gap in between groups, and the groups ranged anywhere from 3 people to over 30. People seemed to enjoy the presentation, though and I had a few curious people ask questions about it and my past internship at Google.

By the time I had finished with demos, everyone else was long done and ate almost all of the many boxes of pizza that were at Castleman. Thankfully, they still had a full cheese pizza waiting for me.

Although I'm a senior now, this was by no means my last Open House since there's another one coming up in October and one for accepted students in the spring. Hopefully by then my API will be functional once more... or maybe it was just a sleep-deprived brain causing all the trouble.

Tuesday, September 1, 2015

The Gameplan

Senior year at UConn has already kicked off and we're wasting no time getting ready for senior design. We have a solid team of 5 formed and a plan for one heck of a project: a mind-controlled RPG-- or a demo of one I should say.

We plan to use an Emotiv headset like the one I used for my mind-controlled UAV project to use the main character's psychic abilities. The plot isn't fleshed out yet, but the demo will cover up to 4 different mental actions (the fewer, the more reliable) and most likely take advantage of mood detection, built-in gryroscopes, and/or facial expression detection. We are even considering using a suit capable of picking up user movement allowing them to control the character with their body instead of buttons altogether to provide a more immersive experience. Using a Kinect is a possible alternative.

If we actually include motion tracking, this is going to be one heck of a demo

Nothing besides the group is set in stone yet though, as projects need to approved of by a committee since not everyone can do an independent project. There are company and university sponsored projects, but none of them seemed very appealing to us in comparison to our game idea. We and other professors we've already pitched the idea to believe this will be an innovative project introducing new paradigm of gaming instead of yet another typical game a group of seniors decide to throw together. 

As for the thesis, I will be figuring out the plan for the next component tomorrow. I already have some ideas after working at Google for a better implementation than the one I had in mind before this summer. Hopefully this third of the thesis goes smoother than the last one.

Sunday, May 17, 2015

The Clusterflop Project Continued

Summary of how this third of the thesis is going so far:

So another brutal round of finals have come and gone at UConn. Rather than relax and enjoy my brief week of freedom before packing up and leaving on my next adventure, I tried scrambling to get the first third of my thesis working. Although HORNET hasn't melted down (yet) the grad students and professors who also have access flooded it with jobs the first few days after finals now that the semester's over. Initially I had thought the cluster was down for the summer which resulted in a concerned email from one of my thesis advisors to whoever's in charge of the cluster -- not good.

Fortunately, I figured out how that there were more than just the standard and priority queues in the cluster -- the standard one being the one I needed to submit my jobs. Using some nodes in the sandy bridge queue ended up being the fix although now a sizable amount of nodes on the standard queue have been reopened with the other users seeming to have finished the majority of the work they needed to get done for whatever research they're doing.

Unfortunately, even with all the free time to improve the pattern recognition part of this thesis through better filtering of the signal has been inconclusive. After numerous trials, tweaking, and an insane amount of hours training countless ANNs and SVMs, the correlation between the output and expected value of either algorithm was very minimal. Even just moving the files in and out of the cluster took literally hours. I have arguably the worst internet around considering we still use DSL and these files are so large that my thesis advisor is considering this to be actual "big data".

GOTTA GO FAST
That's only a result file, some of my input files are well over 100 MB

At one point I was able to get the correlation up to about 0.41 on the ANN (the closer to 1 the better, whereas 0 means no correlation). However, I was unable to repeat this because ANNs, by implementation, are randomized algorithms. 0.35 seems to be the limit of the repeatable correlation I can get but for some reason it's dropped back down to around 0.18 for both despite several filtering techniques I'm implementing. The more I try to fix it, the worse the correlation.

Since I'm leaving to start my new job at Google tomorrow, this part of the thesis will be put on hold... for now.

Saturday, May 2, 2015

Connecticut Invention Convention 2015

Men and ladies, boys and girls, prepare to be astounded, bedazzled, and otherwise stupefied! -Three Dog, Fallout 3
Today was the second time that I've attended the annual Invention Convention held at UConn. As last year's CIC, I did my usual drone demo and it was a real hit with the crowd, only this time there was a bit of a twist. Instead of just using eyebrow raises and smirks, I used mental commands, facial expressions, nods and head shakes to get it to move while airborne, which completely bewildered people.

This year the displays for the departments in the UConn School of Engineering were broken up between the Brick Room (whatever/wherever that is) and the natatorium (which I had no clue where or what that was until just today) while the main event for the kids took place in Gampel pavilion. Supposedly last year's setup on the mezzanine was a fire hazard as large swarms of people gathered around to see the displays and demos. The fact that our table was on the edge near one of the exits probably didn't help.

Arriving bright and early and running on a whopping 2.5 hours of sleep, I managed to find the natatorium to set up. Thankfully, unlike the April Open House, there was no case of unexpected headset startup issues that sent me sprinting back to my dorm for my backup. In fact, connecting all the software components to the hardware components worked well -- too well. Unlike last year (probably because of the different setting), there were no interference/Bluetooth connection mishaps. There was also much more room to fly so I didn't have to worry about ISAAC colliding with innocent bystanders as much.

          "Concentrate.... wait, my hands are hidden"
It kind of looks like I'm standing on the drone while it's flying in the second photo. 
Now that would be a fun yet incredibly dangerous way to get around campus.

The strange contraption on my head and ISAAC sitting out in the open drew curious kids and their families over. For a change, flying the drone was easier than explaining how it worked to people with all the data-passing going on now that I've implemented part of my API for my thesis. Explaining how the signal processing and pattern recognition I've been working on is supposed to work (which it still doesn't right now) was even more difficult so mostly I just skipped that part and said the headset's software does it for me, which it still does for this demo.

The best part of going to these events is seeing how excited the kids get when they see the demo. It shows them that engineering is not some boring field and can have really cool applications. I know when I was their age engineering never really crossed my mind as something I wanted to do, especially programming. I wish someone got me excited about this stuff before college. The reactions from the kids and parents alike make waking up early and missing half a day of cramming for finals worth it. Many even went to tell others "hey, you gotta check out the demo with the mind-controlled drone!" (probably paraphrased). Of course, there were other demos for our table with parity bits, visual encryption, and home automation which were interesting to the kids too. Of all the departments we seemed to have the most visitors.

ISAAC's POV while grounded
I can't demo and use the camera simultaneously -- yet

While the numerous demos were largely successful (sometimes I had to swap batteries from flying the drone so much which required calibrations on relaunch), the event did not quite run flawlessly. The pizza promised for 12 was mysteriously missing until the parade of volunteers with large red boxes came marching up the steps to the natatorium around 1:15 -- 15 minutes before the end of the event. Unfortunately with all the greasy pizza there was a noticeable lack of plates and napkins. Of course, there were no paper towels in the bathrooms either and blowdrying your hands doesn't exactly work on grease. Thankfully by then demos were over so it wasn't a big deal.

Overall this CIC demo was a much bigger success now that I'm relying on my API instead to control the drone. When path planning is thrown in for next spring, who knows what I'll have for the next CIC.

Saturday, April 25, 2015

The Clusterflop Project

So I've been working on my honors thesis/University Scholar project since the start of the semester and results have been, well... inconclusive. I've been working with some machine learning algorithms such as artificial neural nets (ANNs) and support vector machines (SVMs) in order to detect facial expressions from EEG data for part of my thesis. The end goal is to make my own API that detects more events and/or more accurately than the original SDK for my Emotiv neuroheadset and to send this data in a JSON format in a client/server format using a TCP socket. There's a bit more to it than that such as using it to improve my previous Mind-Controlled UAV project with blended commands and path-planning, but that's the gist of it.

I've spent the majority of the semester studying up on ANNs and SVMs and just trying to get them to train on a dataset with only blinks without my computer overheating. At one point the CPU cores hit 101 C (yes, hotter than boiling point), 4 degrees away from automatically shutting off. While on spring break -- when I was doing what else but work -- I considered sticking my computer outside since it was running for literally hours to train a single neural net. (It was so cold it actually snowed that week.) 

After hours of waiting and repeatedly receiving poor if not inconclusive results (sometimes ANNs don't converge meaning they don't learn for bad input), I decided R was too slow of a language to use to train my ANN and to instead try some multithreaded Java, which is actually a lot easier than it sounds thanks to the Encog machine learning framework. The Neuroph Java framework I tried before that was not without issues...

Dev 1: "I want an icon for this exception, what should we use?"
Dev 2: "Why not a graphic cartoon of a guy whose brain exploded?"
Dev 1: "Freaking brilliant, Jim."

I only recently gained access to UConn's HORNET cluster after applying several weeks ago, giving me barely 2 weeks before finals to train several ANNs and SVMs. Not only did I have to learn how to actually compile and run Java programs through the terminal since I need to SSH into the cluster, but also how to actually use a cluster properly as in submitting jobs to a queue since this is a shared resource that many professors and grad students use to perform research.

As I type, I'm still waiting for the real neural net results (as in all expressions trained) to come back. I have but a single week until finals, only 9 pages of my thesis written, no results to show, over 2 hours' worth of training for the first neural net on the cluster, and of course, other unfinished coursework. Either I'm going to just barely get this third of the thesis done in time for finals or I'm going to melt down the HORNET cluster in the process.

Let the final countdown begin.

Saturday, April 11, 2015

April 11th Open House

Yet again another open house has come and gone at UConn. I was hoping it would go smoother than the last one back in October when the drone I use for my mind-control demos decided it didn't particularly like the carpet in C80 and thus wouldn't fly. I was right (well, sort of).

All seemed well as I arrived bright and early to ITE to set up with all my equipment. Finally getting the EPOC+ saturated and ready to go, I donned my nerd gear and tried getting it to connect to my MacBook with only a few minutes remaining before the tour groups would start arriving. Lo and behold... nothing. Panicking, I tried reconnecting, restarting the program, but nothing seemed to get all the sensors to go green. 


Fearing my new headset decided to crap out on the big day, I made a mad dash back to my dorm to grab my old trusty EPOC. Some visiting parents looked confused as they saw me sprint out of ITE like the building was on fire. Within record time, I got to my dorm, grabbed the headset, and ran back to ITE to quickly set up. However, in my panic I forgot the sensors of the EPOC were so worn out that the saline would only bead up and roll off, rendering the headset practically useless. In a last-ditch effort, I put the new headset back on and decided to try one last time.


Unfortunately by then the presentation had already started and I was scrambling to get everything configured. Sure enough, the finicky headset decided at the last minute to connect giving me only a short time to get ready. As soon as it was my cue to start the demo, I walked up to the front and center of the classroom and started my Java program. Despite my nerves, I was able to get the drone to fly with my mind and land -- all without crashing it into a wall or person. 


Many more tour groups came and went, all seemingly satisfied if not entertained by the demo. It's not everyday you see some crazy girl controlling a drone with her mind. However, the headset became unreliable more quickly than usual as it was thrown on my head in a rush so certain detections stopped working. Fortunately, this only impacted the very last tour group.


Overall, it was a rapid-fire open house, but it was generally a success. Hopefully I can improve on the demo for the upcoming Connecticut Invention Convention in May.

Sunday, March 29, 2015

CBIT CORE Patient Experience Hackathon

I got to go to my second hackathon this weekend, this time being my first health hackathon. Way back when it was announced in a email from Upsilon Pi Epsilon, I considered going but eventually ended up forgetting to RSVP with the busy semester. I was invited to be on a team by someone I was tutoring only two days before the hackathon kickoff. I had plans with a friend but figured I could reschedule them but I wouldn't be able to reschedule a hackathon so I agreed to go.

It turns out my whole team didn't RSVP either but they were going anyway. We got the okay from Yale to go despite this. So at the crack of dawn I woke up groggy as ever to get ready to carpool to Yale. We had a team of about 10 to begin with which got cut down to 4 including myself when it was time to leave UConn. By the time we got there we gained another team member which was one of my friends who traveled separately on the bus to get to Yale. With our team formed, we waited for keynote presentation and pitches. 

I swear we were in the lecture hall for over 2 hours just listening to people talk. The keynote presentations were interesting but the pain points were -- ahem -- a pain. This is where people introduced problems which they were interested in solving through hacking. There were almost 60 of these and almost another 60 pitches to follow up so it was difficult to remember many of the ideas. Our team had already gone in with an idea of developing an app to help stroke patients but still we listened in case a better idea came along. After talking and listening to many people we teamed up with Infinity Home Care to develop an app to help recently discharged patients with COPD. 

After eating a much anticipated lunch of gourmet sandwiches we secured a breakout room and got to planning. I proposed to develop an iOS app since I have experience doing so from a past internship where that's what I did -- all day, every day (yes, even on weekends). Excitedly, I jumped up and started drawing the storyboard for the app on the whiteboard while listening to advice and input from my teammates.

Brainstorming for the app

After meeting with Infinity and relocating, we presented the general idea and layout of the app and listened to their feedback and integrated their ideas into the app. After many hours of discussion, we determined what could be done in the amount of time we had remaining. Unfortunately, I predicted there was no way to get the app fully functional in time since I was the only developer on the team with iOS experience and we only had 2 CSE students including me. Nevertheless, I said we could at least get a mockup completed in time, which we did.

Too much sugar or not enough sleep? Why not both?

After returning the next day, we planned out the final pitch and created the powerpoint presentation with screenshots of the app. Although the app wasn't functional, it didn't matter as we only had 3 minutes to pitch, which wouldn't have been enough time to introduce the problem, solution, AND demo the app. In fact, none of the groups ended up demoing their app due to the time constraint.

I kid you not, the winners of the hackathon won it using a cardboard inhaler. Who knew you could win a hackathon without even making an app? I sure didn't. That just goes to show hackathons aren't all about coding skills. Although my team didn't win, it was a good experience working with people I didn't know on something meaningful. Hopefully I'll be able to attend another hackathon soon... perhaps even during my internship at Google.

Saturday, March 7, 2015

The Great Google Adventure: The Waiting Game

Christmas eventually rolled around as family asked on a status update for my internship application. I gave them all the same answer -- still waiting. The great wait.

By then a month had passed since getting the okay to proceed to stage 2 -- host matching. I was told it could take up to 6 weeks, so I remained hopeful that I still had a chance. Some past interns on Quora even said the process could take up to a couple months. But then again, some claimed they heard back in as little as 2 weeks. I figured I'd stay in the waiting pool as long as they'd let me. I had already said no to a decently-paid internship with GE that even offered free housing because agreeing would have meant to stop my pursuit of a Google internship for the summer. I hoped I wouldn't regret my decision.

It was January before I knew it. I had reached 6 weeks with no update. Curious, I sent out an email to my recruiter asking about my status. Unchanged, but not to worry as there was still time was the gist of it. 


I tried to remain positive but as more weeks progressed into February I had just about lost all hope. It had been 11 weeks with no host matching requests. "Well at least I got this far..."

Shortly after the 11-week mark, sitting in (thankfully) my last gen-ed for my college career, I received an email titled "Project Interview Request". I would have jumped up and sprinted around campus hooting and hollering but class was just about to start.

One week later, two more requests came in. I couldn't be more excited. I did the interviews with all 3 and ended up getting matched with a host at Google NYC. Shortly after, I signed my offer letter, concluding the application process -- I was really going to Google for the summer. Just last summer I was watching The Internship on TV and now I was actually going to experience the real thing for myself (which thankfully, does not include any "mental Hunger Games").