This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
import os | |
import sys | |
import argparse | |
try: | |
from urllib2 import urlopen | |
except ImportError: | |
from urllib.request import urlopen | |
try: | |
from StringIO import BytesIO |
with lines as | |
(SELECT cartodb_id, color, ord, ST_Segmentize(ST_MakeLine(st_centroid(the_geom), lead(st_centroid(the_geom)) OVER (ORDER BY ord))::geography, 100000)::geometry as the_geom | |
FROM world_borders_four_colors_1_adjacency_list), | |
tosplit AS ( | |
SELECT * FROM lines | |
WHERE ST_XMax(the_geom) - ST_XMin(the_geom) > 180 | |
), | |
nosplit AS ( | |
SELECT * FROM lines | |
WHERE ST_XMax(the_geom) - ST_XMin(the_geom) <= 180 |
# first create a palette of the portion of the video with more colors | |
ffmpeg -y -ss 20 -t 3 -i input.mp4 -vf fps=50,scale=640:-1:flags=lanczos,palettegen palette.png | |
# then use the palette to obtain high quality colors | |
ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=50,scale=640:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif | |
# -ss -> start from second | |
# -t -> duration |
CREATE OR REPLACE FUNCTION adjacency_list(table_name regclass, user_name text) RETURNS void AS $$ | |
BEGIN | |
EXECUTE format('DROP TABLE IF EXISTS %s_adjacency_list; | |
CREATE TABLE %s_adjacency_list AS | |
SELECT DISTINCT a.cartodb_id, | |
array_agg(b.cartodb_id) over (PARTITION BY a.cartodb_id) AS adjacent, | |
count(b.*) over (PARTITION BY a.cartodb_id) AS valence, | |
0 AS color | |
FROM %s a, | |
%s b |
A snippet to make a query to BigQuery and import the result in CARTO using both Python client libraries: | |
``` | |
#!/usr/bin/env python | |
import argparse | |
import time | |
import uuid | |
from tempfile import NamedTemporaryFile |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Reacciones al #AccordDeParis</title> | |
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> | |
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> | |
<link rel="shortcut icon" href="http://cartodb.com/assets/favicon.ico" /> | |
<style> | |
html, body, #map { | |
height: 100%; |
<!DOCTYPE HTML> | |
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | |
<link rel="stylesheet" href="http://libs.cartocdn.com/cartodb.js/v3/3.15/themes/css/cartodb.css" /> | |
<!-- <link rel="stylesheet" href="https://cartodb-libs.global.ssl.fastly.net/cartodb.js/v3/3.15/themes/css/cartodb.css" /> --> | |
<style type="text/css"> | |
html, |
SELECT cartodb_id, ele, time, ST_MAKELINE(the_geom,the_geom2) as the_geom FROM ( | |
SELECT cartodb_id, row_number() OVER w AS ele, time, the_geom, lead(the_geom) OVER w AS the_geom2 | |
FROM TRACK_POINTS WINDOW w AS (PARTITION BY track_fid ORDER BY cartodb_id) ) as q | |
WHERE the_geom2 IS NOT NULL |
insert into SEGMENTED_DATASET SELECT cartodb_id+n, ST_LineSubstring(the_geom, 100.00*n/length, | |
CASE | |
WHEN 100.00*(n+1) < length THEN 100.00*(n+1)/length | |
ELSE 1 | |
END) As the_geom | |
FROM | |
(SELECT TRACK_GPS.cartodb_id, | |
ST_LineMerge(TRACK_GPS.the_geom) AS the_geom, | |
ST_Length(TRACK_GPS.the_geom::geography) As length | |
FROM TRACK_GPS |