Sunday, February 19, 2012

2 Free Car Challenge

Here's the game: Someone will give you any two cars of your choice, under the condition that you can't sell them for money. What two cars would you get?

Yes, in reality that probably won't happen, but it's a game :P
My friend Oleksi already chose his two cars, and now he is making me write a blog post about it as well, even though I already gave him my answer. Not sure why it's so important for him that I blog this, but here it goes.

I'm glad it's 2 cars, because I currently have 2 dream cars and I would be unable to choose between them.
The kid in me wants a Ferrari. It's always been my dream car and that doesn't really go away with age :P But the grown up in me wants a beautiful, sporty, luxurious Aston Martin.
And in this case I CAN HAVE BOTH!


So my first choice is the Ferrari 458 Spider.


The 458 is definitely my favorite Ferrari right now, and Spider is a convertible variation of the Italia. Both cars are super pretty. Oh, just look at it... so gorgeous!
It was an obvious choice for a fun supercar for me, although the McLaren MP4-12C is a close contender.

The 458 Spider has a 4.5L V8 engine which produces 562 horsepower, taking it 0-100 km/h in 3.4 seconds with a top speed of 318 km/h. And it only consumes 13.3L/100km, which is a pretty good fuel economy for a supercar.

According to Top Gear, this car is one of Ferrari's all-time greats. It's simply brilliant.




The second car is a little tougher for me to choose. I know it's an Aston Martin, but I'm not sure which one. The battle was between the V12 Vantage, DBS, Virage, DB9 and Rapide.
I did some research on them to figure out which one I liked the most.

Oleksi's choice of Rapide is decent, but I am not convinced that it works as a practical car. Sure, it has 4 doors and room for people in the back, but the back is 2 separate seats with a median and well, they don't look like spacious seats. It works if you are driving a few friends home, but you will probably need another reasonably priced sedan if you are planning on driving around with a family.
It might be the most practical Aston, but it's not really too practical and it's less impressive than the other Astons, so it's out.


I finally made my choice: Aston Martin DBS.


Cargasm... Astons are incredibly stunning. I picked this one because apparently it's a "DB9 where every little piece is a little bit better" which sounds awesome to me.

It's got a 6L V12 which produces 510 bhp and makes marvelous sounds, 0-100 km/h in 4.3 seconds up to a top speed of 307 km/h. I recently found out it also has an optional 2+2 seating configuration, so I would prefer to get those 2 extra seats in the back.

Jeremy Clarkson of Top Gear said that this is an epic Gran Tourer. It's smooth, civilized and quiet. He also  added "I'd be happy to drive this all the way to the South of France, and I'd be happy if I got there and found that I'd forgotten my swimming trunks, because then I could drive it all the way back again." He did drive the DB9 all the way down there, and that's the coolest car Top Gear said they ever had on the show.

It's hard for me to make a perfect decision, because DBS, DB9 and Virage are very similar cars. Maybe the DB9 is even more luxurious? I can't really make a better decision without actually having a chance to drive those cars and comparing them to something more than some numbers and a review from the "world's most incompetent man", haha, but nevertheless I doubt I would be disappointed.


So that's my 2 cars. Ferrari 458 Spider and Aston Martin DBS Coupe. At least for now. Who knows, I might change my mind soon. After all, I'm going to the Toronto International Auto Show next week. I hope they will have some epic cars there :D

Let me know what cars you would pick :)

Thursday, June 16, 2011

IBM Centennial

June 16th, 1911 - Three small companies merge and become the Computing Tabulating Recording Corporation (CTR). 13 years later, their President, Thomas J. Watson, renames them to IBM.

One of the most innovative companies in the world has turned 100 years today. And what a century it has been. IBM has made a huge technological impact on the way our world functions today. It's hard to summarize how huge it really is... I can guarantee that everyday, every one of us interacts with technology that was invented by IBM.

For example, the Universal Product Code and barcode scanners used in every store around the world today. And Online Transaction Processing Systems, technology used for real-time online transactions in banking, airlines, order processing, e-commerce, and manufacturing systems. The magnetic stripe technology, used in credit cards, debit cards, and many other cards. The Selectric typewriter. The laser printer.

Their computing inventions do not get any less impressive. Dynamic Random Access Memory (DRAM), RISC Architecture, Relational Databases, Data Encryption Standard.... IBM System/360The IBM PC... And the list goes on.

IBM made a really cool short video showcasing their greatest inventions over the last 100 years. You can also check out their Icons of Progress page to see more.





Here is also a short movie if you have some time to kill, "They Were There", told by IBMers who were involved in some of those innovative projects that shaped our lives.





You can also check out their IBM 100 site to see how they have changed the world.
I'm excited to see what IBM will bring us in the next century.

Happy 100th Birthday International Business Machines!

Wednesday, June 15, 2011

Inside Search 2011

Google hosted an Inside Search media event yesterday, to announce some of their latest features and technologies that are coming to Google search. The new feature I'm most interested in is the next step for Google Instant:

Instant Pages

We all know Google is obsessed with speed. They are now introducing a new prerendering technology into Chrome, which will start loading the page you are most likely to click on in the background, cutting down or even eliminating the time it will take for the page to load once you click it.



Google said that the pages will only preload if the algorithm has a very high confidence that the user will click on that specific link. They did talk about the fact that they don't want to use up bandwidth for no reason.

I think Google can pull this one off, after all, the amount of search data they receive on a daily basis is enormous. They definitely should be able to figure out what pages users click on most often. Think about how often you search something and go to look at it's definition on Wikipedia, or the popularity of Google's I'm Feeling Lucky. I think Google's algorithms should be able to do a good job predicting our next click.

I've always liked Google Instant which searches while you type, and paired up with Instant Pages, it can save us that annoying period of time between clicking on the link and starting to interact with the page. I'm looking forward to seeing how well this feature will perform.





Google is also bringing some of the unique features mobile search features to the desktop. Android users should already be familiar with both of them.

Voice Search will now allow you to search by speaking. During the demo, it seemed to recognize words really well, even a word the presenter didn't know how to spell. Google is also supposed to learn through voice searches to recognize words better, so it can be quite effective. This feature will only be available on Chrome.

Image search now will also allow you to use images to search. You can drag and drop images or provide links and Google will then analyze the image and search using the information retrieved. This one is already rolled out for me and works really well, can be pretty useful too.





Google also discussed how much mobile browsing has grown in the recent years. They showed this graph which compares the growth of mobile search over the last 3 years compared to how desktop Google search grew in it's early days.


They also showed how the two compare over a regular workweek. During the week desktop search dominates but start falling on Friday and is much lower, while mobile search rises during the weekend. Obviously, mobile search is growing really fast, so Google also added a few helpful new features for Google Mobile to save you some keystrokes.





From the new desktop features, search by image can be pretty useful in some cases. I doubt I'll use voice search any time soon but it is the next step in being able to interact with your computer by talking to it and I suspect it will be much better then the voice recognition that is currently built into Windows (I've seen some fail videos, heh).

Instant Pages should be really useful though. I hate waiting for pages to load, so if this feature is effective, cutting down that page load time will make me happy :)

Ok, lunch break over, back to work! Also:

GO CANUCKS GO!
 

Tuesday, June 7, 2011

Internship!

I am officially employed full-time for the next 11 months!

Yesterday, I accepted a job offer for an 8-month internship at the Ministry of Health and Long Term Care. I am currently on my 16-month co-op term, so I will not be taking any classes until Fall 2012.

I had a phone interview with them almost 3 weeks ago (my first interview of the term too). This is kind of unfortunate, I hate phone interviews. I always feel more comfortable with face-to-face interviews because I get to meet the people and see the environment I will be working in.
I have a friend from class who works there right now though, and he is enjoying it. He said they give him time to learn and understand what he needs, everyone gets dual screen and there's other co-op students working there. No free coffee though :( That's a real minus.

I do not know exactly what I will be working on while there. There are various projects I could be assigned to and I'm expected to work with a few technologies. I could also be moved to different projects depending on project progress and completion. They said the work is mainly done in C#, Java and SQL. The key is that I will be exposed to a full software development life-cycle. Should be a great experience.

So I will be working here at Centre for Learning Education until end of August, and then move over to the Ministry of Health from September 2011 to April 2012.
Looks like I do not have to look for a job for quite a bit. :)

11 months! Crazy!
 

Monday, June 6, 2011

Summer Job!

Last week I started my summer job at Ryerson's Centre for Learning Technologies (CLT), a research and development lab at Ryerson, with its projects focusing on accessibility for all users, including those with disabilities.

There are currently a few interesting projects in the works at the CLT, and all of them attempt to make social and cultural experiences more accessible and entertaining for users who are deaf, hard-hearing, blind and visually-impared.



I am a part of the project called SignLink Studio.
This project focuses on bringing a better online experience and accessibility for deaf and hearing-impaired users. There are already techniques used around the web to improve access for the deaf to online media and content, however most of them are text-based approaches such as closed captioning. This works, but it is not the optimal way for deaf people to communicate, especially not for those who are born deaf or suffer from it very early.

Deaf people communicate primarily in sign language. This is their first language, the one they think in, the one they translate everything into inside their head. For them, having to communicate in text is much like having to communicate in a second language for the rest of us. This is not something we do seamlessly, we will translate things to ourselves in our head to our first language to have a better understanding of it.

I have this kind of experience myself. I may think and be really comfortable with English now, but it was much different when I first came to Canada. Communicating was difficult, because I constantly had to switch between English and Polish. Doing this over a long period of time can be very tiring for someone who is not used to it.

The goal is to create an online environment which is designed and more comfortable to use for the deaf community.



Our project has 2 parts to it: A software called SignLink Studio (SLS) and a Content Management System (CMS) associated with it.

SignLink Studio is a software which allows users to record and edit videos and embed annotations, captions and other information right into them. Those annotations are called SignLinks, which allow the user to make a clickable area inside the video, which can link to another website or some other online content (it's like a video hyperlink). You might be familiar with youtube video annotations which have a similar purpose. The software is designed for deaf people to record and edit their sign language videos and then export them onto a website.

The SignLink Studio CMS is a program that supports content from SLS and it optimizes a website for simple navigation for the deaf, by using as little text as possible in favor of visual cues, in majority based on sign language. It`s like an online forum, except unlike a typical forum, most of the text content can be replaced by images and videos. The CMS can be installed onto a website and used by its members.

We also have a deaf person working with us and she gives us feedback on the project and how to improve it. She also demos the project to the deaf community and gets more feedback from them, that way we can make sure the software and CMS are as deaf friendly as possible.



I am working with one other person developing the SignLink Studio Content Management System.

So far, I am really enjoying the job. The job is quite relaxed and I am actually quite interested in the project and I am enjoying working on it (you know I mean it because it's 7:30pm and I am still in the office, heehee). The hours are also really flexible (so todays extra hours can translate into more sleep tomorrow, heehee). The work environment is just fantastic, I felt at home right away. It might have something to do with the fact that I already knew some of the people who work here before. A few of them are from upper years in Computer Science, two of them even used to be my TAs :)

I think this will be a great experience for me. I'll even get to learn some sign language. I already learned a few things, like "I must have coffee now".

Oh, in fact I actually have to demo our project tomorrow. *shrug*
Also, here is how my work station looks like. I love it! :)




And there's more exciting news on my job front today!
I really wanna share it, but I think I'll wait until tomorrow.
I'll write a separate blog post about it (that way I can also blog more often) ;P
So STAY TUNED!

It's time for me to leave my office and head down to The Edge Studios with a few friends. City and Colour (Dallas Green) is celebrating the release of their new album Little Hell, which comes out tomorrow, and they will be performing for free. And I can't miss pretty, free, live music. <3
 

Wednesday, March 16, 2011

Red Hat Interview

Hello! It's been a while since I updated this. I really need to make this a more of a routine for myself...

Anyways, I had an interview for Red Hat Canada today. It was for a 16-month Software Engineering Intern position. I thing working there would be awesome, and give me a lot of experience since I would be exposed to an entire development process of a project.

The two guys that interviewed me were previously interns there, and later came back for full time positions. This was cool, cause I got to hear about their experiences with the company back when they were students.

First, they asked me a few basic questions, software engineering questions and about my past work experience:
  • What do you know about this company? 
  • Why are you interested in working here? 
  • Do you have any experience with Linux and open source software? 
  • What kind of projects have you done in the past? 
  • What are the challenges of working in a team? How did you deal with a member of a team who didn't do his work or put in as much effort as the others?
  • What did you do in your previous job? What did you learn? How was it? 

The interview was going pretty smoothly at that point. I told them that I work in a UNIX environment at school, mentioned the team project I had in my Software Engineering class in second year and used it as an example in a few questions.
I talked about my job last term at CIBC as a Web-Application Developer. I talked about my responsibilities and also the improvements I made to the User Interface based on user feedback (they liked this part).

Then they got into the technical questions.



The interviewer informed me that they don't expect me to know the correct answer for all of the questions but they are more interested in my thought process so I should think-out-loud when answering questions and just try to think of the best solution.

  • What C compiler have you used? - gcc
  • The input to gcc is a source file. What is the output? - binary file
  • What is the machine language in a binary file called? - Assembly
  • Suppose you were writing a compiler. How would you do it? - ...

This is where things started getting tricky. They basically asked what the main parts of a compiler would be, what are the important things it needs to do. Thankfully I have read about compilers in the past so I knew what to say: lexical analysis, parsing source code, generating equivalent machine code and optimization.
  • So, optimization is supposed to make the generated code more efficient. Give us an example of code that would be optimized by a compiler?
: |

This is where I pretty much froze for a second. I have no idea how/when compilers optimize code. I obviously said that it would happen whenever the source code can be rewritten to improve efficiency for execution, but I don't know any examples when that would happen through compilation.

When I said that to them, they answered "Well, that's the point. We wanted to give you a question that you can't answer, and then have you try to answer it. We don't expect to get the right answer from you, we just want to hear how you would approach the problem."

They quickly gave me an example: An if statement that will always evaluate to false.
This is an example of 'unreachable code'. In this case, the compiler would completely remove the if statement and its contents from the binary file, since they will have no impact on the state and execution of the program.
I gave them another example that followed this structure (code after a return statement), but I couldn't think of much else.

Another example is a loop that executes, say, always 3 times. Rather then executing the loop, the compiler might convert the loop into 3 separate blocks of code (using statements from inside the loop), eliminating the need for a loop, because it would be more efficient in assembly to write the same thing 3 times.



1) Another interesting question I was asked:

You have 2 light bulbs. There is a 100-story building and you can drop the bulbs from it, however they will break after being thrown from a specific floor or any floors above it. You can reuse a bulb thrown which does not break. Find the floor where thrown bulbs will start breaking.

I got this one right away. Try to answer it yourself and find the best case solution. Answer is given below.



2) One more:

You have an integer array of up to 1 million unique numbers between 0 and 1'000'000. One of the numbers repeats. Find the number. The solution should minimize time, memory use does not matter.

Unfortunately it took me a while to answer this one, when it shouldn't have. The solution is really easy, and I know I have solved this problem before. I gave 2 different solutions, but I couldn't find the one that minimized time. After a moment, one of the interviewers drew the problem on the board and the best solution hit me right away when I saw the drawing. See if you can figure it out. Answer is below.



ANSWERS: Obviously both problems can be solved iteratively (for #2, array must be sorted first), but that is not very efficient.

1)
Drop the first bulb every 10 floors until it breaks. Then drop the second bulb every floor through the previous 10 floors.
Example:
Bulb 1 dropped from floor 10, 20, 30, breaks after dropped from 40.
Bulb 2 dropped from 31, 32, breaks at 33.
Answer is 33.
2)
Create a second array A of length 1'000'000. For each number n in your main array, increment the value at A[n]. If the value has been incremented before, you found the repeated number. You can use a boolean array too.



There was a few other technical questions, but those were the most interesting. And there ya go, that's my interview. I really didn't expect compiler questions, hehe.
I also had a chance to ask them about their work later on. It sounds like it would be a great work experience.
Well, all I can do now is wait and see what happens. I can expect the final answer some time next week.

Wow, I always make my blog entries long, don't I?  Well, let's hope I at least start posting more often :)

Monday, February 14, 2011

IBM Watson

On May 11, 1997, Deep Blue, an IBM computer, defeated Grandmaster Garry Kasparov in a game of chess. Today, February 14, 2011, IBM is back to make computing history once again... only this time, the challenge is much more complicated.

Watson is a computer designed to play Jeopardy!, or more specifically to answer questions posed in natural language. To many people this might sound quite similar to searching something on Google, but it is much, MUCH different.

When we search on the web, usually we pick 2 or 3 keywords to generalize our search to something specific. What Watson has to do is take a full sentence, and find the important parts, the keywords, on his own and derive a specific meaning, and then of course pick the right answer. Of course the entire process is much more complicated then what I just described.
And if you consider Jeopardy questions, they often involve either puns or irony and can be sometimes very tricky and confusing, even for a human player.

Also, Watson does NOT use the internet to find information. It uses its own, enormous database filled with any information you can imagine. They must have scanned a ton of content for him, hehe.

Natural language Processing has been a huge computer science challenge ever since the dawn of computers. However there has never been a computer as advanced as Watson, which was able to derive meaning from such complicated sentences with such a precision. Of course, it is not perfect, in fact nowhere near.

"The reality is that being able to win a game at Jeopardy!, doesn't mean you've completely conquered the language understanding task; far from it."
 - Dr. David Ferrucci (Watson Research Lead)

It is true, that Watson is far from the reality of people and computers being able to communicate in a human way, but it is quite a milestone in the development of Artificial Inteligence and Natural Language Processing.





Today, the first round of the Jeopardy challenge was held. Watson is going up against Ken Jennings, the record 74-day former Jeopardy champion, and Brad Rutter, the all-time Jeopardy money winnings leader.

I liked the fact that throughout the show, they included some videos explaining the challenges, development and significance of this project.
During the first half of the show Watson dominated, blowing the 2 humans away, but the second half was a little more sloppy. Watson struggled to find answers for some questions, and even got 4 questions wrong, allowing Brad to catch up.

The final day standings are:
  • Ken - $2'000
  • Watson - $5'000
  • Brad - $5'000
Tomorrow, we will see Round 2 and the Final Jeopardy! round. Make sure you tune in!

The IBM Jeopardy! Challenge
February 14, 15, 16 @ 7:30 pm (CBC in Canada)


Also, in case you are interested in some of Watson's specs:
  • 10 Server Cabinets filled with IBM POWER 750 Servers (pictured below)
  • 15 Terabytes of RAM
  • 2'880 Processor Cores
  • Operates at 80 TeraFLOPS (that's 80 trillion operations per second!!!!)