スマートタグはまだ決定版と言える物がない
- 電池の持ちはおおよそ半年程度。一年以上は長く持ってほしい。
- コミュニティメンバーが通過するとGPS情報を利用できるとのことだが、乱立するスマートタグの規格が統一されていないのでコミュニティが拡散され勿体ない。
- 防水製品が少ない
- 忘れ物通知の距離を設定できない(探索範囲外になって初めて通知される)
- スマホとのBluetooth接続前提。スマホ電池が消耗する。単独で動くか、またはスマホ以外の専用のGPS内蔵レシーバーと通信するなどの選択もほしい。
スマホ連携を絶対条件としないのなら、電池に拘らずにバッテリー充電式にしてもいいし、バッテリー充電式なのならいっそのことモバイルバッテリーとしても使えるようになってほしい。
またはどうせ電池がそんなに持たないのだから太陽電池を採用して少しでも稼働時間を延ばし、microUSBで充電するバッテリーで少しでも稼働時間を上げてほしい。
現時点では間に合わせで現行商品を購入するだけで、将来の決定版と言える商品がでるまでそれを使うしかない。
現時点の有効馬と思うのは
Qrio Smart Tag(キュリオスマートタグ)
か
Chipolo -チポロ
他のは電池交換ができなかったり、不安定という報告が多く、イマイチ信用できない。
LibreOffice (OpenOffice) で python を使ってマクロを書く
マクロのファイルは次のディレクトリ以下に.pyファイルを用意する(windows)。
C:\Users\ユーザ名\AppData\Roaming\LibreOffice\4\user\Scripts\python
ポータブル版では
Data/settings/user/Scripts/python
基本的に、勝手に定義されるグローバル変数 XSCRIPTCONTEXT から getDesktop() や getDocument() を呼び出して色々やってりゃいい感じ。
uno についてはよくわからない。
関数が1つのマクロの単位なので、公開するマクロ(関数)を制限したいときにはスクリプトの最後に g_exportedScripts 変数を定義して、公開する関数名をタプルで列挙する。
設定など
JavaなしでLibreOfficeを使う方法: 山賀正人のブログ
Javaがないとメッセージがいちいちうるさいので、ポータブル版は App\libreoffice\share\extensions 以下の nlpsolver と wiki-publisher をどこかにでも待避させておこう。
オプションのセキュリティからマクロセキュリティを「中」にしておく。これをしなくてもpythonマクロは使えるが、シート埋め込みのマクロを使いたいため。
参考資料
- LibreOffice: Namespace List
- とりあえずここでメソッド名などを検索して使い方を見てる。
- OpenOffice/LibreOffice マクロ
- APIについて調べるときはここ
参考資料(テクニックについて)
以下の記事を参考にセルアクセスを、配列にして効率化した。
- (OpenOffice Basic)Calcでセルの取得と値の取得・設定 : 3流プログラマのメモ書き
- (OpenOffice Basic)Calcでセルアクセスの高速化 : 3流プログラマのメモ書き
- [OpenOffice Basic] シートへの高速なアクセス
- OOoBasic/Calc/merge - ...?
- 結合されたセルの値を取得する参考
python触り初めて嫌に感じたところ
私はほとんど vimscript しか触ってこなかったのだけど、最近必要に応じて他の言語にも手を出すようになった。
それでちょっと触り初めて気持ち悪く感じたところ。
なんかあったら追記する。
三項演算子が汚いこと
三項演算子を使うと行を減らせるし、うまく使えば論理が理解しやすくなる。(下手くそな使い方をすると暗号になってしまうが)
vimscriptでは特に代入時に三項演算子を多用していた。そうすれば最終的にやりたいことは代入であるということをはじめに示せる。
それで一般的な三項演算子は先に条件を書いて、?
と:
で結果を区切る。ところがpythonの三項演算子はなんと先にTrueの値を書いてその後にif
で条件を書き、else
の後にFalse時の値を書く。
一般的な三項演算子
条件 ? True時の値 : False時の値
True時の値 if 条件 else False時の値
前から読み下す場合、True時の値を先に見てこの値だと認識したところでif
が来た時点でその認識を修正しなければいけない思考の流れが不自然だし、三項演算子を連結させると更に理解しにくくなる。
一般的な三項演算子の連結
条件1 ? 値1 : 条件2 ? 値2 : どちらも満たさないときの値
値1 if 条件1 else 値2 if 条件2 else どちらも満たさないときの値
あと、これは一般的なことだが、式に使うキーワードはなるべく英単語(if
やelse
など)でなく記号にしてほしい。それもできるだけ短いものを。
短い記号が式の構成要素だと値の変数名が明瞭に目に入って認識しやすいが、英単語が式の構成要素だとそうはいかない。
リスト内包記法
Haskellのリスト内包と違って汚く感じるのは無理矢理 for in を使ってるからだよ。三項演算子のところでも行ったけど、まず式の構成要素に英単語をなるべく使わないでほしい。特にいくらでも複雑になり得るものについては。
空のブロックはpassというキーワードを入れねばならないこと
私は冗長な表現を嫌うので、ブロック区切り記号の代わりにインデントを区切りにしたことはとても歓迎していた。
空のブロックにpass
と入れなければいけないと知るまでは。
コードの構造を軽く下書きするときには関数の中身まで書かないってことあるけど、そのカラッポの関数にいちいち全てpassを書けというのか?
そして実際に実装するときにはpassを消して中身を書くって?
冗談じゃない。というか、まずpassとだけ書かれた関数の汚いこと。
せめてpassじゃなくて:
とかならまだ許せたかもしれない。タイプ数一文字だし。まだ見た目に感じる汚さがマシだし。:
はシェルスクリプトでも何もしないコマンドだから論理的統一感があるし。
ifやwhileやdefなど制御構文の末尾に:を付けなければいけないこと
この:
、絶対、冗長だろう。明らかな制御構文なんだからわざわざ末に:
を付けなくても改行したらそこから先は処理ブロックでしょう。わざわざ:
を付けなければいけないのが冗長で嫌だ。そもそも私はC言語やJavaでの、文末尾の;
も毛嫌いしている。本当にせっかく基本の文の区切りが改行で、基本のブロック区切りがインデントなのに、こういうところで冗長な表現を使って台無しにしてるのが勿体ない。
変数名として使うと不都合なワード
pythonは予約後が少ないとされているけれど、変数名に使える単語の自由度がまだ足りない。
例えばグローバルな関数名(len
やstr
やdict
など、またdir
は使えなくはないけれど標準関数名と被る。)を変数名に使うと不都合が生じる。
こういう一般的なワードを使えないのは、変数と関数の区別が曖昧だからだ。これは利点でもあるのだろうけれど、そのせいで中間結果を一時保存する変数名の自由度を著しく下げている。
msys2でlv-windowsをmakeできない問題
関数 ConsoleGetWindowSize
にて、undefined reference to `tigetnum'
やら tigetnum に対する定義されていない参照です
やら tgetent に対する定義されていない参照です
やら言われてエラーしてた。
結論を言えばncurses-devel
をインストールすれば解決した。
これらの関数は term.h で宣言されててそれがないと正常に機能しないためと推測。
参考
ちなみになんで lv を導入しようと思ったかというと、どうしてもmsys2で less の日本語文字化けが解決しなかったので、日本語表示に代わりに使おうとしたから。
導入は以下のページを参考にした。
エンコードを自動判別してくれず、-Oやら-Iやら-Aやらのオプションでエンコード指定しなければいけないのは不満だが。
保存の度に指定ディレクトリにバックアップを残すプラグイン autobackup.vim を作りました。
autobackup.vim
はありていに言うと効率化された savevers.vim
です。
私の愛用していたプラグインに savevers.vim
というのがありました。ファイルを更新する度に更新前のバージョンを通し番号を付けてバックアップしてくれる奴です。
ただ、このプラグインは設計が古くてファイルが分割されていないのでVim起動に時間がかかるのと、通し番号を得るのに、いちいち全てのバックアップファイルを何度も調べていて、ファイルの数が増えてくるほど動作が遅くなるという問題がありました。
それで最近保存の度にいよいよVimが固まるようになってきたのでさすがにヤバさを感じて*1、これを効率よくした autobackup.vim
を作りました。
autobackup.vim
はデジカメのように内部で覚えている番号を振っている*2だけなのでかかる時間は一定です(たとえバックアップファイルを消してもそれが次に振られる番号に影響しません)。
まぁ、このご時世だからバックアップはバージョン管理が主なのでしょうけど、常に全てのファイルをバージョン管理しているわけでもないですし、実際、savevers.vim
に命を救われたことは何度かあります。
そんなわけで、お守り程度に使っててもいいんじゃないかなーって思うわけです。
あと、バックアップファイル名をフルパスからの変換にしたので、同じファイル名でも区別してバックアップすることができるようになりました。
なお、savevers.vim
にはバックアップファイルを削除する :Purge
やバックアップの差分を見る :VersDiff
といったコマンドがありますけど、正直これらのコマンドを使ったことが皆無ですし、それこそ重要なファイルならバージョン管理した上でバージョン管理の diff を使えばいいわけで、特に必要そうでもないし、めんどくさそうなのでそういうコマンドは作っていません*3。
Windows10にしてOfficeが知らないうちにアンインストールされてたので
しかもアップグレードしたのは大分昔で、とうに元のWindows7に戻す期間を過ぎていたので、
再セットアップすればいいやと思ってたら、
なんとHDD内のNECリカバリ用データにアクセスできない状態だった(起動時F11を連打しても回復メニューが表示されない)。
元はといえばなんでWindows10に対応しているはずのソフトが勝手にアンインストールされるんだって話だ(他のパソコンでは大丈夫だったが、なぜかそのパソコンではソフトを軒並み勝手に削除された)。
[起動しなくなった NEC 製 Windows7 機の復旧方法 - masayuki666’s diary]
この記事を参考に、WinPeディスクを作って(WinPe-tch Direct が Windows10 ではうまく動いてくれないのでもう随分使っていないXPマシンを持ってくることになった)、BCDを直して、何とかNEC再セットメニューを立ち上げることができるようになった。
そこからWindows7 を回復させた後、もう期限が切れるまで(あるいは切れた後も)Win10にはしないつもり。
Officeのプロダクトキーを確認していなかったので、再セットアップ後Officeが開けない事態に
このパソコンは自分のではなく家族の共用パソコンだ。
つまり、自分なら大切に保管しているプロダクトキーは全く保管されておらず、Officeが起動できず非常に困ったことになった。
勝手にOfficeをアンインストールしたWindows updaterをますます恨むことになった。
ちなみに普通はWindows10にアップデートしてOfficeが削除されるなんてことはないはず(職場のPC3台はいずれもそんなことはなかった)。
つまりOfficeがアンインストールされるのは起こってはいけないことだったと思われる。