Skip to content

Instantly share code, notes, and snippets.

View ddikman's full-sized avatar

David Dikman ddikman

View GitHub Profile
@ddikman
ddikman / retention.sql
Created December 16, 2021 07:07
Monthly total user retention numbers in BigQuery with google analytics
SELECT
last as last_month,
DATETIME_DIFF(last, first, MONTH) as retained_months,
COUNT(*) as users
FROM (
SELECT
DATE(DATE_TRUNC(TIMESTAMP_MICROS(min(event_timestamp)), MONTH)) as first,
DATE(DATE_TRUNC(TIMESTAMP_MICROS(max(event_timestamp)), MONTH)) as last
FROM `<your-project>.events_*`
WHERE event_name = 'view_item'
@ddikman
ddikman / segment-users.sql
Created November 8, 2021 11:23
Example of
SELECT
case user.value.string_value
when '0' then 'Baseline'
when '1' then 'Other version'
else 'Error'
end as experiment_value,
count(distinct(user_pseudo_id)) as users,
count(*) as events,
(count(*) / count(distinct(user_pseudo_id))) as ratio
FROM `<project_name>.analytics_<id>.events_*`,
@ddikman
ddikman / main.dart
Last active October 19, 2021 18:39
Example of floating loader overlay
import 'package:flutter/material.dart';
void main() => runApp(ExampleApp());
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Floating overlay example',
debugShowCheckedModeBanner: false,
@ddikman
ddikman / average_order_price.sql
Created September 27, 2021 14:23
Getting average order price per platform
select
platform,
avg(p.value.double_value) as avg_value,
count(distinct(user_pseudo_id)) as views,
DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp)), MONTH) as month
FROM `<project>.analytics_<id>.events_*`,
unnest(event_params) p
where event_name = 'view_item' and p.key = 'value'
group by month, platform
order by month, platform
@ddikman
ddikman / searches.sql
Created September 26, 2021 13:52
Example of getting an average amount of events per unique user
SELECT
all_users.platform,
all_users.event_date,
views.item_views / all_users.unique_users as searches_per_user
FROM (
SELECT
platform,
count(distinct(user_pseudo_id)) as unique_users,
event_date
FROM `<project-id>.analytics_<id>.events_*`
@ddikman
ddikman / weekly_unique_users.sql
Created September 25, 2021 12:54
Summing unique users in BigQuery and Google Analytics
select
platform,
DATE_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp)), WEEK(SATURDAY)) as week_start,
count(distinct(user_pseudo_id)) as unique_users
FROM `<project-name>.analytics_<id>.events_*`
group by week_start, platform
order by week_start asc
@ddikman
ddikman / routes.dart
Last active September 23, 2021 03:23
Example of feature flagging
void registerRoutes() {
// ...
final useNewArticlePage = isDebugMode == true;
if (useNewArticlePage) {
routing.register(Routes.Article, (context, param) => FixedSizeArticlePage());
} else {
routing.register(Routes.Article, (context, param) => ArticlePage());
}
// ....
}
@ddikman
ddikman / .gitlab-ci.yml
Created September 8, 2021 11:35
Gitlab CI for flutter build with caching packages folder
cache:
paths:
- $CI_PROJECT_DIR/.pub-cache/
build:
image: greycastle/flutter:2.2.3
script:
- export PUB_CACHE=$CI_PROJECT_DIR/.pub-cache
- export PATH="$PATH":"$PUB_CACHE/bin"
- flutter pub get
@ddikman
ddikman / download.sh
Created August 25, 2021 06:23
Bash script to download a list of URLs
#!/bin/bash
# usage:
# chmod +x download.sh
# pbpaste | download.sh
# cat inputfile.txt | download.sh
# thanks to https://stackoverflow.com/a/7045517
while read -r full_url
@ddikman
ddikman / app_root.dart
Created August 16, 2021 12:09
Example of loading remote config, avoiding stale values during testing
_initRemoteConfig(ExperimentalMode experimentalMode) async {
final RemoteConfig remoteConfig = RemoteConfig.instance;
var cacheDuration = Duration(hours: 1);
// allows us to force update the cache even when we exit the experimental mode
if (experimentalMode.isExperimentalMode || experimentalMode.isConfigStale()) {
cacheDuration = Duration(seconds: 0);
}
experimentalMode.setConfigStale(false);
await remoteConfig.setConfigSettings(RemoteConfigSettings(