News

ロボットの確率・統計

Added by kanata about 1 month ago

拝読させて頂き

ロボットだけじゃない、むしろ人生に役に立つ

前半は確率・統計の基礎的な話なのですが、これが実務ですごい役に立つ話でですね。
これを理解すると、正確に「グラフが読めるようになる」んですよ!
仕事とかでグラフって良く見る機会があるんですが、まぁまぁ恣意的に作られてるんですよね。誤魔化したり、ダマしたりする意図が多分にあるというか。
それで、ぼんやり眺めてるだけでは気づかないんです、が・・・
この本でわかるようになります。

例えば最近の話題だと「通訳者の賭博負け総額は、平均23万円」で、「えぇ?そんなみんなギャンブルして負けてるの…」ではなく、それが外れ値の影響であることが秒でわかる、みたいな。

もちろんロボットにも役に立つ

ロボットは工学的なこととか、ソフトウェア的なこととか、数学的なこととかの、それぞれが連携する集大成であったりするので、各章だけでも色々な分野の人に役に立つはず。後半の章は機械学習とか強化学習とか意思決定とか出てきます。
このあたりの内容を絡めた実体験エピソードが載ってるのがすごい面白いんですよ!
ロボットの勉強しようと思ってたら「怪しい儲け話に気づくようになる」とか「麻雀で勝てるようになった」とか「やべー情報だけインプットされると認知は歪む」とか実生活に役立つ話が、確率・統計の知識ベースと繋がるんです最高に楽しい。

数式出てくるあたりは、何回か読み直しながらだいぶ時間をかけて理解する必要がありそうですが、最終的に腹落ちして理解できそうです。
なぜかというとですね、技術書でけっこう行き当たるのは「なんかよくわからん…よくわからないけれど、こうなるのか…」というのがあるんです。その「なんでこうなるのか」が丁寧に書いてあるんですよ!すごい!

ぜひお手にとってみてください。目次を確認して頂くと、きっと役に立つ章があります。

ちな、拙著の実生活に焦点をおいたダマサれないための本もございます(便乗)
「第3章 ダマす数値」のあたりが、ちょうど「ロボットの確率・統計」と地続きでした!

「ポ」と「ポ」は違う文字なのでgrepにヒットしない話

Added by kanata about 1 month ago

こういう事象になる

$ cat popopo.txt
ポポポポーン1
ポポポポーン2
$ grep "ポ" popopo.txt
ポポポポーン1
$ grep "ポ" popopo.txt
ポポポポーン2

おわかり頂けただろうか…
「ポ」をgrepしてもどちらかしかヒットしない

なぜか…

Unicode結合文字という仕様がある

「ポ」と「ポ」は、見た目が同じですが実は違う形式でできているから(Unicodeの仕様)
見た目は同じですが、コンピュータ上では別の文字として扱われます
なので、grepにヒットしない「ポ」がでてきます

「ポ」   と       「ポ」
U+30DD       「ホ」 +「゚」
             U+30DB   U+309A

これは濁音(「が」とか)と半濁音(「プ」とか)のすべての文字に当てはまります

Unicode正規化という対応方法がある

えぇ…じゃぁすごい困るじゃん…検索できないじゃん…
ってなるので、Unicode正規化と呼ばれる統一する方法があります
任意のプログラム言語で実装もできるのですが、ワンライナーでも変換できます

pythonを使ったワンライナー

echo -n "DQⅢ①⑳海海神神㌔㍉ビデブー" | python -c "import sys,unicodedata; print(unicodedata.normalize(\"NFKC\", sys.stdin.read()));"
DQIII120海海神神キロミリビデブー

perlを使ったワンライナー

echo -n "DQⅢ①⑳海海神神㌔㍉ビデブー" | perl -e "use strict;use utf8;use Encode;use Unicode::Normalize;binmode STDIN, ':encoding(UTF-8)';binmode STDOUT, ':encoding(UTF-8)';print Unicode::Normalize::NFKC(<STDIN>);"
DQIII120海海神神キロミリビデブー

※"DQⅢ①⑳海海神神㌔㍉ビデブー"はテストデータです

では、冒頭の「ポ」で試してみます

$ cat popopo.txt | python -c "import sys,unicodedata; print(unicodedata.normalize(\"NFKC\", sys.stdin.read()));" | grep "ポ"
ポポポポーン1
ポポポポーン2

うまくいきました

参考

Unicode結合文字 難読化シェル芸
https://www.slideshare.net/kanata1/unicode-112630484

この仕様で遊んでた時の話

文字コードのカオスな世界を整理してみた
https://raintrees.net/news/51

そもそもの文字コードの話

コマンドラインの黒い画面が怖いんです。新人エンジニアのためのコマンドが使いこなせる本、という本を書きました

Added by kanata 2 months ago

コマンドラインの黒い画面が怖いんです。

新人エンジニアのためのコマンドが使いこなせる本

本を書きました!

新人のITエンジニアにとって開発現場でぶつかる壁の1つが、文字だけのUI、通称「黒い画面(CLI/CUI)」でのコマンド操作です。
グラフィカルなUIに慣れ親しんだ若手のエンジニアの中には、得体のしれないCLIの操作に苦手意識や恐怖感を持っている人も多いのではないでしょうか。本書はそんな「黒い画面が怖い!」という新人エンジニアや学習者に向けて、CLIやコマンドとの付き合い方・活用法をやさしく解説した書籍です。

𝗮𝗺͜𝗮̹𝘇𝗼𝗻で買えます
https://amzn.asia/d/9uc18Mq

翔泳社さんのサイトからも買えます
https://www.shoeisha.co.jp/book/detail/9784798182445

正誤表

翔泳社さんのサイトに出ると思います。
でたらリンクを貼ります。

補足

なにかあれば書きます。

メディア

CodeZine - 新刊『コマンドラインの黒い画面が怖いんです。』発売、コマンドを使って開発をもっと楽しく効率的に!

CodeZine - コマンドラインの黒い画面を使ってネットの情報を取得したり、ファイルをZipに圧縮したりしてみよう

関連ネタ

SCPFmaskコマンドを作成した

Added by kanata 11 months ago

SCPFmask

本ツールはSCP財団管轄下の█████████より██████████████の旨通達があり、███████████としたものです。
そのため████████████における██████████████████████████████として公開しています。

SCPFmask

Edge(Chorme)のヘッドレスモードでSPAのページをcurlみたく出力する (1 comment)

Added by kanata over 1 year ago

動機

以前はサイトのDOMを参照するときcurlを使っていて、それはそれは便利だったんですが近年SPAとか動的にDOM構築するサイトが増えるようになって、ぜんぜん使えなくなりました。
かといって、SeleniumPuppeteerBeautiful SoupSplashなんかを使うとプログラミングする必要がでてきて面倒だなぁ・・・となっていました。なんか色々インストールすることなく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')

ではちょっと試してみましょう。
ちょっと適切なサイトが思い浮かばなかったので内閣サイバーセキュリティセンターで試してみます。

NISC

そうですね。。ではこの中の下の方にある「情報セキュリティ教育用教材」のリンクを取得してみましょう。

まず、ここの内容は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(&quot;/img/banner01.jpg&quot;);"></span><p>ランサムウェア対策について</p></div><div title="参照すべき関係法令をQ&amp;A形式で解説" data-href="https://security-portal.nisc.go.jp/guidance/law_handbook.html"><span style="background-image: url(&quot;/img/banner02.jpg&quot;);"></span><p>参照すべき関係法令をQ&amp;A形式で解説</p></div><div title="セキュリティが分からなければこの1冊" data-href="https://security-portal.nisc.go.jp/guidance/handbook.html"><span style="background-image: url(&quot;/img/banner03.jpg&quot;);"></span><p>セキュリティが分からなければこの1冊</p></div><div title="IPA情報セキュリティ・ポータルサイト" data-href="https://www.ipa.go.jp/security/kokokara/"><span style="background-image: url(&quot;/img/banner04.jpg&quot;);"></span><p>IPA情報セキュリティ・ポータルサイト</p></div><div title="みんなで使おう サイバーセキュリティ・ポータルサイト" data-href="https://security-portal.nisc.go.jp/"><span style="background-image: url(&quot;/img/banner05.png&quot;);"></span><p>みんなで使おう サイバーセキュリティ・ポータルサイト</p></div><div title="情報セキュリティ教育用教材" data-href="/policy/group/general/kyozai-booklet.html"><span style="background-image: url(&quot;/img/banner06.jpg&quot;);"></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)

Added by kanata about 2 years ago

動機

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回も何をやってるんだろうシェル芸勉強会 に参加させて頂きました!

Added by kanata over 3 years ago

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月号に寄稿しました

Added by kanata almost 4 years ago

Software Design 2020年9月号の 現場で役立つユースケースを厳選 エピソードで覚えるUnixコマンド[第2弾]という特集の一部を執筆しました。dateとtputのお役立ちな使い方を書きました!他にもすごい執筆陣の方々がお役立ちコマンドを紹介されております。

個人的には、結城 浩さんによる私の好きな「難読化」の記事や、高校ではやらなくなったと噂の行列計算の基本など興味深い記事が目白押しでございます。

8/18発売です!

書籍といえば技術書典9でも薄い本を出す予定です
CyberChefとシェル芸 で詳細を公開しています
あとssmjp同人部でも書かせてもらっているのですがその話はまた今度

jus共催 第49回ボンバイエシェル芸勉強会

Added by kanata almost 4 years ago

上田さんがリンクをまとめてくださるはず

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回引きこもりシェル芸勉強会

Added by kanata almost 4 years ago

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があれば、全部シェル芸でできる…!最高か

使っていきます

1 2 3 ... 16 (1-10/152)

Also available in: Atom

Add picture from clipboard (Maximum size: 100 MB)