パターンマッチ

Spray Json などを使って JSON を読み込んだあとに、ちょこっとキー名だけ変えたりしたい場合があるのですが、こうしたときパターンマッチ使うととても簡単にかけそうだなと試してみました

val transformed = jsobject.filelds.map {
    case ("id", JsString(id)) ⇒
        "another_id" → JsNumber(id.toInt)
    case ("name", name) ⇒
        "product_name" → name
}

JsObject(transformed)
広告を非表示にする

mobileprovision を Scala(Java) でロードする

iOS アプリケーションの ipa ファイルの mobileprovision を署名のないイメージにするためのコードです

package com.pigumer.ipa.test

import java.io.FileInputStream
import java.nio.charset.StandardCharsets
import java.util.zip.ZipInputStream

import org.bouncycastle.cms.CMSSignedData

object LoadIpaApplication extends App {

  val fileName = "test.ipa"
  val fis = new FileInputStream(fileName)
  val zip = new ZipInputStream(fis)
  Stream.continually(Option(zip.getNextEntry)).takeWhile(_.isDefined).foreach { opt ⇒
    opt.filter(entry ⇒ entry.getName.endsWith(".mobileprovision")).foreach { entry ⇒
      val bytes = Stream.continually(zip.read()).takeWhile(_ != -1).map(_.toByte).toArray
      val xml = new CMSSignedData(bytes).getSignedContent.getContent.asInstanceOf[Array[Byte]]
      println(new String(xml, StandardCharsets.UTF_8))
    }
  }
}

Bouncy Castle のライブラリを使うことで簡単に署名のないイメージで取得することができます。 同じ方法で署名付きの Profile 等も読むことができます。

GitHub

Network設定(1)

CLI でネットワーク設定を操作

  • Rasberry Pi

bridge を作ってみる

$ sudo -s
# ip link add name br0 type bridge
# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 82:db:31:03:84:ed  txqueuelen 1000  (イーサネット)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 762 (762.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

bridge と network interface をくっつける

# brctl addif br0 eth0
# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.98.203  netmask 255.255.0.0  broadcast 169.254.255.255
        ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (イーサネット)
        RX packets 22  bytes 1840 (1.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 4170 (4.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

dhcpcd で br0 にアドレスを振り直す

# dhcpcd -k
# dhcpcd -n -H br0
# ip addr show

4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.161/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
広告を非表示にする

Google Home mini

# apt-get update
# apt-get install -y nodejs npm libavahi-compat-libdnssd-dev
# npm cache clean
# npm install npm n -g
# n stable
$ npm init
$ npm install google-home-notifier
const googlehome = require('google-home-notifier');
const language = 'ja';

googlehome.device('Google-Home', language);

googlehome.notify('てすと', function(res) {
  console.log(res);
});

github.com

Scala を使う例

広告を非表示にする

Docker の restart policy

docker run 時に --restart で restart policy を設定できます(デフォルトは no)。

Flag Description
no 再起動しない
on-failure エラーで停止したときは再起動
unless-stopped 明示的に停止していなければ再起動
always 常に再起動

docs.docker.com

広告を非表示にする

cec-client

Install

$ sudo apt-get install cec-utils -y

TVのon/offの確認

$ echo 'pow 0' | cec-client -s -d 1

TVをon

$ echo 'on 0' | cec-client -s -d 1

TVをoff

$ echo 'standby 0' | cec-client -s -d 1
広告を非表示にする