広告ブロッカーを乗り換えてみた

こんなツイートが流れてきた.

ずっとAdBlock(Plusではない)を使っていたけれど,特に理由もなかったのでuBlock Originに乗り換えてみた.

細かい速度は測っていないけれど,表示が少し早くなっているように感じた.

AdBlockとUIが違うので,その点慣れるのが難しいところもあるけれどしばらく使っていきたい.

chrome.google.com

英語ネイティブのVTuberという可能性

つい最近,夏実萌恵というバーチャルYouTuberが現れた.

名前は日本人だが英語ネイティブのキャラクターである.

HELP!!! I'm being assaulted by zombies!!! [7 Days To Die Let's Play] - YouTube

動画を見てもらえるとわかるのだが,このキャラクターの動画の大きな特徴は「日本語と英語の字幕が同時に表示されること」である.

一切日本語を喋っていないのにもかかわらず,2つの字幕のおかげでするする見ることができてしまう.

さらに動画のコメント欄を見ると英語のコメントが多く,本来のターゲットにも届いている雰囲気を感じる.

よく考えてみると日本語を喋っている動画でも日本語字幕が付いていると楽だし,英語圏の人はこのキャラクターに対して同じように感じているのかもしれない.

そういえばつい最近こんな話題も見かけていた.

映画館でも,音声が英語で,字幕も英語,というのをやってくれたらよいと思う.

英語やってる - hitode909の日記

日本語字幕はプロの字幕なわけで、意味合いが遠くならないように翻訳されているはずで、見比べたいという気持ちもあり、上下に日本語と英語を並べたりしたい。

■ - hogashi.*

英語を知るという意味でもこれは面白い動画なんじゃないかと思った.

二ヶ国語の同時字幕という意味だとTEDを使ったものがあるけれど,気軽に見る題材としては少し重いかなぁという印象.

なので,こういうエンターテインメントの分野で出てくると見やすくていいと思ったし,需要はあると思う.

チャンネルはこちら.

www.youtube.com

決意

someday... you gotta learn when to QUIT. and that day's TODAY.
Sans - Undertale

今,数年振りに下ではなく前を向けるようになった気がする.

案外不安も無いし,むしろこれからのことが楽しみでしょうがない.

恩以外にも返すべきものは沢山あるし,その先さらに与える側の人間になっていきたい.

そこまで自分のペースではどれくらいの時間が掛かるかわからないけれど,ここに決意表明することにする.

Vティーク買った

コンプティーク9月号増刊 Vティーク

コンプティーク9月号増刊 Vティーク

ENTUM,にじさんじ,シロ,ときのそらを始めとした人気のVTuberのインタビューが多数掲載されていて非常に良かった.

動画投稿が多いVTuberなんかは特に「どこに向かっているのか」とか「何を考えているのか」というのが本人の口から出てくることはあまりないので新鮮.

VTuberの数が増えてきて「存在は知っているけれど見たことない」という状態の人が多くなってきたけれど,ページとして見やすく魅力がまとまっていると短時間で知ることができて便利だと感じた. 動画だと短時間で魅力を知るというのは難しいし(生放送主体ならなおさら),雑誌媒体の利点を感じた.

好きなVTuberの事をもっと知りたい人や,新しいVTuberを知りたい人どちらにもおすすめできる雑誌だと思った.

Lambdaを使って特定サイトのはてなブックマーク総数と増加数をSlackに通知する

6/14にはてなブックマークのブクマ数取得APIが公開された.

特定のサイトに対する合計ブックマーク数を取得する API を実験的に公開します - はてなブックマーク開発ブログ

ブックマーク総数が取得できるということで,例えば「ブログのブクマ数が今日どのくらい増えたのか」を確認できると便利だと思い作ってみた. ブクマ総数前回の実行時からどのくらい増加したかを通知してくれる. f:id:cohalz:20180616163803p:plain

CloudWatch Eventsでeventにbookmark_urlslack_urlを渡すことを想定している.

import boto3
import os
import json
import urllib.request
import re

def lambda_handler(event, context):
    bookmark_url = event['bookmark_url']
    message = bookmark_url + ' のブックマーク総数: '
    total_count = get_total_count(bookmark_url)
    total = total_count['total_bookmarks']
    env_key = re.sub(r'^[^a-zA-Z]|[^a-zA-Z0-9\_]', '', bookmark_url)
    
    prev_tmp = os.getenv(env_key)
    if prev_tmp != None:
        prev_total = int(prev_tmp)
        message  += str(total) + '(' + get_delta_str(total, prev_total) + ')'
        if total != prev_total:
            update_variables(env_key, total, context.function_name)
    else:
        message += str(total)
        update_variables(env_key, total, context.function_name)
    
    print(message)
    post_to_slack(event['slack_url'], message)

    return total_count
    
def get_total_count(bookmark_url):
    params = urllib.parse.urlencode({'url': bookmark_url})
    api_url = 'http://api.b.st-hatena.com/entry.total_count?' + params
    
    with urllib.request.urlopen(api_url) as response:
        return json.loads(response.read().decode('utf-8'))

def update_variables(env_key, total, function_name):
    env = {}
    for key, value in os.environ.items():
        if key.startswith('http'):
            env[key] = value
    env[env_key] = str(total)

    client = boto3.client('lambda')

    return client.update_function_configuration(
        FunctionName=function_name,
        Environment={
            'Variables': env
        })

def post_to_slack(slack_url, text):
    json_data = json.dumps({'text': text}).encode('utf-8')
    request = urllib.request.Request(slack_url, data=json_data, method='POST')
    with urllib.request.urlopen(request) as response:
        return response.read().decode('utf-8')

def get_delta_str(x, y):
    delta = x - y
    if delta >= 0:
        return '+' + str(delta)
    else:
        return str(delta)

前回の状態をLambdaに記憶させるために,AWS SDK経由で環境変数に書き込む方法を取った. 環境変数を使うことで別のサービスに依存しない簡易的なKVSとして扱える.

ただし,環境変数に使える文字は限られているのでkeyを工夫する必要がある.

env_key = re.sub(r'^[^a-zA-Z]|[^a-zA-Z0-9\_]', '', bookmark_url)

docs.aws.amazon.com

また,環境変数の変更にはLambdaに対してlambda:UpdateFunctionConfigurationの権限追加が必要になる.

LambdaおよびCloudWatch Eventsで定期実行するためのCloudFormationテンプレートはこちらから. github.com

IFTTTを使ってSwitchのSNS投稿をGoogleフォトにアップロードする

手順はこちら

  1. IFTTTからTwitterを選ぶ

  2. New tweet by you with hashtagを選び #NintendoSwitch を入力f:id:cohalz:20180527001758p:plain

  3. 連携先からGoogle Photosを選び,投稿するアルバム名を入力してPhoto URLに {{FirstLinkUrl}} を入力 f:id:cohalz:20180527002042p:plain

  4. Finishを押せば連携完了

これでSNS投稿をすると自動でGoogleフォトにアップロードされるようになる

問題点

画質が良くない

680 × 383程度になってしまう

動画はアップロードできない

サムネイル画像のみが投稿される

タイムゾーンがおかしい

13時間前にズレる f:id:cohalz:20180527002454p:plain

この3つの問題点は割と致命的なのでIFTTT以外の類似サービスで解決できるんだったらそっちに変えたい.

BetterTouchToolを使って1アクションでウインドウのスクリーンショットを撮る

BetterTouchToolにはAttach Additional Actionという機能があり,複数のアクションを順に実行することできる.

方法は簡単で,最初に実行するアクションを入力したあとトリガー入力の上にあるAttach Additional Actionを押して追加のアクションを入力する.

ウインドウのスクリーンショットは,

  1. Shift + Command + 4

  2. ウインドウにカーソルを合わせスペース

  3. クリック

の3つの手順になっているため,下の画像のような手順になる.

f:id:cohalz:20180525220813p:plain

アクションを実行する際,カーソルの下にあるウインドウが対象になるので気をつける必要がある.(最前面を撮る方法がわからない...)

ちなみに,ウインドウの影を消したい場合は最後のアクションをLeft ClickではなくOption(⌥)+Clickにすれば良い.