未分類

StreamLinkのDockerイメージの使い方が分からなくてちょっと困ったのでメモしておきます。いろいろいじって二通りの使い方を見つけました。

標準出力を使う方法

$ docker run --rm -it rayou/streamlink "$URL" best -O > hoge.mp4

取得先を標準出力に指定し、ファイルにリダイレクトします。

シンプルに記載でき分かりやすい反面、取得に失敗した場合でも0byteのファイルが作られてしまったり、ファイルが存在していても強制的に上書きされてしまうデメリットがあります。気になる場合は次の方法を使うと良いでしょう。

ファイル名を指定する方法

$ docker run --rm -it -v "$PWD":/output rayou/streamlink "$URL" best -o /output/hoge.mp4

カレントパスをDockerコンテナ内にマウントして、そこに出力させます。

/output のところは何でもよいのですが、 /etc などDockerコンテナ内に実在するディレクトリは避ける必要があります。こだわりがなければオマジナイとして /output と書いておきましょう。

なお、Dockerの-vオプションの /output とstreamlinkの-oオプションの /output は一致していなければならないので気を付けてください。

未分類

Android Studio Bumblebee 2021.1.1 でDevice Managerが開けない現象が発生しました。
根本解決ではありませんが、以下のように「全てを検索ウィンドウ」を使うことで問題が回避できたので以下に手順を書きます。

・SHIFTキーを二回押下し、「全てを検索ウィンドウ」を開く(下図)
・Virtual Device Managerと入力
・エンター

最初はインストールしているSDKに不足があるのではないかと調べていたのですが、この方法で開けるのでSDKのインストールには問題がないことが分かりました。

不具合っぽいので、しばらくはこの方法で逃げておくことにします。

directus

Directusはデータベースとの連携性が高いヘッドレスCMSです。

本来CMSの一種なのでブログ系のサイトを構築するのに向いているのですが、データベースの情報をREST APIとして公開するためのフレームワークとしても使えそうです。というかこっちの用途で期待しています。

docker-compose.yaml

ほぼ公式サイトのサンプルそのままですが、アップロードした画像がdocker内に保存されてしまう問題があったので、ホスト側に保存されるよう修正しています。

KEYとSECRETはuuidgenコマンドで生成したものに書き換えておくと良いでしょう。
ADMIN_EMAILとADMIN_PASSWORDはお好きなものに変更してください。

参考:Installing with Docker | Directus Docs

version: '3.2'
services:
  database:
    container_name: database
    image: postgres:12
    volumes:
      - ./data/database:/var/lib/postgresql/data
    networks:
      - directus
    environment:
      POSTGRES_USER: 'directus'
      POSTGRES_PASSWORD: 'directus'
      POSTGRES_DB: 'directus'

  cache:
    container_name: cache
    image: redis:6
    networks:
      - directus

  directus:
    container_name: directus
    image: directus/directus:v9.0.0-rc.51
    volumes:
      - ./data/uploads:/directus/uploads
    ports:
      - 8055:8055
    networks:
      - directus
    depends_on:
      - cache
      - database
    environment:
      KEY: '255d861b-5ea1-5996-9aa3-922530ec40b1'
      SECRET: '6116487b-cda1-52c2-b5b5-c8022c45e263'

      DB_CLIENT: 'pg'
      DB_HOST: 'database'
      DB_PORT: '5432'
      DB_DATABASE: 'directus'
      DB_USER: 'directus'
      DB_PASSWORD: 'directus'

      CACHE_ENABLED: 'true'
      CACHE_STORE: 'redis'
      CACHE_REDIS: 'redis://cache:6379'

      ADMIN_EMAIL: 'admin@example.com'
      ADMIN_PASSWORD: 'd1r3ctu5'

networks:
  directus:

起動

以下のように起動します。

$ docker-compose up -d

表示

ブラウザから http://localhost:8055/ にアクセスすると、初期画面が表示されます。

Directus初期ログイン画面

ADMIN_EMAIL、ADMIN _PASSWORDに設定した値を入力するとログインできます。

おわりに

スマホアプリのサーバ側って本質的にはデータベースなのですが、データベースのアクセス制御はテーブル単位なので、データベースをアプリに丸ごと公開するわけにはいきません。

そこで通常はPHPなどでデータベースとスマホアプリの橋渡しとなるアプリケーションを書くんじゃないかと思います。橋渡しに期待したい役割は「クエリとJSONの相互変換」「適切なフィルタリング」といったところですが、それにしては書くコードが過剰なんです。大体ベタ書きはしないので、モデルやコントローラを書くでしょうし、フレームワークも何か採用するでしょうから、その周辺の知識も求められます。例えばLaravelであればマイグレーションを理解してモデルやコントローラ、ルーティングも理解して、artisanコマンドも覚えて・・・。まぁViewがない分楽ではあるのですが、役割からすると過剰です。

Directusを使えばロールにフィルタルールを書くだけで上記が実現できてしまいます。絶対早いよね。これからもDirectusの使い方について発信していきますのでよろしくお願いいたします。

未分類

awkを使って集計します。

proc.awk

#!/bin/gawk -f

{
  sub(/?.*$/, "", $7);
  filepath[$7]++;
}
END{
  for (i in filepath) {
    print filepath[i], i;
  }
}

使い方

$ ./proc.awk access_log

解説

アクセスログをスペース区切りで見たときに7番目の項目がファイル名になるので、$7でアクセスすれば良いことがわかります。
$7 には?に続くGETクエリも入っているので、これを除去します(4行目)。
filepath 配列をファイル名ごとのカウンタとして使って数えていきます(5行目)。

出力結果はsort -nでアクセス回数順にソートできます。

未分類

インストール

Mac
$ brew install cabextract

Ubuntu
$ sudo apt install cabextract

CentOS
$ sudo yum install cabextract

Cabファイルを展開

$ cabextract hoge.cab

Cabファイルの中のファイルを確認

$ cabextract --list hoge.cab
または
$ cabextract -l hoge.cab

未分類

hello.c

#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello, world!\n");
    return 0;
}