Sunday, April 18, 2010

iPhone Enhances Everyday Learning

I have always been frustrated when I read.

Whenever I come across a word or concept foreign to me, I am forced to stop.  I dutifully research the unknown idea.  If I don't then I might as well not be reading. 

Notes I want to take while reading can be burdensome, too.  But if I don't have something to remind me of what I learned, then I might as well not be reading.

This is where the iPhone has been a big help.  I can quickly Google a word I don't know and take a photo of some sentence worth remembering.  I don't need to reposition myself just to use my laptop or to jot down a note. I can do all my auxiliary reading tasks while remaining in the same reading position!

So now, reading is more enjoyable and less tedious.  

Obviously researching and annotating are not limited to books.  Now, whenever I have a need to satisfy my curiosity, my iPhone is at my fingertips waiting to help me.  

The iPhone has truly helped enhance everyday learning.  

But the iPhone is just the beginning of what ubiquitous computing can do.

Soon our curiosities will be answered automatically when we come across a foreign idea.  The act of being confused will have a certain electromagnetic signature in our brains which our devices can detect.  From there, our devices will sense what we are experiencing, research those things we may not understand, and push the result to our augmented reality displays.

This could happen, right? Or maybe I'm just wthoutaclue.  

Posted via web from wthoutaclue's posterous

Wednesday, March 31, 2010

5 Things I Wish I Knew Before Applying to Colleges

5. Make yourself unique.

School's like their student population to be well-rounded, not one student to be well-rounded. They want each student to be a master of one. Think about it, if a school had a bunch of students that were each a jack of all trades, then the school would remain average. No individual student would excel. What they want is one student who is a grandmaster at chess and another who is a published author. Each excels in a particular area making the school, as a whole, above average.

Try to find something with national exposure that you can really excel at and work your hardest to be the best at it. Even if you are not the best, you will learn so much about yourself that your experiences will make you unique.

I had a friend in high school who was really good at programming. Even though his grades were not the best, many schools wanted to recruit him. He even went on to receive a Microsoft scholarship.


4. Persistence

"Nothing in the world can take the place of persistence. Talent will not; nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of uneducated derelicts. Persistence and determination alone are omnipotent." -Calvin Coolidge

Call it hard work, dedication, or whatever else, persistence is the most important trait a person must have to succeed. Take your favorite athlete. She or he did not achieve greatness simply through talent alone. A persistent person knows their goals and works steadily to achieve them.

Be persistent. Recognize that the hard work you put in will pay off. Persistence will help you overcome challenges and overcoming challenges makes you a more competitive applicant.


3. Time Management

Waiting till the last minute produces inferior results. (Hold yourself to a higher standard, an inferior result is one below your full potential not a result that is worse compared to your peer's results.) Last minute heroics are nice, but planning ahead and avoiding the need to be heroic is by far more important.

I remember how cool it was in high school to get a good grade on an assignment after procrastinating to complete it. I seemed to be the master at this skill. What I did not realize was that waiting to the last minute was an excuse. I was afraid that if I spent significant amounts of energy working on an assignment I would still receive an average grade. The extra energy spent would have been in vain. Waiting till the last minute meant that if I got a bad grade I could always look at it and say actually it's a good grade for the amount of time I dedicated. Clearly this mentality limited my potential. I understand now why my parents and teachers were so frustrated with me. I did not work consistently and therefore I wasn't achieving what they knew I could achieve.

Manage your time so that you can produce the best results possible!


2. Read a lot

I did not realize how important reading was for the longest time. Read anything you like. Just read! Reading comprehension is a vital skill that helps you teach yourself. Nowadays, I am forced to do lots of research which requires a lot of reading. Learning how to read and comprehend will prove vital in college and later in your career. It is the basis for gaining knowledge. And knowledge is critical to success.

1. Pursue your passion, improve your options.

You might know exactly where you want to be in five years, you might have absolutely no idea. In either case, my suggestion is to follow your interests. Because when you follow your interests you are more likely to remain happy.

Inevitably when pursuing any passion, you must make a decision on how best to proceed. My advice is to pick the option with the most available options after. This is rather vague advice, but say you are deciding on a college. You want to do engineering. You might get accepted to the university rated highest in engineering and you might also be accepted to a university rated second highest in engineering but also highly ranked in other areas. Either way you are going to get a top education in engineering. But on the off chance you don't like engineering wouldn't you rather hedge your bets and attend the second university?

Friday, July 31, 2009

How Fooala SCRUMs

In this post, I would like to touch on how we use SCRUM to manage our development @Fooala. And expound on the lessons I have learned as the SCRUM master. (If you are not familiar with SCRUM check out this video. Also, here's a useful diagram.)

(Note: while SCRUM master, I maintain a development role as well. I am liaison between business development and software development making sure both align.)

How do we SCRUM?
Our daily SCRUM occurs at 2:15PM.

Sprints are 4-7 days long. Stabilization sprints are 1-3 days.

Releases every 2-3 weeks.

We implemented SCRUM without any software. We use a whiteboard and post-its.

Post-its define tasks. Each task is placed on the white board and belongs to a developer. As the task progresses, it moves states as follows: "Backlog", "In Progress", "To Verify", and "Done!"
We write the expected amount of hours each task will take on each post-it and modify them every day during the daily SCRUM.

Different colored post-its are used for each of our products.

We also maintain another whiteboard that keeps the task backlogs for the next two sprints.

I have stapled legal paper around our whiteboards in order to group tasks together.

Finally, we maintain a sprint burndown chart in excel and print charts every day or two.

Why keep SCRUM physical?
By keeping SCRUM physical, the tasks feel more tangible and have weight. It is also easier to visualize our progress. Often times, I catch another cofounder working on development turn around from his desk only to stare pensively at the SCRUM board. For him, seeing the tasks move from left to right is a physical movement that parallels our development progress.

Adding tasks to the SCRUM board requires physical effort so tasks are not added without some consideration. This helps to keep tasks focused, relevant, and manageable. However if we are away from the office, SCRUM tasks are emailed to me but I enforce that task be defined only in the subject line of the email.

Why SCRUM at 2:15PM?
The afternoon daily SCRUM is largely due in part to our developer's vampire-like work schedule. As a manager, I would love to have the daily SCRUM at 10:15AM and keep core hours 10AM-4PM. However, fighting the developers would be futile. Core hours are Noon to 6PM. Typically, the developers are up till 3AM, get to the office by Noon, have lunch, work till 6PM, have dinner and relax, then start working again around 10PM. SOOO, I have no choice but to work around the developers schedule. Having it at 2:15 makes sure the developers are awake.

Tasks vs. Features
Sometimes a task is added that is expected to take 20+ hours. When a task is expected to take 20+ hours, it is more likely a feature. Hence, a feature should be broken down into several tasks. When I realize a task is really a feature, I ask my developers break down the feature. If they can't do it, that usually means a design meeting needs to be held.

The dreaded task pushback
At times, it is necessary to take a task out of the current sprint and move it back to the next sprint/release. It is tough to know when to do this, but this is where the burndown chart helps.

The burndown chart illustrates how much effort is left. If i realize that physically there is not enough time left in the sprint to accomplish that much effort, then I know something's gotta give. Largely based on business goals, I move tasks back or mandate certain ones be given priority. And if need be I proclaim that tonight is going to be a late night at the office meaning dinner at the office, coding party till 5-6AM.

Releases
Planning a release starts by first evaluating how the last release went. We do a release post-mortem answering questions like: 'What went well this release? What can we do better?'

Then we start with what are the business goals we need to accomplish. We then select the features that align with our business goals. Finally we breakdown the features into tasks. The tasks can be pre-existing (either pushed back or on one of the legal pieces of paper). However if a new feature is being developed, a design meeting is scheduled.

We end our releases with a Release Demo. I try to add weight to the Release Demos by inviting our advisors. Usually a business/sales person produces a slide deck and gives the presentation. My belief is that if our business people don't understand what the developers have done and the impact of their work, then the overall vision of the company cannot be aligned. Also, by emphasizing the importance of the Release Demo and including our advisors helps motivates everyone both developers and business people.

Sprints
Like releases, sprints start by evaluating how the last sprint went. Mostly I see what has been pushed back from the previous sprint and whether it is still important.

Sprints end with a demo day that includes only the developers. Each developer spends 10 minutes demo-ing their work. (Applause is encouraged)

Stabilization Sprints
Finally, at the end of the release, we have a stabilization sprint. This sprint is meant as a buffer to help clean up code before it is rolled out to production. Admittedly, this sprint should not exist and should be taken care of while a task is being verified. However, I find it is necessary to keep up the extreme pace of development.












Thursday, April 2, 2009

Distributed System for Photo Mosaic Processing

My passion for photo mosaics and highly scalable distributed systems has led me to ponder about a distributed system for photo mosaics. Here's a first go of how it would work.

Assume the photos reside in some warehouse available via a REST interface. Assume also that all the photo indices can be received in one get request.

For now, we will assume a star topology with a master node that distributes all work to several worker nodes.

Abstract
A collection of photos is defined. The photos are distributed to several workers. The workers measure the "colorness" of each image and store the colorness with each image locally. The images are then sorted locally and a parallel sorting algorithm is used to sort images globally. Each worker receives subsections of the global image and determines the "colorness" of each subsection. The subsections are then sorted locally and a parallel sorting algorithm is used to sort subsections globally. The subsections and the images and then paired based on their order after sorting. Finally the images are assembled based on their paired subsections original global image placement.





Saturday, March 28, 2009

There is no formula

I recently watched the documentary Before the Music Dies. The documentary had many insightful comments about the record industry. In particular it focused on how the quarter-by-quarter profit mongering corporations sucked the life from music by caring only about the bottom-line.

With companies like clear channel focusing more on playing music that the masses "won't dislike rather than music the masses might like", music has become stagnate, at least popular music. But welcome the internet and music post-Napster.

Musicians now can produce a high quality album with only a few thousand dollars. They can market their music on myspace and youtube, spread their fame through Facebook, and reap profits on iTunes. This method works well for smaller artists whose music cannot be found on torrents for the most part. And even for the big names whose music is spread across the torrent cloud, they make reasonable profits from legitimate sales on iTunes or rhapsody or amazon.

I'm curious if record labels have decided to raise concert ticket prices to make up for the income they have lost from selling multi-platinum records. It would make sense to try although it might just annoy consumers who will relive their live experiences on youtube.

This documentary shed some light on what's broken with the music industry, or rather what has changed. Record labels can no longer force consumers to listen to what they deem is cool in order to sell more pepsi products. There now exists a meritocracy within music where only the most talented, or by today's terms, most viral musicians survive, e.g., 'Chocolate Rain'. But 'Chocolate Rain' is crap as is most viral music which is why we still need record labels to help consumers filter. But I argue that this is all a record label should do. Filter for talented artists and potentially great music and provide for them a nurturing environment rather than exploiting musicians for the sake of selling an ad.

On the other end, musicians need to write music that matters to them, that they connect with and not worry about catering to the masses in the hopes of making it rich. If by writing for themselves, they are able to connect with 1 or 1 million other persons then they have achieved their goal. Music comes form their heart, as in many of life's passions. You can not calculate it. There is no formula.




Thursday, March 26, 2009

LaTeX + Evernote = better math notes

Evernote is a great way to push your notes to the cloud. And the content you create is indexed for later searching. LaTeX is the standard document markup language used in scientific research papers, or any other document that requires some math. However taking notes in LaTeX is not really feasible since it is not very easy to type documents on the fly. Even editors that provide buttons to insert symbols are hard to use and slow down note taking speed. The ideal solution is to simply be able to write notes like with a tablet. However the notes you take should use some sort of recognition to convert the notes into LaTex. From there, the documents should be uploaded to evernote and indexed.

Hulu + Tokbox

I thought of the idea of being able to watch Hulu and tokbox at the same time. The key idea is that both people can control the video just like you already can with youtube. I'm not sure how to do this though. A simple idea is that at the least a web application can be created where hulu videos are embedded and tokbox parties are also embedded. That's the simplest mashup I can think of. But both people will have to start their video separately.

The way I think tokbox is able to synchronize youtube watching is that they buffer it on a separate server first. This is based on the different control one sees/uses when watching within a Tokbox party. So perhaps a more functional solution would be to have a server that routes the traffic to those in the party. Still not sure how to handle the video routing.