Skip to content

Instantly share code, notes, and snippets.

@jiulongw
jiulongw / skia_path_bug.cc
Last active April 20, 2021 23:34
Skia path diff bug
// https://fiddle.skia.org/c/f50f0772647b08f410f0600f2e72471e
SkPath getSrcPath() {
SkPath path;
path.setFillType(SkPathFillType::kWinding);
path.moveTo(SkBits2Float(0x454c5562), SkBits2Float(0x44c0822e)); // 3269.34f, 1540.07f
path.lineTo(SkBits2Float(0x454c5e0f), SkBits2Float(0x44c0ba4a)); // 3269.88f, 1541.82f
path.quadTo(SkBits2Float(0x454c66d0), SkBits2Float(0x44c0f2e4), SkBits2Float(0x454c6c06), SkBits2Float(0x44c11718)); // 3270.43f, 1543.59f, 3270.75f, 1544.72f
path.quadTo(SkBits2Float(0x454c716b), SkBits2Float(0x44c13c81), SkBits2Float(0x454c7506), SkBits2Float(0x44c160fd)); // 3271.09f, 1545.89f, 3271.31f, 1547.03f
path.quadTo(SkBits2Float(0x454c78ae), SkBits2Float(0x44c18600), SkBits2Float(0x454c7a00), SkBits2Float(0x44c1a8ce)); // 3271.54f, 1548.19f, 3271.62f, 1549.28f
@jiulongw
jiulongw / dump_stream_records.py
Created July 25, 2019 23:39
Dump records from DynamoDB stream
#!/usr/bin/env python
import boto3
import os
import json
STREAM_ARN = 'YOUR_DB_STREAM_ARN'
client = boto3.client('dynamodbstreams')
stream = client.describe_stream(StreamArn=STREAM_ARN)
BOARD=vibe-eng VERSION=codebuild-test FASTBUILD=1 ISFULLIMAGE=1 OTAPACKAGE=0 ./vibe_build.sh
Packaging...step 1: remove images last build.
Packaging...step 2: copy the images and mkupdate.
start to make update.img...
Android Firmware Package Tool v1.62
------ PACKAGE ------
Error:<ParseParamFile> open file failed,err=20!
------ FAILED ------
Press any key to quit:
/home/jiulongw/w/vibe-rk3399-tpv/rk3399_nougat_release
cp: cannot stat 'RKTools/linux/Linux_Pack_Firmware/rockdev/update.img': No such file or directory
@jiulongw
jiulongw / gist:b487afb237ae2990d89ef7a65d2d2cc2
Created November 21, 2018 01:30
Upload board exported pdf
// Uncomment below to upload file.
// body := &bytes.Buffer{}
// writer := multipart.NewWriter(body)
// file, err := writer.CreateFormFile("file", "board.pdf")
// if err != nil {
// return response.Error(err)
// }
// if _, err := io.Copy(file, bytes.NewReader(pdf)); err != nil {
// return response.Error(err)
@jiulongw
jiulongw / rename.sh
Last active October 21, 2018 04:05
Renames
find . -type f -name "*.js" | xargs sed -i.bak "s/room/channel/g"
find . -type f -name "*.js" | xargs sed -i.bak "s/Room/Channel/g"
find . -type f -name "*.js" | xargs sed -i.bak "s/ROOM/CHANNEL/g"
find . -type f -name "*.css" | xargs sed -i.bak "s/room/channel/g"
find . -type f -name "*.css" | xargs sed -i.bak "s/Room/Channel/g"
find . -type f -name "*.css" | xargs sed -i.bak "s/ROOM/CHANNEL/g"
find . -type f -name "*.js" | xargs sed -i.bak "s/account/user/g"
find . -type f -name "*.js" | xargs sed -i.bak "s/Account/User/g"
find . -type f -name "*.js" | xargs sed -i.bak "s/ACCOUNT/USER/g"
find . -type f -name "*.css" | xargs sed -i.bak "s/account/user/g"
@jiulongw
jiulongw / player-wechat.js
Created August 26, 2018 06:03
play video when scrolled to w/ wechat browser support
(function($, document, window) {
var ua = navigator.userAgent.toLowerCase();
var isWechat = ua.indexOf("micromessenger") >= 0;
var Player = function(videos) {
this.init(videos);
};
Player.prototype.init = function(videos) {
this.videos = [];
@jiulongw
jiulongw / auto-play-with-scroll
Last active August 9, 2018 01:11
auto play mobile videos
(function($, document, window) {
var Player = function(videos) {
this.init(videos);
};
Player.prototype.init = function(videos) {
this.videos = [];
videos.each($.proxy(function(i, el) {
var $el = $(el);
{"sig":"00268e07037afa67e6f2a3479a313bb80ba1cee8cab59e8671de0d9f90aa75c7306442d3537909ddc530df720573b5193f1e848332c829fdd5706b7a703c89370","msghash":"26643ebd0e6468cc3ad087cca702c08c76cd9225432451c0e10ce1562f651415"}
@jiulongw
jiulongw / a.kt
Last active December 21, 2017 06:20
Backup of experiment code Kotlin Drawing with variable width stroke
class Stroke(val start: Segment) {
data class Segment(val point: PointF, val width: Float, val direction: PointF)
private val vertices = ArrayList<Float>()
fun addPoint(point: PointF, width: Float) {
if (vertices.isEmpty()) {
start.direction.set(direction(start.point, point))
val (a, b) = edgeOf(start.point, start.direction, start.width)
vertices.add(a.x)