VBAでDictionaryにWorksheetオブジェクトを入れたら怒られた

他言語の dic[key] = value に相当する書き方をしたらエラーとなった。
.AddメソッドならOKだった。

Dim dic As Object
set dic = CreateObject("Scripting.Dictionary")
Dim ws As Worksheet
For Wach ws In ActiveWorkbook.Worksheets
    ' dic(ws.Name) = ws ' NG
    dic.Add ws.Name, ws ' OK
Next

複数のワークシートの存在を確認して,存在していたら処理するコードを書いていた。
次のシートを処理するたびにループでシートの有無を確認するのが無駄に思えた。
ならば,先に連想配列に入れてしまおう。
キーがシート名で,値がシートオブジェクトだ
何なら,キーだけでも処理は困らないのだが,VBAに集合(Set)はないので(ないよね?),Dictionaryを用いた。

で,他言語の dic[key] = value に相当する書き方だとエラーとなった。
もちろん,値がWorksheetオブジェクトではなく文字列とかならエラーにならない。
何でやねんと思いつつ,.Addを使うとエラーにはならなかった
この2つで動作が異なる(すでにキーが存在する場合の挙動)のだが,今回の処理ではそこは関係ないだろ,と思うのだが。

パスワード付き圧縮ファイルのメール添付

近頃,俗に「PPAP」と呼ばれるようになった,パスワード付き圧縮ファイルをメールに添付して送信し,次のメールでそのパスワードを送信する,という今までずっと行われてきた無意味な悪習を,ようやく止めようという機運が高まっている。良いことだ。

※そもそも,「パスワードで付きで圧縮したファイルをメールに添付すること」それ自体が良くないという話もあるが,ここでは置いておく。

このような送信方法が広まったのは,最初のメールで宛先を間違った場合に,2つ目のメールを送信しようとして,「やべぇ,さっきのメールの宛先間違ってた!」と気づけた場合に,ぎりセーフ(?)となるためだろう。

だから,送信メールの添付ファイルを自動でパスワード付きにして,時間差で送信するサービスが世の中にあるが,そんなものは全く意味がない。

では,代替手段はどうするのか?

共有ストレージや,クラウドサインのようなサービスを使ったとしても,宛先の入力で間違ったら,マズイことには変わらない。オートフィル機能のために,意図せず違うアドレスが入力されてしまう危険性は,メーラーでもブラウザでも常に存在している。

そこで,私は次の方式を提言したい!

  1. ファイルの受信者(受信予定者)が,あらかじめパスワードを決めて,ファイル送信者にメールで知らせる
  2. ファイル送信者は,そのパスワードで圧縮ファイルを作り,メールに添付して送信する

このようにすれば,宛先間違いの際に添付ファイルが解凍されて見られてしまう危険はなく,パスワードを別送する愚も避けられる。

この方式がスタンダートとして広まり,常識となれば,セキュリティの向上に大きく寄与するのではなかろうか。

えっ? 面倒だって? 安全と利便性はトレードオフだ。送信者も受信者も一手間かけることによりセキュリティが確保できるのだ。

えっ? こんなの顧客には要求できないって? だから「常識となれば」と上では書いたのだ。最初は抵抗があっても,これが当たり前になれば,「ではメールに添付してお送りするので,パスワードを送信してください」と,お客様にお願いしても,何の失礼も違和感もなくなるはずだ。

このブログのアクセス数は限りなくゼロに近いのだが,これを読んだそこのあなた,ぜひ,この方式を始めて見ませんか?

nextcloud 15 -> 16 アップデート

 レンタルサーバに設置して使用している。設置はレンタルサーバのコンパネで行った。で,アップデート が出ていたので,実行して見たら,アップデートの準備のところまでは順調に進んだが,実行の段で,途中でエラーとなり失敗。しかも,リロードするとメンテナンスモードになる。

 とりあえず,コンパネのファイル編集機能でconfig.phpを編集してメンテナンスモードを解除してリロードしてみると,アップデートの実行のところとなり,再度実行してみたのだが,同じ結果に。

 具体的には,「アプリストアで “アクセシビリティ” アプリのアップデートを確認しています」という表示のあとでエラーとなっている。

 …なのだが,何が原因かサッパリわからないではないか! あれこれ調べてみたりすると,エラーログに,

PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted
 (tried to allocate 12288 bytes) in /home/[ユーザ名]/public_html/
[nextcloudフォルダ]/lib/private/App/AppStore/

などと表示されている。nextcloudのサイトの動作環境をみると,メモリ512MBなどと書いてある。マシンのメモリではなく,PHPの割り当て可能メモリらしい。そんなに必要なの??

 ともかく,コンパネのphp.iniの設定で,memory_limitを512MBにしてみたら,アップデートを完了できた。やれやれ。

iOS devicemotion は https 必須になった?

iPhone(iOS 12.2)で,

window.addEventListener("devicemotion", function(event){
// ...
}

とやっても,動作しない。以前には動作していたのが,セキュリティ上の理由で制約がかかるようになったという。しかし,「設定」の「Safari」で「モーションと画面の…」は,すでにONにしてあるのだ。

試しに iPodTouch(第5世代,iOS 9.3.5)で見てみると,動くではないか!

グーグル先生にお尋ねしても,該当する情報なし。devicemotionなどのサンプルを載せているページを iPhone で見てみると,動作するものとしないものがあり,訳がわからない。昨夜は諦めて終了。

本日,もう少し調べてみるか,と思って調べてみるものの,やはり該当する情報なし。だが,ふと,セキュリティの制約といえば,と思い出し,URL を https://… に変えると,動作するではないか!

いまだに SSL というか TLS 無しでアクセスするなよ,ということですね…。

データベースのトラブルで haxe.org の日本語ページが消えてしまったそうです…。

haXe というマルチプラットフォーム対応のプログラミング言語がある。Flash の開発環境を探していて見つけたのだが,Javascript や PHP 等にも対応している。

主に英語の情報しかなかったのだが,サイトが Wiki になり,他言語のページが作れるようになったので,勉強もかねて以前にいくつかのページを訳し始めてみた。
実のところ,自分は日常業務では Web 開発等を行っている訳でもないので,数ページしか訳しておらず,多くのページは他の方が訳されたものだったりする。

それでも haXe のメーリングリストも一応購読しており,これがまた,活発に幅広い話題が議論されている。普段は斜め読みしかしていないのだが,おととい届いたもので,haXe の開発者の Nicolas氏の投稿で「先週ディスクがクラッシュしてデータベースが吹っ飛んでしまった。バックアップから戻したのだが,UTF8の文字がおかしくなっており,ロシア語,日本語,中国は復旧できなかった。すまぬ。」というものがあった。

で,サイトを見てみると,確かにきれいさっぱり…。

ゼロから直すのも大変であろうと思い,Google で「site: haxe.org lang=jp」で検索して見つかった日本語ページのキャッシュをダウンロードしておくことにした。十数ページほどダウンロードした後に,不正アクセス扱いされてダウンロードできなくなってしまった。特定のサイトのキャシュばかりを見るという単調な操作を繰り返していたからか? 私は人間でbotとかでは無いぞ!
仕方がないので,Yahoo で同様のことを行い,重複もけっこうあるが,数十ページ分を入手した。

キャシュは最新版ではないこともあるのだが,ゼロから訳す/入力するよりはずっとマシで,とりあえず今日のところはトップページと紹介ページとダウンロードページを直してみた。

最新版の英語ページに同期する良い機会だと思って,残りも直していくのだろうか…?

Google Analyticsを設定した

とりあえず,Google Analyticsの設定をした。

そもそも,フッタとかにコードを自分で追加するものだと思っていたのだが,調べてみると,プラグインを使えば良いらしい。そりゃそうだよね。

そこで,調べてヒットした,WordPressにGoogle Analyticsのコードを挿入するプラグイン探しその2(病的溺愛シンドロームさん) を参考に,Ultimate Google Analytics というものを導入してみた。

…ブログの作法がまだ良くわからないのだが,リンクをする際には,上記のような感じで良いのだろうか? WordPress同士なら自動的にトラックバックはなされるとのことだが…。

で,ついでに,上記のサイトで紹介されていた,Wordpress Google Analytics Reports(WordPressの管理画面でanalyticsの情報を見ることができるもの)と,WordPress.com Stats(こちらもアクセス統計などを表示するもの)も入れてみた。

WordPress.com Statsは,wordpress.comでユーザ登録をし,API Keyを取得する必要がある。ユーザ登録のみと,ユーザとブログの登録,と2つの選択肢があったので,試しに後者にしたところ,「ユーザ名.wordpress.com」というブログができてしまった。ユーザ名を自分の名前にしてしまったので,そちらに何か書くことはなさそう…。またネット資源の無駄遣いをしてしまったか。

ブログ始めました

前からPC関連の自分用のメモをブログで書いておくと役に立つのでは?と思っていたのを,一念発起してブログを設置し,始めて見ようと思う。

…じつは,そもそも,前にもWordPressを設置したのだが,文字化けにより断念したのだ。

それというのも,その時は,レンタルサーバの管理画面(cPanel)のアプリケーション追加画面(Fantastico De Luxe)で導入したのだが,なぜか,日本語がうまく表示できなかった。あれこれと調べてようやくわかった原因は,「インストールスクリプトがMySQL上に作るテーブル・フィールドの言語照合設定がUTF-8になっていない」というものだった(外国のサーバですから)。phpMyAdminで当該フィールドの設定を直せば文字化けも直るのだが,DB上の全テーブルを見て直す気にはなれなかったので,その時には,あっさりとあきらめ,設置したものを短期で削除したのである。

で,今回は,日本語版サイトから最新版をダウンロードし,サーバ管理画面でMySQLのDB・ユーザを設定し,ローカルで設定ファイルを書き換え,FTPでアップロード,という,由緒正しい導入法を取ったところ,当然,正常に環境を構築できたわけである。まっ,手抜きするな,ということですね。

<今後の課題>
・必要な設定や書き換え
・Google Analyticsの設定
・テーマをデフォルトから変更する