Today, to my dismay I found a portion of my private Facebook social graph in the public search pages on Google under the social profile page of my now-deleted Scribd account (see picture above).

I can tell that the data was pulled from Facebook because of the particular profile image which is only on my Facebook profile (not LinkedIn, not Twitter, and not Google Buzz).

I can understand that Scribd may want to build their own social network for its users (haven’t thought about why they would and don’t care). And I certainly have no issue with Scribd publishing the particular social graph about willing users. But my numerous issues are mostly related to the way they obtained this information and that they did not ask for my permission before proceeding to share this data with the whole world.

Here are the particulars of my issues with what I saw today:

I use (or used to use as of now!) Facebook for social fun and keeping in touch with friends online, not as a professional tool, and certainly not as a public publishing platform. My Facebook profile picture, my friends’ profile pictures, etc are not ones I want the CEO of the next company I work for to see in the first or second page of Google Search results for my name! (the attached picture is exactly what you will see if you Google me and dig around for a bit) So the fact that Scribd did not respect my choice to keep that information private is a serious problem.

I have no idea how Scribd got this info. I have not signed in using my Facebook account. Actually, before this morning I used to have a Scribd account and am sure I would not have given Scribd my Facebook login. This concerns me.

The data that Scribd published is public (without my choice) and very sticky. So even when I noticed that the whole world can see many private data about me, I cannot remove the pages immediately and am at the mercy of Scribd to pull the data down and then Google to remove the data from their caches. This is exactly why my profile is private on Facebook. Mark Zuckerberg might ask: “what do you have to hide?”. To this I would answer: “nothing, but I don’t choose to publish every detail of my online life on a public forum”.

I didn’t wake up today thinking I would go on a rant about Consumer privacy online, but the surprise of seeing my private data out in the open made me take the time to write about this. I am surprised that a company with a great service, impressive investors and team (http://www.crunchbase.com/company/scribd), and $12.8m in funding would make such a mistake.

I know we live in an age where privacy is considered a relic in the online world. So be it, I have asked Scribd to pull my personal data down and will pursue this issue until the data is all removed. In the mean time, to prevent future instances of this and to counter the intrusive nature of Facebook Like button, etc I recommend the following:

Sign out of Facebook and Twitter after use every time. Or better, have a separate browser for using Facebook and Twitter and use another browser when you’re just searching the web and doing work.

Clear your browser’s cookies after each visit to Facebook. This will ensure no 3rd parties take your private data without your permission (you can still sign in or choose to give your Facebook information to 3rd parties if desired)

Search yourself on Google, Bing, etc every once in a while to see if you’re involuntarily sharing more than you intend to. Then work with the offending website to pull your data down.

Disconnect yourself by closing down your Facebook, etc account. I haven’t done this yet as I find Facebook a valuable service. But everyone has his own way of doing cost-benefit analysis and his own limit. I’m just getting closer and closer to the last straw on this. If my privacy cannot be managed effectively, I will reluctantly but surely remove my Facebook account.

In the end, I’m thinking some soul-searching is in order to see whether or not it makes sense to have a Facebook account.

December 23, 2010

The other night my girlfriend and I decided to watch a movie and inline with the spirit of holidays (and the cold weather in Toronto) we decided to give iTunes a try instead of going downstairs to rent a DVD from Rogers (there’s a Rogers Video literally down the stairs). Here is what’s broken about the whole process from a user’s point of view:

Price-wise, I have no incentive to go to iTunes even though price is not really an issue for me as a non-frequent movie watcher.

Download time: maybe it’s my connection (it isn’t because I’ve done better before!) but the movie took 4 hours to download which was a downer because we ended up having to watch it the next night. That basically ruined the experience. Apple should really look into better streaming options (local servers or peer-to-peer come to mind).

What’s more is that due to bandwidth caps from my ISP, I would think twice before renting a 1.25GB movie which self-destructs in 24-48 hours!

iTunes cycles through a few pages to “re-establish” my payment info. Interestingly enough, the pages were pre-filled with my info anyway. So I’m not sure what the purpose of this exercise was.

Search and Browsing through titles was not pleasant because of iTune’s slow interface on my PC. (My MacbookPro is as slow, so it’s the networking within iTunes)

This is more general about watching movies on computers and no specific to just iTunes. Until everyone has a media centre computer, a Web/Apple/GoogleTV, or some sort of web-smartbox, you cannot complete with the convenient of a DVD player. Here is what I mean

Connecting my laptop to TV through HDMI is a pain.

No remote control for pausing and fast-forwarding/rewinding. I have to get off the couch, play with the mouse until I see the pointer, move to FF/RWD button, then move mouse (visible on TV screen not the laptop) to Play button and click again.

Worst of all for iTunes/Netflix, great for Rogers Video/Blockbuster/etc is that putting together the full connection to the TV (HDMI, iTunes, Downloads page, Search, switch to full screen, etc etc etc) is totally non-geek-hostile! No normal person would want to go through this pain at this point.

All in all, I believe that the process is still not fully baked. But once TVs become smarter I can see a lot of the issues addressed. At that point I’ll revisit the trade-off of not leaving the convenience of our living room versus the time and planning effort required to download the rental movie. For now, I’ll stick to DVDs.

I’m getting excited about one patent. There are many people in the world who have their names on quite a few patents and don’t talk about it, but I’m darn proud of this one and am going to write about it. That project was special because my team also managed to develop the BlackBerry® software piece of the system based on this patent and won the best of WES award for our client in Consumer category in 2008 (Link to article on WES 2008 Consumer category).

December 19, 2007

I was busy (read bootcamp!) preparing for and writing the GMAT over the past two weeks. That’s why I haven’t written much lately, but I thought I’d share with you my fun experience with the GMAT!

First thing, this was a really quick decision. I had thought of writing this test for a while, but hadn’t really had the opportunity to do it. So, this time around, as soon as I had time to breathe, I decided to just go for it and get it over with. My strategy was simple: just pick a date 2 weeks from now (well originally I was more ambitious and wanted to do it in one week, but I had a humbling experience). Then everyday, in an all-you-can-eat-buffet-like approach fill your brain with training before it realizes what happened and gets tired!

I stuck to a strict and intensive schedule to make sure I do well on the test. I tried to do a timed test a day, but in the end I had 4 or 5 tests under my belt. I highly recommend the GMATPrep and POWERPREP tests. I also did most of the GMAT Official Review (11th ed, the orange one) and read through some parts of GMAT 800 by Kaplan.

In the final days of prep, I came across this website which I wish I’d seen much earlier: Beat The GMAT. I highly recommend having a look at this. I also took review notes while studying the books and writing tests. I’ve included a part of the document here (GMAT study notes). If you are interested in the full document, send me an email. (I’m doing this to see how many people are actually interested)

Another piece of the strategy was time management. This changes from person to person, but I came up with and used the easy-to-memorize V19-40-30-20/Q17-40-27-20 rule for myself. This cryptic rule basically means: For Verbal, be on question 19 or further when the clock shows that you have 40 minutes left, and be on question 30 or further when it hits 20 minutes. Same for the Quantitative section. I have a spreadsheet for helping with making these rules. If you are interested in seeing and using it, let me know.

Also, make sure you don’t forget preparing for the Analytical Writing Assessment part. There are good resources online (listed at the bottom) for practicing and improving time-management for these essays.

In the end, I had a blast on the test day. And the result was amazing, too. Actually, way better than expected! I had studied hard to get a score above 700. I was pleasantly shocked to see my score in the end. If I were a little better at marketing, I would change the title of this post to: “get an unbelievable GMAT score in two weeks!”

Hope this post is of use.

Last but definitely not least, I’d like to thank Kevin Au and Todd Presswood for sharing with me invaluable information regarding the test.

December 2, 2007

While reading P. Barrow’s The Best-Laid Business Plans, I came across an interesting argument he had against giving discounts as a small business. The reason for writing this post was to inspect the simple but condensed table of data he provided (“Pricing Ready Reckoner”) which in the space of less than a third of a page, makes a very clear case against discounting.

Here’s the argument. In order to maintain the same level of profit, you would have to sell much more depending on your original Gross Margin and the amount of Discount. The amount of extra sales needed in each case is summarized in the following table as percentages.

Existing Gross Margins (%)

5

10

15

20

30

40

% price discount

1

25%

11%

7%

5%

3%

3%

3

150%

43%

25%

18%

11%

8%

5

100%

50%

33%

20%

14%

10

200%

100%

50%

33%

15

300%

100%

60%

The math is simple if you do not claim a portion of the margin, you have to make up for the difference by increasing sales. But the engineer in me wants to make the calculations more formal:

Without discount we have:
Gross margin=R×G
Cost of Goods Sold per unit=R×(1-G)

With the discount, on the other hand:
Sales revenue per unit=R×(1-D)
Cost of Goods Sold per unit=R×(1-G), remains the same
New gross margin=R×(G-D)

To make the same level of profit
S’×R×(G-D)=S×R×G

Which means we have to sell (S’/S-1) percent more to compensate for the discount:
100×[G/(G-D)-1]

The rest is easy: put the Formula in a spreadsheet and you get that nice table above. There is another table in the book which shows the flip side of the situation: price increase. But I spare you.

As a final note, I believe that you could still make a good case for giving discount on your products/services for a variety of reasons such as building relationship in hopes of recurring customers, gaining market share, etc. However, Paul’s argument is interesting and makes the assumptions that your customers buy from you because of the flexibility, quality, and the service provided. Further, I would like to add to this list the fairness and competitiveness of original pricing.

I meant to make this post much earlier, but all the start-up fun kept me from doing it. The first part of the post was published on Oct 17 (Simple Search Feature) and covered my Do It Yourself solution for the catalog search feature in Giftify.

The problem with the original indexing scheme was that it created separate “lookup word” entry for words that were inclusive of one other. For example, it would be possible that the word “rose” appeared in the descriptions of gifts 1 and 3 and “rosemary” in 2 and 3. Note that the correct indexing scheme would dictate that all items of “rosemary” are a subset of those of “rose”.

One way of fixing this problem is using a query with the LIKE statement in SQL to get all LookupWords that are similar to the actual search term and then perform a complex query, which will have to be created dynamically based on the results of the LIKE query. The complexity of this solution, the shakiness of LIKE/DISTINCT constructs, and the fact that a lot of stuff needs to happen for every search led me to implement a better indexing scheme.

I have mentioned the solution above: when indexing, make sure that the items in “roses” are all included in the set of items associated with “rose”. This way when looking up the word “rose” in the catalog, all three items are returned.

The Ruby implementation of the improved indexing scheme follows. Note that the trivial case of plural words containing the singular ones is handled via pluralize and singularize functions in Rails.

A quick note on efficiency. The indexing process becomes slower and the index table becomes larger as a result of this scheme, but the trade-off against making on-the-fly search faster is definitely worth it.

* (USD to CAD element was changed from 0.98870 to 1.0 in the example below)

The data is essentially a matrix as follows (with a bit of rearranging and reducing the number of currencies):

C for Canadian Dollar
U for US Dollar
E for Euro
CU: price of 1 Canadian dollar in US dollars as reported in the table
UC: price of 1 US dollar in Canadian dollars as reported in the table

This matrix, in an efficient, arbitrage-free market, should simplify to:

Therefore, the test is to form the Foreign Exchange Matrix, and then calculate the following expression in Matlab, Excel, etc:

, where n is the number of rows in the FX table. (3 in the above example)

If the resulting matrix has non-zero elements, it is theoretically possible that arbitrage can happen. Note that “non-zero” is relative as it is unlikely that you get all zeros because of round off errors. But, dividing (the absolute value of) the biggest element by n gives you a good idea about the potential amount of arbitrage. For example, applying the formula to the sample data at the beginning of the text shows that the inconsistency in the table of rates is, more or less, about 0.678%. (Again, the sample table was tampered with for the sake of the example. Using the original data, the arbitrage potential was 0.00068%.)

I recommend that this formula be used for a quick test as opposed to a full diagnostic review of your FX table. There are definitely better and more elaborate ways of arbitrage detection and pinpointing what algorithm can make you the most amount of money. This post is only meant to show how a little bit of Linear Algebra can be used as a quick test of online data.

Also, the chances of making money this way is very low. That is because markets are quite efficient these days. Also, all FX trading accounts have a trading spread which is basically charging you a small premium every time you do a trade. This small amount is large enough to cover the arbitrage opportunity as detected above. If you know of a trading account that isn’t like that, I would love to know about them ;)

Let me know what you thought of this post. Do I have what it takes to be a Quant!? If you’re interested in the spreadsheet that does the calculations, let me know.

November 21, 2007

Last week, I spent a bit of time on sales coupons for Giftify. Since I have no formal marketing education, I had to rely on common-sense and intuition. Please, feel free to give me feedback on this. I’m really interested to know what other people think of it.

The objective is to be able to sell at a discounted price to select individuals, groups of individuals, or everyone who carries a valid coupon code issued by the vendor. Sounds simple enough.

I thought of a couple of aspects of coupons:

Discount Logic

Percentage coupon; e.g. 10% off the gift price

Absolute amount coupon; e.g. $15 off the gift price

Combinable with other promotions

Authorized User

This is who the coupon is meant for

a specific user; e.g. A frequent customer, reviewer

a group of people; this is similar to the individual user, but a little different in the database model

general public; in this case you want to let anyone with a promosional coupon code to be able to benefit from the discount. e.g. GoDaddy promo codes.

Discounted Merchandise

This is more an implementation issue again.

Authorize use of coupon on select gifts in the catalog

Coupon is valid on every item in the catalog

Profit Safety Net

Is the objective of the coupon (promotion, appreciation, etc) worth losing money on certain orders from users with the coupons. For example, a person has a 15% discount coupon, but she wants to use it on a gift with a margin of 10%.

Coupon allowed to override minimum gift price

Coupon has a limit

As for implementation, I will give you a brief overview of my design. If there’s interest in seeing more details, please let me know and I will try to make a post. In summary, I used a Single Table Inheritance approach to model coupons in our database. That is, all various types of coupons (Percent/ Absolute/ Limitless/ Limited) are stored in a single table. I store coupon details, as well as the type in the table. In the controller code, when retrieving a coupon from the database, I look at the type first and use the correct code based on that.

That’s all. Please, let me know what you think of this post. Was it useful to you? Do you know of a better resource online which captures the information in this post and more?

btw, here’s a coupon code for Giftify to show my appreciation for reading this blog ;) SOJOODIBLOG