### Letter to Zynga Investor Relations

To whon it may concern:

I have been a Zynga investor since 2012. I'm very concerned with what's going on with the company right now. It has been a year since Don Mattrick was hired as a CEO, but he has not done anything worthy of the pay check he is getting. He reduced Zynga's workforce, but it does not take a genius to recognize that it was needed. The company is giving Don Mattrick an exorbitantly high pay without him having to prove he can turn around Zynga (http://bit.ly/1mgHZtF).

The stock price of Zynga now is a reflection of what the market thinks Don can do. He is seen as a non-factor. The stock is trading below the price right before Don was hired. That never happens when the market has high regards for the new CEO. Look what the new CEO's has done at Groupon or Blackberry. I'm not saying that Zynga stock should soar now because of Don. It should however stabilize, but it has not. It dropped from 5.89 USD to 2.78 USD in a matter of months. If you plot the revenue vs market cap of gaming and internet companies, you would clearly see that Zynga is priced as if it has no growth potential. It pretty much sums up what the market thinks of company. I would like to think the market is wrong and that I am right in still holding on to my shares, but I'm beginning to doubt the leadership and the people of Zynga.

How come no new games has been released yet? What are the 2000+ employees doing? If they are just improving and maintaining old games, then why does the company spends quarter after quarter 56% to 85% of it gross profits on "Research and Development". The only new game released is Farmville 2 : Country Escape, which at best is only moderately successful. Until now, nothing significant came out of the very expensive "Research and Development". Is it possible to request for a breakdown of the "Research and Development"? I would really like to know where that money is going. Zynga's DAU/MAU is still dropping consistently, so Don also failed in this area. You may say that it stabilized last quarter, but I think if you separate the numbers from Natural Motion the dropping trend is still there. You can also reason that ARPU slightly improved under Don's leadership, the change is actually statistically insignificant. Zynga's ARPU has been quite robust even in Pincus' era.

I played several Zynga games so I could confirm if the negative reviews are indeed true. I was appalled to learn that most of the negative reviews are not far-fetched. Some games are very buggy that you would end up losing "gems" (or whatever the currency is called in the game). If I were paying player, I would really be mad. There was one time where a bug was reported, it was well described and was reproducible, but it took four months for it to get fixed. What makes this worse is that Zynga has a terrible customer support. If you follow the Zynga thread on Stocktwits.com (http://stocktwits.com/symbol/znga), you will see a lot of irate investors. Maybe this company does not really care about small investors. I hope you would be able disclose if you are working on new games and when will it be released. I hope you don't disregard this letter. Thank you for you time.

Hi XXX,

Thank you for your email.  We appreciate the feedback.  Unfortunately we are in quiet period leading up to our Q2 earnings report, where communications with investors are restricted.  We currently do not provide a breakdown of R&D spend.  However in the past, we have said that a significant portion of R&D is allocated towards new games.  Feel free to reach out post our Q2 earnings report at which point we will have a better opportunity to update you on the business.

Thank you for your interest in Zynga.

Regards,
Zynga Investor Relations

### Python: Shallow copy vs deepcopy

Normal assignment simply points the new variable towards the existing object.

The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances):
• A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
• A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
To demonstrate, see the following example:

import copy

x = [1, 2, 3]
y = [4, 5, 6]
z = [x, y]
 
Normal assignment example:
w = z

print id(z) == id(w)          # True - w is the same object as z
print id(z[0]) == id(w[0])    # True - w[0] is the same object as z[0]
 
Shallow copy example:
w = copy.copy(z)

print id(z) == id(w)          # False - w is now a new object
print id(z[0]) == id(w[0])    # True - w[0] is still the same object as z[0]
 
Deep copy example:
w = copy.deepcopy(z)

print id(z) == id(w)          # False - w is now a new object
print id(z[0]) == id(w[0])    # False - w[0] is also a new object

### Root Commands and Examples

Official ROOT homepage
ROOT tips and tricks from the LHBC twiki
Environment Setup
Sample .rootrc and .rootlogon.C files

Accessing ROOT top level information and services : (more at TROOT.h)
TString rvers=gROOT->GetVersion();
Int_t ivers=gROOT->GetVersionInt();
FWLite Analysis      More here
Events->Draw("CaloJets_CaloJetMcone5.obj.eta()","CaloJets_CaloJetMcone5.obj.pt()>10");
draws eta spectrum of jets with a pt cut
Generating Postscript     Click here for a full description
Int_t itype=113; // 113 for Encapsulated PostScript, 100114 for nice paper output
TString psfile="noise_dists_cosmics.eps";
TPostScript ps(psfile,itype);// if no itype given, format is determined by extension
... code goes here...
ps.Close();

or simply call
c1->Print(psfile);
after canvas is complete
Adding Text     Click here for a full description
TLatex *t = new TLatex();
t->SetNDC();
t->SetTextAlign(22);
t->SetTextFont(63);
t->SetTextSizePixels(22);
t->DrawLatex(xtxt,ytxt,"Z ^{#/}(700 GeV) #rightarrow q #bar{q}");

t->SetTextAlign(13); //align at top left
t->SetTextAlign(12); // left, vertically centered
t->SetTextAlign(22); // centered horizontally and vertically
t->SetTextAlign(11); //default bottom alignment
Adding a Legend     Click here for a full description
Double_t xl1=.05, yl1=0.75, xl2=xl1+.3, yl2=yl1+.125;
TLegend *leg = new TLegend(xl1,yl1,xl2,yl2);
leg->AddEntry(h1,"No Ecal","p");   // h1 and h2 are histogram pointers
leg->Draw();
Opening of ROOT files
TString dirname = ".";
TString rootname = "hlt1jet_mc_120.root";
rootname = dirname + "/" + rootname;
delete gROOT->GetListOfFiles()->FindObject(rootname); // clear memory of file name

cout << "Rootname:" << rootname << endl;
if( gSystem->AccessPathName(rootname) ) {
cout << endl << "File: " << rootname << " not there!!!" << endl << endl;
return;
}
TFile *rootfile = new TFile(rootname);
or, for files in dcache:
TString rootname = "dcap://cmsgridftp.fnal.gov:24125/pnfs/fnal.gov/usr/cms/...";
TFile *_file0 = new TDCacheFile(rootname);
or, for files in CASTOR (CERN):
Listing of Histograms
rootfile->GetListOfKeys()->Print();
rootfile->ls(); // list everything
Testing if a histogram exists in memory
TString hname="TriggerJets";
TKey *key = file->FindKey(hname);
if (key ==0){
cout << "!!Histogram does not exist!!" << endl;
throw 1;
}
TH1F *h =  (TH1F*)file->Get(hname);

Plotting of Histograms
TString hname="TriggerJets"; // From list of keys
TH1F *h = (TH1F*)_file0->Get(hname);
h->UseCurrentStyle(); // important for imported histograms
Alternatively, call gROOT->ForceStyle(); before importing to set the style for all hists
h->GetXaxis()->SetRangeUser(0.,600.); // Set the range
h->SetFillColor(kYellow); // Fill fill color to yellow
h->SetFillColor(kYellow); // Fill fill color to yellow
h->SetMarkerStyle(20); h->SetMarkerColor(kBlue); h->SetMarkerSize(.6); // Draw histograms with blue markers
h->Draw();
Profile Plots
TProfile *prof = a_2d_histogram->ProfileX();
prof->Draw();
to fit with p1:
TF1 *p1fit = new TF1("P1","pol1",0,300);
prof->Fit(p1fit,"RQ")
Number of Events in a Tree
TTree *srctree = dynamic_cast(_file0->Get("Events")); // TTree name is "Events"
cout << "Number of Events: " << srctree->GetEntries() << endl;
Filling Histograms with Variables from a Root Tree     Click here for more info
TH1F *h = new TH1F("jetPt","Jet Pt",25,0.0,250.);
Events->Draw("recoGenJets_midPointCone5GenJets__R3.obj.pt()>>+jetPt");
h->Draw();
double minf=0.0, maxf=100.;
TF1 *gfit = new TF1("Gaussian","gaus",minf,maxf); // Create the fit function
h->Fit("Gaussian","RQ"); // Fit histogram h"
or h->Fit(gfit,"RQ");

double chisq=gfit->GetChisquare();
double ndf=gfit->GetNDF();
double chisqdf=chisq/ndf;
cout << "Chisquare: " << chisq << "/" << ndf << " : " << chisqdf << endl;

Double_t amp = gfit->GetParameter(0); //value of 0th parameter
Double_t eamp = gfit->GetParError(0); //error on 0th parameter
Double_t mean = gfit->GetParameter(1); //value of 1st parameter
Double_t emean = gfit->GetParError(1); //error on 1st parameter
Addition, subtraction, multiplication and division of histograms     Click here for a full description
n1->Sumw2(); d1->Sumw2(); // store sum of squares of weights (if not already done)
TH1F *rat = d1->Clone(); rat->SetName("Ratio"); // Clone one of the histograms
rat->Divide(n1,d1,1.,1.,"B");
Extracting Histogram Information     Click here for a full description
h->GetMean(1); // For axis = 1,2 or 3 returns the mean value of the histogram along X,Y or Z axis.
h->GetMeanError(1);
h->GetRMS(1); h->GetRMSError(1);
h->GetXaxis()->SetRangeUser(0.,600.); // If range is set, mean is computed over specifed range
Axis names and values     Click here for a full description
TString xaxis="p_{T} (GeV/c)";
h->GetXaxis()->SetTitle(xaxis);
h->GetXaxis()->SetRangeUser(0.,600.);
h->GetYaxis()->SetTitle("Entries");
h->GetXaxis()->SetLabelSize(.03);
h->GetYaxis()->SetLabelSize(.03);
Colors and Palettes
The basic colors: kWhite, kBlack, kRed, kGreen, kBlue, kYellow, kMagenta, kCyan
(defined in \$ROOTSYS/include/Gtypes.h)
gROOT->GetListOfColors()->Print(); // generates a full listing

TColor *colorname = new TColor(colornum,r,g,b,"colorname"); colornum > 228 and 0 < r,g,b < 1
e.g. TColor *col = new TColor(229,.3,.5,.6,"");
Existing color numbers can be redefined as follows:
color=(TColor*)(gROOT->GetListOfColors()->At(colornum));
color->SetRGB(r,g,b);
Working with the Canvas     Click here for a full description
TCanvas *c1 = new TCanvas("c1","Root Canvas 1"); // Default Canvas
Int_t wtopx,wtopy; UInt_t ww, wh;
c1->GetCanvasPar(wtopx,wtopy,ww,wh); // Gets Canvas Parameters

TCanvas *c1 = new TCanvas("c1","Root Canvas",Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh);
TCanvas *c1 = new TCanvas("c1","Root Canvas",900,20,540,550); // My Default Canvas

### Interview Questions

A submarine has two torpedoes with 1/3 probability of hitting a target. Both were fired on the same target.  What is the probability that at least one of the torpedoes will hit the target?

2/3 x 2/3 = 4/9 is probability of neither hitting
thus the probability of one hitting is 1 - 4/9 = 5/9