/ 最近 .rdf 追記 設定 本棚

脳log[2017-12-19~]



2017年12月19日 (火) [LUTS]「Kid Delf IRUS Limited - いらっしゃいませ LUTSDOLLです。」■中の人の事情は知らないけど、ここ数年で初めてのヒット。強いのか泣きそうなのかよくわからない表情。すべて同じモデルなのだとしたらそれは能面ぽい。製造に移ってからどれだけ微妙なニュアンスを再現できるかだけが心配。


2017年12月18日 (月) [SakuraEditor] サクラエディタBBS[8303]■GREP置換とな。GREPはいつも Ctrl+G だから気づかなかったけどその下にそういうコマンドがある。いや知ってたけどね、実際にあるのを確かめたのは初めてだった。しかし……、デバッグのためという理由があってさえ試すことができなかった。■オプションの多さだろうか。取り返しのつかなさだろうか(※バックアップオプションはある)。置換の及ぶ対象の予測不可能性だろうか。■XPかそれより前の Windowsではショートカットに埋め込んだ引数が無視されて無理だったかもしれないけど、SendTo に GREP置換モードで起動するオプションを付けたサクラエディタのショートカットを入れておいて、フォルダを右クリックから送るようにするのが使いたい状況からも一部のオプション指定を省略できることからも楽だと思う。実際にそうできそうだ>「コマンドラインオプション(sakura-editor.sourceforge.net)」。■あるいはもうひとつの思いつき。まず GREPする。出力形式に種類があってグループ化されてると問題があるんだけど、そうでない場合は「/path/to/file.withmatch(line,keta) [charcode]: matchline」という行のリストが出力される。この GREP出力に基づいて選択的に置換を実行できれば、事前に対象が把握できて安心できるし、一部を除外したければ行を削除するなり選択範囲から外すなりして対応できる。ヒントは svk commit にあった。svk add a.txt b.txt && svk commit するとコミットメッセージを入力するためにエディタが起動し予めこう入力されている。「(改行)=== Targets to commit (you may delete items from it) ===(改行)A /path/a.txt(改行)A /path/b.txt」 試したことはないけど、Aから始まる行を削除することで一部の svk add のコミットを先送りできるのだと思う。もちろんコミット対象を指定して svk commit しても同じことができるんだけど、svk commit してから除外する作業フローが許されているし、実際にそうしたいだろうシチュエーションに誰でもが遭遇しうるだろうと思う。■GREP置換に話を戻すけど、改行が増減しない限りはうまくいくだろう。特定のファイルの特定の行が特定の内容を持っていることを確認してから、その行を対象に置換を実行する、というようなマクロなりコマンドなりがあると、既存の GREPなりタグジャンプなりを含んだ作業フローに組み込みやすいと思う。逆に言うと今の GREP置換は異質。スクリプトが使えない人が必要とするシチュエーションがあるのだろうとは想像できるけど、コマンドラインオプションで制御したくなる程度に、GREPと同じ程度に異質。いやひょっとして、GREPはそのあとでエディタで開きたいという考えがあって実行するけど、GREP置換の場合はどうだろう。■■■2003年に投稿されたマクロ>「Macro/投稿/133 Grep結果から複数のファイルをまとめて置換処理 - SakuraEditorWiki」 同じことを考え、とっくに作成している人がいた!


2017年12月16日 (土)

最終更新: 2018-02-15T12:43+0900

[SakuraEditor] insert_datetime.patch(-44行/+29行)

 F5で現在の日付と時刻を挿入したい。

メモ帳でできるように……と書くために今試してみたのだけど、挿入されたのが「00:49 2017-12-17」だった。なんだこのキモい並びは。年月日も時刻もフォーマットこそ OSの地域と言語のオプションに従ってはいるものの、その前後関係が決定的にYMD文化圏のそれではない。

 しかし日付は日付、時刻は時刻。

メモ帳はどうでもいい。サクラエディタには「日付を挿入」コマンドと「時刻を挿入」コマンドがある。それぞれのフォーマットをカスタマイズできる。日付を挿入するコマンドを F5 に割り当てて、そのフォーマットを「yyyy-MM-dd HH:mm」にすればいいと考える。できない。日付書式と時刻書式が分かれていて同時に使用できないせい。

ソースを見れば一目瞭然だけど、Windowsが GetDateFormatと GetTimeFormatという2つの APIを公開していて、サクラエディタのコマンドがその薄い被せ物だというのが、おそらくこの不便な分離の理由。くっつけたっていいでしょ。

 注釈(パッチの上から順に)

  1. TCHAR* で受け取った引数を const TCHAR* で返すのは筋が通らない。constを外した。
  2. MyGetDateFormat/MyGetTimeFormat には 3引数のものとフラグとポインタの 2引数が追加された 5引数のオーバーロードが存在するが、追加された 2引数は過度に複雑で目的が不明瞭なので 1引数にまとめた。CFormatManagerは DLLSHAREDATAから切り出された過去があるらしく、DLLSHAREDATAのメンバ構成がそのまま引数になっていたのだろう。しかし過去は過去。
  3. 省かれたコロンコロンについては以前に書いた>「namespaceが導入されたからグローバルな名前空間を明示するために :: を付けましょう、これまでただ Func(); と呼んでいたものを ::Func(); と書きましょう、なんてのはなんの冗談かと思う。譲るのは当然後から来たほうだし、衝突しないような名前を選ぶ、衝突が避けられないときにしぶしぶ :: を付けて区別する、くらいの態度で(20161214)
  4. GetDateFormat/GetTimeFormat APIが書き込みを行わなかった場合に戻り値となる文字列が不定になるが、呼び出し元がそれを知る(すべ)がない。CFormatManagerの責任で戻り値をターミネイトする。
  5. カスタムフォーマットの場合に限り GetDateFormatと GetTimeFormatの両方の APIを呼ぶ。そうでないと OSの設定で日付フォーマットを「'hh' yyyy'年'M'月'd'日'」みたいにしたときに hh がそのまま hh とは表示されなくなる。

    書式文字列と書き込み先が同じポインタでも問題ないみたい。フォーマットに対して書き込み文字数の方が多い場合があるとしたら問題になるだろうか。ANSI版で日本語の曜日が書き込まれるときとか?

  6. CFormatManagerのメンバ変数をポインタから参照へ。ポインタであるならそれは nullable であるので NULLチェックをしなければいけない。それをしていないのなら、その必要がないとわかっているのなら、それを表明できる参照型を使わない理由がない。

 「前」と「後」でも良く解らんが [2005/8/10] - 晶紀の館

GetTimeFormatは時刻だけしか対応していなくて、日付を整形したい場合はGetDateFormatというAPIを使うことになります。これが2つに分かれている所為で、両方を一度に整形したい場合に実に厄介な問題が発生するんですが、まぁそれは置いておいて………。

置いておかないで。知りたい。

「tt」が「AM」になるのか「午前」になるのかは、実行したOSの設定次第です(日本語設定なら「午前」とか)。

それでは、日本語環境で「t」はどうやって表示されるのでしょう。

「AM」が「A」、「PM」が「P」に対応するみたいで、なんとなく「t」は「tt」の短縮形じゃないかと想像付くんですけど、果たして、「午前」「午後」はどのように短縮されるんでしょうかね…。

wwwwww

 コンストラクタからコンストラクタを呼ぶ - 役に立たないプログラミングTip - 晶紀の館

20170908p02で書いた明示的デストラクタ呼び出しと placement new の組み合わせがここでも。そんなにありふれてるかなあ。

20170908p02で結論が出てるけど、一時オブジェクトとスワップするのが最適解。ナンセンスに思えた途中の試行が実はいいセンいっていたという。さらに最近の C++ なら素直に移譲コンストラクタが使える(らしい)。

 インラインの基準@2018-02-06

約200行ほどの関数です。別にどうと言うことの無い関数なんですが(個人的には幾つかに分割したいんですけど)、何故にinlineになっているのかっ!

インライン展開するには大きすぎるから。って言うか、そもそもインライン展開する必要ないでしょ。プログラムの起動時に1回だけ呼ばれる初期化用の関数なんだし。

自分がわりと inline を、とりあえず付けておこうっていう人間かな。このファイル(脳log[20170908p01] ツールチップ>a.patch)の中を inline で検索すると知れると思うけど。

基準は、今考えてるんだけど、以下のいずれか。

  • 小さいこと(1~3行)
  • フラグによる分岐と関数呼び出しばかりで、実質的に小さいこと
  • コードブロックの目的と入出力を明示するために名前を付けて関数化したけれど、1か所からしか呼び出されないこと

最近 C++ In Depthシリーズを読み返してるんだけど、そして実はシリーズに見えてシリーズとは書かれていないんだけど、『Efficient C++』の中に「シングルトン関数」という呼び名で3番目の関数のインライン考が載せられていた。同意するかは読み手に任されるとしても、そういう考えのもとにインライン化することもあるってことで。

2番目の「実質的に小さい」は、よく考えると嘘かもわからんね。呼び出す関数の引数が多かったり、呼び出すつもりの関数がインライン展開されたりすると、ソースコード上の見た目以上に大きいということがわりにありそう。

他の関数を真似してinlineをつけたんだと思うけど、「訳がわからんけど動くからそれで良いや」的にコンパイラを誤魔化すだけのテクニックなんて使用厳禁っ!

最近知ったんだけど、inlineを付けるだけで関数の多重定義によるリンクエラーが避けられるらしいですねえ>20170410。そういうことをしだすと、「道具として使う」を通り越して乱用の域に達してると思う。

pHを測る機械があって、ピッと簡単に数字が出るのかは実際に使わなかったから知らないけど、「原理も知らずに……(もにょもにょ)」というぼやきが聞こえてきたのが印象に残ってる。原理を知らないと手段の優劣も限界も条件にあった適切な選択もわからんもんね。

道具ってのは元をたどれば誰かが目的のために最適な手段を求めた結果として生み出された経緯があると思う。予め用意された道具を使っているだけではアマチュアの域を出られないのではなくて? 知の高速道路に関係する話。開拓者とフォロワーの違い。大多数にはハイアマチュアも届かない存在かもしれんけど。

 表示する日付時刻のフォーマットをカスタマイズ - Tablacus Explorer - タブファイラー開発ブログ

日付と時刻を同じひとつのフォーマットで指定できる。そのソースがたぶんここ>「HRESULT tePSFormatForDisplay(PROPERTYKEY *ppropKey, VARIANT *pv, DWORD pdfFlags, LPWSTR *ppszDisplay)

[hHmst]が時刻を表すフォーマット文字としてリストでき、[dMyg]が日付の文字としてリストできる。時刻文字が見つかると日付文字が見つかるまで、日付文字が見つかると時刻文字が見つかるまで API 呼び出しを遅延し、切り替わる部分まで(もしくは文字列末尾まで)をフォーマット文字列として、対応する API を呼び出している。どんなフォーマットでも最低1回は GetDateFormat を呼び出してるっぽいのは、2値だと if 文の条件がシンプルに書けるからか。必ず1度は、それも最初に日付フォーマット文字に出くわすだろうという推定は、すごく妥当だと思います。

これが真摯な対応というべきものか。俺は2割のコーナーケースを捨てて過度にシンプルな解法を選びがち。

 datetime - Win32: GetDateFormat and GetTimeFormat exist. GetDateTimeFormat? - Stack Overflow

先に挙げたコードの通りの回答。たぶん AM とか PM とか Thu とか Sat とか Oct とかに展開された文字列が再度フォーマット文字として解釈されてしまうんだろう。まじめに挙げると問題のあるロカールでは問題ばかりだった。


2017年12月13日 (水) 最近長財布を物色している。今使ってるのは2つ折りタイプで、がま口のごとくがばっと開くファスナー式の小銭入れが一体化したもの。実用性はピカイチだけどいかんせん中学生か高校生の頃から使っているもので、裂けるし剥げるしそろそろ寿命(一般的にはもう終わってるという説も)。このタイプの欠点は厚みがあることと、せっかくのピン札でもくの字に折れ曲がってしまうこと。■小銭はマメに消化するタイプなので(20170413)、長財布でもやっていけるかな、と人生3個目の財布を見定めてる(1個目はけろっぴの財布だった)。■厚みを主に決めるのがマチ。厚いのから通しマチ、ササマチ、風琴マチ、マチなし。通しマチはないかな。収容力アピールは逆効果。■カードは2、3枚入れば十分。■ボタンもファスナーも「遅い」から不要。それに裂けたのはボタンの周辺だった。マグネットはありだけどカードをバカにするという理由で使われなさそう。■アブラサスを除けば造りに見るべきところはなく、素材と技工が差別点。■ネットで見ていても甲乙つけがたく5点6点から先が絞れない。今日は実物を見てきた。……。全然数がない。タイプで絞ると3、4種類しか残らない。しかしワゴンで割引されていたものに面白いのがあった。■中仕切りの縁(指でつまむ部分)にそって長細い革が縫い付けられていた。すると金属バネのスイッチがオンオフを切り替えるように節度が生じて、仕切りの奥が開くか手前が開くかがパタパタと切り替わる。どれも同じ形に見えるなかでこういう(やりすぎでない)工夫が目を引く。あ、ブランドのロゴとか見えるところに付けたいんだったら広告料払ってね。


2017年12月11日 (月) カメラが外から見えすぎて困る。■弁当箱のような箱がある。ケーブルでカメラとつながっている。弁当箱はまたケーブルでモニタとつながっている。モニタでカメラの映像が見られる。これは当然。■弁当箱に無線機能はなく、LANポートのみがある。LANケーブルで NTTの光ルータにぶら下がっている。■スマホにアプリをインストールする。弁当箱のデバイスIDというのを弁当箱のマニュアル(ただのプリントアウト)に印刷された QRコードをスキャンして入力すると、カメラのライブ映像がスマホで見られる。これは当たり前のことだろうか。■スマホが Wi-Fiで NTTの光ルータにぶら下がっている場合はスマホと弁当箱は同じサブネットに属していて、Windowsのファイル共有などと同じようにブロードキャストで相互発見が可能かもしれない。スマホの Wi-Fiをオフにしてドコモの LTEで通信していても弁当箱からライブ映像が送られてくる。これってありえるの?■ルータの特定のポートへのアクセスを弁当箱の特定のポートに導くというような設定は、ひょっとしたら UPnPとか何かの技術で不要になるのかもしれないけど、スマホが最初にアクセスを試みる IPアドレスが不定だと思うし不明なままに映像が出るのが気持ち悪い。■弁当箱はいくつかの DDNSサービスに自分を登録する機能を持っている。この機能を利用していて、また、スマホにそのホスト名を入力したのであれば納得できる。でもスマホに入力したのは弁当箱のデバイスIDだけだ。■外部にデバイスIDを集約するサーバーがあるのなら、これもわかる。弁当箱はケーブルでインターネットに接続したらまず自分のデバイスIDをサーバーに申告し、スマホはそのサーバーにデバイスIDをキーにしてその申告者の IPアドレスを教えてもらう。問題はそのサーバーの存在が不明だということ。Internet Explorerを使って弁当箱の IPアドレス(プライベートのだけど)さえわかれば映像が見られることを確認しているので、インターネット越しであっても NTTルータの WAN側 IPアドレスさえわかれば映像が見られる可能性がある。そしてそのアドレスを収集し配信しているサーバーがあるのかもしれない。■弁当箱が Wi-Fiなり Bluetoothなりの無線機能を持っていてスマホと直に情報をやりとりしているなら、インターネット越しに設定なしで映像が見られることの説明がつくかもしれない、ていうかインターネット必要ない。でもハードウェアプロファイルはさておき説明書には「Wi-Fiや Bluetoothでの接続は不可能なので必ず LANケーブルでネットワークに接続する」というような説明がある。ないよね? 知らん間にスマホとペアリングが完了してたりするの? そうだとして、それで映像が見られるというのなら、スマホを持ち出して弁当箱から離れると映像が見られなくなるわけで、それじゃあ見えすぎではなく不足なんだよね。■弁当箱の設定で仮にアクセス制限がかけられるとして、それが信用できるのかという疑問がある。弁当箱の LANケーブルを差し直して新しい(プライベート) IPアドレスをリースしてもらったり、プロバイダへの接続を切断して新しい(※たぶん)(グローバル) IPアドレスを割り当ててもらったりして、それでも一瞬映像が途切れるだけで何事もなくライブ映像を映し続ける(LTE接続の)スマホが不気味で、不信感が生まれてる。LAN内でだけ映像をストリーミングできればあとは VPN接続でなんとかなるから十分だし、特別な設定をしなければそれが普通の状態だと思ってたので、デバイスIDひとつでインターネット越しに映像が見られる現状にどうやって制限をかけられるのか頭を抱えてる。弁当箱からインターネットへの通信を全部遮断するとか? 時刻合わせができなくなるんだけどな。■こういうのって見えなければ不具合でサポート案件だけど、見えすぎることは問題にされにくいよね。すくなくとも自分には難しすぎる。そういうものには手を出さない。


2017年12月10日 (日) 利用者が検証可能なガチャの実装 - Qiita」■テクニカルタームが邪魔でよくわからないんだけど、確率的である限り、運営が操作しているとしか考えられないほどに運の悪い人が出現することが避けられないのが問題なんであって、むしろ救済的な操作が求められている、というのをこのへんで知った>20150507, 20160324■ユーザーごとに最初の1回目にだけ出現順を決めるガチャを引いてその種を保存しておくとかいう方法はないんかいな。それで種と何回目であるかの2つの数字から出てくるものが決まる。ランダムではなくシャッフル。どちらの数字もサーバー側に大したコストでなく管理・保存できそうだけど。■数学的にそんな方法はないのかもしれないし、福引きの特等のように裁量を残しておきたい事情があったりするのかもしれないけど。


2017年12月09日 (土) [SakuraEditor] Wikiに Developカテゴリを見つけた(今です!)。「Develop > 10 非公式hor版バイナリ&ヘルプ」の log.html からいくつか。■「矩形選択時は左右カーソル移動で上下行に移動しないように変更」これはもう実装されたと思う。考えることは一緒か。■「矩形選択中の[BackSpace]動作を変更。(旧)選択範囲を削除。(新)選択範囲の直前(左端)を削除。用途:矩形選択→複数行入力→[BackSpace]→複数行"再"入力」 用途が書いてあるのがポイント高い。実際役に立つと思う。[BackSpace]と[Delete]を使い分けられる人なら受け入れられるだろう。自分は元に戻したときに矩形選択が維持されるようにしてるから、[BackSpace]ではなく[Ctrl]+[Z]してから再入力できてる>20110612p01。■「水平スクロールバーの最大値をメモ帳風に。1.ファイル読込み時、最大行長にあわせて水平スクロールバーの最大値を決定。2.編集時、↑を超える行長になったら水平スクロールバーの最大値を更新。3.全行削除時、水平スクロールバーの最大値をリセット」というのはこれだと思う>[r1653]。コミッタはご本人ではない。最長の行が縮んだときに更新しないのはフルスキャンを嫌ったのだろう。■「再読み込み後も「編集」-「元に戻す」を実行可能に。」 これどうやるの? ひょっとしてアンドゥ履歴ってキーマクロ形式でシリアライズできる? あとはどこに保存するか。desktop.ini も Thumbs.db も嫌われるけど。■「全角文字を含むURLも色分け/ジャンプできるようにしてみました」 今は正規表現で「URL」を定義できたはず。■「読み取り専用で開いたときの制限を変更。(旧):上書き保存不可, すべての編集系コマンド実行不可。(新):上書き保存不可」 うん、自分もそうしてる。マクロに Editor.ReadOnly()Editor.ViewMode() があって、明らかに2つの指す概念は異なるのに、どっちもビューモードを設定するのが残念。今に至るも両者が区別されてないんだよね。■「矩形選択後に正規表現置換で改行を削除するとカーソル位置,選択範囲表示が変になる場合があったのを修正」 最近いじってたところ。


2017年12月08日 (金) [SakuraEditor]「Sakura Editor / PatchUnicode / #1028 矩形選択置換で置換範囲がおかしいバグの修正」の「正規表現DLL APIに置換範囲終了位置を指定することができないので、先読みで置換範囲外を指定してマッチさせるようなこともできません」というの、鬼雲(鬼車)には文字列開始位置終了位置に加えて検索開始位置終了位置が渡せるはずだからなんとかなるんちゃうの、と思って「4.3. bregonig.dll 独自 API」を使う方向で検討してたんだけど。ない! const TCHAR *strstartp, const TCHAR *targetstartp, const TCHAR *targetendp の他に const TCHAR *strendp に相当する引数が必要なんだけどそれは targetendp と一体化してるっぽい。Bregexp.dll for SAKURA が BREGEXP.DLL を拡張して派生せざるを得なかった(※想像)残念な省略がまたしても。BoSubstExW の登場が待たれるな。<Meryみたいに直に叩いてフル機能を使えばって話でもあるんだけど、テキストエディタのユーザーが Windows版バイナリを手に入れる方法がね。■「この条件さえ満たせば、BSDライセンスのソースコードを複製・改変して作成したオブジェクトコードをソースコードを公開せずに頒布できる。」ライセンスさえ明示すればただコンパイルしたバイナリを再配布することが可能だろうか<そもそも Meryがやってる。sourceforge.netをただのファイル置き場にできる?


2017年12月07日 (木) Macに別れを告げて、クラウド中心の開発生活を始めるまで - Qiita」■これは目指したい方向性ではある。しかし「解脱」するには自分にはまだ執着が強すぎる。災害に見舞われでもしないと無理か。しかしそれへの備えとしての意味がある。むむむ。


2017年12月06日 (水) 当初の懸念どおりブラウザのプッシュ通知は邪悪に使われはじめている。実装側はクリックまで購読確認を待つべき。 - mizchi's blog」■へー、知らない世界の話ですね。


2017年12月05日 (火) 石器からスマートフォンが作れなくて、震える」■自分の工作レベルをときどき考える。一番低レベルが紙をはさみで切ってテープで留める。レベル1の素材が木で2が粘土かな、3が金属(おおざっぱ!)で4がガラスだろうか。5はわからんけどそのうちコンクリートがきてセラミックがきて(なんだかんだ砂だよな)、プラスチックとシリコンの場所はどこだろうか。たぶん革が抜けた。繊維は外した。でも自分のレベルは木工が精々で金属は扱えないんだよな、とか。コンクリートの環境改変能力はすごい。


2017年12月04日 (月) 年始恒例の「福袋」、ネット事前受付を求める販売店が増える | スラド IT」■スラドに何を期待してんの(何が期待できるの)ってことなんだけど……。販売店が受付を求めたというからその先は発売元しかないと思うだろう。それでは意味がわからないがともかく客が受付をするより不可能ではない。実際はどうか。販売店が客の登録を事前に受け付ける整理券方式・抽選方式だということだった。「受付を求める販売店」のおかしさに気がつかないもんかなあ。■かくいう自分も募金をする人ばかりで募金される人がどこにもいないことには気がつかなかったクチです。■■■「アリを使った実験では、グータラばかり集めたグループからでも勤勉な連中が現れたそうです。」 グータラの意見はですね、他に勤勉で有能な人間アリ!がいるなら自分の出番はないな、精々足を引っ張らないようにおとなしくしていますよ、ってところ。


2017年12月03日 (日) Subversionを 1.6系から 1.9系にバージョンアップしたら svn st がくっそ速い。■メタデータの保存場所がワーキングコピーのルートディレクトリのみになったようで(gitと同じ?)、ワーキングコピーのサブディレクトリをよそに持ち出して .svn が邪魔ということがない。svn export しろって話なんだけど、目の前にあるものを使いたいこともある。嘘をつきました。そういう時しかない。■1.6系の svn diff に不満があって、比較される複数のファイルの並びが一定しないということがある。パッチの第1版を svn diff で作成します。変更されたファイルの差分が a.cpp b.cpp c.cpp の順番で現れます。それが第2版では b.cpp c.cpp a.cpp になったりする。パッチの比較ができない。■何かいい diff はないかなーという探索活動の中で行われた Subversionのアップデートだけど、改善はありましたかね。■俺もシンプルな解決法が欲しいよ>「Can I get svn diff in sorted order? - Stack Overflow