役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

Range#Value でとってきた配列のReDim

2セル以上の範囲を表すRangeオブジェクトのValueは (行, 列)の二次元配列になる。

これをReDimしようとしたら「インデックスが有効範囲にありません」のエラー。

二次元配列は最後の次元の個数しか変えられない制約があるが、変えようとしているのはまさにその最後の次元の個数なんだけど……

とさんざん首をひねったが、要は個数指定をきちんと(1 to r, 1 to c)と「1 to ~」の形式できちんと書く必要がある、ということだった。

(素で終わりの添え字だけ書くと、0 to ~ という解釈で処理される)

VBAの関数がオブジェクトを返してくるか値を返してくるか分からん場合

VBAでは

・オブジェクトの代入は Set ステートメントで行う
・値の代入はLet ステートメントで行う(ただし「Let」は省略可)

となっているが、関数が状況によってオブジェクトを返したり値を返したりする場合

「実行してみるまで分からないのに、Setが要るかどうかはコードを書く時点で決めておかなくてはいけない」

という理不尽が発生するorz
(そもそもそんな行儀の悪い関数は窓から投げ捨てろという話もあるが
そうもいかない場合もあり……)

が、プロシージャの引数に関しては、そのあたりを気にする必要がないので
例えばこんな感じでラップしてやるとよい。

' 第一引数に関数の呼び出し式、第二引数に関数の戻り値を格納したい変数を渡す
Sub WrappingResult(vResult As Variant, ByRef vBox As Variant)
    If IsObject(vResult) Then
        Set vBox = vResult
    Else
        vBox = vResult
    End If
End Sub

てなアイデアをTeratailで教えていただきました。感謝。
teratail.com

Roundcube Mailで無限リダイレクトを食らった話

試しにインストールしてみてconfigもできて、いざアクセスしてみると
「ERR_TOO_MANY_REDIRECTS」……ってどういうことなの……

で、調べたところ、default.inc.phpで「force_https」をtrueに設定していた場合、
HTTPSでのアクセスを確認できるまでhttpsでリダイレクトする。
それを判定しているのがrcube_utils::https_check()なのだが、
これが冒頭で

        if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') {
            return true;
        }

なーんてやってくれている。このあたりの変数を設定してくれないサーバだと無間地獄に落ちると。
とりあえず、force_httpsの設定をfalseにして無事ログイン画面にたどり着いた。
(別にこの設定をfalseにしてもhttpsでのアクセスは問題なく可能。)

WordPressのパスワードをDBで直接いぢらんならんことになったとき

まあね、普通そんなことないっすよねorz
業者に丸投げしてたサイトを自社で更新するからって契約切って
実は管理アカウントの情報もらってなくて、
問い合わせたら「担当者辞めたから分かりません(てめーとは縁が切れてんだよクソが)」なんて言われたときくらいですよねーorz

愚痴はともかく本題。テーブルがwp_users(かそのバリエ)というところまでは探り当てたとして、問題はuser_passに何を入れればいいか。
古い情報だとMD5でおkなんて書いてるとこもあるが、少なくとも現在はPhPassライブラリが使われているのでそのお作法でハッシュを生成しないといけない。
ライブラリ自体はwp-include/class-phpass.php に配置されているので

require 'wp-includes/class-phpass.php';
// ソースにgrep掛けて実例確認したら引数はこうなってた
$x = new PasswordHash(8, true);
echo $x->HashPassword('生パスワード');

とかして表示させるとよろし。
ちなみに、ハッシュ生成のはずなんだが実行するたびに結果が変わったりする。
それでもちゃんと生パスワードとの一致判定には通るので慌てないこと。

Ubuntuが再起動要求してきたときの原因

ログインするなり

*** システムの再起動が必要です ***

って言われた場合に、何が再起動を要求してるのか、の情報。

/var/run/reboot-required.pkgs にある。(普通にcatすれば読める)
まあ分かったからと言ってできることは大概素直に再起動しかないんだけど。

VirtualBox Guest Additionsの別カーネル用ビルドしたいとき

ビルド中に表示はされるんだがいっつも忘れるんでorz

 

VirtualBox Guest Additions:
To build modules for other installed kernels, run
/sbin/rcvboxadd quicksetup <version>
or
/sbin/rcvboxadd quicksetup all