News
SCPFmaskコマンドを作成した
SCPFmask¶
本ツールはSCP財団管轄下の█████████より██████████████の旨通達があり、███████████としたものです。
そのため████████████における██████████████████████████████として公開しています。
Edge(Chorme)のヘッドレスモードでSPAのページをcurlみたく出力する
(1 comment)
動機¶
以前はサイトのDOMを参照するときcurlを使っていて、それはそれは便利だったんですが近年SPAとか動的にDOM構築するサイトが増えるようになって、ぜんぜん使えなくなりました。
かといって、SeleniumやPuppeteerやBeautiful SoupやSplashなんかを使うとプログラミングする必要がでてきて面倒だなぁ・・・となっていました。なんか色々インストールすることなくcurlみたいにお手軽に使いたいだけだし、1行でやりたい。。シェル芸したいんじゃ。。
という訳でCUIでChromeをヘッドレスモードで呼び出せばいいじゃんっていう話なんですが、SPAの時、JavaScriptがDOM構築を完了するまでどうやって待ち合わせるか、そもそもそういうオプションあるのかしら…とずっと思っていました。でも、最近ようやくわかったんですね!!!1!あったわ、オプションありましたわ…!
あと、Windows環境であれば標準で入っているEdgeをヘッドレスモードで動かせるので、それをWSLで動くようにしたい~
というという訳でツールを作った¶
EdgeHeadless.sh
#!/bin/bash
# EdgeのヘッドレスモードでSPAのページをcurlみたく出力する ver 0.1
Edge="/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"
"$Edge" --headless --enable-logging --dump-dom --virtual-time-budget=10000 $1 $2 $3 $4 $5 $6 $7 $8 $9
Edgeの実行ファイルPATHをChromeのそれに置き換えても動くと思います。
たまに以下のエラーで返ってくる時があるんだけどその時はもう一回実行してください(リトライ処理を書くのをサボっている)
TypeError: Cannot read properties of null (reading 'outerHTML')
ではちょっと試してみましょう。
ちょっと適切なサイトが思い浮かばなかったので内閣サイバーセキュリティセンターで試してみます。
そうですね。。ではこの中の下の方にある「情報セキュリティ教育用教材」のリンクを取得してみましょう。
まず、ここの内容はJavaScriptで動的にDOMを構築しているようなのでcurlで取得できません。
$ curl -s https://www.nisc.go.jp|grep 情報セキュリティ教育用教材
curlだと何も引っかからないですね。では、今回作ったツールでやってみます。
$ ./EdgeHeadless.sh https://www.nisc.go.jp|grep 情報セキュリティ教育用教材 <div title="ランサムウェア対策について" data-href="https://security-portal.nisc.go.jp/stopransomware/"><span style="background-image: url("/img/banner01.jpg");"></span><p>ランサムウェア対策について</p></div><div title="参照すべき関係法令をQ&A形式で解説" data-href="https://security-portal.nisc.go.jp/guidance/law_handbook.html"><span style="background-image: url("/img/banner02.jpg");"></span><p>参照すべき関係法令をQ&A形式で解説</p></div><div title="セキュリティが分からなければこの1冊" data-href="https://security-portal.nisc.go.jp/guidance/handbook.html"><span style="background-image: url("/img/banner03.jpg");"></span><p>セキュリティが分からなければこの1冊</p></div><div title="IPA情報セキュリティ・ポータルサイト" data-href="https://www.ipa.go.jp/security/kokokara/"><span style="background-image: url("/img/banner04.jpg");"></span><p>IPA情報セキュリティ・ポータルサイト</p></div><div title="みんなで使おう サイバーセキュリティ・ポータルサイト" data-href="https://security-portal.nisc.go.jp/"><span style="background-image: url("/img/banner05.png");"></span><p>みんなで使おう サイバーセキュリティ・ポータルサイト</p></div><div title="情報セキュリティ教育用教材" data-href="/policy/group/general/kyozai-booklet.html"><span style="background-image: url("/img/banner06.jpg");"></span><p>情報セキュリティ教育用教材</p></div></div>
はい取れました!じゃぁシェル芸してリンクだけ抜き出します。
$ ./EdgeHeadless.sh https://www.nisc.go.jp|tr '<>' \\n\\n |grep 情報セキュリティ教育用教材|head -1|awk -F= '{print $3}' "/policy/group/general/kyozai-booklet.html"
はいリンク取れましたスッキリした~
SharePointのドキュメントのURLが長いことに対する次善の策
(1 comment)
動機¶
SharePointのドキュメントのURLが長すぎてちょいちょい困る
メールを書いていた時のこと
hogehogeさま kanataです。 ご要望のドキュメントは以下になります。 https://example.sharepoint.com/teams/xxxxxxxxxx/Share%20Document/General/ %E5%8F%82%E8%80%83%E8%B3%87%E6%96%99/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92 %E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/01_%E8%A6%81%E4%BB %B6%E5%AE%9A%E7%BE%A9/02_%E3%81%B5%E3%81%92%E3%81%B5%E3%81%92%E8%A8%AD%E8 %A8%88/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%E4%BB%95%E6%A7%98%E3%81%AB%E3 %81%A4%E3%81%84%E3%81%A6.xlsx?d=19dd17a1440c5829af4d9wsf6c6w7baag5&csf=1& e=G7HZb6
長!これは・・・
長くて困る。けっこう困る。これが色々な所に書いてあるのを想像してみて。。
メールだけじゃなく、チャットもフォーラムも社内掲示文書も全部こうなっちゃう
世界がURLで溢れ返る
機密性のある情報だとbit.lyとかを使うわけにもいかず
メーラーによっては折り返されたりしてURLが壊れるし
URLからフォルダの階層やファイル名が読み取れると嬉しいんだけど、これだとぜんぜんわからん。。
う~ん、こう書いてみたらどうだろう
hogehogeさま kanataです。 ご要望のドキュメントは以下になります。 格納先(https://example.sharepoint.com) 一般/参考資料/ほげほげプロジェクト/01_要件定義/02_ふげふげ設計/ほげほげ仕様について.xlsx
うん、まぁこれなら・・・と思ったんだけれど、このファイルパスをSharePointから取得できないので手作業で打つしかない。しんどい無理。
SharePointのURLを短く(読みやすくする)する工夫¶
結局、これで多少良くなる
URLエンコードを元の日本語(UTF-8)に戻す( 日本語に戻しても最近のブラウザは、このURLをよしなに解釈してくれます たいていのユースケースでは問題にならないハズ )
URLの?以降は削除できる(ちょっと短くできる)
これをシェル芸でやってみます
$ URL='https://example.sharepoint.com/teams/xxxxxxxxxx/Share%20Document/General/%E5%8F%82%E8%80%83%E8%B3%87%E6%96%99/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/01_%E8%A6%81%E4%BB%B6%E5%AE%9A%E7%BE%A9/02_%E3%81%B5%E3%81%92%E3%81%B5%E3%81%92%E8%A8%AD%E8%A8%88/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%E4%BB%95%E6%A7%98%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.xlsx?d=19dd17a1440c5829af4d9wsf6c6w7baag5&csf=1&e=G7HZb6' $ printf '%b\n' "${URL//%/\\x}"|cut -d'?' -f 1 https://example.sharepoint.com/teams/xxxxxxxxxx/Share Document/General/参考資料/ほげほげプロジェクト/01_要件定義/02_ふげふげ設計/ほげほげ仕様について.xlsx
ふんふん、だいぶ読みやすくなりました。
こんな感じにするとパンくずリストっぽいのも作れますね
$ printf '%b\n' "${URL//%/\\x}"|cut -d'?' -f 1|cut -d'/' -f 7-|sed 's|/| > |g' General > 参考資料 > ほげほげプロジェクト > 01_要件定義 > 02_ふげふげ設計 > ほげほげ仕様について.xlsx
という訳でツールを作った¶
GetSharePointPATH.sh
#!/bin/bash # 引数チェック if [ -z "$1" ] then echo "引数にURLが必要です" exit 1 fi # URLデコードして出力 echo printf '%b\n' "${1//%/\\x}"|cut -d'?' -f 1 # パンくずリスト生成 # cut -d'/' -f 7- の7の所は環境によって数字を増減させて調整してみて echo printf '%b\n' "${1//%/\\x}"|cut -d'?' -f 1|cut -d'/' -f 7-|sed 's|/| > |g' exit 0
試す
$ ./GetSharePointPATH.sh 'https://example.sharepoint.com/teams/xxxxxxxxxx/Share%20Document/General/%E5%8F%82%E8%80%83%E8%B3%87%E6%96%99/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/01_%E8%A6%81%E4%BB%B6%E5%AE%9A%E7%BE%A9/02_%E3%81%B5%E3%81%92%E3%81%B5%E3%81%92%E8%A8%AD%E8%A8%88/%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%E4%BB%95%E6%A7%98%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.xlsx?d=19dd17a1440c5829af4d9wsf6c6w7baag5&csf=1&e=G7HZb6' https://example.sharepoint.com/teams/xxxxxxxxxx/Share Document/General/参考資料/ほげほげプロジェクト/01_要件定義/02_ふげふげ設計/ほげほげ仕様について.xlsx General > 参考資料 > ほげほげプロジェクト > 01_要件定義 > 02_ふげふげ設計 > ほげほげ仕様について.xlsx
この出力結果をメールにコピペすればいいようになりました!
このツールを添付しておきます
Microsoftさんが短縮URL機能を作ってくれるまでこれでしのごっと
jus共催 第50回記念我々は50回も何をやってるんだろうシェル芸勉強会 に参加させて頂きました!
jus共催 第50回シェル芸勉強会リンク集 | 上田ブログ¶
このサイトではGoogle AdSenseやその他ソーシャルボタンのためにCookieを使用しています。もし同意いただけない場合はブラウザでクッキーを無効にして閲覧をお願いします。
jus共催 第50回記念我々は50回も何をやってるんだろうシェル芸勉強会¶
2020年11月7日 YouTubeで配信
大量データの処理って仕事でも使うからとても勉強になります
知見¶
使わないと忘れちゃって、その度にググっちゃうという…
奇数行だけ抜き出す、偶数行だけ抜き出す¶
大量データを並行処理するコツとして、ファイルを分割して処理する方法があると学びまして、
その分割方法の一つが偶数行と奇数行で分割する方法です。peeと組み合わせて使うと並列処理できますね。
$ seq 10|sed -n 1~2p
1
3
5
7
9
$ seq 10|sed -n 2~2p
2
4
6
8
10
横に並べる¶
やんないと本当に忘れる。foldとcolumnとごっちゃになる。
毎回ググってる。
$ seq 10|paste - -
1 2
3 4
5 6
7 8
9 10
$ seq 10|paste - - -
1 2 3
4 5 6
7 8 9
$ seq 10|paste - - - -
1 2 3 4
5 6 7 8
9 10
xargsの定型句¶
並列処理の王、xargsの真の使い方
$ seq 5|xargs -I@ -P0 bash -c 'echo xx@xx'
xx1xx
xx2xx
xx3xx
xx4xx
xx5xx
- -P0 # 並列処理する
- -I@ # パイプからもらう入力を表現する文字として@を使用する
- bash -c # こう書いておくと引数にシェル芸が書けるから便利
Software Design 2020年9月号に寄稿しました
Software Design 2020年9月号の 現場で役立つユースケースを厳選 エピソードで覚えるUnixコマンド[第2弾]という特集の一部を執筆しました。dateとtputのお役立ちな使い方を書きました!他にもすごい執筆陣の方々がお役立ちコマンドを紹介されております。
個人的には、結城 浩さんによる私の好きな「難読化」の記事や、高校ではやらなくなったと噂の行列計算の基本など興味深い記事が目白押しでございます。
8/18発売です!
Software Design9月号に私も書いたので各位買うといいよ!
— kanata📓技術書典9 (@kanata201612) August 16 2020
8/18発売だよ! 4冊買うといいよ! #gihyosd pic.twitter.com/tjkrYvTZHf
結城さんによる難読化の記事とか、高校でやらなくなったと噂の行列計算の記事とかあるよ! #gihyosd
— kanata📓技術書典9 (@kanata201612) August 16 2020
おもしろい https://t.co/gHMw1dtiX9
書籍といえば技術書典9でも薄い本を出す予定です
CyberChefとシェル芸 で詳細を公開しています
あとssmjp同人部でも書かせてもらっているのですがその話はまた今度
jus共催 第49回ボンバイエシェル芸勉強会
上田さんがリンクをまとめてくださるはず
jus共催 第49回ボンバイエシェル芸勉強会¶
2020年8月15日YouTube liveにて。動画:
とても楽しい
知見¶
けっこう長いことお邪魔させて頂いておりますが、未だに新しいコマンドや使い方を知れるのすごい
errno¶
Linuxの標準エラーコードを探せる
一覧を出すときはこう
$ errno -l
EPERM 1 Operation not permitted
ENOENT 2 No such file or directory
ESRCH 3 No such process
EINTR 4 Interrupted system call
EIO 5 Input/output error
ENXIO 6 No such device or address
E2BIG 7 Argument list too long
ENOEXEC 8 Exec format error
EBADF 9 Bad file descriptor
ECHILD 10 No child processes
EAGAIN 11 Resource temporarily unavailable
ENOMEM 12 Cannot allocate memory
EACCES 13 Permission denied
EFAULT 14 Bad address
ENOTBLK 15 Block device required
EBUSY 16 Device or resource busy
EEXIST 17 File exists
EXDEV 18 Invalid cross-device link
ENODEV 19 No such device
ENOTDIR 20 Not a directory
EISDIR 21 Is a directory
EINVAL 22 Invalid argument
ENFILE 23 Too many open files in system
EMFILE 24 Too many open files
ENOTTY 25 Inappropriate ioctl for device
ETXTBSY 26 Text file busy
EFBIG 27 File too large
ENOSPC 28 No space left on device
ESPIPE 29 Illegal seek
EROFS 30 Read-only file system
EMLINK 31 Too many links
EPIPE 32 Broken pipe
EDOM 33 Numerical argument out of domain
ERANGE 34 Numerical result out of range
EDEADLK 35 Resource deadlock avoided
ENAMETOOLONG 36 File name too long
ENOLCK 37 No locks available
ENOSYS 38 Function not implemented
ENOTEMPTY 39 Directory not empty
ELOOP 40 Too many levels of symbolic links
EWOULDBLOCK 11 Resource temporarily unavailable
ENOMSG 42 No message of desired type
EIDRM 43 Identifier removed
ECHRNG 44 Channel number out of range
EL2NSYNC 45 Level 2 not synchronized
EL3HLT 46 Level 3 halted
EL3RST 47 Level 3 reset
ELNRNG 48 Link number out of range
EUNATCH 49 Protocol driver not attached
ENOCSI 50 No CSI structure available
EL2HLT 51 Level 2 halted
EBADE 52 Invalid exchange
EBADR 53 Invalid request descriptor
EXFULL 54 Exchange full
ENOANO 55 No anode
EBADRQC 56 Invalid request code
EBADSLT 57 Invalid slot
EDEADLOCK 35 Resource deadlock avoided
EBFONT 59 Bad font file format
ENOSTR 60 Device not a stream
ENODATA 61 No data available
ETIME 62 Timer expired
ENOSR 63 Out of streams resources
ENONET 64 Machine is not on the network
ENOPKG 65 Package not installed
EREMOTE 66 Object is remote
ENOLINK 67 Link has been severed
EADV 68 Advertise error
ESRMNT 69 Srmount error
ECOMM 70 Communication error on send
EPROTO 71 Protocol error
EMULTIHOP 72 Multihop attempted
EDOTDOT 73 RFS specific error
EBADMSG 74 Bad message
EOVERFLOW 75 Value too large for defined data type
ENOTUNIQ 76 Name not unique on network
EBADFD 77 File descriptor in bad state
EREMCHG 78 Remote address changed
ELIBACC 79 Can not access a needed shared library
ELIBBAD 80 Accessing a corrupted shared library
ELIBSCN 81 .lib section in a.out corrupted
ELIBMAX 82 Attempting to link in too many shared libraries
ELIBEXEC 83 Cannot exec a shared library directly
EILSEQ 84 Invalid or incomplete multibyte or wide character
ERESTART 85 Interrupted system call should be restarted
ESTRPIPE 86 Streams pipe error
EUSERS 87 Too many users
ENOTSOCK 88 Socket operation on non-socket
EDESTADDRREQ 89 Destination address required
EMSGSIZE 90 Message too long
EPROTOTYPE 91 Protocol wrong type for socket
ENOPROTOOPT 92 Protocol not available
EPROTONOSUPPORT 93 Protocol not supported
ESOCKTNOSUPPORT 94 Socket type not supported
EOPNOTSUPP 95 Operation not supported
EPFNOSUPPORT 96 Protocol family not supported
EAFNOSUPPORT 97 Address family not supported by protocol
EADDRINUSE 98 Address already in use
EADDRNOTAVAIL 99 Cannot assign requested address
ENETDOWN 100 Network is down
ENETUNREACH 101 Network is unreachable
ENETRESET 102 Network dropped connection on reset
ECONNABORTED 103 Software caused connection abort
ECONNRESET 104 Connection reset by peer
ENOBUFS 105 No buffer space available
EISCONN 106 Transport endpoint is already connected
ENOTCONN 107 Transport endpoint is not connected
ESHUTDOWN 108 Cannot send after transport endpoint shutdown
ETOOMANYREFS 109 Too many references: cannot splice
ETIMEDOUT 110 Connection timed out
ECONNREFUSED 111 Connection refused
EHOSTDOWN 112 Host is down
EHOSTUNREACH 113 No route to host
EALREADY 114 Operation already in progress
EINPROGRESS 115 Operation now in progress
ESTALE 116 Stale file handle
EUCLEAN 117 Structure needs cleaning
ENOTNAM 118 Not a XENIX named type file
ENAVAIL 119 No XENIX semaphores available
EISNAM 120 Is a named type file
EREMOTEIO 121 Remote I/O error
EDQUOT 122 Disk quota exceeded
ENOMEDIUM 123 No medium found
EMEDIUMTYPE 124 Wrong medium type
ECANCELED 125 Operation canceled
ENOKEY 126 Required key not available
EKEYEXPIRED 127 Key has expired
EKEYREVOKED 128 Key has been revoked
EKEYREJECTED 129 Key was rejected by service
EOWNERDEAD 130 Owner died
ENOTRECOVERABLE 131 State not recoverable
ERFKILL 132 Operation not possible due to RF-kill
EHWPOISON 133 Memory page has hardware error
ENOTSUP 95 Operation not supported
uniname¶
オフセット、バイトオフセット、hex、エンコード、グリフ、名前を調べられる
$ echo 難読化シェル芸|uniname
No LINES variable in environment so unable to determine lines per page.
Using default of 24.
character byte UTF-32 encoded as glyph name
0 0 0096E3 E9 9B A3 難 CJK character Nelson 5038
1 3 008AAD E8 AA AD 読 CJK character Nelson 4375
2 6 005316 E5 8C 96 化 CJK character Nelson 350
3 9 0030B7 E3 82 B7 シ KATAKANA LETTER SI
4 12 0030A7 E3 82 A7 ェ KATAKANA LETTER SMALL E
5 15 0030EB E3 83 AB ル KATAKANA LETTER RU
6 18 0082B8 E8 8A B8 芸 CJK character Nelson 3908
7 21 00000A 0A LINE FEED (LF)
めっちゃ便利
rg(ripgrep)¶
Rust製のすごいgrepのようだ
openssl prime¶
opensslで素数の判定ができるなんて知らなかったー!
$ openssl prime `seq 15` 1 (1) is not prime 2 (2) is prime 3 (3) is prime 4 (4) is not prime 5 (5) is prime 6 (6) is not prime 7 (7) is prime 8 (8) is not prime 9 (9) is not prime A (10) is not prime B (11) is prime C (12) is not prime D (13) is prime E (14) is not prime F (15) is not prime
tr -dc¶
- -dオプションは「指定した文字を取り除く」
- -dcオプションは「指定した文字だけ残す」
$ echo a1b2c3d4 | tr -dc abcd abcd $ echo a1b2c3d4 | tr -d abcd 1234
stringsみたいに使えるし、stringsよりもカスタマイズができますね
jus共催 第48回引きこもりシェル芸勉強会
jus共催 第48回シェル芸勉強会リンク集 | 上田ブログ¶
Mon Jun 29 21:19:34 JST 2020 (modified: Wed Jul 1 09:00:25 JST 2020) 2020年6月27日土曜日、 日本UNIXユーザ会 さんとシェル芸勉強会を共催いたしました。今回もコロナウイルス禍のため、拙宅からYouTubeでオンライン開催しました。皆様、オンラインでのリアクション、二次会での暴言へのリアクション、誠にありがとうございました。 色塗りました.増分はまた今夜にでも足しますー #シェル芸 jus共催 第48回引きこもりシェル芸勉強会 - Togetter https://t.co/YiPUc4HPYu @togetter_jp より- 上田 隆一 (@ryuichiueda) June 28 2020 LTやります。配信できたらツイートいただけると幸いです? https://t.co/UBB0Q4WjlJ #シェル芸 - taka@SIではたらくフレンズ (@amanoese) June 27 2020 では、次のLTいきますー。こちらのURLになります。 https://t.co/V1iwCeD7uj 音声と映像大丈夫そうでしたらお伝え下さいー。#シェル芸 - ぐれさん😉 (@grethlen)
jus共催 第48回引きこもりシェル芸勉強会¶
主にプロセスについて勉強しました。激しかったです。
とても楽しい
知見¶
ここらへんの知見については自分で本を書いておきながら忘れてたりする
catの代替¶
ビルトインなので、たとえ/usr/bin/catが吹き飛んだとしてもこれでなんとかできる
$ echo hoge > hoge
$ cat hoge
hoge
$ echo $(<hoge)
hoge
サブシェルとexec¶
サブシェル¶
子のbashをforkして、その先で実行する
実行終了まで待ち合わせる
変数とかカレントディレクトリとか引き継がない
$ pwd
/tmp
$ (mkdir -p test;cd test;touch hoge)
$ pwd
/tmp
&でバックグラウンド実行するのと似ているけど、こっちは子プロセスを作らないので変数とかカレントディレクトリとかは、そのまま
exec¶
自分自身のbashが、実行したコマンドのプロセスに置き換わると思えばいい
以下だとbashがsleepに置き換わるが、sleep自体は3秒立ったら終了するため、3秒後にターミナルごと落ちる
$ exec sleep 3
execはリダイレクト先を切り替える機能もある
$ exec > hoge # 標準出力をファイルに切り替える
$ exec > /dev/tty # シェルの標準出力先を画面に戻す
今回のシェル芸勉強会の問題を解くには、標準入力を切り替える必要があった
LT¶
この2つのLTはとても面白かったので、是非見て
Technopop shell-gei¶
soxというコマンドを使うとシェル芸で音が鳴らせるよ!という内容
すばらしい…
ワイも音シェル芸を以前やろうとしててtxt2wavの作者の方に許可を頂いて、周波数をインプットに音楽を作り出そうとしたんだけれど挫折した経緯が…
周波数を扱うレイヤから、楽曲まで昇華させるの実はすんごい難しかったです
takaさんは周波数をbcで見事に計算して、そして音楽を奏でていた
素晴らしかった(こなみ)
シェル芸人に必要なのは「マスキングテープ」だったのでは¶
なんかもぅ…すごすぎて説明できない(語彙力)
Youtubeみて頂けたらと
ほんとこれはパラダイムシフトの瞬間を目の当たりにしたような衝撃を…覚えました
今まで、「あ、これはう~ん、しょうがないpython(とか)で書くか…」という事が多々あったんですよね
主に処理時間的な意味で
teipがあれば、全部シェル芸でできる…!最高か
使っていきます
オンラインホワイトボードサービスmiroヤバい
TL;DR¶
miroというヤバすぎサービスがある
- ホワイトボードのように使える
- 複数人で編集できる
- 付箋はれる
- お絵かきできる
- KJ法の表現
- フロー図書ける
- などなどのテンプレートが沢山用意されてる
- マインドマップ書ける
- これら全部、範囲を指定して スライドにできる
- そのスライドはpdfとか画像で エクスポートできる
なんかもういろんな用途に使えそうですが、特にプレゼンテーション用途でビビッときました
最強では…
よくわかるmiroの紹介¶
この記事がわかりやすかったです
発端¶
えびすセキュリティボーイズ#2 -Learning Books-で、渡辺洋司さんがmiroを使ってLTしてくださいました
発表資料¶
ACM 会員になってオライリーのセキュリティ原書を DeepL に読んでもらう。
https://miro.com/app/board/o9J_ktc3EUY=/
readonlyの状態でmiroが触れるので、いろいろ触ってみるといいです
資料の中身自体もおもしろいので是非
触ってみた雰囲気¶
渡辺さんの発表資料をもとに触ってみる
全体像¶
ホワイトボードのように使えるので、マインドマップを中心に付加情報を表現しているようです
好きに書いて"frame"という機能で囲めば、それがスライドの1枚になります
しかもスライド間でオーバーラップできるんですよね。これすごい便利では。。
プレゼンテーションだと、前のスライドと次のスライドの話の繋がりとか意識しなきゃいけなかったけど、オーバラップできたら悩まなくてすみそう!
プレゼンテーションのアウトライン書いたらそのままスライドにできる勢いある
左のスライドをクリックするとフォーカスされる¶
フォーカス後も画面は動かせるので、マウスぐりぐりして周りの関連情報も見せることができる
これLTしてて相手の反応をみて「あ、こっちに興味ありそう」ってなったら、スライドにしてない情報も、その場でみせれるってことですよね
これまでのプレゼンテーションツールだと、それがやりにくかったのが解決できてる…!
スライドは全画面表示できる¶
全画面表示できるしpdfエクスポートできるので、完全にプレゼンテーションツールとして使えますね!
でもオンラインなら、フォーカスした状態で使った方がよさそう
マインドマップ¶
マインドマップ作れて嬉しい
マインドマップって、なんかこうコレ!っていうソフトを見つけられなくて困ってたんだけど、これでよさそう
jus共催 第47回引きこもりシェル芸勉強会
jus共催 第47回シェル芸勉強会リンク集 | 上田ブログ¶
2020年4月25日土曜日、日本UNIXユーザ会さんとシェル芸勉強会を共催いたしました。今回はコロナウイルス禍のため、拙宅からYouTubeでオンライン開催しました。皆様、オンラインでのリアクション、誠にありがとうございました。
オンラインでも殺しにきてる(順調に死亡)
知見¶
Unicodeもろもろの情報の入手¶
# apt install unicode-data
すると/usr/share/unicode配下にUnicodeに関するいい感じの情報が格納されます
/usr/share/unicode/emoji/emoji-data.txt とかよさそう
uninameコマンド¶
Unicodeに関してめっちゃ便利なツール群
ぱっと調べたら
— taka@SIではたらくフレンズ (@amanoese) April 25 2020
uninameコマンドなるものがあるらしい。https://t.co/t8aLV9BXj9#シェル芸
コマンド紹介 : uniutilsツール群 (Unicode関連コマンド)
https://yutarine.blogspot.com/2017/04/uniutils-unicode.html
一文字ずつの置換¶
よくtrでやってた。sedのyオプションでもできる
$ echo abcdef|tr abc ghi
ghidef
$ echo abcdef|sed 'y/abc/ghi/'
ghidef
Markdownで書いてシュッとCSS組版環境でpdfを出力する
コロナの影響で家にいるみなさまは時間があれば薄い技術書を作ればいいじゃない!
※当情報は、 2020/4月時点の情報です。時間の経過と共に使えるなくなる部分が出てくるかもしれません。。
- CSS組版とは
- Install & Setup
- 使い方
- Markdownで無理やりRe:VIEWの機能に対応させる
- Re:VIEW → html に変換するタイミングでやりたいことをなんとかする
- html → pdf に変換するタイミングでなんとかする
CSS組版とは¶
簡単にいうとhtmlが薄い本になります
なので、最低限HTML+CSSが理解できていれば本ができます!
まぁその…直接html書くのはそれはそれで骨が折れますけれど…
なので、楽な方法があります。軽量マークアップ言語で書いて本になればもっと楽ですよね!
そんな方法の話です
執筆環境の分類と整理¶
技術書同人誌勢の一定の割合の方は、Re:VIEWを使用して執筆していると思われます
① Re:VIEW形式のファイル → pdfファイル Re:VIEWで変換
Markdownで書きたい勢は、更にこんな感じで書いていると思われます
① Markdown形式のファイル → Re:VIEW形式のファイル md2reviewで変換 ② Re:VIEW形式のファイル → pdfファイル Re:VIEWで変換
Markdownで書きたい勢(ワイ)の中で、更にCSS組版したい場合はこんな感じです
① Markdown形式のファイル → Re:VIEW形式のファイル md2reviewで変換 ② Re:VIEW形式のファイル → htmlファイル Re:VIEWで変換 ③ htmlファイル → pdfファイル VivliostyleでCSS組版(ブラウザでpdf印刷) ④ pdfファイル → pdfファイル Microsoft Print to PDFでアウトライン化
メリット¶
- TEXの悪夢から(ほぼ)逃れられる
- 絵文字が使える😭😭😭
- CSSいじれればある程度なんでもできる
デメリット¶
- 環境構築に時間がかかる(まだ情報が少ないので)
Install & Setup¶
以下の環境を前提にしています
でもLinux環境だったら、だいたいいけるのでは
$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l
$ uname -a
Linux ubuntu 4.15.0-91-generic #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
使うソフトウェアは大きく以下になります
- md2review
- Re:VIEW
- Vivliostyle
- sed(GNUコマンド)
- Chrome(ブラウザ)
この内、Re:VIEWとVivliostyleがdockerコンテナになっているので、あまり意識しなくても大丈夫です
md2review¶
md2reviewは、MarkdownからRe:VIEWへ変換してくれるありがたいコマンドです
インストールは以下
# gem install md2review
ruby製のコマンドなので、rubyとbundleが要ります
入ってなかったらググって入れて
@at_grandpaさんのRe:VIEW+CSS組版 執筆環境¶
@at_grandpaさんの神環境により、一瞬でRe:VIEWとVivliostyleの環境が構築できます最高
2020.4月時点では、v0.2.0をダウンロードして…とありますが、最新版でも大丈夫でしょう
$ mkdir [執筆環境を入れるディレクトリ]
$ cd [執筆環境を入れるディレクトリ]
$ git clone https://github.com/at-grandpa/review-and-css-typesetting
$ cd review-and-css-typesetting*
$ make up docker/setup_npm docker/setup_bundler docker/setup_plantuml_jar # docker環境をセットアップする
dockerコンテナなので、dockerが要ります
入ってなかったらググって入れて
Macが前提になっている環境なので、LinuxでエラーがでないようにちょこちょこっとMakefileを修正します
$ vi Makefile - open $(HTML_URL) + echo $(HTML_URL) # openコマンド入ってないので
Vivliostyle CLI¶
2020.4に公開されたばかりのCUI版Vivliostyleです
これのすごいところは…
- ブラウザで表示しなくてもpdf出力できる(内臓のHeadless Chromeで)
- 文字のアウトライン化をしてくれるオプションがある(CSS組版勢がよくハマるところ)
ただ、まだなんか私の環境では上手く動きませんでした
今後に超期待
状況は以下を注視してもらればと
https://github.com/vivliostyle/vivliostyle-cli
使い方¶
とりあえずサンプルでCSS組版環境を試してみたい場合は、以下でできます
$ cd [執筆環境を入れるディレクトリ]/review-and-css-typesetting*
$ make browser
make docker/html
・
・
中略
・
・
http://0.0.0.0:8000/vivliostyle-js-2018.12.103/viewer/vivliostyle-viewer.html#x=http://0.0.0.0:8989/book.html
最後に出てきたURLをブラウザに打ち込めば見れるのですが、その前に0.0.0.0(2箇所)は自分のIPアドレスに置き換える必要があります
自分のIPアドレスは、以下で確認できます
$ hostname -I
$ ip a s|grep inet # ifconfigは無くなったんや…
見れましたか?これをブラウザの印刷機能で印刷すれば、とりあえずpdfができますね
さて、ここまで動いたら順を追ってやってみます
Markdownを書く¶
Markdownを書いたら以下でRe:VIEW形式に変換します
$ md2review hoge.md > chapter1.re
Re:VIEW形式のファイルをCSS組版環境に配置する¶
動いているサンプル環境に対して、少しずつファイルを入れ替えていくと動作確認しながら進めやすいと思います
$ cd [執筆環境を入れるディレクトリ]/review-and-css-typesetting*/articles
$ mv -i chapter1.re chapter1.re.bak # 削除してもいいですけどね
$ mv -i [さっき変換したRe:VIEW形式のファイル] chapter1.re
$ cd ..
$ make browser
で、また同じようにURLをブラウザに打ち込んで反映されているか確認してみてください
ディレクトリarticle配下は、Re:VIEWの環境なので章の追加やタイトルの変更方法は、Re:VIEWの仕様に準じます
設定ファイル的なものは、以下の2つだけ意識しておけば事足りるはずです
- config.yml
- catalog.yml
Markdownで無理やりRe:VIEWの機能に対応させる¶
これはもぅどうしようもないのですが、組版における表現の機能はMarkdownと比較するとRe:VIEWに軍配があがります
ここでは、特定の表現を主にMarkdownでなんとかするための方法を説明します
Markdown → Re:VIEW に変換するタイミングでなんとかする¶
脚注¶
これかなり困ってたんですが以下の書き方をすれば、md2reviewでいい感じに変換してくれました
これ[^脚注1]はいったい… [^脚注1]: これとはアレである
ただ、この脚注の説明が全部、章末に集まっちゃいました
Re:VIEWは、pdfに変換する際はいい感じにしれくれるんですが、htmlだとそうはいかないみたいです
なので、以下のようなシェル芸を作りました
何回も実行するのでシェルスクリプトにしておくと良いと思います
Re:VIEWに変換後のファイルに対して脚注を任意の行に移動できるようにしました
$ FILE="preface.re";FOOTNO="1";INSERTNO="19";FOOTNOTE=$(grep "^//footnote\[$FOOTNO\]" $FILE);sed -i -e "/^\/\/footnote\[$FOOTNO\].*/d" $FILE;sed -i -e "${INSERTNO}i ${FOOTNOTE}" $FILE
※冒頭の3つの変数を適宜書き換える
FILE : 対象のファイル名
FOOTNO : 上から数えて何番目の脚注か
INSERTNO : 移動先の行番号
画像の縮尺¶
Markdownは画像の縮尺の書き方に方言があるので、md2reviewで変換できません
これは以下のように工夫しました
まず、markdownでこう書きます

md2reviewで変換するとこうなります
//image[image][テスト画像 scale=0.5]{ //}
これを以下のように変換すればいいですね
//image[image][テスト画像][scale=0.5]{ //}
これはRe:VIEWに変換する際に合わせて置換すればいけます
$ md2review hoge.md|sed 's/ scale=/][scale=/g' > chapter1.re
表のサイズ¶
Markdownで書いた表の文字が枠を突き抜けることがあります
参考 【Re:VIEW】表のセル内でURLを折り返しする方法
これは、Re:VIEW上では表の列のサイズを指定することで解決できます
以下を表の冒頭に記載します
//tsize[60,60]
よってMarkdownにもあらかじめtsizeを書いておけばよさそうですが、表とくっつけて書くと表として認識されなくなります
なので、一行あけて書きましょう
# NG //tsize[60,60] | hoge | fuga | |------|------| | 1 | 2 | # OK //tsize[60,60] | hoge | fuga | |------|------| | 1 | 2 |
最終的にRe:VIEWに変換する際に開けた一行をくっつければいけます
$ md2review hoge.md|sed '/tsize.*/N;s/\n/ /' > chapter1.re
: さっきの画像の縮尺の対応と合わせるとこうなります
$ md2review hoge.md|sed 's/ scale=/][scale=/g'|sed '/tsize.*/N;s/\n/ /' > chapter1.re
表の名前¶
Markdownでは対応する機能がありません
md2reviewで変換すると表は順番に番号がつくのでそれを目印にして表名を挿入していきます
何回も実行するのでシェルスクリプトにしておくと良いでしょう
Re:VIEWに変換後のファイルに対して表名を設定できるようにしました
$ FILE="chapter1.re";TBLNO="1"; TITLE="ほげほげの表";sed -i -e "s/\/\/table\[tbl${TBLNO}\]\[/\/\/table\[tbl${TBLNO}\]\[${TITLE}/g" $FILE
$ FILE="chapter1.re";TBLNO="2"; TITLE="ふがふがの表";sed -i -e "s/\/\/table\[tbl${TBLNO}\]\[/\/\/table\[tbl${TBLNO}\]\[${TITLE}/g" $FILE
$ FILE="chapter1.re";TBLNO="3"; TITLE="こんな感じ";sed -i -e "s/\/\/table\[tbl${TBLNO}\]\[/\/\/table\[tbl${TBLNO}\]\[${TITLE}/g" $FILE
※冒頭の3つの変数を適宜書き換える
FILE : 対象のファイル名
TBLNO : 上から数えて何番目の表か
TITLE : 表の名前
Re:VIEW → html に変換するタイミングでやりたいことをなんとかする¶
改ページ¶
markdownは ---- で改ページするよう書く
前のページ ---- 次のページ
style.cssを編集
$ cd [執筆環境を入れるディレクトリ]/review-and-css-typesetting*/articles
$ vi style.css # ファイル末尾に以下を追加
+
+hr.page-wrap {
+ break-before: page;
+ visibility: hidden;
+ margin: 0px;
+ padding: 0px;
+ height: 1px;
+}
make browserで作成された book.html を編集する
$ sed -i -e 's|<hr>|<hr class="page-wrap" />|g' book.html
コードブロックの等幅フォント¶
$ cd [執筆環境を入れるディレクトリ]/review-and-css-typesetting*/articles
$ vi style.css # 329行目あたり(pre.list,pre.emlistの要素)を以下の通り編集
- font-family: "Ricty Diminished";
+ font-family: Consolas, 'Courier New', Courier, Monaco, monospace;
改行¶
markdownでは改行したい所に<BR>を書く
ここで改行<BR><BR>したい
make browserで作成された book.html を編集する
$ sed -i -e 's/<BR>/<BR>/g' book.html
表に干渉する文字 |¶
表の中に|があると困ります
表が崩れちゃうの…
なので、仮に%7Cと書いておきます
| hoge | fuga | |------|------| | %7c | 2 |
make browserで作成された book.html を編集する
$ sed -i -e 's/%7C/|/g' book.html
html → pdf に変換するタイミングでなんとかする¶
埋め込みフォント(Type3フォント)問題¶
これはけっこう面倒くさい問題で、フォントが埋め込まれてないと印刷会社さんからダメって言われることがあるようです
具体的には、pdfのプロパティを参照した際にType3っていうフォントがあるとマズいです
これを解決するには以下のどちらかの対応になるようですが、フォント埋め込むのがけっこう難易度が高くて死にます
- フォントを埋め込む
- アウトライン化(≒画像化)
で、アウトライン化してくれるのが前述のvivliostyle-cliなんですね!
これがなくても、いちおうなんとかできます
いったんブラウザ機能で印刷したpdfを更にWindows10の Microsoft Print to PDF で再度PDF化すればいけそうです
ファイルサイズめっちゃでかくなるけど…
以上、楽しい組版ライフを!
1 2 3 ... 15 Next » (1-10/149)
Also available in: Atom