プロジェクト

全般

プロフィール

ニュース

A painter and a black cat: 新MarpをWSL上のDockerを使って試す

さんが約6年前に追加

electron製の旧Marpをずっと使わせて頂いております
この旧Marpなんですが、pdf出力時の画像が荒くなってしまう場合がありました
そんな訳で新Marpに期待しており、pdf化の際に画像がキレイに出るか確認してみました

Marpとは

旧Marp

  • electron製でどのプラットフォームでも動く
  • markdownで書いて、pdfで出力できる
  • 旧とはいえ、今でも現役。十二分に使える

新Marp

  • 現在開発中?electron製ではない
  • CUIで操作したり、WebUIがあったり、いろいろある
  • もちろんpdfも出るし、reveal.jsのような使い方もできる

今回試す環境

以下の流れでやっていきます。

  • Windows10のWSL(Windows Subsystem for Linux)にDockerを入れる
  • MarpのdockerイメージからCLIコマンドを呼び出してブラウザで表示
  • ブラウザからの印刷機能でpdf化する

試してみる

WSL(Windows Subsystem for Linux)のインストール

ググるといろいろ出てくるので省略
私はUbuntsu入れてます。これを試した時の環境は以下

$ cat /etc/issue
Ubuntu 18.04.2 LTS \n \l

Dockerのインストール

以下を参考にしましたが、現状だとちょっと異なる点があるので注意

Qiita - [2019年1月版]WSL + Ubuntu で Docker が動くっ!動くぞコイツッ!
https://qiita.com/koinori/items/78a946fc74452af9afba

$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y docker.io=17.12.1-ce
$ sudo usermod -aG docker $USER

2019.5.3現在、dockerのバージョンが18のやつはWSLでは動かない。WSLが対応していない機能があるらしい。
なので、バージョン指定で1つ前のバージョンを導入する。

いったんターミナルを閉じる。またWSLを立ち上げて

$ sudo cgroupfs-mount
$ sudo service docker start
$ docker version

docker versionの出力結果で server の項目が出てたらok

$ docker version
Client:
 Version:       17.12.1-ce
 API version:   1.35
 Go version:    go1.10.1
 Git commit:    7390fc6
 Built: Wed Apr 18 01:23:11 2018
 OS/Arch:       linux/amd64

Server:
 Engine:
  Version:      17.12.1-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.10.1
  Git commit:   7390fc6
  Built:        Wed Feb 28 17:46:05 2018
  OS/Arch:      linux/amd64
  Experimental: false

hello-world してみて動くことを確認する

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

毎回実行することになるので…

sudo cgroupfs-mount と sudo service docker start は、立ち上げる度に必要らしいので、ShellScriptを作った

#!/bin/bash

# dockerの起動
sudo cgroupfs-mount && sudo service docker start
sudo service docker status
echo --------------------------------------------------
docker version
echo --------------------------------------------------
docker run hello-world

Marpのテーマダウンロード

デフォルトのテーマでもいいんですが、横に長い(1280pxx720px)です。
普通のやつ(960pxx720px)にしたいため、有志の方?GitHubが作ったテーマをダウンロードする

$ cd [今Markdownを書いているディレクトリ]
$ wget https://raw.githubusercontent.com/matsubara0507/marp-themes/master/themes/haskell.css

他の種類もあるのでお好みで

marp-cliでhtmlを生成

$ docker run --rm -v $PWD:/home/marp/app/ -e LANG=$LANG marpteam/marp-cli ./作ったファイル.md --theme haskell.css

marp-cliでserverモードを起動

$ cd [今Markdownを書いているディレクトリ]
docker run --rm -v $PWD:/home/marp/app/ -e LANG=$LANG -p 8080:8080 marpteam/marp-cli ./ --server  --theme haskell.css

実行後、ブラウザで、http://localhost:8080/ にアクセスするとスライドが見れる(reveal.jsみたい)

pdf化

あるにはあるけど、私のこの環境で実行するとエラーになってうまくいかない

$ docker run --rm -v $PWD:/home/marp/app/ -e LANG=$LANG marpteam/marp-cli ./作ったファイル.md --theme haskell.css  --allow-local-files

htmlかserverモードでChromeで表示した後、Chromeの印刷機能でpdf化すればキレイに出ました^^

旧Marpとの非互換

  • 画像の%指定による拡大/縮小がなくなった → px指定になった
  • 画像の中央寄せができない → 今後に期待(テーマのCSSをいじればなんとかなるかもしれない)

中央寄せができるようになるといいな、旧Marpから乗り換えたい

参考

A painter and a black cat: jus共催 第41回(中略)シェル芸勉強会 に参加しました

さんが約6年前に追加

jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会

このタイトルなんですが、bashとshufコマンドの機能で出力結果が変化します

$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ウンブハイブ無罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ウンンブハイブ有罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ガクチンコインブラブライブ有罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回チンブイブ無罪シェル芸勉強会
$ shuf -n1 -e jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会
第41回ガクコインハ有罪シェル芸勉強会

今回は相対的に優しい問題だった(解けるとは言っていない)

【問題と解答】jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会 | 上田ブログ

null

jus共催 第41回{ウン,ガク,}{チ,ト,}{,ン}{,コイン}{ブ,}{ラブラ,ハ,}{,イブ}{無,有}罪シェル芸勉強会

2019年4月27日 さくらインターネットさんのセミナールームにて問題と解答例:

午前:鳥海さんの資料

一年間に及んだ文字コードは今回で終わり。せっかくなので、過去6回分を記載する
文字コードの高度な情報の宝庫
特にUnicode絵文字結合が狂おしいほど好き

https://umidori.github.io/shellgei-36th-am/
https://umidori.github.io/shellgei-37th-am/
https://umidori.github.io/shellgei-38th-am/
https://umidori.github.io/shellgei-39th-am/
https://umidori.github.io/shellgei-40th-am/
https://umidori.github.io/shellgei-41th-am/

知見

いろんな便利なコマンドがあってヤバイ

そして、ググると大抵blacknonさんのサイトが1位でヒットして神

numfmt

数字を人の読みやすいように加工する『numfmt』コマンド
https://orebibou.com/2015/11/%E6%95%B0%E5%AD%97%E3%82%92%E4%BA%BA%E3%81%AE%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E5%8A%A0%E5%B7%A5%E3%81%99%E3%82%8B%E3%80%8Enumfmt%E3%80%8F%E3%82%B3%E3%83%9E/

uconv

uconvコマンドを使ってローマ字⇔ひらがな/カタカナ変換をする
https://orebibou.com/2018/02/uconv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%AD%E3%83%BC%E3%83%9E%E5%AD%97%E2%87%94%E3%81%B2%E3%82%89%E3%81%8C%E3%81%AA-%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A/

numconv

numconv(1) - Linux man page
https://linux.die.net/man/1/numconv

多言語で表現された数値表現をニューメリックな表現に変換するコマンド

つまり、四もIVも4もⅣもこのコマンドを使うと 4 になる。
素晴らしい。。

LT

シェル芸でターミナルを動かす(CUIでのウィンドウ操作の仕方)

ぐりぐり動く

上田さんを圧縮

LTの現場では上田さんを限界を超えて圧縮したものをカラーパレットとして使用していた

ワイ、ネタかぶりwww

A painter and a black cat: 技術書典6に行って頒布シマシタワー

さんが約6年前に追加

どんどん規模が大きくなる技術書の同人誌販売イベント。
今回は頒布する側になりました。

20190415_gshoten.jpg

戦利品

20190415_shirt.jpg20190415_book.jpg

「Radare2で学ぶバイナリ解析入門」を書いたかんばやしさんと、非公式アフターで話したonotchさんとは同じ趣味(CTF)の話で大変盛り上がり、心の友となった(CTFあるある話超楽しいw)

そして、お気づきの人少なかったかもしれませんが、熱血バイナリアンTシャツも売っていました!(レア)
着るから!めっちゃ着るから!

難読化シェル芸の本

こ21 で頒布しておりました。

本を作る側の苦労と楽しさがよくわかった。
これは、端的に申し上げると最高であり、何が最高かというと語彙力不足でうまく表現できませんが、えーと、
ソフトウェアと同じで、何か作って喜んでくれる人がいると最高なんだけど、そういう人たちと(語彙力不足

  • 買ってくださった方本当にありがとうございました
  • 手にとってださったかた嬉しかったです(パラパラ見て、それでけっこう笑ってくれるのがたまらなく嬉しい)
  • 一部の方にはサインしましたが汚くてなんかちょっと申し訳なく、もっとシュッと書けるようになりたい
  • 引き続き販売しておりますので、気になりましたらサンプルなど眺めて頂ければと

技術書典これまでの変遷

ちなみに第一回から参加しておりました。記録がこれです。そびえ立つキマシタワー

回を追う毎に人が増えてるな~と思っていました。
ほら、初回は参加者が1400人、今回は一万人ですよ!ほんと終了時刻の17:00まで人がいっぱいでした。
この伸びだと三年後には10万人か

20190415_suii.png

その他

  • ipusironさんに挨拶して名刺もらったやったぜ(というかご本人が売りに来てるのかw)
  • auth屋さんはシェル芸人
  • におうコードの問題集のグランパさんの執筆環境最高(dockerで公開中)

ワイの書籍執筆は、こんな趣味を面白いと思ってくれる、みなさまのおかげでモチベーションが保てました。
この場を借りて御礼申し上げ奉り候えば、またいずこでお会いできる日を楽しみにしております。

A painter and a black cat: ターミナルに画像を表示したい(難読化シェル芸本の表紙の秘密)

さんが約6年前に追加

難読化シェル芸の世界の表紙の秘密

20190407_nandoku-hyousi.png

表紙にあるネコの目は、みなさんがよく使うターミナルで表示しているものです。
teratermでもrloginでも画像が表示できるんです。

ターミナルに画像を表示する

ターミナルの黒い画面を使って、こんなことができます。
文字(背景)に色を着けて画像のように表現することができます。

20190321_screen1.png
20190321_screen2.png

文字に色をつける

エスケープシーケンスと呼ばれる特殊な文字を使うことで文字に色をつけることができます。
エスケープシーケンスは、ターミナルやエディタから入力する場合、通常の文字入力と違って比較的複雑な操作を伴います。
tputコマンドを用いると比較的簡単にエスケープシーケンスを出力できます。

文字の装飾は下表の通りです。

説明 tputでの出力方法
全ての属性をリセット tput sgr0
文字を太字に変更 tput bold
文字に下線 tput rmul
文字を点滅 tput blink
文字と背景色の反転 tput rev

文字への色付けもできます。環境に依存しますが、8色、または、256色が表現できます。
256色を順に表示するシェル芸を作りました。

まず、お使いのターミナルが256色を表示する設定になっていないかもしれません。
TERM環境変数で色数を制御してしているため、256色を表示できるように設定します。

$ export TERM='xterm-256color'

文字を256色分表示してみます。

$ for COLOR in {0..255};do echo -n "$(tput setaf $COLOR)";echo -n "$COLOR " ;done;tput sgr0;echo

20190321_screen3.png

同様に背景色も変更できます。

$ for COLOR in {0..255};do echo "$(tput setab $COLOR)";echo -n $COLOR ;done;tput sgr0;echo

20190321_screen4.png

ターミナルに画像を表示する

エスケープシーケンスで文字に色をつける方法はわかりました。
では、これで絵を描く…のは難しそうです。私は綺麗に描く自信がありません。

でもこれでドット絵作れますね!

画像を入力にして、変換できないでしょうか。

実は、そういったコマンドを作った方がいらっしゃいます。
いくつか種類がありますが、camというコマンドを使わせて頂きました。

camコマンド作った 〜 端末で画像を表示しよう
https://itchyny.hatenablog.com/entry/20130318/1363605537

インストール

製作者の案内に従ってインストールしましょう。

$ git clone https://github.com/itchyny/cam
$ cd ./cam
$ autoreconf -i
$ ./configure
$ make
$ sudo make install

使い方

画像ファイルを指定するだけです。

$ cam hoge.jpeg

画像形式によっては、以下のように表示され画像が表示されない場合があります。

$ cam fuga.jpg
cam: fuga.jpg: progressive jpeg

これは、jpeg形式のファイルにはベースラインとプログレッシブという2種類があり、camはプログレッシブのjpegに対応していないためです。

そこで、ImageMagicのconvertを使って、プログレッシブをベースラインに変換して表示してみます。
以下のようにシェル芸で実現できます。

$ cam <(convert fuga.jpg -interlace none /dev/stdout)

camの出力結果をシェル芸にする

さあ完成に近づいてきました。
camが導入されていない環境でも、シェル芸でこの画像を表示したいです。
camによって変換された後は、エスケープシーケンスを含んだ文字列なので圧縮した上でbase64エンコードにしてみましょう。
だいぶコンパクトになりました。
表示する際は、逆にbase64デコードした上でgunzipで伸長すると元に戻ります。
これでどこでも画像を表示できる難読化シェル芸になりました。

$ cam <(convert fuga.jpg  -interlace none /dev/stdout)|gzip -cf|base64
H4sIAJAxk1wAA+2cOW7kMBBF87lCJ3MEbXSr4cAH6Qs4mL5/OsAE00WgPljFRaTkn30YREui6rFW
+fb8WsKf23N63Z7b/hk+l3V+/aamph5VT69fY9wINTU1YaWmvoQmrMfo6a2XLa3l+iHun3oATVhb
6XkXekX6/tb31aA38fuTeq0Y+v77QE1YT6UjKIXXjLUF7pIDQHrxVdwnvfhJNGE9RAtvJ8F6bKXS
hrvBf+8yUF/77xg1Me2pkX8V7O37fxkW7a9tfK5B7yDrHmBfL64J6iFwikwyCaQuH0FHJ8K+BF+D
Jr7E9Go6QvPNGAhkBYReSCBgqq+GIbNFO7Hemf0S01H0Amqx3pAy8oteH/m+rnDRB0hD+nwX20Zu
yWczDkF/xMBS0oo9SCQDY11W/bHk7yJCGQyTyjz6dIPy4FRu692kHnGj4NsbGaCG0Pyhnn5D2AOh
7KPnVT3kR4DERZEvmwWhc7XwGq3PryDH8F7a6/5cMOddNxyPoYMSj6GuY7FaEy0WQiwaVXxEP0cO
S8k+zw7WbKHSPftIXmaZ1fY3NFLqpVFmiEWVGmRQ0mAnXcs10D1ZrqWXVXNnHwRSAjvbDj+c63ew
G5WOHNTzGcAaieniQ8pTpInx8xmxxbhtQ72pe88stEbUSFqlnsTNir390GR4uDYLpBjeXhDwvufF
9HxoQo8IcATvNW0EO7q+sLxN2Oa0AC3P813/nV23ZgFH1Q5IfNSIawM/qiOYlEF/QvRmk41hf19W
VolPVWwal8vYjfjSl+xxVgM2Erk8c41ohnQ6uh9VkIyOm1D8jOlHzHabepQA+T1VNjoWj9FrSY7T
FMdxqJABDEge+1UdB9JV3SRygfLaofis6fmEKEIfHsj+EMpIvxympNfQWw7zmo4cK7hDkGEhfUys
CoAUjjGoB1EAkYIlIF9TL8QzxJCcQ4pKtmM2WXpxqEf55RyWdwFlWIgA+RC37yES5o9CS/tv3/OM
CIqCZgOq6MACj/NwPFmaLUOO4m639J3L78Ni7sF/bG8e2inUAWhk49IpDzYUpEe0oEilU1bAU8nn
5g0G8aNP0psx2otFdXRtBADTEoRlBu1xDEPMARkIavwJipu49PqCBkq7OPdADsEIad3P+Uew78zM
xzU1lNfw982xFjFQsiat3Y7V9ZOG8+c+JIX6v4qyffXnObS6ScPXDnpuFBdjZ9+aKGP1ZbI27atw
wrzQHWIa4PL60Hyma8w5zcDhHM5lh9bfCCSm+wSboWdwGq3ntN3eSVn0W3XKcAYstAPREl5mBlDt
Cekmo9gPuc4S11ZS5gR4pYpoA0fw7Y0KRsbvJQ7HmOau2cF3gPFnNqOONTWQqKGyj4RYLwGNW4Su
CmP5s2V2JaNBAfO0azvS9Bs+ACRKytwRm1aZni+jGxg50nd9mRvTV0gkZfYmIsdjSieypKXG/QdE
jCO8f8pxoMrlC3zAXF4SqQObu3MXJeigjr6BejzSk16iyZNimqOuVCckUXYmdia/WX85Ge1LVKQz
WIm0KtipyapynARDampqwkpN/cM0YaWmPokmrNTUJ9GElZr6JJqwUlOfRP+DdXrdnl9L+P4LO26A
MTyMAAA=
$ echo -n H4sIAJAxk1wAA+2cOW7kMBBF87lCJ3MEbXSr4cAH6Qs4mL5/OsAE00WgPljFRaTkn30YREui6rFW+fb8WsKf23N63Z7b/hk+l3V+/aamph5VT69fY9wINTU1YaWmvoQmrMfo6a2XLa3l+iHun3oATVhb6XkXekX6/tb31aA38fuTeq0Y+v77QE1YT6UjKIXXjLUF7pIDQHrxVdwnvfhJNGE9RAtvJ8F6bKXShrvBf+8yUF/77xg1Me2pkX8V7O37fxkW7a9tfK5B7yDrHmBfL64J6iFwikwyCaQuH0FHJ8K+BF+DJr7E9Go6QvPNGAhkBYReSCBgqq+GIbNFO7Hemf0S01H0Amqx3pAy8oteH/m+rnDRB0hD+nwX20ZuyWczDkF/xMBS0oo9SCQDY11W/bHk7yJCGQyTyjz6dIPy4FRu692kHnGj4NsbGaCG0Pyhnn5D2AOh7KPnVT3kR4DERZEvmwWhc7XwGq3PryDH8F7a6/5cMOddNxyPoYMSj6GuY7FaEy0WQiwaVXxEP0cOS8k+zw7WbKHSPftIXmaZ1fY3NFLqpVFmiEWVGmRQ0mAnXcs10D1ZrqWXVXNnHwRSAjvbDj+c63ewG5WOHNTzGcAaieniQ8pTpInx8xmxxbhtQ72pe88stEbUSFqlnsTNir390GR4uDYLpBjeXhDwvufF9HxoQo8IcATvNW0EO7q+sLxN2Oa0AC3P813/nV23ZgFH1Q5IfNSIawM/qiOYlEF/QvRmk41hf19WVolPVWwal8vYjfjSl+xxVgM2Erk8c41ohnQ6uh9VkIyOm1D8jOlHzHabepQA+T1VNjoWj9FrSY7TFMdxqJABDEge+1UdB9JV3SRygfLaofis6fmEKEIfHsj+EMpIvxympNfQWw7zmo4cK7hDkGEhfUysCoAUjjGoB1EAkYIlIF9TL8QzxJCcQ4pKtmM2WXpxqEf55RyWdwFlWIgA+RC37yES5o9CS/tv3/OMCIqCZgOq6MACj/NwPFmaLUOO4m639J3L78Ni7sF/bG8e2inUAWhk49IpDzYUpEe0oEilU1bAU8nn5g0G8aNP0psx2otFdXRtBADTEoRlBu1xDEPMARkIavwJipu49PqCBkq7OPdADsEIad3P+Uew78zMxzU1lNfw982xFjFQsiat3Y7V9ZOG8+c+JIX6v4qyffXnObS6ScPXDnpuFBdjZ9+aKGP1ZbI27atwwrzQHWIa4PL60Hyma8w5zcDhHM5lh9bfCCSm+wSboWdwGq3ntN3eSVn0W3XKcAYstAPREl5mBlDtCekmo9gPuc4S11ZS5gR4pYpoA0fw7Y0KRsbvJQ7HmOau2cF3gPFnNqOONTWQqKGyj4RYLwGNW4SuCmP5s2V2JaNBAfO0azvS9Bs+ACRKytwRm1aZni+jGxg50nd9mRvTV0gkZfYmIsdjSieypKXG/QdEjCO8f8pxoMrlC3zAXF4SqQObu3MXJeigjr6BejzSk16iyZNimqOuVCckUXYmdia/WX85Ge1LVKQzWIm0KtipyapynARDampqwkpN/cM0YaWmPokmrNTUJ9GElZr6JJqwUlOfRP+DdXrdnl9L+P4LO26AMTyMAAA= |base64 -d|gunzip

20190321_screen5.png

難読化シェル芸の世界の中表紙も…

同じ方法で作っています。
実行したのは以下

$ echo H4sIAC3WWlwAA51X32vbMBB+918hJ3TxmKO+FMbSgUtXQiirnjLKGI0vJaN7Gexpj/7bZ+t0J50sJfaOYFmK9Om+704/rNRM02TFvGHvngIz9YzR+vFpZD9nTK9p0PdFb7v5Lrj570pqqPYIgU5A+gdjF1Yh6rVtevUAZ/zRT3/ATeWwlqXsgY05CLAaaqrWtvdV1AkhwlGFm5Ib0AH9wXZ9L+E6iYaibQsaiT+t38IwbjzBwX4Qx2EmfULVabjkVsl8MMxNnaI6if8QM4v+D+2oibhDZxVqzISCOCUGY3YJcKyGUnpJhTtptABPPUf1FKkqB/PKXjSEC5TDJF1i8mCSvWt61MCEgJ5C1mq/S2EFgWE0ogPBUyVXRLOP8G6j/6n9d80h8hYH6yWG1wx/TG0PsT5bhA+nUM0zcTrWwC4kqIwyx4oAQgELON6xmFYm+7C7Mce3fp8mnL2AOSOLScMdXcptKsewXxV+ddtiAPJBT4Wffei6Vn1WbePTOZaIvdoJt1Le/epJbrq1Ahf+IHaAUH7UckTUCEhzrfqdrOP5R2plFkmapxZkjA4FGx71DDC7eq3hqK+jnLqZg8Yrx+7UJpKst2//4xoSvZWLzxbNBYjA+BACW31JHWvTlTPswimLNp2tPyCtbleMBiJNJrJd8hDr2yZKNn79Owlty25Y7CIC4ddJYHzBsCHdZm8n2cMmciwQrRTJBoFv5zY0shX1944FFIP3aX75eROCUf3ioqe0AGSwKiIAD5u4zUorBdJhvDCFll/yQAeHY51flvGB6L2yHSCbsojj7mMP+WvqCRXN4Axh0y5Z7jm5xK4PXABoTYNSK91UFV8k78pCAkCo33Dvu5BVnw5xDqFZIveHszFbLA6SAGRXncdtPpI1TTmeN7RYH3AfYP47DG3tvsxUf+LUeq3Vui9027bVCMVaq8oSALpBald0w6sCuseX/et6aJE7G/wDg0BJ0DIOAAA=|base64 -d|gunzip

20190321_screen7.png

おまけ

エスケープシーケンスを利用した面白いイタズラを作ったのを思い出しました、
すべてがFになりますので、Ctrl+c で止めてください。

$ C=$(tput cols);L=$(tput lines);while :;do x=$(($RANDOM%$C));y=$(($RANDOM%$L));printf "\\033[${y};${x}fF";done
$ C=$(tput cols);L=$(tput lines);while :;do x=$((($RANDOM%$C+$RANDOM%$C+$RANDOM%$C)/3));y=$((($RANDOM%$L+$RANDOM%$L+$RANDOM%$L)/3));printf "\\033[${y};${x}fF";done

20190321_screen6.png

エスケープシーケンスを使えばいろいろ面白いことができそうですね!

宣伝

技術書典では割引もあるみたいです!ぜひぜひ

LTの資料

ターミナルに画像を表示する
https://www.slideshare.net/kanata1/ss-142580690

A painter and a black cat: 記号難読化シェル芸のやべーやつを解読してみた

さんが約6年前に追加

2019年2月は、記号で作る難読化シェル芸がメガシンカした歴史的な月でした。
一度にたくさんの素敵な情報が集まって、私の思考回路はショート寸前です。

記号と英字2文字だけでbash
https://www.ryotosaito.com/blog/?p=178

記号だけでシェルは操れた
https://www.ryotosaito.com/blog/?p=194

34C3 CTF minbashmaxfun - writeup
https://hack.more.systems/writeup/2017/12/30/34c3ctf-minbashmaxfun/

そんな中やべーやつが開発されます。yamayaさんという方が作成した記号だけのdateです。

$ _(){ __=$@;};_ /*/$$/../?????-*;_ ${__##*-};$(${__%?????} '!-:' ^-~<<<"'\$${#__}(")
2019年  2月 28日 木曜日 12:37:56 JST

こんなに短いのに全て記号で、そしてちゃんとdateとして動作します。美しい…そして恐ろしい…
人の褌で相撲を取るようで大変恐縮なのですが、これが埋もれてしまうのは人類の損失のような気がしたので、解読してみました。

大きく、4パートに分かれます。

$ _(){ __=$@;};_ /*/$$/../?????-*;_ ${__##*-};$(${__%?????} '!-:' ^-~<<<"'\$${#__}(")
  ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       ①              ②              ③                        ④

①関数_の定義

_(){ __=$@;}

関数_を定義しています。$@が特殊なシェル変数になります。動作は「変数__に関数の全引数の内容を設定する」という動作になっています。

②一意なディレクトリパスの取得

_ /*/$$/../?????-*

さっそく関数_が実行されています。引数に渡されている //$$/../?????- は、ワイルドカード(glob)てすね。
//$$/../?????- に一致するディレクトリは1つだけになりました。
/proc/[PID]/../sysrq-trigger というファイルが該当します。これはマジックSysRqキーと呼ばれるカーネル機能を制御するためのインタフェースになりますね。この機能を利用するわけではなく、triggerという文字列を取得するのが目的になっています。

※マジックSysRqキーは、カーネルのデバッグなどに使用されるやつです。昔、クラスタの動作確認するために、これを使って意図的にカーネルパニックさせた記憶があります。

③"trigger"の取得

_ ${__##*-}

ここから変数展開を使って-以降だけを切り取って、再び変数__に設定しています。
"trigger"で7文字になるのですが、この7という数字も最後に使われます。

④trでdateコマンドを生成する

ここは更に細かく分けました。

 $(  ${__%?????} '!-:' ^-~ <<<"'\$${#__}("   )
^^^^ ^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^
④-1    ④-2        ④-3       ④-4        ④-1

④-1

$( )

コマンド置換ですね。最終的にこのカッコの中がdateになれば、dateが実行されます。

④-2

${__%?????}

変数展開の機能を巧みに使って先頭ニ文字を切り出しています。triggerの頭ニ文字、trが取得されます。

④-3

'!-:' ^-~

trの範囲指定を巧みに使っています。!-: と ^-~ どいういう範囲でしょうか。
Asciiコードから確認してみます。

0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B 0x2C 0x2D 0x2E 0x2F
space ! " # $ % & ' ( ) * + , - . /
0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B 0x3C 0x3D 0x3E 0x3F
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F
@ A B C D E F G H I J K L M N O
0x50 0x51 0x52 0x53 0x54 0x55 0x56 0x57 0x58 0x59 0x5A 0x5B 0x5C 0x5D 0x5E 0x5F
P Q R S T U V W X Y Z [ \ ] ^ _
0x60 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6A 0x6B 0x6C 0x6D 0x6E 0x6F
` a b c d e f g h i j k l m n o
0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7A 0x7B 0x7C 0x7D 0x7E
p q r s t u v w x y z { | } ~

ここから考えると !-: は、0x21から0x3Aの範囲、^-~ は、0x5Eから0x7Eの範囲になります。
trで変換される変換表を作ってみます。

! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 :
^ _ ` a b c d e f g h i j k l m n o p q r s t u v w

dateの変換前の文字は '$7( ですね。

④-4

<<< "'\$${#__}("

<<<は、ヒアストリングという機能になります。通常、変換したい文字はパイプ経由でtrに渡しますが、これでも渡すことができます。

渡している文字は"'$${#}("です。この中の ${#} は"trigger"の文字数を返す変数展開です。7ですね!

ゴールが見えてきました。

①〜④まとめ

まとめると、以下になります。

$ _(){ __=$@;}        # ①関数_の定義
$ _ /*/$$/../?????-*  # ②一意なディレクトリパスの取得
$ echo $__
/proc/16120/../sysrq-trigger
$ _ ${__##*-}         # ③"trigger"の取得
$ echo $__
trigger
$ echo ${__%?????}    # ④-2 "trigger"からtrを取り出す
tr
$ echo ${__%?????} '!-:' ^-~ # 結果としてtrが実行できる
tr !-: ^-~
$ echo ${#__}         # ④-3 "trigger"の文字数から7を生み出す
7
$ cat <<<"'\$${#__}(" # ④-4 ヒアストリングでtrの入力にする
'$7(
$ $(${__%?????} '!-:' ^-~<<<"'\$${#__}(")   # ④-1 $(tr '!-:' ^-~ <<< "'\$7(" ) を実行
2019年  2月 28日 木曜日 12:54:22 JST

おわかりいただけたでしょうか…
ここまでくるともはや芸術品...!


出典は、ココのコメントにあります。
記号だけで Hello world したやべーやつもありますねw


2019.3.7 yamayaさん新作が以下になります

$ : /*/$$/../?????-*;: ${_##*-};$(${_%?????} '!-:' ^-~<<<"'\$${#_}(")
2019年  3月  7日 木曜日 22:51:09 JST

より短い!なぜこれでdateが実行できるか解読してみよう!

A painter and a black cat: 技術同人誌組版の今と闇を語る(愚痴る)会 に参加しました

さんが約6年前に追加

技術同人誌組版の今と闇を語る(愚痴る)会 (2019/02/17 17:00〜)

概要 本を作るのに、どんなソフト/環境でやってますか? Re:view?Markdown?Word?InDesign? どれもこれも、いい面もあれば悪い面もあり、我慢ならないクソな部分もあろうかと思います。 コンピュータで組版をする世の中になってはや30年(適当ですが)経ちましたが、 未だに決定打がないとはどういうことか? というわけで、同人誌執筆者が集まって、組版に関する光と闇を共有する会です。 # 参加するといいことある人 * 執筆環境に不満がある人 * 他の環境を試してみたいが、行き先がわからない人 * 本(技術同人誌)を書いてみようと思っている人 ...

同人誌執筆者が集まって、組版に関する光と闇を共有する会でした。

LTしました

補足

LTした時の現場の議論はこんな感じ

  • Microsoft Print to PDF は実はアウトラインも飛ばしちゃうらしい(まるっと画像化しているらしい)
  • Microsoft Print to PDF のフォント埋め込みは、必要最低限じゃなくて、まるっとフォント全部取り込むのでPDFのサイズが増えるらしい
  • Type3フォントは印刷所的には、やっぱりあるとダメらしい

Microsoft Print to PDF は無料でフォント問題を解決できるので個人的にはやはり神

グラフィックレコーディングしてもらった

嬉しい

技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ|kondoyuko|note

技術同人誌組版の今と闇を語る(愚痴る)会 #組版の光と闇 手がきメモまとめ

参考

この環境がなかったら諦めてた

技術書典6に向けての Re:VIEW+CSS組版 環境構築 - 圧倒亭グランパのブログ

前回の技術書典5では、 Re:VIEW+ CSS 組版 にチャレンジしました。 at-grandpa.hatenablog.jp 今回もこの構成で行こうと思っていますが、docker周りが複雑で分かりづらかったのと、自分の リポジトリとして公開してもいいかなと思ったので取り組みました。また、 Re:VIEW がちょうど3.0.0になったので、良い機会だと思いました。     公開している リポジトリ は以下です。 主にできることは以下です。 その他のコマンドは、 リポジトリルートで make help と打ってください。   サンプルとして説明書PDFを生成できるようにしています。 git clone して make setup と make pdf を実行すれば生成されます。 PDFのリンクは、 リポジトリ の README.md とリリースページにありますので、お好きにダウンロードしてください。   cloneした リポジトリにある説明書PDFを元に、いろいろと試行錯誤していただくのが一番早いと思います。 Re:VIEWの初期生成 ディレクトリを用いたい場合は、 make init とすれば ./articles 以下を初期化できます。   よりよい Re:VIEW+ CSS 組版環境にしたいと思っています。もしなにかお気付きの場合はPRを作っていただくか、issueをお待ちしています。もしくは Twitter で @at_grandpa までご連絡ください。   前回はデザインに時間を取られてしまいましたが、今回はそこは反省点として、しっかりと執筆時間を確保したいと思います。 抽選受かってほしい!当日、みなさんお会いしましょう!

A painter and a black cat: jus共催 第40回記念光明星節シェル芸勉強会 に参加しました

さんが約6年前に追加

jus共催 第40回記念光明星節シェル芸勉強会

jus共催 第40回シェル芸勉強会リンク集 | 上田ブログ

null

jus共催 第40回記念光明星節シェル芸勉強会

北朝鮮シェル芸地獄巡り(しなさい)出題: サムネイルの画像: から

午前:鳥海さんの資料

reveal.js

Unicodeの用語解説 * UCS * ISO/IEC 10646が定義する文字コード集合のこと * 4バイトの符号のUCS-4とそのサブセットのUCS-2がある * UTF * UCSで文字に対応付けた符号位置をコンピュータが利用できるバイト列に変換する方式のこと

知見

Unicode Consortium は 面白いUnicodeの仕様の宝庫

たとえば、これとか
https://unicode.org/Public/UNIDATA/NamesList.txt

他にもいっぱいある
https://unicode.org/Public/UNIDATA/

sed(ここから、ここまで、で抜き出す)

よく忘れて毎回ググる

$ cat a
1972 ミュンヘン        1  1  3  5
1976 モントリオール    1  1  0  2
1980 モスクワ          0  3  2  5
1984 ロサンゼルス      不参加
1988 ソウル            不参加
1992 バルセロナ        4  0  5  9
1996 アトランタ        2  1  2  5
2000 シドニー          0  1  3  4
2004 アテネ            0  4  1  5
2008 北京              2  1  3  6
2012 ロンドン          4  0  2  6
2016 リオデジャネイロ  2  3  2  7
1964 インスブルック     0  1  0  1
1968 グルノーブル       不参加
1972 札幌               0  0  0  0
1976 インスブルック     不参加
1980 レークプラシッド   不参加
1984 サラエボ           0  0  0  0
1988 カルガリー         0  0  0  0
1992 アルベールビル     0  0  1  1
1994 リレハンメル       不参加
1998 長野               0  0  0  0
2002 ソルトレイクシティ 不参加
2006 トリノ             0  0  0  0
2010 バンクーバー       0  0  0  0
2014 ソチ               不参加

$ cat a | sed -n '/1972 ミュンヘン/,/2016 リオデジャネイロ/p'
1972 ミュンヘン        1  1  3  5
1976 モントリオール    1  1  0  2
1980 モスクワ          0  3  2  5
1984 ロサンゼルス      不参加
1988 ソウル            不参加
1992 バルセロナ        4  0  5  9
1996 アトランタ        2  1  2  5
2000 シドニー          0  1  3  4
2004 アテネ            0  4  1  5
2008 北京              2  1  3  6
2012 ロンドン          4  0  2  6
2016 リオデジャネイロ  2  3  2  7

numsum

パイプ越しに複数の数字を流すと全部足してくれる便利なコマンドnumsum

俺的備忘録 〜なんかいろいろ〜 - 『numutils』でLinuxコンソール上での計算を簡単に行えるようにする

shuf -rn3

  • rオプション:入力の中からランダムに選択して無限に表示
  • n3オプション:3個だけ出力
$ echo -e "a\nb\nc"|shuf -rn3
c
a
a
$ echo -e "a\nb\nc"|shuf -rn3
b
b
a

このやり方は重複順列ですね。aaaとかbbbもあり得ます。

Unicode正規化

私も以前から困っていた件なので、Unicode正規化シェル芸を作っていました。

Unicode正規化 変換するワンライナー

記号と1,2,A,zでだけで作る難読化シェル芸

LTしました。難読化シェル芸の集大成!

以下に詳細をまとめています。

記号と1,2,A,zでだけで作る難読化シェル芸

ワタナベ難読化シェル芸

隊長さんのワタナベエンコードが夢のバージョンアップ!
マルチバイト文字対応でもはや死角なし

そしてowariコマンド、意外に業務で使えそうなユースケースがあって草草

ソースはこちらだそうです
https://gihub.com/xztaityozx/owari

その他

えびボクサー、かにゴールキーパー、いかレスラーなど(なんだこれwww)

A painter and a black cat: jus共催 第39回年末シェル芸勉強会 と SECCON 2018 Akihabara に参加しました

さんが6年以上前に追加

最近イベントが重なった結果、ブログも一記事になっちゃう仕方ないね。

jus共催 第39回コートなしで自宅から締め出されたりしないでね年末シェル芸勉強会

jus共催 第39回シェル芸勉強会リンク集 | 上田ブログ

null

jus共催 第39回コートなしで自宅から締め出されたりしないでね年末シェル芸勉強会

2018年12月22日さくらインターネットさんのセミナールームにて。ハイライト:・鳥海さんの面白い話が終わらないので年を越して次回もやることになった・シンガポールから参戦@東京会場・何気ない「今回..

午後はSECCONに行ったので、断腸の思いで午前だけ参加したのだが、午後も知見に溢れており、やはり体が2つ欲しかった。

知見

pup

htmlをインプットにjQueryのようにDOMを操作できるコマンド

pup
https://github.com/EricChiang/pup

こんな感じで使う。テーブルからリンクを抜き出すとか。

$ curl -s https://news.ycombinator.com/ | pup 'table table tr:nth-last-of-type(n+2) td.title a attr{href}'
https://github.com/e-oj/Magic-Grid
from?site=github.com
https://torrentfreak.com/canada-prohibits-piracy-settlement-demands-in-isp-copyright-notices-181218/
from?site=torrentfreak.com
http://www.gurobi.com/company/news/announcement
from?site=gurobi.com
・
・
・
・

スクレイピングにも一役買いそう。すごい便利そう。

ワタナベ難読化シェル芸

発想が天才のそれ
腹痛いwwww

【邊邊邊邉】ワタナベ難読化シェル芸と辺エンコーディングの誕生【辺辺辺辺】

@xztaityozx_001 氏の難読化シェル芸新作からTwitterでも使える斬新なエンコーディング方式が誕生。第39回シェル芸勉強会の大阪LTにて。シェル芸勉強会本編はこちら()

クソコラを作ってしまった。。
SECCON中に突然アイデアが降ってきて作らずにはいられなかった。しばらくそれしか考えられなかった。
リビドーを抑えきれなかった。

ユニコード戦記 ─文字符号の国際標準化バトルは面白そう

鳥海さんに「読んだ?読んだ?」と聞かれて煽られてしまったので、早めに読まねば

ユニコード戦記 ─文字符号の国際標準化バトル

ちなみに近所の図書館は貸し出し中。げふん

SECCON 2018 Akihabara

今年の決勝大会は秋葉原

SECCON 2018 Akihabara 2018.12.22(sat)-23(sun)

情報セキュリティをテーマに多様な競技を開催する情報セキュリティコンテスト SECCON。2018年12月22-23の2日間秋葉原で行われるSECCON2018 Akihabaraの情報ページです。

私達のチームは予選落ちだったので、ずっとカンファレンスの方を聞いてた。
面白かったのは、フリーダムなLTのssmjpと、Tsurugi Linux、radare2のやつでした。

2019年はssmjp登壇を目標にしたいと思いまし

radare2

スーパーバイナリ解析ツール

$ r2 /bin/ls     # 起動
$ r2 -w /bin/ls  # 起動(ファイル書き込み許可)
$ r2 -d /bin/ls  # 起動(デバックモード)
$ r2 -N /bin/ls  # 起動(設定ファイル無しで起動)
$ r2 -           # Alias for r2 malloc://512
$ r2 --          # ファイルなしで起動
s  # seek
px # print hexdump
pd # print disassembly
wx # write hexpairs
wa # write assembly
aa # analyse all (aaaもある)
q  # quite
V  # Visual mode
VV # Access graph view (Move hjkl,Zoom +/-)
e as.describe=true # Add ASM description
e scr.color=3      # Enable truecolor
e scr.utf8=true    # Use UTF-8
e io.cache=true    # Enable temporary write
db # Set breakpoint
dc # continue execution
ds # step 

詳細はRadare2参照

その他

友人にめっちゃ日本酒とお料理美味しいお店教えてもらった
そのうちまた行きたい

A painter and a black cat: jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会 と AVTOKYO に参加しました

さんが6年以上前に追加

jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会

私の所業でググられビリティを下げてしもたw

jus共催 第38回シェル芸勉強会リンク集 | 上田ブログ

null

jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会

シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会です。2018年11月3日さくらインターネットさんのセミナールームにて。問題と解答:

午後はAVTOKYOに行ったので、泣く泣く午前だけ参加したのだが、午後も知見に溢れており、やはり体が2つ欲しかった。

知見

SJISのポは"|"が含まれているポ系ダメ文字であり、難読化に応用できる。

素晴らしい

例もモヤモヤしたキリル文字は数値の表現だった。ちなみに1000万と1億も存在する。

 ҈  U+0488 10万
 ҉  U+0489 100万
 ꙰  U+A670 1000万
 ꙱  U+A670 1億

ユニコード戦記 ─文字符号の国際標準化バトルは面白そう

面白そう

ユニコード戦記 ─文字符号の国際標準化バトル

AVTOKYO2018

言わずもがな毎年CODEBLUEの後に行われるセキュリティ系イベント(飲み会)

AVTOKYO2018 - AVTOKYO JP

AVTOKYO は コンピュータセキュリティについて真摯に語り合うコミュニティベースの日本のカンファレンスです。合言葉は「no drink,no hack」です。

メインのプレゼントと同時にOSINT CTF や ハードウェアハッキングのワークショップ、ツール紹介などがあり、これも体が足りない。
酒飲みながらLT聞くの大好きなので、ずっとメインのプレゼン聞いてた。

エナジードリンク交換会があったのに、忘れた痛恨のミス。非売品のレア物を持っているのだが~

そういえば、去年に比べてちょっとだけ英語が解るようになってきた気がする。毎日ちょっとずつ勉強してるかいがあったか。

頂いた入場カードはUSBメモリが仕込まれている。中身はTSURUGI Linux

DEFT Linuxの開発者が作ったらものらしい。
TSURUGI Linuxのプレゼンは、途中でPCが強制WindowsUpdateを初めてスライドを映せなくなってた。これは怖い他人事ではない。
Forengicsの仕事はしていないけれど、OSINTツールも入っているっぽいので気になる。

20181104_avtokyo1.jpg
20181104_avtokyo2.jpg

メモリが入っているなんてわからないし、財布に入るし、スパイツールみたいでカッコイイです

(31-40/155)

他の形式にエクスポート: Atom