モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

Add to Trello の代わりになる、Trello用ブックマークレットを作った

愛用していた Trello用の Chrome拡張 "Add to Trello" が、しばらく前から使えなくなってしもうた

ので、自分でブックマークレットを作った話です

やりたいこと

現在ブラウザで開いているページを、サクッとTrelloにカードとして追加したい。

  • あとで読む
  • 開いた issue のページを ToDo としてカード化する

などの目的で使います。

Add to Trello

chrome.google.com

今までは、こちら Chrome拡張を愛用していました。ですが、最近使おうとすると

"Invalid return_url. Wildcard ("*") allowed origins are no longer supported. Contact the developer. See https://community.developer.atlassian.com/t/52093"

というエラーが出るようになってしまいました。

GitHub には issue も出ているようではありますが……

github.com

しばらく復旧の見込みなさそうで。

Trello 公式のブックマークレットを使う

そう、公式のブックマークレットがあった

trello.com

実際こちらで、ほぼ同じことができるのでした。2クリックで、現在開いているページを Trello のカードとして保存できます。

目立った違いは、開いていたページのURLが、カードの description じゃなくて attachment として保存されること、くらい?

description として保存したい

これでほぼ解決ではあったのですが、やっぱり以前と同様、URL を description に保存して欲しかった。

ので、ちょっとブックマークレットを編集しました。こんな感じです

javascript:(function(w){w.open(`https://trello.com/ja/add-card?name=${encodeURIComponent(document.title)}&desc=${encodeURIComponent(w.location.href)}&mode=popup`,'add-trello-card',`width=500,height=600,left=${w.screenX+(w.outerWidth-500)/2},top=${w.screenY+(w.outerHeight-740)/2}`)})(window)

これで、ブックマークレットをクリックすると「ページタイトルがカードのタイトルに、URLが descriptionに」という状態でカードが作られます

以上

無料でデータ通信できる(らしい) donedone に加入した

いわゆる格安SIM (MVNO), ビッグローブが新しく立ち上げた "donedone" に加入した

www.donedone.jp

特徴的なのは、0円で低速 128kbps を50GB使える、という「エントリープラン」があること。さっそく申し込んでみました。 (なお申込み多数につき、これを書いている2021年7月9日時点ではエントリープランの新規受付は一時停止中らしい)

k-tai.watch.impress.co.jp

2日後に SIMカード到着。早い。

ふつうにスマホに挿して、APN は biglobe のものを設定すれば使えました。特に迷うところなし。

これで低速だけど、無料で月50GBのデータ通信をゲット。にわかには信じがたい。

肝心の使い心地は、ごめんぜんぜん外に出てないのでまだわからん。128kbps だと、テキストのやりとりくらいが主なんだろうなあ。

昔 OCN モバイル ONE を使っていたことはあって、それが低速制限時は 200kbpsでした。その場合でも、Twitter 的なテキストのやりとりなら問題なし。インスタやラジオ再生は、ちょっと待てば使えなくもない。Googleマップはしんどい。動画は最初からあきらめ。くらいの感触でした。128kbpsはそれ以下になるわけで、まあだいぶ割り切りはいりそう。ないよりはいいけど、みたいな。

楽天モバイルと組み合わせて毎月0円運用できるのか

そういえば、楽天モバイルはデータ1GBまでなら毎月無料、通話も無料だった。

これに donedone を追加すれば、通話も通信も毎月無料で運用可能ってことになるのか。まあ初期費用系はかかるけど、すごい時代だな。若干やりすぎ感もある。というか、こういう無料サービス系の持続性ってどうなんだろう、というのは気がかりではありますね。donedone の場合、今後は使いたいときに高速通信が使えるようなオプションチケットを販売していくそうです。適度にそういうの使いつつ、長くサービスが続くといいけど、まあ楽しみながら当面試していきます。

PHP でシステムのコマンドを実行する関数の種類を調べた

PHP でサーバのコマンドを実行する関数ってどれくらい種類があるのか、調べる機会があったので、そのメモです

system()exec() が有名かと思いますが、結構種類が多かった……!

  • exec
  • passthru
  • pcntl_exec
  • popen
  • proc_open
  • shell_exec
  • system
  • 実行演算子

しかし多いな…… とりあえず8種類か。

参考にしたのは PHPのドキュメントのこちら。

www.php.net

実行演算子は関数ではなくて、 ``` で囲んだ文字列を実行できるというもの。強そう (危険そう)

<?php
$output = `ls -al`;
echo "<pre>$output</pre>";

www.php.net

また、pcntl_exec と実行演算子は、前述のドキュメント「システムプログラムの実行」一覧には載っていません。この 8種類というのも自分調べなので、まだ実行させる関数は他にもあるのかもしれない。わからない。

たとえばセキュリティ、OSコマンドインジェクションの調査をするとかなら、可能性としてはここらの関数をひととおりチェックする必要があるということかな。

module.exports されていない関数を rewire でテストする

JavaScript + jest で古いコード、module.exports されていない関数をテストしたかったのですが、rewire というのを使えば可能でした、というメモ

たとえばこんなコード

function privateSum(a, b) {
  return a + b
}

とだけ書かれたファイルがあるとします。この後に

module.exports = privateSum

ってされていれば、テストコードから import すればいいだけなんですが、export されていないので外部から privateSum関数にはアクセスできません

rewire

ここで rewire というライブラリをかませます

github.com

rewire, かなり昔からあるライブラリっぽい。これを使って、こんな風にテストを書くことができます。

const rewire = require('rewire')
const myModule = rewire('../src/private')

test('exported function', () => {
  const sum = myModule.__get__('privateSum')
  expect(sum(1, 2)).toBe(3)
})

まず rewire を requireし、その rewire を使って対象のソースコードを読み込みます。

そんで

  const sum = myModule.__get__('privateSum')

この __get()__ というメソッドで、export されていない関数を参照できるようになるという具合。あとは普通に呼び出してテスト可能。

べんり。

モック化にも使える

__set()__ というメソッドもあり、対象の関数や変数を差し替えることも可能でした。なのでテスト時のモック化なんかにも使える。

べんり。


サンプルこちら

github.com

PhpStorm のフォルダ単位の diff ビューアーを、コマンドラインから起動

PhpStrom の、フォルダ単位の差分表示機能

見やすくて助かってるんですが、この画面って CLI から起動できるんですね、しらんかった

pstrom diff <path_1> <path_2>

でいけるっぽい

f:id:matsuoshi:20210514103611p:plain

参考こちら

pleiades.io