Skip to content

Instantly share code, notes, and snippets.

@yuki-takeichi
yuki-takeichi / set-hostname.patch
Created July 13, 2016 06:06
Configuring FQDN for GCE instance
diff -Naur before/usr/share/google/set-hostname after/usr/share/google/set-hostname
--- before/usr/share/google/set-hostname 2016-03-16 18:30:48.000000000 +0900
+++ after/usr/share/google/set-hostname 2016-03-16 18:34:57.000000000 +0900
@@ -14,6 +14,9 @@
# Deal with a new hostname assignment.
+# *** The below line is added by patching. ***
+new_host_name=$(curl --fail --silent http://metadata/computeMetadata/v1/instance/attributes/hostname -H "Metadata-Flavor: Google")
+
@yuki-takeichi
yuki-takeichi / papertrail-logfilter
Created August 12, 2016 03:58
papertrail-logfilter
#! /bin/bash
# extracts a log file for a specified host from Papertrail tsv file
HOSTNAME=$1
FILENAME=$2
TSVFILE=$3
awk -F '\t' "{if (\$5 == \"$HOSTNAME\" && \$9 == \"$FILENAME\") print \$10}" $TSVFILE
@yuki-takeichi
yuki-takeichi / metadata.js
Created September 9, 2016 06:56
GCP metadata server long polling
// https://cloud.google.com/compute/docs/storing-retrieving-metadata#waitforchange
// curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/hoge?wait_for_change=true" -H "Metadata-Flavor: Google"
const http = require('http');
function longPollMetadataServer(path) {
return new Promise((resolve, reject) => {
http.get({
hostname: "metadata.google.internal",
@yuki-takeichi
yuki-takeichi / times.js
Created May 31, 2017 04:54
なるべく同時実行されないようにrandomにdelayさせる
const tries = 10000;
const trial = 30;
// in ms
const consumption = 30;
const concurrency = 3;
//const delay = 19185; // 50%ぐらい in 20 conc
//const delay = 4000; // 50%ぐらい in 10 conc
//const delay = 10000; // 5%ぐらい in 5 conc
@yuki-takeichi
yuki-takeichi / emoji.c
Created December 15, 2017 13:22
Vertical Text Rendering with OpenType Color Emoji
#include <stdio.h>
#include <math.h>
#include <pango/pangocairo.h>
int main ()
{
cairo_t *cr;
cairo_status_t status;
cairo_surface_t *surface;
@yuki-takeichi
yuki-takeichi / awaitall.js
Last active May 13, 2018 06:39
JS AwaitAll is all what we want.
const timeout = ms =>
new Promise((resolve, reject) => setTimeout(() => resolve(), ms));
async function f() {
await timeout(500);
return 'f';
}
async function g() {
await timeout(1000);
const net = require('net');
const server = net.createServer(c => {
c.setEncoding('ascii');
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.on('data', data => {
//console.log(Buffer.from(data, 'ascii'));
console.log(data);
@yuki-takeichi
yuki-takeichi / how-to-impl-emoji.md
Last active June 24, 2019 02:27
絵文字を実装する (outline)

絵文字を実装する

Intro

絵文字は漢字のような表意文字の一種だ。Unicode上にコードポイントが定義されていて、それに対応するグリフ(フォントファイル上で定義された文字のアウトライン情報)が表示される。そういう意味では通常の文字となんら変わらない。異なるのは、通常の文字はアウトラインフォントというアウトライン情報(ベジエ曲線)を持っているに対して、絵文字はビットマップになっていることと、一般的に絵文字と呼ばれるものは予め色が決まっている文字(カラーグリフ)であるということだ。(これまでの)文字は活版印刷に適した形態として進化してきたが、絵文字は日本の携帯電話のディスプレイ上で表示されることを目的とした文字のため、複雑な字形や多色を利用した文字が特徴の、まさに現代的な表意文字になっている。絵文字ははじめ、日本の携帯電話メーカーがsjisの拡張エリアに定義した文字だったが、初期のiOSではUnicodeのPUAに定義され、最終的にUnicode Emojiとして正式採用され今や世界中の人々が利用するようになった。

絵文字は、人の電子デバイスでのコミュニケーション量が加速度的に増加するのに伴って、またはそれ以上のスピードで、人々のテレコミュニケーションに利用されている。人が表意文字で表現したい対象は年々増加している。表情、職業、食べ物、アクティビティ、目的地、そしてそれらを彩る感情記号、などなど…。多種多様な要求に伴ってUnicode Emojiの規格は年々複雑化しており、iOS/Androidのメジャーバージョンアップとともに毎年内容が更新されている。

Outline

@yuki-takeichi
yuki-takeichi / TwemojiConfig.kt
Created February 6, 2019 03:37
EmojiCompat with custom emoji font
// See also https://android.googlesource.com/platform/frameworks/support/+/android-cts-9.0_r5/emoji/bundled/src/main/java/androidx/emoji/bundled/BundledEmojiCompatConfig.java
class TwemojiConfig(ctx: Context) : EmojiCompat.Config(BundledMetadataLoader(ctx)) {
class BundledMetadataLoader(ctx: Context) : EmojiCompat.MetadataRepoLoader {
private val mContext = ctx.applicationContext
override fun load(cb: EmojiCompat.MetadataRepoLoaderCallback) {
val runnable = InitRunnable(mContext, cb)
val thread = Thread(runnable)
@yuki-takeichi
yuki-takeichi / spinlock_false.cpp
Last active June 22, 2019 16:00
spinlock_false.cpp
#include <cassert>
#include <iostream>
#include <atomic>
#include <thread>
#include <vector>
#include <string>
using namespace std;
atomic_bool l;