Google Onsite Interview : Best Interview Experience

This semester I sent my resume to one of Google university recruiters on Carnegie Mellon University, and then I got a call from Google Pittsburgh office to have an onsite interview last Monday.

Given timespan about 3 weeks from the phone call to the onsite interview, I prepared for the interview like crazy, literally, with really-demanding courses at CMU, reaching its finals. Those courses alone already ate my whole weekend for the whole semester. Having said that, it’s not a secret that only 25% of onsite candidates get hired. It’s really a huge challenge.

My interview was scheduled around 9.40 in the morning. There were 3 other people having interviews that day, all of them from CMU. Our recruiter guided us through the office, showing the working space area filled with engineers, free coffee shop, and a really huge hammock, enough for more than 10 people.

 as seen in this Business insider article

Then, we ended up in a meeting room with a white board and a big meeting table. Turned out, that room would be my interviewing room for the rest of the day, the other three would have interviews in another rooms. After giving some brief explanation, the other three people left the room with the recruiter, and my interview started. There were 4 interviews that day, 45 minutes long each, with a lunch interview between the 3rd and the 4th interview.

The questions asked were really fundamental of CS, data structure and algorithm. The interviewers really cared for:

1. Our thinking process in finding solution
2. Big-O efficiency
3. Whiteboard coding. Proper code is important, despite very little details on syntax don’t count. I mean, if you forgot which one is correct between “ArrayToChar()” or “CharToArray()” or forgot ‘;’ it doesn’t really matter.

Having said that, I enjoyed the interviews so much. I can say this is the best interview experience I’ve ever had. The interviewers were very nice and very fun to talk to. They were there to help you, not to intimidate you. I enjoyed having discussion with them. I can only think that if I have this kind of discussion everyday, I can only get smarter and smarter every day.

I think I solved all of the problems, even though some of them were not really optimal, or maybe have a bug or two in the code. There was 1 interview where I could solve the problem in 15 minutes with an optimal solution, and the interviewer gave me another problem, then I solved it again even though it’s not very optimal. At the end, I have tried my best, and I’m still waiting for the decision. Even though if I don’t get the job, nothing to regret it since it has been tremendous experience.

Simple Mobile Robot Controller Smartphone and Raspberry Pi

I spent this Saturday doing a fun project: controlling a mobile robot using raspberry pi and smartphone device. I would like to learn about using Raspberry Pi and how to implement a web server on it to enable it being controlled via network.

The tools that I need:
Raspberry Pi with Raspbian installed, and a wifi dongle
a mobile robot platform
motor controller

Actually this is pretty straightforward, so here are the steps:

1. Implement web server on Raspi.
I implemented web server on Raspberry Pi using instruction from this instructables: http://www.instructables.com/id/Web-Control-of-Raspberry-Pi-GPIO/?ALLSTEPS

2.  Edit the control.php from that instructables at point 1 to control the LED on the motor controller for testing. I added buttons to control GPIO 7 and 8 for the LED. The edited file: Control.php

3. On the RaspPi, Download the python library for the motor controller from this site. I also made a simple function to move the robot forward, so that I can execute it by typing “python forward.py” on the shell script at point 4. Here is the code: forward.py

4. Update the GPIOServer.h from that instructables I mentioned on point 1 by adding pin 7 and 8 to control the LED and pin 17 to instruct the robot to move forward. This shell script will be run all the time to read the database of the input output that are implemented in point 1 &2.  Once it finishes reading the database, it will echo GPIO pins on the RaspPi. This is the updated code: GPIOServer.sh

And after that, by connecting your smart devices to the RaspPi, you can control the robot. Have FUN!

Guitar Scaling using Assembly

This project was done in 2007, together with my senior in undergrad, Ahmad Rismawan as Project Head, and one of my colleague Giri Kuncoro, We had a project from Art student to build a tool for helping people learning how to play a guitar.

The idea is, this device has sets of LEDs that point out which guitar string should be plucked based on the tempo and the scale we would like to play.

This works including microcontroller simulation using Proteus, circuit design using Protel DXP and also MCS51 – microcontroller using Assembly Language.

DSC00109 Electrical Circuit Simulation Using Proteus

 

Source code of the Assembly language : Github

How to be “Wired In”

This is actually article from: http://marissabracke.com/getting-wired-in-how-to-get-focused-and-get-your-work-done-effectively

“by Marissa Bracke in Focus & Get Stuff Done”

I really want to document this by myself and share it to my readers. Enjoy!

======================================

There are a couple of scenes in The Social Network (the movie about Facebook’s creation) where someone describes one of the movie characters as being “wired in.” The character is shown typing code, headphones on, a bottle of highly-caffeinated soda nearby, and totally oblivious to the rest of the world. The character is laser-focused, completely engaged with his work. He’s “wired in.”

I love being wired in. It’s when I do my best work. My version only occasionally involves typing code, and rarely includes soda. But when I manage to get wired in, my work is more efficient, my efforts are more effective, my writing comes through more freely, and I just simply get more done. The trick is figuring out how to get wired in.
If you wait for it to “just happen,” it probably won’t.
We’ve all had times when we’ve sort of spontaneously gotten “in the zone” and been really focused and efficient. But we’ve all had more times when we’ve spontaneously frittered away our time on social media or websurfing or being “busy” but not being effective. If we want to be consistently effective with our time and energy, we can’t leave it up to chance. We have to design a way to guide ourselves to that wired in state. The specific details of how you do that will differ from person to person, but here’s the basic framework for how to get wired in, get focused, and get your work done.

1. Proactively eliminate potential interruptions.
Before I get wired in, I make sure my dogs’ water bowls are filled and that they’ve been outside recently, so that they’re not likely to interrupt me while I’m working. I also check in with myself: am I hungry? (If so, grab a snack.) Am I chilly? (If so, throw on a hoodie.) Do I have anything else pressing on my mind? (If so, jot down those forget-me-nots in my notebook to deal with later.) By taking care of the “usual suspects” of interruptions ahead of time, I make it easier for myself to succeed in getting wired in.

2. Establish a pattern that tells your brain it’s time to focus.
Our brains like patterns. The first few times we make a concerted effort to wire in and focus, our brains might resist, especially if we’ve established a pattern of getting distracted whenever we sit down to work. But you can re-write your patterns. When it’s time to get wired in, I make myself a cup of hot tea, I light a Wood Wick candle (which makes a crackling sound like a real fire), and I light a stick of incense. There’s nothing magic about those three actions, but because I do them each time I sit down to focus, my brain knows the pattern. Now as soon as I start making that cup of tea, my brain starts getting into “focus mode.” It knows what’s coming. It knows the pattern. Those three actions set the stage for getting wired in.

3. Know what it is you’re going to do.

Do not sit down to focus, and then look at your to-do list and decide what to tackle. Adding decision-making to the process makes it harder to get wired in, because you’ll wind up with an inner dialogue: “I could do Task A, which would be quick… but I should do Task B because that’s really stressing me out and I’d like to just be done with it… although Task C could probably get done pretty easily and then I could Task B next… but maybe I should just do Task A and then Task C and leave the stressful Task B for later…” And by the time you settle on what you’re doing, you’ve used up a chunk of your wired-in time. So make the decision before you sit down to get wired in. Brainstorm your to-do list, then review it and pick out between 1 and 3 things you want to focus on. Then when you sit down to get wired in, there is no inner dialogue about the tasks–there’s just a clear direction for your attention.

4. Wire out.
In order to get wired in to our work, we have to wire out of email and social media. If you can go offline to do your work, that’s a great option. But if you’re like me and need to be online to do your work, you have to find a workaround. My workaround is an app called Concentrate. Concentrate lets you set up a series of actions your computer performs on command to help you focus and eliminate distractions. I have Concentrate block several websites (including Gmail, Twitter and Facebook), open the Freckle timer (my time-tracking software), and launch iTunes. You can also have it open specific websites, open documents, play sounds, speak messages to you, and more. I love it, and you can download it and use it for 60 hours for free, if you want to give it a whirl.

5. Choose the right background noise.
Some of us work best when there’s total silence. If that’s you, do your best to create that. Turn off the television or leave the room where others are watching it, close your office door, use earplugs, or use noise-canceling headphones with low “white noise” playing to help block ambient sounds. I work best with certain kinds of music playing. I created a playlist in iTunes called “Focus,” and I put all of my concentration-supporting music in that playlist. (For me it’s an eclectic blend of classical, jazz, trip-hop, new age, nature sounds, Indian club tunes & electronica/trance.) When I’m ready to get wired in, I turn on my Focus music. (I also like the sound of that Wood Wick candle I mentioned–that plus the Focus music is the perfect background.)

6. Build in breaks.
Once you’re wired in, it’s tempting to just push yourself to keep working until you’re totally spent. But if you do that, you’re likely to feel burned out, and you won’t be able to consistently get wired in–you’ll be sporadic, rather than making it a daily practice. We don’t want that. So make sure you build in breaks for yourself. (Plus, it’s not healthy to sit still for hours on end–your body needs to move around and stretch a bit, and your eyes need to look at something other than a notebook or computer screen!) You can use a timer on your computer, watch or cell phone to mark the time. If you use Concentrate (or a similar app) you can set it to notify you after a certain amount of time. Or you can use your background noise: I set up a Smart Playlist in iTunes that randomly selects 55 minutes of music from my Focus playlist. I start playing the music when I start working, and I know when the music stops, it’s time for a stretch break.

7. Do not kick your own butt when you can’t get wired in.
You know how when you have insomnia, the worst thing you can do is lay there in bed thinking, “I should be sleeping right now. I’m going to be exhausted tomorrow if I don’t go to sleep. Why can’t I sleep? I should be asleep! SLEEP, dammit, sleep!” Similarly, the worst thing you can do when you can’t get wired in is berate yourself about it. Despite what corporate schedules would have us believe, we are not always “on” day after day, week after week. Some days we’re scattered and unfocused, and no amount of hot tea and good playlists will change that.
Kicking your own butt every time you try to get wired in and don’t quite get there, will result in your brain associating sitting down to focus with kicking your own butt. Unsurprisingly, this will probably lead to you resisting sitting down and focusing. So don’t go down that path. You will have days when you can’t get wired in. That’s okay. Use those days to do tasks that don’t require laser focus and lots of brain juice. Or use those days to run errands and tidy the house. Or use those days to play hooky and read a fun book or watch Glee episodes on your DVR. And then get wired in again tomorrow, refreshed and reset.

– See more at: http://marissabracke.com/getting-wired-in-how-to-get-focused-and-get-your-work-done-effectively#sthash.eSVtr2VN.dpuf

My Robot’s autonomy project

This semester we are given a team project in robot autonomy class, which has to make a robot autonomous, or can do its tasks without any human interventions.

My project this time will be highly related to Quadrotor project with Prof. Nathan Michael, he is one professor who developed the real cool quadrotor project in Upenns before.

See it here in the TedX video on Youtube!

 

 

Class by Real Entrepreneur

Today’s MRSD Business class was absolutely amazing.
The one who gave the lecture was a real entrepreneur.

the difference between the real entrepreneur giving this class and a professor is like heaven and earth lol.

Because I think this is the first time I felt so excited about it and I wished the lecture would keep going and not ended.

View the Video of Netcam Belkin on Your Browser

Today I played with NetCam Belkin Camera C390 for my robot application.

Originally, this camera uses application for iPhone/Android,
but we can access its video thru browser with simple steps. :D

To get streaming from the camera using web browser (works on Mozilla Firefox)
1. connect to the Wifi “NetCamC390”
2. figure out the router ip (camera IP address is the router IP)
for Linux terminal, use command : route -n
for example: 1.2.3.4
3. connect to the camera’s IP address using browser. I use Ubuntu 12.04, and it works on Mozilla, but not on Google Chromium.
connect to : http://1.2.3.4/goform/video
4. If user / password prompted, put it : admin/admin
5. Boom! you can view the video from the camera

Enjoy!

Reading Starting Something by Wayne McVicker

“We were going to change the world. All we had to do was let the world know”

What makes this book different from other dot-com startup books is the company, Neofarma, is still alive unlike most of the dot-com companies in which exploded onto the market only to implode in the next few years.

Although McVicker writes that his book is not a how-to guide for entrepreneurs, it does, in fact, offer many lessons for new business owners about what worked and did not work during the formation of one successful company. With candid observations about the company and his own personal adventure, McVicker presents a straightforward recollection of his ups and downs in the driver’s seat of a new venture.

“when hired a software programmer, I had focused on his computer skills – which can be learned – instead of more important and innate qualities — like an arrogance, born of insecurity, which I shouldn’t have done that”

somehow in this part, I remembered IBM hiring, a lot :))

Reading Starting Something by Wayne McVicker

View on Path

Python series: What does the if __name__ == “__main__”: do?

In python, unlike in C++/C that always has void main() to run the program,
it is usually stated as: if __name__ == “__main__” :

This post is just a note from stack overflow, so basically I just repost the same question in this link: http://stackoverflow.com/questions/419163/what-does-if-name-main-do

When the Python interpreter reads a source file, it executes all of the code found in it. Before executing the code, it will define a few special variables. For example, if the python interpreter is running that module (the source file) as the main program, it sets the special __name__ variable to have a value “__main__”. If this file is being imported from another module, __name__ will be set to the module’s name.

When your script is run by passing it as a command to the Python interpreter,

python myscript.py

all of the code that is at indentation level 0 gets executed. Functions and classes that are defined are, well, defined, but none of their code gets ran. Unlike other languages, there’s no main() function that gets run automatically – the main() function is implicitly all the code at the top level.

In this case, the top-level code is an if block. __name__ is a built-in variable which evaluate to the name of the current module. However, if a module is being run directly (as in myscript.py above), then __name__ instead is set to the string "__main__". Thus, you can test whether your script is being run directly or being imported by something else by testing

if __name__ == "__main__":
    ...

If that code is being imported into another module, the various function and class definitions will be imported, but the main() code won’t get run.

As a basic example, consider the following two scripts:

# file one.py
def func():
    print("func() in one.py")

print("top-level in one.py")

if __name__ == "__main__":
    print("one.py is being run directly")
else:
    print("one.py is being imported into another module")

# file two.py
import one

print("top-level in two.py")
one.func()

if __name__ == "__main__":
    print("two.py is being run directly")
else:
    print("two.py is being imported into another module")

Now, if you invoke the interpreter as

python one.py

The output will be

top-level in one.py
one.py is being run directly

If you run two.py instead:

python two.py

You get

top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly

Thus, when module one gets loaded, its __name__ equals "one" instead of __main__.

Credits: Adam Rosenfeld


by Bliss Drive Review