SlideShare a Scribd company logo
1 of 51
Bálint Horváth
marketing technology expert
When you need
more data in less time...
FRONTEND FIGHTERS
August 1, 2017
hi@balint.digital
Bálint Horváth
marketing technology expert
When you need
more data in less time...
FRONTEND FIGHTERS
August 1, 2017
hi@balint.digital
WARMING UP

Business Agility: Lexically
Agile Business
Business agility is the "ability of a business system to rapidly respond
to change by adapting its initial stable configuration".
Business agility can be maintained by maintaining and adapting
goods and services to meet customer demands, adjusting to the
changes in a business environment and taking advantage of human
resources.
(Wikipedia)
BLAH
BLAH
BLAH BLAH
BLAH BLAHBLAH
BLAH
Business Agility: Practically
Agile Business

Customer-centric

Rapidly respond
to change

Good team behind
(satisfied employees)

Innovative

Well-planned
Well-timed

Effective at
Risk Management
Business Agility  Data-driven Business
Collect data before you drive...











Data-driven Business  Data-driven People
It's a way of thinking...

Intuitive


Data-driven


Data-driven Business  Tracking
To get data, we need to track

Contact
Information
Interactions
Context
Cart
B2B B2C / RETAIL
Interactions
Contact
Information
Lead
Data
Customer
Data
Product
Personal
Email
Address
Add Item
Company
eBook
Seen
Added to
Wishlist
Share
Age
Sex
Device
Referral
IP
OS
Resolution
LocationISP
Campaign
Seen
Downloaded
Title
Lead
Level
Quotes

Last
Login
TRACK
how to
Track: Tools

Website
Track: The Challange
What's the issue?
We want to
Ghostery: cnn.com
- track many interactions
- inspect the whole journey
- inspect from different aspects
- integrate quickly and smoothly
TOYS
let’s grab some
Toys: Tag Managers
Tag Managers
Google Tag Manager
 Web-only
 No API
 No data storage
 No history
Toys: Segment
Segment
 Cross-platform
 Raw Data Access
 Advanced API
 Historical
Segment: Tracking Stack
Google
Analytics
Keen IO
Mixpanel
Amazon
Redshift
Postgres BigQuery
RDS Heroku



Source
Warehouse
Destination
<script type="text/javascript">
(function(){
// Create a queue, but don't obliterate an
existing one!
var analytics = window.analytics = win-
dow.analytics || [];
// If the real analytics.js is already on the
page return.
if (analytics.initialize) return;
// If the snippet was invoked already show
an error.
if (analytics.invoked) {
if (window.console && console.error) {
console.error('Segment snippet included
twice.');
}
return;
}
// Invoked flag, to make sure the snippet
// is never invoked twice.
analytics.invoked = true;
// A list of the methods in Analytics.js to
stub.
analytics.methods = [
'trackSubmit',
'trackClick',
'trackLink',
'trackForm',
'pageview',
'identify',
'reset',
'group',
'track',
'ready',
'alias',
'debug',
'page',
'once',
'off',
'on'
];
// Define a factory to create stubs. These
are placeholders
// for methods in Analytics.js so that you
never have to wait
// for it to load to actually record data. The
`method` is
// stored as the first argument, so we can
replay the data.
analytics.factory = function(method){
return function(){
var args = Array.prototype.slice.call(ar-
guments);
args.unshift(method);
analytics.push(args);
return analytics;
};
};
// For each of our methods, generate a
queueing stub.
for (var i = 0; i < analytics.methods.length;
i++) {
var key = analytics.methods[i];
analytics[key] = analytics.factory(key);
}
// Define a method to load Analytics.js
from our CDN,
// and that will be sure to only ever load it
once.
analytics.load = function(key){
// Create an async script element based
on your key.
var script = document.createEle-
ment('script');
script.type = 'text/javascript';
script.async = true;
script.src = ('https:' === document.loca-
tion.protocol
? 'https://' : 'http://')
+ 'cdn.segment.com/analytics.js/v1/'
+ key + '/analytics.min.js';
// Insert our script next to the first script
element.
var first = document.getElementsBy-
TagName('script')[0];
first.parentNode.insertBefore(script,
first);
};
// Add a version to keep track of what's in
the wild.
analytics.SNIPPET_VERSION = '4.0.0';
// Load Analytics.js with your key, which
will automatically
// load the tools you've enabled for your
account. Boosh!
analytics.load("YOUR_WRITE_KEY");
// Make the first page call to load the inte-
grations. If
// you'd like to manually name or tag the
page, edit or
// move this call however you'd like.
analytics.page();
})();
</script>
SOURCES
Segment
WEB
Segment

Segment: Web
JavaScript
analytics.identify('f4ca124298', {
name: 'Michael Bolton',
email: 'mbolton@initech.com'
});
analytics.js
<script type="text/javascript">
!function(){var analytics=window.analytics=window.analytics||[]; ...}
analytics.load("YOUR_WRITE_KEY");
analytics.page();
}}();
</script>
Configure
Identify
analytics.identify('{{ user.id }}', {
name: '{{ user.fullname }}',
email: '{{ user.email }}'
});
Track
analytics.track('Article Completed', {
title: 'How to Create a Tracking Plan',
course: 'Intro to Analytics',
});
analytics.page('Pricing', {
title: 'Segment Pricing',
url: 'https://segment.com/pricing',
path: '/pricing',
referrer: 'https://segment.com/warehouses'
});
Segment: Web
AMP
<amp-analytics type="segment">
<script type="application/json">
{
"vars": {
"writeKey": "WRITE_KEY",
"name": "My Page Name"
}
}
</script>
</amp-analytics>
amp-analytics
<script async custom-element="amp-analytics"
src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js">
</script>
Install Track
<amp-analytics type="segment">
<script type="application/json">
{
"vars": {
"writeKey": "WRITE_KEY"
}
"triggers": {
"click": {
"on": "click",
"selector": ".read-more-button",
"request": "track",
"vars": {
"event": "Read More Clicked"
}
}
}
}
</script>
</amp-analytics>
Segment: Web
PHP
Segment::identify(array(
"userId" => "2sfjej334",
"traits" => array(
"email" => $user->email,
"name" => $user->name,
"friends" => 25
)
));
segmentio/analytics-php
composer require segmentio/analytics-php
Configure Track
Segment::track(array(
"userId" => "f4ca124298",
"event" => "Article Bookmarked",
"properties" => array(
"title" => "Snow Fall",
"subtitle" => "The Avalanche at Tunnel Creek",
"author" => "John Branch"
)
));
Identify
Segment: Web
Laravel (3rd-Party)
'providers' => [
// ...
'CachetHQSegmentSegmentServiceProvider'
]
cachethq/segment
composer require cachethq/segment
Configure
Track
Segment::track([
"userId" => "uuid12345",
"event" => "Signed up",
"properties" => [
"newsletter" => true
]
]);
'aliases' => [
// ...
'Segment' => 'CachetHQSegmentFacadesSegment'
]
php artisan vendor:publish
Segment::identify([
"userId" => "12345abcde",
"traits" => [
"name" => "James Brooks",
"email" => "test@test.com",
]
]);
Identify
Segment: Web
Node.js
analytics.identify({
userId: '019mr8mf4r',
traits: {
name: 'Michael Bolton',
email: 'mbolton@initech.com',
plan: 'Enterprise',
friends: 42
}
});
analytics-node
npm install --save analytics-node
Configure
Identify
Track
analytics.track({
userId: '019mr8mf4r',
event: 'Item Purchased',
properties: {
revenue: 39.95,
shippingMethod: '2-day'
}
});
var Analytics = require('analytics-node');
var analytics = new Analytics('YOUR_WRITE_KEY');
Segment: Web
HTTP (IN GENERAL)
{
"userId": "019mr8mf4r",
"traits": {
"email": "pgibbons@initech.com",
"name": "Peter Gibbons",
"industry": "Technology"
},
"context": {
"ip": "24.5.68.47"
},
"timestamp": "2012-12-02T00:30:08.276Z"
}
HTTP
POST https://api.segment.io/v1/identify
Identify
POST https://api.segment.io/v1/track
{
"userId": "019mr8mf4r",
"event": "Item Purchased",
"properties": {
"name": "Leap to Conclusions Mat",
"revenue": 14.99
},
"context": {
"ip": "24.5.68.47"
},
"timestamp": "2012-12-02T00:30:12.984Z"
}
Track
MOBILE
Segment

 
 

Segment: Mobile
Android com.segment.analytics.android:analytics
dependencies {
compile 'com.segment.analytics.android:analytics:4.+'
}
Configure Identify
// Initially when you only know the user's name
Analytics.with(context).identify(new Traits().putName("Michael Bolton"));
// Sometime later in your app when the user gives you their email
Analytics.with(context).identify(new Traits().putEmail("mbolton@initech.com"));
// Create an analytics client with the given context and Segment write key.
Analytics analytics = new Analytics.Builder(context, YOUR_WRITE_KEY)
.trackApplicationLifecycleEvents() // Enable this to record certain application
events automatically!
.recordScreenViews() // Enable this to record screen views automatically!
.build();
// Set the initialized instance as a globally accessible instance.
Analytics.setSingletonInstance(analytics);
Initialize
Analytics.with(context)
.track("Purchased Item",
new Properties().putValue("sku", "13d31").putRevenue(199.99)
);
Track
Segment: Mobile
Android Wear com.segment.analytics.android:wear
compile('com.segment.analytics.android:wear:+@aar') {
transitive = true
}
Configure Track
analytics.track("Viewed Product", new Properties()
.putValue("name", "Moto 360"));
analytics.track("Purchased Item", new Properties()
.putValue("sku", "13d31")
.putRevenue(199.99));WearAnaytics analytics = WearAnalytics.with(context);
Initialize
<application ...>
<service
android:name="com.segment.analytics.PhoneAnalyticsListenerService">
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
AndroidManifest.xml
PhoneAnalyticsListenerService
Segment: Mobile
iOS (OBJECTIVE-C) SEGAnalytics
pod 'Analytics', '~> 3.0'
Install(via CocoaPods)
Identify
[[SEGAnalytics sharedAnalytics] identify:@"a user's id"
traits:@{ @"email": @"a user's email address" }];
SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration con-
figurationWithWriteKey:@"YOUR_WRITE_KEY"];
configuration.trackApplicationLifecycleEvents = YES; // Enable this to record
certain application events automatically!
configuration.recordScreenViews = YES; // Enable this to record screen views
automatically!
[SEGAnalytics setupWithConfiguration:configuration];
Delegate
[[SEGAnalytics sharedAnalytics] track:@"Item Purchased"
properties:@{ @"item": @"Sword of Heracles", @"revenue": @2.95 }];
Track
- application:didFinishLaunchingWithOptions:
Import
#import <Analytics/SEGAnalytics.h>
Carthage: github "segmentio/analytics-ios"
Segment: Mobile
iOS (SWIFT) AnalyticsSwift
use_frameworks!
pod 'AnalyticsSwift', '~> 0.2.0'
Install(via Cocoapods)
Configure
var message = TrackMessageBuilder(event: "Button A").userId("prateek")
analytics.enqueue(message)
analytics.flush()
Track
AnalyticsSwift library to project, then:
import AnalyticsSwift
var analytics = Analytics.create(YOUR_SEGMENT_WRITE_KEY_HERE)
@IBAction func homeScreenClicked(sender: NSButton) {
analytics.enqueue(ScreenMessageBuilder(name: "Home").userId("prateek"))
}
Not recommended, use SEGAnalytics instead...
(with Objective-C bridging header)
Segment: Mobile
Xamarin Analytics.Xamarin
git clone https://github.com/segmentio/Analytics.Xamarin.git
Configure Identify
Analytics.Client.Identify("019mr8mf4r", new Traits() {
{ "name", "Tom Smykowski" },
{ "email", "tom@initech.com" },
{ "friends", 29 }
});using Segment;
// initialize with your Segment source write key ...
Analytics.Initialize("YOUR_WRITE_KEY");
Initialize
Analytics.Client.Track("019mr8mf4r", "Item Purchased", new Properties() {
{ "revenue", 39.95 },
{ "shipping", "2-day" }
});
Track
WHATEVER
Segment

Segment: Whatever
Go
client.Identify(&analytics.Identify{
UserId: "019mr8mf4r",
Traits: map[string]interface{}{
"name": "Michael Bolton",
"email": "mbolton@initech.com",
"plan": "Enterprise",
"friends": 42,
},
})
segmentio/analytics-go
go get github.com/segmentio/analytics-go
Configure Identify
Track
client.Track(&analytics.Track{
Event: "Signed Up",
UserId: "f4ca124298",
Properties: map[string]interface{}{
"plan": "Enterprise",
},
})
var Analytics = require('analytics-node');
var analytics = new Analytics('YOUR_WRITE_KEY');
package main
import "github.com/segmentio/analytics-go"
func main() {
client := analytics.New("YOUR_WRITE_KEY")
}
Segment: Whatever
Ruby
Analytics.identify(
user_id: '019mr8mf4r',
traits: { email: "#{ user.email }", friends: 872 },
context: {ip: '8.8.8.8'})
analytics-ruby
gem install analytics-ruby
Configure Identify
Track
Analytics.track(
user_id: '019mr8mf4r',
event: 'Item Purchased',
properties: { revenue: 39.95, shipping: '2-day' })
require 'segment/analytics'
Analytics = Segment::Analytics.new({
write_key: 'YOUR_WRITE_KEY',
on_error: Proc.new { |status, msg| print msg }
})
Segment: Whatever
Python
analytics.identify('019mr8mf4r', {
'email': 'john@example.com',
'name': 'John Smith',
'friends': 30
})
analytics-ruby
pip install analytics-python
Configure Identify
Track
analytics.track('f4ca124298', 'Signed Up', {
'plan': 'Enterprise'
})
import analytics
analytics.write_key = 'YOUR_WRITE_KEY'
DEMO
show tha f#&@ software

DATA STRUCTURE
Segment
Segment
Identify {
"anonymousId": "507f191e810c19729de860ea",
"channel": "browser",
"context": {
"ip": "8.8.8.8",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) Ap-
pleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safa-
ri/537.36"
},
"integrations": {
"All": false,
"Mixpanel": true,
"Salesforce": true
},
"messageId": "022bb90c-bbac-11e4-8dfc-aa07a5b093db",
"receivedAt": "2015-02-23T22:28:55.387Z",
"sentAt": "2015-02-23T22:28:55.111Z",
"timestamp": "2015-02-23T22:28:55.111Z",
"traits": {
"name": "Peter Gibbons",
"email": "peter@initech.com",
"plan": "premium",
"logins": 5,
"address": {
"street": "6th St",
"city": "San Francisco",
"state": "CA",
"postalCode": "94103",
"country": "USA"
}
},
"type": "identify",
"userId": "97980cfea0067",
"version": "1.1"
}
{
"type": "identify",
"traits": {
"name": "Peter Gibbons",
"email": "peter@initech.com",
"plan": "premium",
"logins": 5
},
"userId": "97980cfea0067"
}
Segment
Ecommerce: Coupon
analytics.track('Coupon Entered', {
order_id: '50314b8e9bcf000000000000',
cart_id: '923923929jd29jd92dj9j93fj3'
coupon_id: 'may_deals_2016'
});
analytics.track('Coupon Applied', {
order_id: '50314b8e9bcf000000000000',
cart_id: '923923929jd29jd92dj9j93fj3'
coupon_id: 'may_deals_2016',
coupon_name: 'May Deals 2016',
discount: 23.32
});
Segment
Track
{
"type": "track",
"event": "Registered",
"properties": {
"plan": "Pro Annual",
"accountType" : "Facebook"
}
}
Segment
Page
{
"type": "page",
"name": "Home",
"properties": {
"title": "Welcome | Initech",
"url": "http://www.initech.com"
}
}
Segment
Ecommerce: Product List View
analytics.track('Product List Viewed', {
list_id: 'hot_deals_1',
category: 'Deals',
products: [
{
product_id: '507f1f77bcf86cd799439011',
sku: '45790-32',
name: 'Monopoly: 3rd Edition',
price: 19,
position: 1,
category: 'Games'
},
{
product_id: '505bd76785ebb509fc183733',
Segment
Ecommerce: Wishlist
analytics.track('Product Added to Wishlist', {
wishlist_id: 'skdjsidjsdkdj29j',
wishlist_name: 'Loved Games',
product_id: '507f1f77bcf86cd799439011',
sku: 'G-32',
category: 'Games',
name: 'Monopoly: 3rd Edition',
brand: 'Hasbro',
variant: '200 pieces',
price: 18.99,
quantity: 1,
coupon: 'MAYDEALS',
position: 3
});
Segment
Ecommerce: Product Share
analytics.track('Product Shared', {
share_via: 'email',
share_message: 'Hey, check out this item',
recipient: 'friend@gmail.com',
product_id: '507f1f77bcf86cd799439011',
sku: 'G-32',
category: 'Games',
name: 'Monopoly: 3rd Edition',
brand: 'Hasbro',
variant: '200 pieces',
price: 18.99,
});
Segment
Ecommerce: Checkout Steps
analytics.track('Checkout Step Viewed', {
checkout_id: '50314b8e9bcf000000000000',
step: 2,
shipping_method: 'Fedex',
payment_method: 'Visa'
});
Segment
Ecommerce: Reviews
analytics.track('Product Reviewed', {
product_id: '507f1f77bcf86cd799439011',
review_id: 'kdfjrj39fj39jf3',
review_body: 'I love this product',
rating: '5'
});
Segment
Mobile: App Activities
analytics.track("Application Installed", new Properties()
.putValue("version", "1.2.3")
.putValue("build", 1234));
analytics.track("Push Notification Bounced", new Properties()
.putValue("action", "Accept")
.putValue("campaign", new Properties()
.putValue("medium", "Push")
.putValue("source", "Vendor Name")
.putValue("name", "Referral Flow")
.putValue("content", "Your friend invited you to play a match.")));
Segment
Video: Playback Events
analytics.track('Video Content Started', {
session_id: '12345',
asset_id: '0129370',
pod_id: 'segA',
title: 'Interview with Tony Robbins',
description: 'short description',
keywords: ['entrepreneurship', 'motivation'],
season: '2',
episode: '177',
genre: 'entrepreneurship',
program: 'Tim Ferris Show',
publisher: 'Tim Ferris',
position: 0,
total_length: 360,
DEMO
Do you want more?

MONOLOGUE
Segment? Why?

DO NOT FORGET TO ANALYZE
One more thing...

Answers!
Questions?

Bálint Horváth
Thank you,
Frontend Fighters!
August 1, 2017
hi@balint.digital
marketing technology expert

More Related Content

What's hot

What's hot (19)

MPS Enterprise Content Management Solutions
MPS Enterprise Content Management SolutionsMPS Enterprise Content Management Solutions
MPS Enterprise Content Management Solutions
 
Advance Data Visualization and Storytelling Virtual Workshop
Advance Data Visualization and Storytelling Virtual WorkshopAdvance Data Visualization and Storytelling Virtual Workshop
Advance Data Visualization and Storytelling Virtual Workshop
 
Enterprise Architecture vs. Data Architecture
Enterprise Architecture vs. Data ArchitectureEnterprise Architecture vs. Data Architecture
Enterprise Architecture vs. Data Architecture
 
Benefits of the Azure Cloud
Benefits of the Azure CloudBenefits of the Azure Cloud
Benefits of the Azure Cloud
 
Power BI Advanced Data Modeling Virtual Workshop
Power BI Advanced Data Modeling Virtual WorkshopPower BI Advanced Data Modeling Virtual Workshop
Power BI Advanced Data Modeling Virtual Workshop
 
Enable Better Decision Making with Power BI Visualizations & Modern Data Estate
Enable Better Decision Making with Power BI Visualizations & Modern Data EstateEnable Better Decision Making with Power BI Visualizations & Modern Data Estate
Enable Better Decision Making with Power BI Visualizations & Modern Data Estate
 
Slides: Success Stories for Data-to-Cloud
Slides: Success Stories for Data-to-CloudSlides: Success Stories for Data-to-Cloud
Slides: Success Stories for Data-to-Cloud
 
Future of Analytics: Drivers of Change
Future of Analytics: Drivers of ChangeFuture of Analytics: Drivers of Change
Future of Analytics: Drivers of Change
 
Transforming Business for the Digital Age (Presented by Microsoft)
Transforming Business for the Digital Age (Presented by Microsoft)Transforming Business for the Digital Age (Presented by Microsoft)
Transforming Business for the Digital Age (Presented by Microsoft)
 
Slides: Relational to NoSQL Migration
Slides: Relational to NoSQL MigrationSlides: Relational to NoSQL Migration
Slides: Relational to NoSQL Migration
 
Data architecture for modern enterprise
Data architecture for modern enterpriseData architecture for modern enterprise
Data architecture for modern enterprise
 
Tools and techniques for predictive analytics
Tools and techniques for predictive analyticsTools and techniques for predictive analytics
Tools and techniques for predictive analytics
 
The Business Value of Big Data
The Business Value of Big DataThe Business Value of Big Data
The Business Value of Big Data
 
Optimize your cloud strategy for machine learning and analytics
Optimize your cloud strategy for machine learning and analyticsOptimize your cloud strategy for machine learning and analytics
Optimize your cloud strategy for machine learning and analytics
 
Slides: Accelerating Queries on Cloud Data Lakes
Slides: Accelerating Queries on Cloud Data LakesSlides: Accelerating Queries on Cloud Data Lakes
Slides: Accelerating Queries on Cloud Data Lakes
 
Traditional BI vs. Business Data Lake – A Comparison
Traditional BI vs. Business Data Lake – A ComparisonTraditional BI vs. Business Data Lake – A Comparison
Traditional BI vs. Business Data Lake – A Comparison
 
Big Data Analytics on the Cloud
Big Data Analytics on the CloudBig Data Analytics on the Cloud
Big Data Analytics on the Cloud
 
IBM Governed Data Lake
IBM Governed Data LakeIBM Governed Data Lake
IBM Governed Data Lake
 
Case Study - Spotad: Rebuilding And Optimizing Real-Time Mobile Adverting Bid...
Case Study - Spotad: Rebuilding And Optimizing Real-Time Mobile Adverting Bid...Case Study - Spotad: Rebuilding And Optimizing Real-Time Mobile Adverting Bid...
Case Study - Spotad: Rebuilding And Optimizing Real-Time Mobile Adverting Bid...
 

Similar to When you need more data in less time...

CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
Ciklum Ukraine
 

Similar to When you need more data in less time... (20)

Magento Indexes
Magento IndexesMagento Indexes
Magento Indexes
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
 
Relevance trilogy may dream be with you! (dec17)
Relevance trilogy  may dream be with you! (dec17)Relevance trilogy  may dream be with you! (dec17)
Relevance trilogy may dream be with you! (dec17)
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Viadeo - The Kasper way
Viadeo - The Kasper wayViadeo - The Kasper way
Viadeo - The Kasper way
 
Simplify Feature Engineering in Your Data Warehouse
Simplify Feature Engineering in Your Data WarehouseSimplify Feature Engineering in Your Data Warehouse
Simplify Feature Engineering in Your Data Warehouse
 
Agile Data Science 2.0 - Big Data Science Meetup
Agile Data Science 2.0 - Big Data Science MeetupAgile Data Science 2.0 - Big Data Science Meetup
Agile Data Science 2.0 - Big Data Science Meetup
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIs
 
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
AWS November Webinar Series - Advanced Analytics with Amazon Redshift and the...
 
Agile Data Science
Agile Data ScienceAgile Data Science
Agile Data Science
 
Agile Data Science 2.0: Using Spark with MongoDB
Agile Data Science 2.0: Using Spark with MongoDBAgile Data Science 2.0: Using Spark with MongoDB
Agile Data Science 2.0: Using Spark with MongoDB
 
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...To Study The Tips Tricks  Guidelines Related To Performance Tuning For  N Hib...
To Study The Tips Tricks Guidelines Related To Performance Tuning For N Hib...
 
70562 (1)
70562 (1)70562 (1)
70562 (1)
 
Incident Response: Preparing and Simulating Threat Response
Incident Response: Preparing and Simulating Threat ResponseIncident Response: Preparing and Simulating Threat Response
Incident Response: Preparing and Simulating Threat Response
 
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
[Hands-on] CQRS(Command Query Responsibility Segregation) 와 Event Sourcing 패턴 실습
 
CQRS and Event Sourcing
CQRS and Event Sourcing CQRS and Event Sourcing
CQRS and Event Sourcing
 
IT Assets Outage Predictive Analytics
IT Assets Outage Predictive AnalyticsIT Assets Outage Predictive Analytics
IT Assets Outage Predictive Analytics
 
Agile Data Science 2.0
Agile Data Science 2.0Agile Data Science 2.0
Agile Data Science 2.0
 

Recently uploaded

Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
amitlee9823
 
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get CytotecAbortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Riyadh +966572737505 get cytotec
 
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
karishmasinghjnh
 
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
amitlee9823
 
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
amitlee9823
 
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
amitlee9823
 
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night StandCall Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
amitlee9823
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
amitlee9823
 
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
gajnagarg
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
gajnagarg
 
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
amitlee9823
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
amitlee9823
 
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
gajnagarg
 
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
amitlee9823
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
amitlee9823
 

Recently uploaded (20)

Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service BangaloreCall Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
Call Girls Begur Just Call 👗 7737669865 👗 Top Class Call Girl Service Bangalore
 
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get CytotecAbortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get Cytotec
 
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
 
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Thane West Call On 9920725232 With Body to body massage...
 
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
 
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
 
Discover Why Less is More in B2B Research
Discover Why Less is More in B2B ResearchDiscover Why Less is More in B2B Research
Discover Why Less is More in B2B Research
 
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Saket (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night StandCall Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Attibele ☎ 7737669865 🥵 Book Your One night Stand
 
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
Vip Mumbai Call Girls Marol Naka Call On 9920725232 With Body to body massage...
 
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bellandur ☎ 7737669865 🥵 Book Your One night Stand
 
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
Just Call Vip call girls roorkee Escorts ☎️9352988975 Two shot with one girl ...
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
 
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
Escorts Service Kumaraswamy Layout ☎ 7737669865☎ Book Your One night Stand (B...
 
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Rabindra Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Rabindra Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
 
DATA SUMMIT 24 Building Real-Time Pipelines With FLaNK
DATA SUMMIT 24  Building Real-Time Pipelines With FLaNKDATA SUMMIT 24  Building Real-Time Pipelines With FLaNK
DATA SUMMIT 24 Building Real-Time Pipelines With FLaNK
 
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
Just Call Vip call girls kakinada Escorts ☎️9352988975 Two shot with one girl...
 
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
Call Girls Jalahalli Just Call 👗 7737669865 👗 Top Class Call Girl Service Ban...
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
 

When you need more data in less time...

  • 1. Bálint Horváth marketing technology expert When you need more data in less time... FRONTEND FIGHTERS August 1, 2017 hi@balint.digital
  • 2. Bálint Horváth marketing technology expert When you need more data in less time... FRONTEND FIGHTERS August 1, 2017 hi@balint.digital
  • 4. Business Agility: Lexically Agile Business Business agility is the "ability of a business system to rapidly respond to change by adapting its initial stable configuration". Business agility can be maintained by maintaining and adapting goods and services to meet customer demands, adjusting to the changes in a business environment and taking advantage of human resources. (Wikipedia) BLAH BLAH BLAH BLAH BLAH BLAHBLAH BLAH
  • 5. Business Agility: Practically Agile Business  Customer-centric  Rapidly respond to change  Good team behind (satisfied employees)  Innovative  Well-planned Well-timed  Effective at Risk Management
  • 6. Business Agility  Data-driven Business Collect data before you drive...           
  • 7. Data-driven Business  Data-driven People It's a way of thinking...  Intuitive   Data-driven  
  • 8. Data-driven Business  Tracking To get data, we need to track  Contact Information Interactions Context Cart B2B B2C / RETAIL Interactions Contact Information Lead Data Customer Data Product Personal Email Address Add Item Company eBook Seen Added to Wishlist Share Age Sex Device Referral IP OS Resolution LocationISP Campaign Seen Downloaded Title Lead Level Quotes  Last Login
  • 11. Track: The Challange What's the issue? We want to Ghostery: cnn.com - track many interactions - inspect the whole journey - inspect from different aspects - integrate quickly and smoothly
  • 13. Toys: Tag Managers Tag Managers Google Tag Manager  Web-only  No API  No data storage  No history
  • 14. Toys: Segment Segment  Cross-platform  Raw Data Access  Advanced API  Historical
  • 15. Segment: Tracking Stack Google Analytics Keen IO Mixpanel Amazon Redshift Postgres BigQuery RDS Heroku    Source Warehouse Destination
  • 16. <script type="text/javascript"> (function(){ // Create a queue, but don't obliterate an existing one! var analytics = window.analytics = win- dow.analytics || []; // If the real analytics.js is already on the page return. if (analytics.initialize) return; // If the snippet was invoked already show an error. if (analytics.invoked) { if (window.console && console.error) { console.error('Segment snippet included twice.'); } return; } // Invoked flag, to make sure the snippet // is never invoked twice. analytics.invoked = true; // A list of the methods in Analytics.js to stub. analytics.methods = [ 'trackSubmit', 'trackClick', 'trackLink', 'trackForm', 'pageview', 'identify', 'reset', 'group', 'track', 'ready', 'alias', 'debug', 'page', 'once', 'off', 'on' ]; // Define a factory to create stubs. These are placeholders // for methods in Analytics.js so that you never have to wait // for it to load to actually record data. The `method` is // stored as the first argument, so we can replay the data. analytics.factory = function(method){ return function(){ var args = Array.prototype.slice.call(ar- guments); args.unshift(method); analytics.push(args); return analytics; }; }; // For each of our methods, generate a queueing stub. for (var i = 0; i < analytics.methods.length; i++) { var key = analytics.methods[i]; analytics[key] = analytics.factory(key); } // Define a method to load Analytics.js from our CDN, // and that will be sure to only ever load it once. analytics.load = function(key){ // Create an async script element based on your key. var script = document.createEle- ment('script'); script.type = 'text/javascript'; script.async = true; script.src = ('https:' === document.loca- tion.protocol ? 'https://' : 'http://') + 'cdn.segment.com/analytics.js/v1/' + key + '/analytics.min.js'; // Insert our script next to the first script element. var first = document.getElementsBy- TagName('script')[0]; first.parentNode.insertBefore(script, first); }; // Add a version to keep track of what's in the wild. analytics.SNIPPET_VERSION = '4.0.0'; // Load Analytics.js with your key, which will automatically // load the tools you've enabled for your account. Boosh! analytics.load("YOUR_WRITE_KEY"); // Make the first page call to load the inte- grations. If // you'd like to manually name or tag the page, edit or // move this call however you'd like. analytics.page(); })(); </script> SOURCES Segment
  • 18. Segment: Web JavaScript analytics.identify('f4ca124298', { name: 'Michael Bolton', email: 'mbolton@initech.com' }); analytics.js <script type="text/javascript"> !function(){var analytics=window.analytics=window.analytics||[]; ...} analytics.load("YOUR_WRITE_KEY"); analytics.page(); }}(); </script> Configure Identify analytics.identify('{{ user.id }}', { name: '{{ user.fullname }}', email: '{{ user.email }}' }); Track analytics.track('Article Completed', { title: 'How to Create a Tracking Plan', course: 'Intro to Analytics', }); analytics.page('Pricing', { title: 'Segment Pricing', url: 'https://segment.com/pricing', path: '/pricing', referrer: 'https://segment.com/warehouses' });
  • 19. Segment: Web AMP <amp-analytics type="segment"> <script type="application/json"> { "vars": { "writeKey": "WRITE_KEY", "name": "My Page Name" } } </script> </amp-analytics> amp-analytics <script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"> </script> Install Track <amp-analytics type="segment"> <script type="application/json"> { "vars": { "writeKey": "WRITE_KEY" } "triggers": { "click": { "on": "click", "selector": ".read-more-button", "request": "track", "vars": { "event": "Read More Clicked" } } } } </script> </amp-analytics>
  • 20. Segment: Web PHP Segment::identify(array( "userId" => "2sfjej334", "traits" => array( "email" => $user->email, "name" => $user->name, "friends" => 25 ) )); segmentio/analytics-php composer require segmentio/analytics-php Configure Track Segment::track(array( "userId" => "f4ca124298", "event" => "Article Bookmarked", "properties" => array( "title" => "Snow Fall", "subtitle" => "The Avalanche at Tunnel Creek", "author" => "John Branch" ) )); Identify
  • 21. Segment: Web Laravel (3rd-Party) 'providers' => [ // ... 'CachetHQSegmentSegmentServiceProvider' ] cachethq/segment composer require cachethq/segment Configure Track Segment::track([ "userId" => "uuid12345", "event" => "Signed up", "properties" => [ "newsletter" => true ] ]); 'aliases' => [ // ... 'Segment' => 'CachetHQSegmentFacadesSegment' ] php artisan vendor:publish Segment::identify([ "userId" => "12345abcde", "traits" => [ "name" => "James Brooks", "email" => "test@test.com", ] ]); Identify
  • 22. Segment: Web Node.js analytics.identify({ userId: '019mr8mf4r', traits: { name: 'Michael Bolton', email: 'mbolton@initech.com', plan: 'Enterprise', friends: 42 } }); analytics-node npm install --save analytics-node Configure Identify Track analytics.track({ userId: '019mr8mf4r', event: 'Item Purchased', properties: { revenue: 39.95, shippingMethod: '2-day' } }); var Analytics = require('analytics-node'); var analytics = new Analytics('YOUR_WRITE_KEY');
  • 23. Segment: Web HTTP (IN GENERAL) { "userId": "019mr8mf4r", "traits": { "email": "pgibbons@initech.com", "name": "Peter Gibbons", "industry": "Technology" }, "context": { "ip": "24.5.68.47" }, "timestamp": "2012-12-02T00:30:08.276Z" } HTTP POST https://api.segment.io/v1/identify Identify POST https://api.segment.io/v1/track { "userId": "019mr8mf4r", "event": "Item Purchased", "properties": { "name": "Leap to Conclusions Mat", "revenue": 14.99 }, "context": { "ip": "24.5.68.47" }, "timestamp": "2012-12-02T00:30:12.984Z" } Track
  • 25. Segment: Mobile Android com.segment.analytics.android:analytics dependencies { compile 'com.segment.analytics.android:analytics:4.+' } Configure Identify // Initially when you only know the user's name Analytics.with(context).identify(new Traits().putName("Michael Bolton")); // Sometime later in your app when the user gives you their email Analytics.with(context).identify(new Traits().putEmail("mbolton@initech.com")); // Create an analytics client with the given context and Segment write key. Analytics analytics = new Analytics.Builder(context, YOUR_WRITE_KEY) .trackApplicationLifecycleEvents() // Enable this to record certain application events automatically! .recordScreenViews() // Enable this to record screen views automatically! .build(); // Set the initialized instance as a globally accessible instance. Analytics.setSingletonInstance(analytics); Initialize Analytics.with(context) .track("Purchased Item", new Properties().putValue("sku", "13d31").putRevenue(199.99) ); Track
  • 26. Segment: Mobile Android Wear com.segment.analytics.android:wear compile('com.segment.analytics.android:wear:+@aar') { transitive = true } Configure Track analytics.track("Viewed Product", new Properties() .putValue("name", "Moto 360")); analytics.track("Purchased Item", new Properties() .putValue("sku", "13d31") .putRevenue(199.99));WearAnaytics analytics = WearAnalytics.with(context); Initialize <application ...> <service android:name="com.segment.analytics.PhoneAnalyticsListenerService"> <intent-filter> <action android:name="com.google.android.gms.wearable.BIND_LISTENER" /> </intent-filter> </service> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> AndroidManifest.xml PhoneAnalyticsListenerService
  • 27. Segment: Mobile iOS (OBJECTIVE-C) SEGAnalytics pod 'Analytics', '~> 3.0' Install(via CocoaPods) Identify [[SEGAnalytics sharedAnalytics] identify:@"a user's id" traits:@{ @"email": @"a user's email address" }]; SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration con- figurationWithWriteKey:@"YOUR_WRITE_KEY"]; configuration.trackApplicationLifecycleEvents = YES; // Enable this to record certain application events automatically! configuration.recordScreenViews = YES; // Enable this to record screen views automatically! [SEGAnalytics setupWithConfiguration:configuration]; Delegate [[SEGAnalytics sharedAnalytics] track:@"Item Purchased" properties:@{ @"item": @"Sword of Heracles", @"revenue": @2.95 }]; Track - application:didFinishLaunchingWithOptions: Import #import <Analytics/SEGAnalytics.h> Carthage: github "segmentio/analytics-ios"
  • 28. Segment: Mobile iOS (SWIFT) AnalyticsSwift use_frameworks! pod 'AnalyticsSwift', '~> 0.2.0' Install(via Cocoapods) Configure var message = TrackMessageBuilder(event: "Button A").userId("prateek") analytics.enqueue(message) analytics.flush() Track AnalyticsSwift library to project, then: import AnalyticsSwift var analytics = Analytics.create(YOUR_SEGMENT_WRITE_KEY_HERE) @IBAction func homeScreenClicked(sender: NSButton) { analytics.enqueue(ScreenMessageBuilder(name: "Home").userId("prateek")) } Not recommended, use SEGAnalytics instead... (with Objective-C bridging header)
  • 29. Segment: Mobile Xamarin Analytics.Xamarin git clone https://github.com/segmentio/Analytics.Xamarin.git Configure Identify Analytics.Client.Identify("019mr8mf4r", new Traits() { { "name", "Tom Smykowski" }, { "email", "tom@initech.com" }, { "friends", 29 } });using Segment; // initialize with your Segment source write key ... Analytics.Initialize("YOUR_WRITE_KEY"); Initialize Analytics.Client.Track("019mr8mf4r", "Item Purchased", new Properties() { { "revenue", 39.95 }, { "shipping", "2-day" } }); Track
  • 31. Segment: Whatever Go client.Identify(&analytics.Identify{ UserId: "019mr8mf4r", Traits: map[string]interface{}{ "name": "Michael Bolton", "email": "mbolton@initech.com", "plan": "Enterprise", "friends": 42, }, }) segmentio/analytics-go go get github.com/segmentio/analytics-go Configure Identify Track client.Track(&analytics.Track{ Event: "Signed Up", UserId: "f4ca124298", Properties: map[string]interface{}{ "plan": "Enterprise", }, }) var Analytics = require('analytics-node'); var analytics = new Analytics('YOUR_WRITE_KEY'); package main import "github.com/segmentio/analytics-go" func main() { client := analytics.New("YOUR_WRITE_KEY") }
  • 32. Segment: Whatever Ruby Analytics.identify( user_id: '019mr8mf4r', traits: { email: "#{ user.email }", friends: 872 }, context: {ip: '8.8.8.8'}) analytics-ruby gem install analytics-ruby Configure Identify Track Analytics.track( user_id: '019mr8mf4r', event: 'Item Purchased', properties: { revenue: 39.95, shipping: '2-day' }) require 'segment/analytics' Analytics = Segment::Analytics.new({ write_key: 'YOUR_WRITE_KEY', on_error: Proc.new { |status, msg| print msg } })
  • 33. Segment: Whatever Python analytics.identify('019mr8mf4r', { 'email': 'john@example.com', 'name': 'John Smith', 'friends': 30 }) analytics-ruby pip install analytics-python Configure Identify Track analytics.track('f4ca124298', 'Signed Up', { 'plan': 'Enterprise' }) import analytics analytics.write_key = 'YOUR_WRITE_KEY'
  • 34. DEMO show tha f#&@ software 
  • 36. Segment Identify { "anonymousId": "507f191e810c19729de860ea", "channel": "browser", "context": { "ip": "8.8.8.8", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) Ap- pleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safa- ri/537.36" }, "integrations": { "All": false, "Mixpanel": true, "Salesforce": true }, "messageId": "022bb90c-bbac-11e4-8dfc-aa07a5b093db", "receivedAt": "2015-02-23T22:28:55.387Z", "sentAt": "2015-02-23T22:28:55.111Z", "timestamp": "2015-02-23T22:28:55.111Z", "traits": { "name": "Peter Gibbons", "email": "peter@initech.com", "plan": "premium", "logins": 5, "address": { "street": "6th St", "city": "San Francisco", "state": "CA", "postalCode": "94103", "country": "USA" } }, "type": "identify", "userId": "97980cfea0067", "version": "1.1" } { "type": "identify", "traits": { "name": "Peter Gibbons", "email": "peter@initech.com", "plan": "premium", "logins": 5 }, "userId": "97980cfea0067" }
  • 37. Segment Ecommerce: Coupon analytics.track('Coupon Entered', { order_id: '50314b8e9bcf000000000000', cart_id: '923923929jd29jd92dj9j93fj3' coupon_id: 'may_deals_2016' }); analytics.track('Coupon Applied', { order_id: '50314b8e9bcf000000000000', cart_id: '923923929jd29jd92dj9j93fj3' coupon_id: 'may_deals_2016', coupon_name: 'May Deals 2016', discount: 23.32 });
  • 38. Segment Track { "type": "track", "event": "Registered", "properties": { "plan": "Pro Annual", "accountType" : "Facebook" } }
  • 39. Segment Page { "type": "page", "name": "Home", "properties": { "title": "Welcome | Initech", "url": "http://www.initech.com" } }
  • 40. Segment Ecommerce: Product List View analytics.track('Product List Viewed', { list_id: 'hot_deals_1', category: 'Deals', products: [ { product_id: '507f1f77bcf86cd799439011', sku: '45790-32', name: 'Monopoly: 3rd Edition', price: 19, position: 1, category: 'Games' }, { product_id: '505bd76785ebb509fc183733',
  • 41. Segment Ecommerce: Wishlist analytics.track('Product Added to Wishlist', { wishlist_id: 'skdjsidjsdkdj29j', wishlist_name: 'Loved Games', product_id: '507f1f77bcf86cd799439011', sku: 'G-32', category: 'Games', name: 'Monopoly: 3rd Edition', brand: 'Hasbro', variant: '200 pieces', price: 18.99, quantity: 1, coupon: 'MAYDEALS', position: 3 });
  • 42. Segment Ecommerce: Product Share analytics.track('Product Shared', { share_via: 'email', share_message: 'Hey, check out this item', recipient: 'friend@gmail.com', product_id: '507f1f77bcf86cd799439011', sku: 'G-32', category: 'Games', name: 'Monopoly: 3rd Edition', brand: 'Hasbro', variant: '200 pieces', price: 18.99, });
  • 43. Segment Ecommerce: Checkout Steps analytics.track('Checkout Step Viewed', { checkout_id: '50314b8e9bcf000000000000', step: 2, shipping_method: 'Fedex', payment_method: 'Visa' });
  • 44. Segment Ecommerce: Reviews analytics.track('Product Reviewed', { product_id: '507f1f77bcf86cd799439011', review_id: 'kdfjrj39fj39jf3', review_body: 'I love this product', rating: '5' });
  • 45. Segment Mobile: App Activities analytics.track("Application Installed", new Properties() .putValue("version", "1.2.3") .putValue("build", 1234)); analytics.track("Push Notification Bounced", new Properties() .putValue("action", "Accept") .putValue("campaign", new Properties() .putValue("medium", "Push") .putValue("source", "Vendor Name") .putValue("name", "Referral Flow") .putValue("content", "Your friend invited you to play a match.")));
  • 46. Segment Video: Playback Events analytics.track('Video Content Started', { session_id: '12345', asset_id: '0129370', pod_id: 'segA', title: 'Interview with Tony Robbins', description: 'short description', keywords: ['entrepreneurship', 'motivation'], season: '2', episode: '177', genre: 'entrepreneurship', program: 'Tim Ferris Show', publisher: 'Tim Ferris', position: 0, total_length: 360,
  • 47. DEMO Do you want more? 
  • 49. DO NOT FORGET TO ANALYZE One more thing... 
  • 51. Bálint Horváth Thank you, Frontend Fighters! August 1, 2017 hi@balint.digital marketing technology expert