Sunday, January 30, 2011

Lumosity and Brain Training

I've decided to start doing Lumosity, a brain train program. Partially because it's fun, and partially because I would love to sharpen my brain for certain things. In particular, my short term memory sucks sometimes. We'll see how it goes. I wonder if I'll be able to notice a difference in my day-to-day life after doing their daily 10 minute "brain workouts" for a month or so.

Thursday, January 27, 2011

Introduction to Actionscript 3

I am doing a crash course in Actionscript 3 for J3WAO. It's fun. It's going to be a challenge to learn the language this fast. We will also need to know a good amount of the language features to implement our somewhat ambitious game.

First impression with the language are not very good. Where are my abstract classes? Dammit.

Wednesday, January 26, 2011

Lesson Of The Day

The "A" in AJAX is important. Don't design an AJAX user interface thinking in terms of synchronized calls to servers. :P Bad things will happen when you actually connect your UI to that server. :P I learned this at work today. Apparently this is a fairly common problem for people writing AJAX code for the first time. Luckily, it didn't take long to fix.

On a related, the user interface I'm writing at work is now driving part of the backed. I am satisfied. :)

Tuesday, January 25, 2011

Programming Achievements

This is a pretty funny article: What if Visual Studio had achievements?

Here are the ones I have:

  • Shotgun Debugging – 5 Consecutive Solution Rebuilds with a single character change
  • The Portal – Created a circular project dependency <- This was a silly mistake and I fixed it. :)
  • Pasta Chef – Created a class with more than 100 fields, properties or methods <- Auto-generated LINQ code. :P
  • The Poet – Written a source file with more than 10,000 lines < - Again, auto-generated LINQ code.
  • Highway to Hell – Successfully created a WCF service
  • The Right Way – Test method is longer than the tested method
  • The Defender – Checked every argument for null exceptions
  • The Cloner – Copy-pasted more than 50 lines

Which ones do you have (and are willing to admit :P)?

Sunday, January 23, 2011

Healthcare Data Management

A friend showed me this video about visualizing medical data:



Some very cool images. I wasn't aware that CT scanners were that powerful. Also, that virtual table is pretty sick. Screw the iPad.

I think that the speaker in the video brings up very interesting problem hitting healthcare informatics right now: too much information. I've mentioned before that physicians don't have time to look at every detail in your medical record. They need concise summaries of all this data. I think that filtering this data in an intelligent way will be a great application of computer science in the future. I think that'd be a cool area for me to pursue later in career.

I'm going to go buy a CT scanner and scan some lions now. ttyl.

Friday, January 21, 2011

Another Cool Genetic Algorithm

Here's another one of those "car" genetic algorithm. I should really get on that GA challenge with Mike. Any ideas for a challenge for us to solve with a GA?  Perhaps we can do something like this car example. We could have a predetermined "track" and see which algorithm can generate a car that can complete that track faster.

Tuesday, January 18, 2011

Introducing J3WAO

The Arts 304 project is coming along very nicely. We have a few really great ideas out there, and we should be deciding on one on Thursday. I am really impressed with the ideas we came up with so far. I also really like how our team is interacting. Everyone has an important contribution to the project, and everyone seems to be interacting really well. Things like duets in the Comfy! :P Our group even has an unofficial name: J3WAO (initials of the members). I am really excited to see how this project unfolds! :)

There are a lot of interesting challenges from a technical point of view. Specifically, one of our main goals is to deploy to multiple platforms. Jesse and I and currently doing research on possible platforms and tools that would make this easier. Part of the problem is that neither of us have ever developed for mobile devices before. We also need to look at available game frameworks. Since we are on a very tight timeline, we don't have time to reinvent too many things. Lots of stuff to learn! Wooo! :)

Saturday, January 15, 2011

Watson continues to kick ass

During a practice jeopardy round, IBM's Watson kicked some human ass. This some very impressive stuff. I hope to see Watson continue to do this well in the official round in February.

I was particularly intrigued by the healthcare applications of a system like this. According to Dr. John Kelly, IBM VP, this is exactly where they will take this technology next. Watson is capable of scanning millions of pages of text into it's "brain" in seconds. They could use this to scan every medical text in the world, and make it available through one resource. Of course, presenting that much information in a sensible and meaningful way is the real problem. Doctors don't need to see that much information at once. They simply don't have time to filter through that much knowledge, even if it's potentially useful. It's like if I have a problem with Java, and you give me every book ever written on Java. The information can certainly help solve my problem, but it's not a very efficient way to find the solution.

I think a future application of AI will be to filter through this information and present it in a concise and meaningful way. I think that would an awesome direction for AI, though I think we might be a few years away from something like that.

Friday, January 14, 2011

UI Driven Architecture

At few days ago at work, my coworkers and I realized how powerful UI driven architecture can be. We had back end code (partially) written, but once we started designing the UI, we discovered that a lot of it had to be changed. That cost us a lot of time. It's really hard to design a system unless you know precisely how it will be used. Designing the back end first can create all sorts of problems when moving on to the UI work. Sometimes you find that the back end doesn't interact with the UI in a clean way. Instead, you should design the UI first (even if it's just a prototype), and let that inform the back end development. This is essentially an argument for top-down, user interface driven design. This seems to be especially important if your UI has a lot of workflow based interaction. Thinking about validation can also save a lot of time. You have to make sure your API can handle whatever the UI wants to do in a natural way. It's certainly an interesting approach to designing software, and I think I'll be doing it in the future.

In other news, I am really excited for ARTS 304. There is going to be a lot of learning going on in the next few weeks. I don't think anyone in our team has ever done mobile development before. This should be fun. :)

I also just finished my first sprint at work. Exciting stuff! I am really enjoying my time at Karos. The software we're working on is super cool, and the people are hilarious. Good times to be had all around.

Wednesday, January 12, 2011

Oranges

Who do they think they are? I eat one god damn orange and my fingers smell like citrus for weeks.

Tuesday, January 11, 2011

GWT And Why It's Awesome

I am enjoying using GWT at work. GWT basically takes Java code and compiles it into AJAX-capable Javascript. GWT lets you use nice Eclipse features (like code completion and various wizards) and gives you a lot more compiler safety (like type safety).Of course if you want to handwrite some Javascript, you can do so using the Javascript Native Interface (JSNI). One particularly useful feature of GWT is AutoBean. AutoBean lets you automatically create Java objects from JSON input. It handles all the parsing details for you. :)

When you're ready to deploy, GWT will compile your Java into optimized, cross-browser(!) Javascript. It actually creates a separate version of the code for every browser, and then loads the correct one at runtime.

GWT is still quite young, so there are still a few bugs hiding. Today we found a (minor) bug that forced us to change our JSON format. Apparently, AutoBean doesn't handle '-'(dash) characters in JSON very well, even though it's a legal JSON character. GWT will try to create a Java/Javascript variable name with a '-' in it, and this causes parsing exceptions. I'll report this at some point soon.

Even with a few rough edges, GWT seems like it really accelerates web development. You should give it a try.

Monday, January 10, 2011

Sorting Algorithms In Your Favorite Languages

I found this cool article about which sorting algorithms are used by the major development languages. It's an interesting read. During most development you don't actually need to care, but it's interesting to know. There are a few times where it actually matters though.

For example, if your real-time application requires something to run in O(n*log(n)), you can't rely on your language's built-in quick sort. If sorting is the bottle-neck in your code, and you know something about the input(say that the numbers are bounded by some number, k), then you can optimize that code by implementing a non-comparison model sorting algorithm, like counting sort (O(n+k)). Probably the most useful thing I learned in CS 241 is that if you know something about your input, you can usually do much better than the generic algorithms.

In other news, work is going really well. I am learning a lot about user interfaces and web development. It's a different and fun way to approach development. I'm enjoying the breadth of new technology I get to work with on a day-to-day basis.

Friday, January 7, 2011

User Interfaces On The Web

At Karos Health, I've been doing a lot of user interface development for the web. I am learning a lot about designing user friendly interfaces that provide business users with the best user experience. This seems like a very challenging and rewarding problem, and certainly an interesting way to spend my 9-5. There's a lot to consider when designing usable systems, and I'm starting to appreciate all the intricacies of UI design. I am looking forward to the UI course in summer even more now.

I found this article on designing good web forms, and thought it was pretty good. I will have to remember to apply some of these things to my user interfaces for Karos.

Thursday, January 6, 2011

Mobile Development

Looks like I'm getting my foot in the mobile development door with ARTS/DAC 304. For our first assignment, we are making an iPhone game that is aimed to educate people on Canada's Food Guide. We have a lot of control on what goes into the game. Jesse and I are partnering for this, so it should be fun. :) This probably means we'll overkill the software architecture. :P We only have a week to get this project ready to demo (for the next lecture). Should be a fun course. Time to go learn ObjectiveC .

Wednesday, January 5, 2011

Sloppy Arithmetic Chips

Recent research from MIT has come up with imprecise CPU chips. These chips can perform some calculations much faster, but at the cost of accuracy. The results it would generate can be +- 1% of the correct value. Of course, the uses for such a device are somewhat specific. Obviously they won't be used to calculate how much radiation to deliver to cancer patients, but they can be used for things like video and audio processing. Pretty cool. It would be nice to see these sorts of chips integrated with more traditional ones. Apparently there are a lot of difficulties with that. I can imagine.

In other news, I realized that I use the three most popular operation systems on a day-to-day basis now. I have my Windows-Ubuntu dualboot at home, and Macs at work. Neat. Hopefully, I can get Ubuntu to not hate me though.

Tuesday, January 4, 2011

Smartphones And Your Health

I've recently seen a few new smartphone apps dedicated to your health. In the past, I've seen things like Runkeeper that help you keep track of your fitness. More recently, I've seen things like this: an iPhone add-on that can measure and monitory your blood pressure. The iHealth dock is even capable of taking that information and sending it directly to your doctor. They have plans to expand to support various other monitors (like glucose monitors).

I think that making these sorts of checks less scary is a great idea. Being able to do this sort of stuff at home, using a device that you are already comfortable with, will certainly lower the anxiety associated with going to a hospital. It can simplify doing these checks, and increase accuracy by preventing things like the white-coat effect.

I'm not sure about this whole "sending data to your doctor" thing, though. I don't think healthcare providers have time to log every single blood pressure reading you take, nor do they really care. Your day-to-day blood pressure fluctuation is not that important. They really care about things like averages. This is something you can do on your own, and then just submit an average to the physician. As I'm learning at Karos Health, healthcare providers already have enough problems organizing all the available data in a secure and accessible way. Having random iPhone data thrown at them is only going to complicate the situation. While self-reporting is generally a good idea, it needs to be implemented very carefully to be effective.

In any case, I would like to see what other ways smartphones can make healthcare more accessible.

Monday, January 3, 2011

First Day!

I just finished my first day at Karos Health! It was a lot of fun. I did a lot of reading on all their software and how it works. I also got to participate in a sprint planning meeting. It was certainly a fast introduction into the company and their products! I even got to play planning poker! Very cool! I've always wanted to do that. I will be working on really cool networking software that connects healthcare vendors, though I can't talk about all the details. :P

I got to use Mac's OS X for a decent amount of consecutive time. I've learned that Expose is really, really awesome, although I wouldn't switch to OS X for it. I like Windows more in general, though I wish it had expose.

After work, I got sushi with Dani. She met me outside my office. :) Yummyaki gets our coveted sushi seal of approval!

Now time to do some more research on work stuff, so I'm not completely dumb for tomorrow. :P

I hope your first day of work/school went well (if applicable :P)!

Sunday, January 2, 2011

Why Android Sucks

Check out this article talking about a well-known messaging issue with Android phones. Essentially, this bug can result in sending your text to the wrong contact. I've personally experienced this problem. Thankfully, I only texted Keyar instead of another friend about something generally unimportant("When are you coming over?"). I was quite confused when Keyar said, "Why did you ask me when I was coming over?" from the same room as me.

Really, Android?! You can't even get basic messaging working correctly? Really? How the hell did this slip through their QA? Not impressed. You can't release a program with a serious issue like this. To make things even worse, this bug has been a known issue in since July, and until yesterday(!) it was marked as a 'medium' priority fix! What the hell? Thankfully, it's now reassigned as a 'critical' priority bug. That only took 6 months. This certainly doesn't look very good on open source development.

I have no idea how Android is doing so well in sales with issues like this. A phone that can't reliably communicate is useless. I can only imagine how many problems this bug has caused for Android users everywhere.

Dear Google, be better.

Saturday, January 1, 2011

End Of The Open-Source Curse?

Some of you might know that I have a history of bad luck with open source software. Some would say that it hates me. Open source software tends to fail in interesting ways for me. For instance, my last two installations of Ubuntu had lame driver issues. I seem to have a lot of problems with Android, too.

However, yesterday I installed Ubuntu without any problems! I didn't have to do any driver fiddling to get anything to work! I was quite happy. Perhaps my curse with open source software is over. Maybe it doesn't hate me anymore! :) What a way to welcome in the new year!

Speaking of which, happy new year everyone! I had a relaxed new year's party with Dani and Jesse. We enjoyed some wine and watched movies. It was a great night. You should check out Jesse's newly redesigned site. It looks quite pretty! :)

I am excited for all the interesting things this year. First, I have work starting on the 3rd with Karos Health. I am really excited to start working there, although I'm also quite nervous. I have never done web development on this scale before, so I think I will be learning a lot in my first couple weeks. My next school semester also seems pretty exciting. I am taking History of Mathematics with my favorite professor, Steven Furino. I have been looking forward to this class since first year. Yay!

Hopefully you all had a fun new year's party. Stay classy. :)