shairport-sync の音声出力先を変える

/etc/shairport-sync.conf のalsaのoutput_deviceにデバイス名を書く。 初期状態では、defaultになっていた。

バイス一覧は、

$ aplay -L | grep :CARD

で取得できる。

sysdefault:CARD=PCH
front:CARD=PCH,DEV=0
surround21:CARD=PCH,DEV=0
surround40:CARD=PCH,DEV=0
surround41:CARD=PCH,DEV=0
surround50:CARD=PCH,DEV=0
surround51:CARD=PCH,DEV=0
surround71:CARD=PCH,DEV=0
hdmi:CARD=PCH,DEV=0
hdmi:CARD=PCH,DEV=1
hdmi:CARD=PCH,DEV=2
hdmi:CARD=PCH,DEV=3
hdmi:CARD=PCH,DEV=4
usbstream:CARD=PCH

speaker-test でデバイス名を指定して確認する。

$ speaker-test -D hdmi:PCH -c 2

/etc/shairport-sync.conf のalsaのoutput_deviceをhdmiにすると、hdmiからshairport-syncで再生できた。

https://wiki.archlinux.jp/index.php/Advanced_Linux_Sound_Architecture

RustでSHA-256ハッシュ値

以下のrubyのコードをrustで書く。

ruby

require 'digest/sha2'

digest = Digest::SHA256.file(path).hexdigest

rust

extern crate crypto_hash;
use crypto_hash::{hex_digest, Algorithm};

let mut file = File::open(path)?;
let mut contents = Vec::new();
file.read_to_end(&mut contents)?;
let digest= hex_digest(Algorithm::SHA256, &contents);

nasneのファイルサーバーにsmbclientでコピー

smbclientが使える。 マウントしなくても使えるので、cliから扱うのに便利。

$ smbclient //NASNE-XXXXXX/share1 -N -c "cd VIDEO;lcd /tmp;put test.mp4"

-N はパスワードなし。 -c にコマンドを;区切りで指定する。 cdでリモートフォルダ、lcdでローカルフォルダを指定。

Svelte memo

前回のsvelteバージョン。

テンプレートからプロジェクト作成

$ npm install -g degit
$ degit sveltejs/template sveltetest
$ cd sveltetest
$ npm install

src/main.js を変更

import App from './App.html';

const app = new App({
    target: document.body
});

export default app;

src/App.html を変更

<h1>{count}</h1>
<button on:click="down()">-</button>
<button on:click="up()">+</button>

<script>
    export default {
        data() {
            return {
                count: 0
            };
        },
        methods: {
            down() {
                const count = this.get().count
                if (count>0){
                    this.set({ count: count - 1 })
                }
            },
            up() {
                const count = this.get().count
                this.set({ count: count + 1 })
            }

        }
    };
</script>
$ npm run build

public/index.html をブラウザで開いて確認

Choo, Parcel 始め方

Choo, Parcel 始め方

前回のchooバージョン。 事前にnodejsyarnを使えるようにしておく。

作業フォルダ作成

$ mkdir chootest
$ cd chootest/

package.jsonを作る

$ yarn init -y

chooインストール

$ yarn add choo

Parcelをインストール

$ yarn add parcel-bundler --dev

HTMLテンプレートの変換に必要な yo-yoify babel-plugin-yo-yoify をインストール

$ yarn add yo-yoify
$ yarn add babel-plugin-yo-yoify --dev

.babelrc を作成
$ cat .babelrc

{
  "plugins": [ 
    ["yo-yoify", { "appendChildModule": "bel/appendChild" }]
  ]
}

index.html を作成
$ cat index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="./index.js"></script>
  </head>
  <body>
  </body>
</html>

index.js を作成
$ cat index.js

const html = require('choo/html');
const choo = require('choo');

const app = choo();
app.use(countStore);
app.route('*', view);
app.mount('body');

function view(state, emit) {
  return html`
    <body>
      <h1>${state.count}</h1>
      <button onclick=${down}>-</button>
      <button onclick=${up}>+</button>
    </body>
  `;

  function up(e) {
    emit('increment', 1);
  }
  function down(e) {
    emit('increment', -1);
  }
}

function countStore(state, emitter) {
  state.count = 0;

  emitter.on('increment', value => {
    state.count += value;
    emitter.emit('render');
  });
}

parcelコマンドでビルド

$ yarn run parcel build index.html --public-url ./ --no-minify

dist/index.html をブラウザで開いて確認

Hyperapp, Parcel 始め方

Hyperapp, Parcel 始め方

事前にnodejsyarnを使えるようにしておく。

作業フォルダ作成

$ mkdir hypertest
$ cd hypertest/

package.jsonを作る

$ yarn init -y

Hyperappインストール

$ yarn add hyperapp

Parcelをインストール

$ yarn add parcel-bundler --dev 

JSX変換に必要な
babel-preset-env
babel-plugin-transform-react-jsx
をインストール

$ yarn add babel-preset-env babel-plugin-transform-react-jsx  --dev 

.babelrc を作成
$ cat .babelrc

{  
  "presets": ["env"],
  "plugins": ["transform-react-jsx"]
}

index.html を作成
$ cat index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script defer src="./index.js"></script>
  </head>
  <body>
  </body>
</html>

index.js を作成
$ cat index.js

/** @jsx h */

import { h, app } from "hyperapp"

const state = {
  count: 0
}

const actions = {
  down: () => state => ({ count: state.count - 1 }),
  up: () => state => ({ count: state.count + 1 })
}

const view = (state, actions) => (
  <main>
    <h1>{state.count}</h1>
    <button onclick={actions.down}>-</button>
    <button onclick={actions.up}>+</button>
  </main>
)
export const main = app(state, actions, view, document.body)

parcelコマンドでビルド

$ yarn run parcel build index.html --public-url ./ --no-minify

dist/index.html をブラウザで開いて確認