Cool Summer 2012 Internship – Problem Set 7

We’re closing this race with a set of problems that rely heavily on context.

The Cool Summer Internship Race has been a driver of great attitude, since most of what we published left room for creativity, in every sense.  What is more important though is that it turned into a driver of entailing actions.

What are we going to do next:  we want to offer those who would like to become interns at 4PSA the chance to know us in a competition.

We’re cycling in teams at Skoda Velo Challenge on June 17th, and we’re saving 3 intern spots in our teams for those who have a bike and want to get involved. No, you don’t need to be accepted as an intern by that time. This will be a simple “get to know us” thing that we want to do. More details are available here.

Until then, try solving the problems below until Tuesday, May 15th, 10 am GMT. Do not forget about the rules. You can solve the problem in a small team!

Results must be submitted here.

Advertise Yourself

You are creating a search engine and you want to monetize its search results by displaying advertising alongside search results.

What You Have to Do

Design an online advertising system for the search engine. Specify what type of technology, programming languages and algorithms you will select.

Suggestions

Goals for such a system may be:

  • Providing users with the most relevant ads.
  • Providing advertisers with the best possible return of investment.
  • Minimizing the cost for running this operation.
You can have an interface approach and design 2 or 3 containers for advertisements. You can use your favorite JavaScript framework in order to create containers that will not be very annoying but strategically placed on a webpage in order to attract the user to click them. Include here:
  • a small prototype in JS of your engine
  • describe your strategy

Kangaroo Jump over Dambovita

The Dambovita River is X meters wide and an alien kangaroo needs to cross it. Some stepping stones are inserted into the river. The kangaroo will need to jump on the stones, otherwise it will drown.
The kangaroo has a very serious restraint: if it has just jumped Y meters, then its next jump must be of a minimum Y-1 meters up to Y+1 meters. Taking into consideration the fact that the first jump can be only 1 meter long and the given the position of the stones, how would you determine whether the kangaroo can make it to the other bank of the river or not?

What You Have to Do

Build a prototype.

Suggestions

Analyze the runtime of your algorithm.

 

Have a great weekend!

The 7 Habits of Highly Effective People

This is the title of a famous book of Stephen Covey. In many online tests we use in the recruitment process we ask a simple question – “What’s the title of the best book you have ever read?”. Frankly, for me this would be a pretty difficult question, mostly because it’s quite impossible to flatten (I have a good definition of best) books based on topic. I can name a few very good books regarding engineering process, product management, architecture etc. But these books cannot compete with War and Peace, Karamazov Brothers, poesy or philosophy.

Why This Question?

Anyway, the scope of the question was to see whether the candidate challenges the question in any way. Unfortunately, many people don’t, maybe due to time constraints. Even if they write down a title, the results are very interesting. We recently conducted tests for a HR Director position and it was a big surprise to see that more than 50% of the candidates simply pointed to “The 7 Habits of Highly Effective People” as the best book they’ve ever read. The book is interesting, but it’s also very deep. Back then I was amazed and even discussed this with several people – how did it get to pole position for the HR people? This book has not even been mentioned by other candidates and, as strange as it might seem, most candidates to software development positions do not even point to technically books. Which is good :)

Eventually, I asked a couple of HR candidates I met personally about the book and they said that it was recommended by a HR guru. Therefore, many might have answered this way to impress or to show that they really know the process.

Is There any Recipe for Becoming More Effective?

I recently re-read the 7 Habits and I discovered things I missed the first time, including some logical flaws that more engineering oriented people might spot. The book focuses on you as individual and describes the process on making you better. It covers the importance of your character and of things done right (basically, there is no building without foundation). The goal is to obtain not independence, which is the ultimate goal of many people, but superior interdependence.

By doing things sincerely and listening to others, you will be able to help yourself. I know many people that try this instinctively, without reading any book, but they end up in depression or immense frustration because it seems that it does not work, even if there is not much they can do more. The fact is that there is always more to do and the book can show your mistakes, but it’s also obvious that in order for a group (for example a company) to become more efficient, everyone must be made aware first.

Should You Read This Book?

No matter what you are doing, even if it’s not HR related :) , I recommend the book. But in order to make most of it, I think that you must read it twice (or without many interruptions). There is a little bit inconsistency inside, but this might be intentional.

And after you finish with this book – there is more, namely “The 8th Habit: From Effectiveness to Greatness”. I haven’t read this one so I cannot make any recommendations. But anyway if you want to impress in a test, this seems a better choice – after all it’s an upgrade. :)

Cool Summer 2012 Internship – Problem Set 6

 

Inspired by cartoons, news and …simple logics, we’ve come up with two more problems for you to solve this weekend.

Do not forget about the rules. You can solve the problem in a small team!

The deadline to submit your solutions is Tuesday, May 8th, 10 am GMT. Results must be submitted here.

 

Feed the Deer

In a forest there is an unknown number of deer and the forester wants to count them.
The forest has a fixed number of feeding places, located on known coordinates. Each feeding place has a method of detecting one or more deer that come and eat there. The forester also knows the maximum speed of a running deer and how many days a deer can survive without feeding.
You must help the forester determine the number of deer in the forest, so that he can forecast their meals correctly.

What You Have to Do

  • Describe the algorithms you can use and fundament your choice.
  • Describe the UML class diagrams and design patterns applied
  • Develop a prototype using your favorite programming language

Suggestions

  • Describe how can the specifications be improved, in order to obtain better results
  • Think what happens if the device detecting the deer also detects some other animals coming by. How could the system be improved to prevent these errors?

 

Good News

A startup company wants to generate more page views on its news site.
The product manager came up with the idea of inserting a sidebar of clickable snippets from articles that are likely to be of interest to the reader.

What You Have to Do

  • Design a system that automatically generates the sidebar with news content from a database or from a directory with files.
  • Build a sidebar prototype. Design the sidebar with usability in mind (not only does it have to work, but it also has to look appealing).
  • The user should be able to change the list of articles from the sidebar to the next ones if he does not consider them helpful.

Suggestions

  • Show articles that have been proven to be popular recently.
  • Readers can rate articles which they believe to be significant.
  • Could you make the list of news behavior oriented?

 

Looking forward to see the good news in your solutions, next Tuesday. Have a great weekend!

Cool Summer 2012 Internship – Problem Set 5

The Cool Summer Internship Race is getting closer and closer to the finish line.  A big thumbs-up for all those who have already sent their solutions to previously posted problems and a piece of advice to those willing to do so: hurry up, we only have 2 sets of problems left! But we still have positions to fill. :)

This week is going to be more social. :)

Do not forget about the rules. You can solve the problem in a small team!

The deadline to submit your solutions is Wednesday, May 2nd, 10 am GMT. Results must be submitted here.

Connect People

You are designing a new social network. Unlike social networks where people connect by friendship request, your social network connections are rendered automatically, based on mutual interest.
What you know is:

  • Each person has an associated list of interests O1… Oi
  • The list is not static (people can add interests or subscribe to other interests that had been previously added by others)
  • The more common interests between people, the better the chances to have them connect. On the other hand, when two people are connected based on mutual interest, their connections up to level three are to be considered possible candidates for connection.

What You Have to Do

Describe a data storage model. How would you store the list of people, their interests and the connections?
Describe an algorithm for discovering best connections, based on mutual interests and existing friendships.

Suggestions

You will store a large amount of data, comprising information on millions of people and millions of interests.
You should be able to retrieve potential connections in real time from a friendly data structure. 
Most likely you cannot identify potential connections in real time! So you should have some workers to process the information. It’s best to design an algorithm that can be easily distributed across multiple workers. 
Consider the weight! Some connections are better than others (you should settle your own criteria). What’s more important for you?

 

Wikipedia Test

You joined a project to find quality issues with Wikipedia web infrastructure (not content). Your job is basically to discover bugs in Wikipedia. Any type of bug is appreciated.
You are not aware of formal testing procedures, but you must organize your work in order to find problems of significant importance.

How do you plan to do it?

What You Have to Do

Write a plan for the task.
Show us how you would execute a part of this plan.

Suggestions

In testing, automation is important. Wikipedia is web based; do you see a black box?
There are many types of potential issues. An important issue might be more valuable than one hundred minor findings.
Security is very important. Make sure you cover it!
Wikipedia is one of the busiest websites on the Internet. How would you stress it to see how the current infrastructure scales?

 

We wish you a great weekend and we look forward to receiving your creative solutions.

Cool Summer 2012 Internship – Problem Set 4

We are thrilled to see that we rose some enthusiasm with the problem sets published so far. This fourth problem set is dedicated to strategy. We would like to see more of the “how”, and to this purpose, we are publishing approach-based challenges.

Do not forget about the rules. You can solve the problem in a small team!

The deadline to submit your solutions is Monday, April 23rd, 10 am GMT. Results must be submitted here.

Present Yourself

You should design a presentation web tool (like Powerpoint) that connects a presenter to multiple persons. Every slide change is visible to everyone connected. Everybody will be seeing the slides and should be able to send questions that the presenter will receive and answer. The questions and answers are visible to all participants.

What You Have to Do

  • Describe the UML class diagram.
  • Develop an object-oriented prototype.

Suggestions

  • The person initiating a question should be unaware of the number of other peers
  • Take a look at different design patterns for ideas.

 

Park Alleys

Yay, a new park is to be opened soon in Bucharest. The park has no alleys, yet! Someone came up with the idea to experiment and see the paths most walked on by people, turning those into alleys. You are managing the team in charge with providing the park with alleys!

The park’s surface is of 100 hectares. You have 20 employees, each one working 8 hours per day.

You can place 10 observers (maximum) in the park, at one time, due to small budget. One observer can monitor 1 hectare at a time.

The time allocated to finalize the measurements for setting the alley is of one week. The measurements done by the observers can be processed every hour, every 30 minutes, or every 10 minutes.

What You Have to Do

Your task is to determine the most visited paths and turn them into alleys in as short a time as possible. You cannot allow the park to be destroyed!

Suggestions

  • The figures in the description of the problem are just there exempli gratia. Please focus on strategy on top of all!
  • Take into account the fact that citizens do not always behave well and you may have to clean up their tracks and restart.
  • Employees can also resign for whatever reason and you will have to deal with it.

 

Best of luck and inspiration!

 

Cool Summer 2012 Internship – Problem Set 3

 

We are publishing this set of problems one day earlier, as it is Easter time and we’d like everyone to enjoy it accordingly.  Do not forget about the rules. You can solve the problem in a small team!

The deadline to submit your solutions is Tuesday, April 17th, 11:00 PM GMT. Results must be submitted here.

Easter Eggs

You are given n eggs, each weighing 10 to 100 grams. You also have a collection of large baskets. Your aim is to find the smallest number of baskets that will hold the n eggs, with no basket holding more than 100 grams. You must take each of the eggs in the order in which they are given.

What You Have to Do

  • Prepare a document specifying the algorithm and the algorithm complexity
  • Implement the algorithm and build units tests for it

Suggestions

You can use a data structure that allows you to find the first appropriate basket in O(log n) time.

The Next YouTube

Let’s suppose that you are the YouTube’s product manager and you want to redesign it. The next version should employ a number of different strategies to engage attention, invite people to participate, and explore the new social aspects of the site.

What You Have to Do

Send us YouTube wireframes and a document explaining the specific design decisions taken when creating the mockups.

Suggestions

  • Balsamiq is a great tool.
  • User experience design means a lot of trade-offs.

 

Happy Easter, everyone!


What’s Next – VoipNow 3

This informal article covers the very immediate future of VoipNow. While the picture is not complete now, we will update closer to the release date with more information. This article is organized as a FAQ.

Why don’t you publish roadmaps?

We do not publish roadmaps because each major release of VoipNow is a generation change. Generation changes come with strategic improvements that involve a lot of IP. Revealing such IP far before executing it might affect our business, therefore we prefer to keep it undisclosed. Many customers know a lot about the 4PSA developments and they are consulted during our development processes.

How long does it take to come up with a major version of VoipNow?

The generation change happens every three years. While during a generation lifetime we provide accelerated improvements for the first 24 months following the major version release, for the second part of the lifetime most resources go to the new generation product development. VoipNow is used in mission critical environments and we have many requirements to fulfill. The change of generation must be relatively straightforward for our customers, even if internally major things happened.

What is a generation, exactly?

VoipNow is a platform. When we release a new generation, we create the means to better serve customers for the next years. Generation changes are common in the software industry – some are lighter, others are more dramatic. We use Agile in our development process and in order to release a major new version, we execute many sprints. This means that we have dozens of internal releases until one goes public.

What’s the next major version of VoipNow?

The next major version is VoipNow 3. VoipNow 3 is the most important release since VoipNow born in 2006.
VoipNow 3 will have two editions – VoipNow Service Provider Edition and VoipNow Business Edition. This separation was necessary in order to better serve end-users. VoipNow Service Provider Edition will come first, the Business Edition will come later. There will be a direct upgrade path from VoipNow Professional to Service Provider edition assuming that you have service provider licensing. With business licensing VoipNow Business Edition is your upgrade path.

VoipNow Professional will become EOL and will be maintained for one year. We will assist all customers upgrading to VoipNow Service Provider or Business editions.

What’s new in VoipNow 3?

The platform is common for both SP and Business editions, so most functionality is shared between them. However, Business Edition is a simplification that might not include some functionality in SP (we will cover it in a future post).

  • Cloud Distributed model – the most important change is an architecture one. VoipNow 3 is now fully distributed, integrating our proprietary cloud technology. This allows the system to grow and shrink dynamically, using resources from a pool of virtual servers/instances, such as Amazon EC2, Virtuozzo, VMware, Xen, etc.
  • Cloud Storage – recordings, voicemails, faxes and other files produced by customers can be stored in a cloud storage system compatible with Amazon S3 protocol. Local filesystem is still supported.
  • Improved Account Model – In VoipNow 3 we have the following account levels – Owner (Admin), Service Provider, Organization, User, Extension. The Extension is a resource of the User, this means that a user can have multiple extensions. Previously it was a one to one relationship between the user and her/his device.
  • Extension Virtualization – extensions no longer depend on the physical device, it is possible to have a certain feature set on any extension device connected to VoipNow, assuming that a secret is known.
  • New APIs and Support for Apps – it will be possible to create Apps that use Unified Communication channels. The entire support for Apps was redesigned. APIs are OpenSocial compatible.

These are not the only changes – there are over 120 total – but these are the only ones we reveal before the public release, which will happen most likely at the end of Q2 2012. And yes, VoipNow is not the only UC product we are releasing in 2012, it’s just the one covered in this article.

Cool Summer 2012 Internship – Problem Set 2

We had very pleasant surprises last week, therefore do not forget the first rule: innovate! Do not forget about the rules. Yes, we allow small teams!

The deadline to submit your solutions is Monday, April 9th, 9:00 AM GMT. Results must be submitted here.

Problem 1: Meet Me!

Design and implement an address book application for a mobile device with limited memory. The application should be able to display the values in alphabetical order. The mobile device has support for your favorite programming language.

What You Have to Do

  • Send us a document describing the algorithms, specify the algorithm complexity, the data structures used for storing the contacts, and the design trade-offs.
  • Construct a prototype.

Suggestions

  • On mobile devices, you want to keep as much memory as possible available for data storage.
  • The application should be fast enough because it is frequently used.

 

Problem 2: Distributed Log System

Assuming you have multiple nodes with multiple services spread in your network, you want a method of collecting logs from all those services.

What You Have to Do

You are requested to design a distributed log system that meets criteria:

  • scalability (you can log from one node or from 10000 nodes, it should not matter)
  • consistence (log data can uniquely be tied to a (hardware) node, a service, a moment in time, etc)
  • availability (logging function is critical in your infrastructure)
  • redundancy (no single point of failure)
  • statistics and analysis friendly (the logging format should be easily processed by applications)
  • granularity (depending on gravity the messages should be labeled/used differently)
  • small footprint (on host and network level)
  • data storage is taken into account (the storage should be as light, yet complex enough to respect the criteria above)

Suggestions

  • Innovate, you should not be afraid of untypical solutions.
  • Consider network, service and nodes failures.
  • The communication protocol is important!
  • Think to a language specific implementation (C, C++, PHP, JS, Python, Ruby, Java, C#) for the designed system.
  • If you can build a prototype, this is big plus! You may publish it on github, bitbucket or any other similar service.

    We wish you a very, very productive weekend!

Cool Summer 2012 Internship – Problem Set 1

Here is the first set of problems, comprising two entries. You can innovate a lot on both of them! Do not forget about the rules.

The deadline to submit your solutions is Monday, April 2nd, 6:00 AM GMT. Results must be submitted here.

Problem 1: The Cloud Service

Using your favorite programming language, you have to design a cloud service and build an application that will use this service. Tip: Facebook is a very popular cloud service.

The cloud service will inform its end-users that some data is updated and should be retrieved. The users must subscribe to data objects in order to be notified when such objects change. Data is to be stored on multiple servers, the interface dedicated to the end users will also handled by many servers. To ensure availability, data will be replicated asynchronously between all these servers (tip: you might not have to replicate everything on all servers…). You have billions of objects with millions of subscriptions. The subscription service must be very efficient, reliable and should provide quick updates (in seconds).

The end-users are applications available for mobile devices, web applications, desktops. Applications will use an API to connect to the cloud service over the network, to subscribe/unsubscribe to the service in order to be notified of data changes and to notify the service when data changes occur.

This cloud service will inform registered applications that an update was issued; however, it will not provide data applications. Data can be interrogated using a different service (this is not the purpose of this task). Applications must retrieve the latest version of data after being notified.

In order to improve the scalability and reliability of the solution, client applications should be able to drive the recovery in case of failure (communication, crashes, etc).

What You Have to Do:

  • Describe the architecture and build the object model.
  • Provide a client API (the documentation needed by any developer that will try to use this API).
  • Explain the scalability, performance, and the robustness of the solution.
  • Build a prototype for an end-user application and for the client library. Make sure you describe in a document what the application is required to do.

Suggestions:

  • The Client API may be a library that the prototype application can use.
  • You can use a NoSQL database for the datastorage or you can build it in memory.
  • Make sure you guard against service unavailability.
  • You can optimize things (e.g. the service can skip the update for the client who made the data change)
  • The applications can use any protocol to communicate with the service. HTTP may be a good choice.
  • You must have a mechanism for detecting connectivity, that is easier to handle at the server level.

Problem 2: Test a REST API

Imagine you are testing a REST API (the Facebook one is a good example). The API has been proposed by the development group and unfortunately it’s the first time you see it.

What You Have to Do:

Prepare a document that describes:

  • The characteristics of a good API and how to identify them on the tested API
  • Performance considerations
  • Security considerations
  • Functional testing procedure – how do you automate it?

After you document your testing requirements at a very high level, build a prototype to automatically test (in any way – functional, performance, volume, etc) a REST API. You can use any programming language you wish.

Suggestions:

  • A good API must be easily understood by developers
  • There are tools able to test how good an API is
  • There are standards for REST services
  • There are things not mentioned here that make an API good. Make sure that you add them to your solution.

We wish you a very nice weekend and a great race! :)

Cool Summer 2012 Internship Race – Rules

Starting today we will begin to post the Cool Summer Internship 2012 problems online. We felt that is necessary to remind you a couple of things:

  • we will publish a set of problems on our blog each Friday. There is a deadline for each set of problems.
  • we would not recommend you to wait until May. We have a limited number of openings, hurry up!
  • all problems are open. We have some suggestions, but you are free to innovate.
  • it is possible to solve a problem with a friend/colleague. We will consider that the solution had multiple contributors – a very common thing, in daily work routine. Just remember that when you get to our office for the interview, you will be on your own!
  • on each set, you can solve any number of problems you want. Remember that is better to have an exceptional solution rather than two mediocre ones.
  • if your solution is good, we will call you. If we didn’t call you during the week following the submission of your solution, submit a solution on the next set of problems. You will succeed!

We suggest you to:

  • stick to the deadline of each set proposed.
  • double check the presentation. It is important!

We wish you the best of luck! Let the fun begin :)

Update: Yes, you are right. You can solve a problem in the team. A small team (of two members), but still a team. We value team work and we want you to be a team player. When submitting the solution, do not forget to add both members. Of course, you can still solve the problem on your own!

Next Page →