プロジェクト

全般

プロフィール

ニュース

A painter and a black cat: 超ざっくり日本国内だけ通信許可するさくらのVPSのパケットフィルター

kanata さんが12日前に追加

超ざっくり日本国内だけ通信許可するさくらのVPSのパケットフィルター

経緯

10年前(2015)に ざっくり日本国内だけ通信許可するiptables というブログを書いたんですが、当時は

  • アメリカとか中国とか色んな国から、なんか悪いことを目的としたアクセスが頻繁にくる
  • よって、httpとhttps以外のポートは全て閉じたいが、自分的に不便
  • そうだ、日本国内だけ許可したらいいじゃない
  • ところが、SeversMan@VPSのCentOSのiptablesは、登録できるエントリー上限が256の模様
    なんとか256個の制限内に収めたい

で、日本で使われているIPアドレスの第一オクテッド(つまり、aaa.bbb.ccc.ddd のaaa)だけを見て、日本かどうか判断するというのをやっていました(それなりに効果はあったと思う)

それで10年たった今、似たような状況がまた発生したんですね

  • アメリカとか中国とか色んな国から、なんか悪いことを目的としたアクセスが頻繁にくる( 10年前よりひどい
  • よって、httpとhttps以外のポートは全て閉じたいが、自分的に不便
  • そうだ、日本国内だけ許可したらいいじゃない
  • ただCPUもメモリも少ないVPSを使っているのでiptablesに大量に登録したくない
  • さくらのVPSのパッケットフィルター(無料!)で防げばいいじゃない
  • ところが登録できるルールの上限が20の模様
    なんとか20ルールの制限内に収めたい

…10年前より制限きついやんけ、、とうわけでチャレンジしました

さくらのVPSのパッケットフィルターとは

  • さくらのVPSを使っている人のみが使えし無料のファイアウォール
  • 登録ルールは20が上限、ただ許可する送信元IPアドレスをCIDRで設定できる。なので やりようによっては許可するIPアドレスをおおきくまとめることができる
  • 使っているVPSとは別の装置でフィルタリングしてくれているので、VPSがパケットフィルタリングのリソースを割かなくてもよい(うれしい!)

日本国内で使っているIPアドレスをいい感じにまとめる

国外のIPアドレスが混じっちゃってもかまわない(妥協)ので、いい感じにまとめてくれとAIくんにお願いしました
最初は、渋って20以上のルールとか回答してきたAIくんですが、「 頑張れ頑張れできるできる絶対出来る頑張れもっとやれるって!やれる気持ちの問題だ頑張れ頑張れそこだ!そこで諦めんな絶対に頑張れ積極的にポジティブに頑張る頑張る!iptablesだって頑張ってるんだから! 」と修造ばりに熱く語りかけることで、いい感じの回答が得られました

AIのしごと

厳密に検証していません、が、おおむねカバーできてそう。5ルールで。でかした!
これならまだ15ルール分余裕があるので、細かく制御したい分はルール追加すればいいんじゃ
以下、AIの回答

サマリ

日本の全 IPv4 アドレス(約1.99億アドレス)はすべて APNIC(アジア太平洋地域インターネットレジストリ)の管轄下にある複数の /8 ブロックで割り当てられています。これらを効果的に 5 つの大きな CIDR(/4, /4, /3, /3, /2)にまとめることで、国内 IP をすべてカバーしつつ、海外 IP の一部混在も許容したまま、パケットフィルターのルール数を大幅に削減できます

日本の IP 割り当て概要

  • 総割り当て:日本国内には約199,092,992 個の IPv4 アドレスが割り当てられています(約2億)- APNIC 管轄:これらはすべて JPNIC を通じて APNIC より /8 ブロック単位で配布されています(例:1.0.0.0/8, 14.0.0.0/8, 27.0.0.0/8 … 183.0.0.0/8)
  • 海外 IP の混在:上記 APNIC ブロックは日本以外のアジア太平洋地域にも及ぶため、集約時には国内外の混在が避けられませんが、国内カバーを最優先とします

CIDR による大域的集約手法

CIDR(Classless Inter-Domain Routing)では、隣接する /8 ブロックをより大きなプレフィクスにまとめることで、ルール数を劇的に削減できます。以下では、日本の割り当て/APNIC ブロックを 5 つのネットワークに圧縮した例を示します。

集約プレフィクス 範囲(第1オクテット) 含む主な APNIC /8 ブロック
1.0.0.0/4 1–15 1.0.0.0/8, 14.0.0.0/8
16.0.0.0/4 16–31 27.0.0.0/8
32.0.0.0/3 32–63 36.0.0.0/8, 39.0.0.0/8, 42.0.0.0/8, 43.0.0.0/8, 49.0.0.0/8,
58.0.0.0/8, 59.0.0.0/8, 60.0.0.0/8, 61.0.0.0/8
96.0.0.0/3 96–127 101.0.0.0/8, 103.0.0.0/8, 106.0.0.0/8, 110.0.0.0/8, 111.0.0.0/8,
112.0.0.0/8–126.0.0.0/8
128.0.0.0/2 128–191 133.0.0.0/8, 153.0.0.0/8, 175.0.0.0/8, 180.0.0.0/8,
182.0.0.0/8, 183.0.0.0/8

参考情報

設定とその後

というわけで設定した!

20250429_さくらのVPSのパケットフィルター設定

それなりに機能していて、ある程度の攻撃パケットは防いでくれています(漏れた国外からのアクセスもあるにはあります)
ただ無料なので、やっておいて損はないはず~

A painter and a black cat: Typstで絵文字を書いたらType3のフォントが埋め込まれた件

kanata さんが22日前に追加

技術書典18向けに技術同人誌を書いているのですが、その中で絵文字を使っていました。それで、印刷所に入稿したら「埋め込まれてないフォントがあるよ~」(意訳:Type3フォントがあるよ~)というご連絡を頂いたんですね。このまま印刷すると文字化けするかもしれないと。

そっかぁ、と思って対応することにしました

特にTypst固有の問題ではなくてLaTeXでもRe:VIEWでもVivliostyleでも、組版ソフト共通で起こる問題と認識しています

Type3フォントとは

フォントって様々な形式があって、けっこう複雑なんですが(私もちゃんと把握できていない)Type3フォントは紆余曲折あって、今はあまり使われない形式らしいです
印刷会社さんや、学会ではType3フォントを避けるように言われる場合があるみたい
Type3フォントが埋め込まれたPDFがどうなるかというと、印刷時に文字化けするリスクがあります

Typstの動作

特にTypstのドキュメントには絵文字フォントを指定していなかったんですが、その場合はTypstがシステムフォントからフォントを探し出して埋め込んでくれます
今回の事象は、 Segoe UI EmojiというType3フォントが知らずに埋め込まれていた…という状況でした

調査方法

PDFの埋め込みフォントを確認する

Acrobat Readerでも、その他のPDFビューアーからでも、フォントの状態を確認できます
「ドキュメントのプロパティ」という感じの項目を探してみてください

Type3フォント

"embedded"とう文言は「フォント埋め込まれてるよ!」という意味なので、そこはOKなのですが、種類の所が…
あぁ~これですわ

TwitterColorEmojiは使ってないので単純にフォントをアンインストールしました
ただSegoe UI Emojiは、Windows標準のシステムフォントなのでおいそれとアンインストールできません

さて、困りましたね。。

どの文字がどのフォントを利用しているか調べる

ちなみに、もっと厳密に PDF中のどの文字がどのフォントを使っているか調べる方法をChatAIさんに聞いた所

  1. Inkspaceという画像編集的なソフトをインストールする
  2. InkspaceでPDFを開く
  3. SVG形式でエクスポート
  4. SVG形式のファイルは中身がテキストファイルなので、文字とフォントの関係が確認できる

SVGexport.png

ということで試してみたら、grepとかでいい感じで確認はできそうでした
以下みたいに実行すると、どのへんのどの文字で使われているか調べられます

$ grep -C5 -n "font-family:'Segoe UI Emoji'" Target.svg

ちなみに以下みたいに書くと、どのフォントがどのくらい使われているか把握できます

$ grep -o 'font-family.*;' Target.svg |awk -F';' '{print $1}'|sort |uniq -c

対応方法

いくつか対応方法があります

絵文字フォントを指定する

Typstのドキュメント側で明示的にフォントを指定すれば、Segoe UI Emojiの混入が防げます
代替のフォントとして、Segoe UI Symbolというのが使えますが、ちょっと見た目が好きじゃなかったのでNoto Emojiをインストールして代替することにしました

  set text(
    // 記載の順にフォントを検索します
    font: ("Meiryo UI", "Yu Gothic", "Arial","Noto Emoji","Segoe UI Symbol"), // フォント設定
    /* フォント候補
      "Arial","New Computer Modern","Tahoma",
      "Times New Roman","Verdana",
      "Meiryo","Meiryo UI",
      "Yu Gothic","Yu Gothic UI","Yu Mincho",
    */
    size: 9pt, // フォントサイズ
    lang: "jp", // 言語
  )

ただ筆者の場合は、なぜかこれでも勝手に埋め込まれちゃったので別の手段を取ることにしました

フォントの参照先を指定する

TypstでCLIでコンパイルする際に、以下のオプションが使えます

オプション 意味
--ignore-system-fonts フォントの参照先からシステムフォント(C:\Windows\Fonts)を除外する
--font-path "C:\example\font" フォントの参照先を追加する

これを利用して、コンパイルに必要なフォントだけを格納したフォルダを用意(一時的にC:\Windows\Fontsから必要なフォントをコピー)して、それを指定することで余計なフォントを参照させないようにできますね

$ typst c Target.typ --ignore-system-fonts --font-path "C:\example\font"

アウトライン化

最後の手段なんですが、アウトライン化(≒画像のような形式)にしてしまえば、フォントの問題は解消されます
Windows の印刷機能(Microsoft Print to PDF)でPDFを再印刷することで実現できます

後述の書籍↓にも書いています

Typstで技術同人誌を書く

そんなフォント周りの話も含めた本を頒布中です

Typstで技術同人誌を書く。

そしてもう少しお待ち頂くと、新刊がでます

Typstを完全に理解して技術同人誌を書く。

よろしくお願いします。

A painter and a black cat: 7日間でハッキングをはじめる本 TryHackMeを使って身体で覚える攻撃手法と脆弱性

さんが9ヶ月前に追加

めっちゃ楽しく読みました!

初学者だけじゃなく、普通に助かる

Day1を拝読するとですね、Kali linux の設定がある訳なんですけれど、これがですね。ほんと助かります。ほんと助かるんですよ。
なんかですねKali Linuxってよく壊れる(n=1の主観的な感想)んですよ。アップデートしたらXWindow立ち上がらなくなったりして。そんな感じなので、1度インストールして、育てていく…というよりは、都度都度、壊れたら(または古くなったら)作り直す…みたいなディストリビューションとして捉えています。
すると、どうなるかっていうと、インストール後の初期設定を何回もしなきゃいけないんですよね。
日本語化して、タイムゾーン変更して、、、とか毎回ググって設定するわけなのですが、それが全部書いてある素晴らしい…!
ここだけでも助かるのに、この後のDay2以降であらゆるツールの使い方載ってるんですよね!
「あぁこのツールどう使うんだったっけな~」からのググって・・・あぁそうだった・・・が、なくなるんです!最高!
この網羅的にツールを扱う本って実は希少なんですよね。手元に1冊置いておいて、パラパラめくって再確認できる・・・という使い方ができるんです!助かります~!

もちろん初学者さんにも役に立つ

けっこう専門的なところを解説しつつも、たくさんの図解があって、ほんと迷うことなく進められます。読んでてスッと入ってきて引っ掛かりがありませんでした。初学者さんもきっと大丈夫。

そしてびっくりするのはですね、情報量が多いんです。情報量が。なんと300ページ近くあるんです。だからお買い得感あるヤバい。私の学生時代にあったら秒で買ってたし、こんな本欲しかった~って思いました。
なので、この1冊を読んで、たとえばnmapのこともっと知りたいな~と思えば専門書籍を追加でご購入されるもよし、Metasploitもっと知りたいな~と思ったら専門書籍を追加でご購入されるもよし、これら専門書籍はお値段がけっこうしたりするので、専門書を選択しながら少しずつ専門知識を広げていくアプローチがとれそうです。

というわけで、ぜひお手にとってみてください。目次を見ると欲しくなるんです(私が)。

ちな、ハッキングより手前の、黒い画面が怖くなくなる本もございます(便乗)
黒い画面に心理的抵抗があれば、こちらも御覧ください~

A painter and a black cat: ロボットの確率・統計

さんが約1年前に追加

拝読させて頂き

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

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

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

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

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

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

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

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

A painter and a black cat: 「ポ」と「ポ」は違う文字なのでgrepにヒットしない話

さんが約1年前に追加

こういう事象になる

$ 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

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

A painter and a black cat: Edge(Chorme)のヘッドレスモードでSPAのページをcurlみたく出力する (1コメント)

さんが2年以上前に追加

動機

以前はサイトの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"

はいリンク取れましたスッキリした~

コメント

ちょっと修正してもいいかも

Google Chromeのヘッドレスモードが新しく。別になっていた実装を統合し、ヘッドフルと完全互換に
https://www.publickey1.jp/blog/23/google_chrome.html

A painter and a black cat: SharePointのドキュメントのURLが長いことに対する次善の策 (1コメント)

さんが約3年前に追加

動機

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機能を作ってくれるまでこれでしのごっと

コメント

SharePointのファイル直リンクから格納先フォルダのPATHを調べる

SharePointでドキュメントをファイル直リンクを共有された時「いや、これどこに格納されているか知りたいねん。。」となる時があります。
しかもこれ、リンククリックするとアプリで開きたくてもブラウザで開いちゃうことが多いんですよね。もお!

ですが、この技を使うとどこに格納されているか解るんです!超便利!

A painter and a black cat: jus共催 第50回記念我々は50回も何をやってるんだろうシェル芸勉強会 に参加させて頂きました!

さんが4年以上前に追加

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 # こう書いておくと引数にシェル芸が書けるから便利
(1-10/155)

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