Tridactylでデフォルトのsearchurlsのキーワードを無効にする

Tridactylではデフォルトで各種キーワードでの検索が設定されている。が、キーワードが名前そのままなので、キーワードと同じ単語を検索したい場合につらい。ので無効にしたいのだが、しばらくやり方がわからず、試行錯誤の末最近ようやくわかったので共有する。

以下はデフォルトでは、Googleで、mapsが検索される。

:open google maps

これを、google mapsというキーワードでデフォルトの検索エンジンでの検索にしたい。

結論から言うと、以下のようにsearchurlsJSONを直接設定し、キーワードの値を空文字列にする。

:set searchurls {"google": "", ...}

引っかかる点としては、設定をクリアしようとするとデフォルト値が使われてしまうこと、またsearchurls.<KEYWORD>の形のショートカット経由で設定を空文字列にすることはできないということ。

:unset searchurls.google

設定がデフォルトに戻る。

:set searchurls.google 

後ろに空白。後ろに空白がない場合と同じように、現在の設定を表示するだけ。

:set searchurls.google ''
:set searchurls.google ""

それぞれ'', ""自体が設定されて、検索はされずエラーになる。

Google Chartsで列に有効なデータがある場合は問題ないのにない場合にエラーになる件

var data = google.visualization.arrayToDataTable([
    ['date',       'number'],
    ['2019-05-13', 1],
    ['2019-05-14', 2],
    ['2019-05-15', null]
]);

では問題ないのに、

var data = google.visualization.arrayToDataTable([
    ['date',       'number'],
    ['2019-05-13', null],
    ['2019-05-14', null],
    ['2019-05-15', null]
]);

の場合にチャートを描画すると、

Data column(s) for axis #0 cannot be of type string

というエラーが出る。

どうも列にデータがないと型を推測できないからエラーになっている感じっぽくて、型を指定したら問題なくなった。

var data = google.visualization.arrayToDataTable([
    [
        'date',
        { label: 'number', type: 'number' }
    ],
    ['2019-05-13', null],
    ['2019-05-14', null],
    ['2019-05-15', null]
]);

Eloquentのwhen()で、偽になる可能性のある値の存在を条件に検索する

Eloquentというかクエリビルダ側の機能だけどまあ。

when()はこのように使うことができ、条件分岐を何度も何度も書かなくて済む。

<?php

use Illuminate\Database\Eloquent\Model;

class Searchable extends Model

# ...

public function search($condition)
{
    $this->when($condition['cond_1'] ?? false, function ($query, $cond_1) {
        $query->where('cond_1', $cond_1);
    });
}

# ...

ただし、フラグや数量で検索したい場合、when()の第1引数にそのまま渡してしまうとfalse0の場合に検索自体が行われない。まあ当然なんだけど。

<?php

# ...

public function search($condition)
{
    # $condition['boolean']が偽の場合、コールバック関数は実行されない
    $this->when($condition['boolean'] ?? false, function ($query, $boolean) {
        $query->where('boolean', $boolean);
    });
}

# ...

どうするか。いろいろ考えたのだが、useでコールバック関数に直接変数を渡してしまうのがよさそうだ。

<?php

# ...

public function search($condition)
{
    # $condition['boolean']が設定されていてnullでなければ検索される
    $this->when(isset($condition['boolean']), function ($query, $boolean) use ($condition) {
        $query->where('boolean', $condition['boolean']);
    });
}

# ...

ASUSのノートPCを修理に出したメモ

購入から一年後くらいからSSDの認識が怪しくなってきて、一度治ったかのように見えたものの数ヶ月後完全に駄目になったので修理に出した。ASUSのサポートセンターに直接。

こういうのって具体的にどういうフローになるのか、どれくらいかかるかなどわかりにくいため、いつか誰かの役に立つかもしれないし経緯をメモっておく。状況次第の部分も多いだろうし参考程度に。

修理に出すまで

  • +0日 直接修理に送るみたいなことはできないようなので、メールフォームから連絡。
  • +1日 メールに返信が来る。シリアル番号が必要とのことなので添付して返信。
  • +3日 メールに返信が来る。概算の見積りと、修理依頼手順が記載。

修理に出してから

  • +0日 ヤマトのパソコン宅急便で送る。BOX Aで、13インチのノートPC本体に念の為の電源アダプタも入った。
  • +1日 ASUSサポートセンターに荷物が届いた。これはヤマトからのメールで確認。
  • +2日 ASUS修理・お預かり品の状況確認からシリアル番号で状況確認できるように。
  • +6日 サポートセンターから電話確認。修理代が一定以上になったら確認してと連絡していたため。
  • +6日 クレジットカードで支払うことにしていたため、決済のメールがペイジェントから。メール暗号化されてないし、ASUSからであることの確認はさらに難しいし、こういうフィッシングできそう。
  • +7日? 日時が残っていないのだが、この辺から状況確認がシリアル番号ではできなくなっていた。後で修理番号で確認できることを確認。なお修理番号、修理品の返却まではペイジェントの「ご注文番号」でしか確認できない。またこの番号が修理番号だという説明はない。
  • +9日 連絡なしにノートPCが帰って来た。

メールの返信や電話などの感触はよかったが、全体的なフローはちょっと不親切な感じが。こんなものなのかな。

ngrokでWordPress製のサイトを公開する

ご存知の通りWordPressドメイン名をデータベースに入れたりデータベースに入れたりしてるので、ngrokで動かせるようにするのはちょっとやっかい。

なのでどうするか。まあ公式ドキュメントに書いてある。

ngrok – documentation

なお既存の記事などのデータがなければ、2のWP_SITEURL, WP_HOMEをアレするだけでもとりあえずなんとかなる。

また、HTTPSでやる場合はこちらも。

<?php
# wp-config.php

# ...

$_SERVER['HTTPS'] = 'on';

# ...

HTTPとHTTPS両方やる場合どうするかについては調べてない。まあリバースプロキシの後ろでやるときみたいになんらかの環境変数見ればいいのでは?

ngrokで"online ngrok process", "tunnels/ngrok process"はなにを指すか

"online ngrok process"は有効なngrokコマンドの数、"tunnels/ngrok process"はngrokによって転送(トンネル)されているポート数、と考えてよさそう。

つまり、無料版

1 online ngrok process

4 tunnels/ngrok process

ngrok - secure introspectable tunnels to localhost

でも、一つのコマンドで複数のトンネルを立てる形であれば、複数のアプリケーションを通せる。

なおngrokは設定ファイルを複数渡すとマージして使ってくれるっぽいので、

# ~/.ngrok2/ngrok.yml
authtoken: XXXXXXXXXXXXXXXX
# tunnels.yml
tunnels:
  app1:
    proto: http
    addr: 8000
  app2:
    proto: http
    addr: 8001
ngrok start --config ~/.ngrok2/ngrok.yml --config tunnels.yml --all

みたいにすると、トークンはデフォルトの設定ファイルに置いといて、リポジトリに突っ込む設定ファイルには入れない、みたいなことができて便利。

Laravelのartisanのzsh補完書いた

サブコマンドの補完はあったんだけど、ちゃんとオプションの補完までしてくれるのがないので自分で書いてみた。zshわからんしcompsysわからんし、そもそもシェルスクリプトさっぱりなので大変苦労したが、まあ使えるものになってきたので公開。

サブコマンド、オプションはもちろん、一部のオプションの値補完できたり、helpの場合には再度サブコマンド補完に出したりと割と頑張ってる。

GitHub - magai/artisan-completion: laravel artisan completion for zsh

使い方

jq使ってるのでそれだけ用意して。opensslも使ってるんだけど多分入ってると思う。で、普通ならzshの補完はオートロードできるんだけど、artisanはphp artisan ...という形で実行されるという特殊な仕様のためできなかった。

なんというか、このartisanの補完はphpコマンドの補完として実装されていて、php artisanと続いたとき以外は元のphpコマンドの補完に投げるというややこしい実装になっている。これもまた苦労した……。

source artisan-completion.zsh
compdef -d php
compdef _artisan php
zstyle ':completion::*:php:*' use-cache true

compinitした上で、上のように書けばおけ。zplug使ってる人はzplugで入れてもいいかと。

重いartisanコマンドを叩きまくってるので、キャッシュはほぼ必須。