読者です 読者をやめる 読者になる 読者になる

くんすとの備忘録

プログラミングや環境設定の覚え書き。

BATファイルにシェルスクリプトを埋め込む方法

Bash on Ubuntu on Windowsによって、Windowsでカジュアルにbashを利用することが出来るようになりましたよね。 しかしながらシェルスクリプトを直接実行することはできないようです。(パスの形式が違うので関連付けで実行できない)

ということで、BATファイルに埋め込めるようにしてみました。

# ---------- SHELL ---------- # 以降に実行したいシェルスクリプトを記述します。

ShellScript in Windows BAT

※改行コードはLFにしておく必要があります。

実行結果

f:id:kunst1080:20170424234845p:plain

こんな感じで引数も渡せます。

参考

Bash on Ubuntu on Windowsで簡単にフォルダを開くためのショートカットスクリプト

を書きました。

macのopenコマンドのように、ターミナルから今いる場所や引数で指定したファイルをエクスプローラで開くことができます。

※Windowsの管理しているフォルダにいるときのみ
※そうでないときは %USERPROFILE% が開く

open explorer in Bash on Ubuntu on Windows (BoW)

「第28回シェル芸勉強会 大阪サテライト」レポート

04/22(土)に東京で行われた「jus共催 第10回初心者向けなのかと百条委員会化する午前のシェル勉強会/第28回基準値を超えるシェル芸勉強会」について、今回も大阪でサテライトしました!

イベント情報

東京(本家)

usptomo.doorkeeper.jp

今回も、大阪(私達)と、福岡でサテライト会場がありました。

大阪サテライト

atnd.org

福岡サテライト

atnd.org

ぱぴろん(@papiron)さんによるまとめ

papiro.hatenablog.jp

大阪サテライトレポート

参加者

今回の参加者は、私も含めて16人、うち、初参加は3名でした。
徐々に平均年齢が下がってきてなかなか良い感じです♪

会場のようす

午前

今泉光之さん「シグナルについて」 ※後半は @ryuichiueda さん


SIGNALの種類や役割について体系的に学んだり、trapして確かめたりなど。




午後

sed地獄と思いきやawkゴリゴリな感じでした。

今回はなんというか……非常に疲れました……死屍累々

LTのようす

東京

大阪

今回もUstreamで配信して頂けました!(録画はナシです)

@KoharaKazuya さん 「シェル芸による git rev-list」


gitコマンドを使わず無理やりワンライナーでgitのログを閲覧するというシェル芸。 ダミーのgzipヘッダーを付けるのは他の処理でもたまにやるという声もありました。こわい。

@msr386 さん 「FORK爆弾 密着24時」


みんな大好きFork爆弾。 それによってサーバが停止したときのクラッシュダンプを見るという、危険シェル芸から一歩踏み込んだ内容の発表でした。 リソースが枯渇して死亡というイメージはあると思いますが、 やはり実際に計測して何が起こっているのか確認するということは大事ですね!(しろめ

@kunst1080 「Ubuntu on Bash on Ubuntu on Windows」


Bash on Ubuntu on Windows上でchrootを使い、別のUbuntuのコンテナを動かす……ということで実際に作成した環境をデモしました。 コンテナ内からコンテナ外のプロセスをkillできるのはいかがなものかと……

@nmrmsys さん 「SIerでもできる! シェル芸?」

https://dl.dropboxusercontent.com/u/54939588/slides/Shell-Arts-Can-Also-Be-The-SIer.html
とあるSIer向けの勉強会でシェル芸をやりたいという話があり、 それに向けてブラウザでbashを動かす環境はないか探してみたという内容でした。 他所様の環境でFork爆弾を投げるのはマジほんとやめてくださいね…… > 某参加者s(複数形)

@3socha さん 「SSM Run Command で遊ぶ」

https://horo17.github.io/aws-nest-call-slide/#/
「Windows ホストの PowerShell からイベントログに書き込む SSM Run Command を実行する Lambda Function を Linux ホストのシェルから実行する SSM Run Command」のワンライナーの説明でした。ネストしゅごい……(ぐるぐる~


今回も濃ゆい発表をありがとうございましたm( )m 大阪のLTはジャンルを問わないので、ネタさえあれば大丈夫! どしどし発表しちゃって下さい~

まとめ

上田会長、東京・福岡・大阪の皆様、お疲れ様でした。
フェンリル様、いつも会場を使わせていただきましてありがとうございます!

次回もまたよろしくお願いします!!

追記

DockerとLet's Encryptで自分用Mastodon鯖を立ててみた

自分用の設定メモ

事前準備

  • conohaでdockerのインスタンスを作成
    • 2.イメージ -> イメージタイプ = アプリケーション に「Docker」っていうのがある
  • docker-composeのインストール
  • ドメインの取得
  • ufwで80番と443番のポートを開放

構成

docker-composeを使って、以下の2つの環境を作成

  • mastodon

    • mastodonのAPサーバ
    • ポートフォワードはやらない
  • https-portal

    • Let’s Encryptを使ったHTTPS対応を全自動でやってくれるコンテナ
    • 80番と443番のポートを開放する
    • mastodonのネットワークに接続してmastodon/webを公開する

手順(というか設定メモ)

mastodon の環境作成

github.com

READMEの通りに進める。

※解説はいろんな人が書いてるので省略

最終的な設定ファイルはこんな感じ。

docker-compose.yml

データの永続化部分のコメントを外して、ポートフォワードの部分をコメント化

version: '2'
services:

  db:
    restart: always
    image: postgres:alpine
### Uncomment to enable DB persistance
    volumes:
      - ./postgres:/var/lib/postgresql/data

  redis:
    restart: always
    image: redis:alpine
### Uncomment to enable REDIS persistance
    volumes:
      - ./redis:/data

  web:
    restart: always
    build: .
    image: gargron/mastodon
    env_file: .env.production
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
#    ports:
#      - "3000:3000"
    depends_on:
      - db
      - redis
    volumes:
      - ./public/assets:/mastodon/public/assets
      - ./public/system:/mastodon/public/system

  streaming:
    restart: always
    build: .
    image: gargron/mastodon
    env_file: .env.production
    command: npm run start
#    ports:
#      - "4000:4000"
    depends_on:
      - db
      - redis

  sidekiq:
    restart: always
    build: .
    image: gargron/mastodon
    env_file: .env.production
    command: bundle exec sidekiq -q default -q mailers -q pull -q push
    depends_on:
      - db
      - redis
    volumes:
      - ./public/system:/mastodon/public/system

.env.production

SECRETとドメインとSMTPの設定をしただけ。 SMTPにはとりあえずで使い捨てのGMailアカウントを使用。

11行目付近

# Federation
LOCAL_DOMAIN=mastodon.kunst1080.net
LOCAL_HTTPS=true

36行目付近

# E-mail configuration
# Note: Mailgun and SparkPost (https://sparkpo.st/smtp) each have good free tiers
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_LOGIN=<GMailのメールアドレス>
SMTP_PASSWORD=<GMailのパスワード>
SMTP_FROM_ADDRESS=<GMailのメールアドレス>
SMTP_OPENSSL_VERIFY_MODE=none

https-portal の環境作成

docker-compose.yml

mastodonのネットワーク(mastodon_default)へ接続して、mastodonのweb:3000を公開する。

version: '2'

services:
  https-portal:
    image: steveltn/https-portal:1.0.1
    ports:
      - '80:80'
      - '443:443'
    restart: always
    environment:
      DOMAINS: 'mastodon.kunst1080.net -> http://web:3000'
      FORCE_RENEW: 'true'
      STAGE: 'production'
    networks:
      - mastodon_default

networks:
  mastodon_default:
    external: true

STAGE: 'production'を付けないとオレオレ証明書になってしまうので注意。

おまけ: 管理者の設定方法

$ docker-compose run --rm web rails mastodon:make_admin USERNAME=kunst1080

参考URL

Mastodon

https-portal

九九の答えが36種類であることの証明

まず、九九に現れる式に使われる数字の組み合わせの数を数えます。 計算式を m * n とすると mは1~9nは1~9 です。 そうすると、 mとnが異なるときに使われる数字の組み合わせ は、1~9から2つの数字を選ぶ組み合わせなので

9C2 = (9 * 8) / (2 * 1) = 36 通り …… ①

となります。

また、 mとnが等しいときの組み合わせ は、1*12*2……9*9となりますので

9 通り …… ②

となります。

①と②より、式に使われる数字の組み合わせの数

36 + 9 = 45 通り …… ③

となります。

ここから、 計算結果が重複するもの を取り除いて行きます。 計算結果が重複するものは、例えば

4 * 9 = 36
6 * 6 = 36

のようなもののことです。

ここで、 1から9までの数字を素因数分解 してみましょう。

1
2 = 2
3 = 3
4 = 2 * 2
5 = 5
6 = 2 * 3
7 = 7
8 = 2 * 2 * 2
9 = 3 * 3

このように、素数と合成数1が混ざっていることがわかります。

ここで、先程の式を見てみましょう

4 * 9 = 36
6 * 6 = 36

この式を素因数分解すると、

4 * 9 = (2 * 2) * (3 * 3) = 2 * 2 * 3 * 3 = 36
6 * 6 = (2 * 3) * (2 * 3) = 2 * 2 * 3 * 3 = 36

このように、全く同じ式になります。

九九の中にある 計算結果が重複するもの というのは、このように、 式に使っている数字の組が異なり、素因数分解した結果が等しい ものであると言えそうです。

ここで、 1から9までの数字を素因数分解 したものから、合成数だけを抜き出してみます。(9以下の合成数の一覧)

4 = 2 * 2
6 = 2 * 3
8 = 2 * 2 * 2
9 = 3 * 3

少し変形して

4 = 2 * 2
6 = 2 * 3
8 = 2 * 2 * 2 = 2 * 4
9 = 3 * 3

これらの式は、1の段の計算結果 と上記の計算式について、式に使っている数字の組が異なり、素因数分解した結果が等しい ことが明らかです。 よって、

1 * 4 と 2 * 2
1 * 6 と 2 * 3
1 * 8 と 2 * 4
1 * 9 と 3 * 3

の

4通り …… ④

を、1の段と計算結果が重複する式の数 として数え上げることができます。

では、9より大きい数ではどうでしょうか。

式に使っている数字が異なり、素因数分解した結果が等しい という定義と、 9以下の合成数の一覧 からもう一度考えてみます。

4 = 2 * 2
6 = 2 * 3
8 = 2 * 2 * 2
9 = 3 * 3

ここへ、123を加えてみます。

1 = 1
2 = 2
3 = 3
4 = 2 * 2
6 = 2 * 3
8 = 2 * 2 * 2
9 = 3 * 3

順番を少し変えます。

1 = 1
2 = 2
3 = 3
4 = 2 * 2
6 = 2 * 3
9 = 3 * 3
8 = 2 * 2 * 2

上記の一覧の中にある数字から、 素因数分解した結果が等しくなるような組み合わせ を探せば良さそうです。

まず、計算して項が3つになる組み合わせは

(2 * 2) * 2 = 2^3
(2 * 2) * 3 = 2^2 * 3

(2 * 3) * 2 = 2^2 * 3
(2 * 3) * 3 = 2 * 3^2

(3 * 3) * 2 = 2 * 3^2
(3 * 3) * 3 = 3^3

です。上記の内、計算結果が重複している式の組み合わせは

2^2 * 3 → (2 * 3) * 2 と (2 * 3) * 2
2 * 3^2 → (2 * 3) * 3 と (3 * 3) * 2

の

2通り …… ⑤

です。次に、計算して項が4つになる組み合わせは

(2 * 2) * (2 * 2) = 2^4
(2 * 2) * (2 * 3) = 2^3 * 3
(2 * 2) * (3 * 3) = 2^2 * 3^2
(2 * 3) * (3 * 3) = 2 * 3^3
(2 * 3) * (2 * 3) = 2^2 * 3^2
(3 * 3) * (3 * 3) = 3^4
(2 * 2 * 2) * 1   = 2^3
(2 * 2 * 2) * 2   = 2^4
(2 * 2 * 2) * 3   = 2^3 * 3

です。上記の内、計算結果が重複している式の組み合わせは

2^4       → (2 * 2) * (2 * 2) と (2 * 2 * 2) * 2
2^3 * 3   → (2 * 2) * (2 * 3) と (2 * 2 * 2) * 3
2^2 * 3^2 → (2 * 2) * (3 * 3) と (2 * 3) * (2 * 3)

の

3通り …… ⑥

です。

ここまでに算出してきた ③④⑤⑥ についておさらいすると

  • ③ → 式に使われる数字の組み合わせの数 = 45通り
  • ④ → 1の段と計算結果が重複する式の数 = 4通り
  • ⑤ → 9より大きい数で、計算結果が重複する式の数(項が3つ) = 2通り
  • ⑥ → 9より大きい数で、計算結果が重複する式の数(項が4つ) = 3通り

です。これらの数を使うと、以下のように式に使われる数字の組み合わせの数から計算結果が重複する式の数を取り除いた組み合わせは

式に使われる数字の組み合わせの数 - 計算結果が重複する式の数
45 - (4 + 2 + 3) = 36 通り

となります。

したがって、九九の答えとなる計算結果の数字は36種類であると言えます。

※もっとスマートな証明を誰か……

おまけ

ここまでの思考の流れ

MacでiTermの背景色を変更するシェルスクリプト

[ch_bg_color.sh]

#!/bin/bash

R=$1
G=$2
B=$3

/usr/bin/osascript <<EOF
tell application "iTerm"
  tell current session of current window
    set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))}
  end tell
end tell
EOF

AppleScriptを使ってるし完全にMac用。

広告