最終更新: 2017-09-06T19:57+0900
写真も動画もとってない(追加予定)。
場所は左のフロントフォーク。フォークがねじれたときに緩めて締める下の方のブラケットに、元からあったブレーキホースのガイド共々共締めした。おもちゃを構造部にってどうよとは思ったが、ここがベストポジションだと思ったんだよねえ。次点はウィンカーの上、ヘッドライトの上部を固定するボルトに共締めして。次次点はハンドルバー。どんどん上方に移動して目立ってくるのが嫌。目立てば盗難を警戒しないといけなくなる。安くなっても 16000円はしたのだから。というか、カメラを構えるとか撮影するとかいう行為がひどくプライベートで恥ずかしいことに感じられるので(鏡を見るとか食事もそう)、他人に気取られたくないというのが第一。その点 lowerブラケットの横だと、正面からはヘッドライトの右、ウィンカーの下、シュラウド内側の黒プラスチックを背景にして収まることになる。ハンドルをロックした状態ではシュラウドに包み込まれて手をつっこむ隙間もない。シュラウドとカメラがぎりぎり接触するので半センチほどブレーキホースガイドを押しのけたくらいのぴったりさ。
ホームセンターで L字の短いステーを1つと M10のキャップボルト(アーレンキーで回せるやつ。携帯ツールで一番太い、自転車のクランクを外すときに使うのが合う太さだった)・ナットを1組買ってきて、あとは NECKER付属のマウントを使った。プラスチックがしなるとかすぐ割れたとか聞くけどもとりあえずは。付属してきたティーメジャーのような形のステーに開いてる、三脚穴ではない方の穴は 1cm。買ってきた L字ステーに2個開いてる穴も 1cm。だからステーとステーの連結は M10のキャップボルトにしたんだけど、共締めさせてもらうフォークのロアーブラケットピンチボルトは M8。穴が大きすぎるので M8のワッシャー(9円)だけまた買いに行ったさ。
ステー単体だと素手で曲げるのは難しいんだけど、2個を連結してその先に重いカメラ(※)が乗っていれば結構しなる(それは 3Mの VHB(=付属品画像に見える赤いシールのやつ)をそのまま間に挟んでるのも理由だろうけど)。明日の録画がどれだけひどいか、ましてカメラが脱落しないかが心配だ。USBケーブルを既設のケーブル類と一緒にハンドルに固定したので、NECKERの特長のひとつである USBケーブル一体型の防水キャップが一体のままである限りは、スポークに届く位置までは落ちなさそう。ストラップホールはケーブル一体でないキャップには付いてた。直径方向に 2mmの穴が貫通してるだけなのでケータイストラップみたいなのは使えないけど。
※三脚穴に対応したネジはカメラのアクセサリだろうと、ビックもヨドバシも近くにはないし、カメラを売ってるなら電気屋も同じだろうと2件寄ってみたんだけど、つまんないね。何を売ってるんだろう。高すぎるメモリーカードをずらずら並べて、プリンターのカートリッジを一面に並べて、(パッケージ版の!)ゲームソフトを扱う一角があって、それってこち亀を全巻陳列するくらいの場所の無駄だし、客にそこから選ばせるのもまた無駄だし。ソニーのアクションカムの実物(※コードにつながれていたので本物だろう)が画像で見るよりひとまわり小さかったのと、持ったときに中身の詰まった重さを感じるのが全体のごく一部で、全体としてものすごく軽い(でもたぶんバッテリーは入ってなかったんだろうな。バッテリーは中身詰まってるし、総重量のおよそ 1/5を占めるみたいですよ)というのが発見できただけ。欲しいものは置いてないし見逃せないものもないし、ホームセンターの目移りするわくわく感との落差よ。昔は電気屋のチラシって眺めてるだけで楽しめたのにね。
マイクは電源ボタンの反対側。数少ない YouTube動画では高音が反響したような耳障りな音ばっかり聞こえてくるので、素の状態からどうにかしてましにしなければいけない。参考にできる NECKERの成功例は?
「共締め」ってどう読むのか正しい言葉なのか検索したときにヒットしたたいそうなお役立ちサイト>「ねじ」のゆるみ ねじのことならコムウエル・フジサワ。勉強になります。
連番だと PCにコピーしたときに名前がかぶる可能性が高いし、動画の撮影開始時刻、終了時刻という重要な情報がファイルの作成日時、更新日時という失われやすい場所にだけ(※)保存されてるというのも不安なので。※映像から読み取れればいいんだけどね。
/* [NECKER V1P] renamer.js NECKER V1 Plusが保存する動画ファイル CAR_XXXX.MOV, SOS_XXXX.MOV, TLP_XXXX.MOV の連番部分(XXXX)をファイル作成日時(YYYYMMDDHHMMSS)で置き換える。 CAR_XXXX.MOVで確かめた限りは、ファイルの作成日時と更新日時は 動画の撮影開始時刻と終了時刻と一致するようですよ。 SOS_XXXX.MOVはちょっと特殊かもしれないけど。 メモリーカードから PCにコピーした場合、ファイルの更新日時は維持されるけど 作成日時はコピーした日時(コピーファイルの作成日時)で上書きされるみたいですよ。 だからこのスクリプトはメモリーカード内の \DCIM\100__DSC フォルダで実行しないとダメですよ。 */ var FSO = new ActiveXObject("Scripting.FileSystemObject"); var Dir = FSO.GetFolder("."); var FAC = {Normal:0, ReadOnly:1, Hidden:2, System:4, Volume:8, Directory:16, Archive:32, Alias:64, Compressed:128}; var Reg = /^(CAR|SOS|TLP)_[0-9]{4}\.MOV$/; for (var it = new Enumerator(Dir.Files); ! it.atEnd(); it.moveNext()) { var file = it.item(); if (file.Attributes & (FAC.ReadOnly+FAC.Hidden+FAC.System+FAC.Volume+FAC.Directory+FAC.Alias)) { continue; // 属性持ちには触らない。非ファイルには用がない。 } var m = Reg.exec(file.Name); if (! m) { continue; // NECKERの動画ではない。 } var t = new Date(file.DateCreated); var time = ("000"+t.getFullYear()).slice(-4) + ("0"+(1+t.getMonth())).slice(-2) + ("0"+t.getDate()).slice(-2) + ("0"+t.getHours()).slice(-2) + ("0"+t.getMinutes()).slice(-2) + ("0"+t.getSeconds()).slice(-2); var newname = m[1]+"_"+time+".MOV"; for (var i = 1; i < 10; ++i) { // 無印と(2)から(9)までリネームを試します。 try { file.Name = newname; break; } catch(e) { newname = m[1]+"_"+time+" ("+(i+1)+").MOV"; } } }
カウルが写ってるのは昼の動画よりポイントが高いが、空の狭さが大きなマイナス。マウント位置を下げてやや上向けるか?
だいたい4分の1のサイズに圧縮してる。ナンバーは元から読めません。止め絵の画質的にもスピード感的にも品質設定をフルHD/30fpsの方にしようかな(<画質は良くならないわりに動きの滑らかさは低下するので、やっぱり 720/60fpsがいい)。DSC-HX30Vで以前撮ったフルHD/60fpsの動画もあるんだけど、音が全然違うよね。低音があるおかげであちらは聞きやすい。NECKERのも YouTube動画から予想してたよりはましな音で、ミュートするまでではなかったが。
画面の一部に夕焼け空が写ってる場面では肝心の前方が暗くつぶれてしまってた。旧機種ではホワイトバランスをはじめ細かくセッティングをしていたらしいが、自動調整で面倒を解決とはいかなかったか。
右下のカメラ名と時刻表示は消せない。DSC-HX30Vがするように字幕扱いでもなく、画面に埋め込まれてる。
最終更新: 2017-05-16T22:39+0900
index.rbのパーミッションをすべて落としたんだって。そうやるんだ。
日記を書くと長々待たされたあげくエラーになって、どうも category.rbに原因がありそうだとキャッシュを削除したり再作成しようとしたらそれも長々待たされる理由になって、parserキャッシュを含めて cacheフォルダをあらかた掃除したらとうとう更新(update.rb)だけでなく参照(index.rb)も終わらなくなっていたらしく、index.rbが夜の間に止められていました。
詳細はここに書いた>http://tdiary-users.osdn.jp/cgi-bin/wforum/wforum.cgi?mode=allread&no=6793&page=0
evalの第3引数を "category.rb:619:#{ymd}p#{idx}"
(619は #{__LINE__}
とかが使える?)にしてシンタックスエラーを引き起こすもとを探ったら、5年前のこの日(20111209)の日記が原因だったとかね。実はときどき日記の更新がエラーを起こすのは経験してたんだけど、変更自体は反映されてたし、裏で延々実行が続いてるということもなかったので知らんぷりしてたんだ。それが5年?
この日記はいろいろ魔改造が施されてるので CPU酷使の原因が category.rb にあるとは限らないし、そうであると考える理由も今のところ持っていません。実際5年間深刻な問題は起こっていなかったわけで。ただ、index.rbを止められたのをきっかけに category.rbを修正したら昨日からの問題が解消したので 、index.rbのパーミッションを怖々元に戻してみて今のところ過負荷は生じていないみたいだってことです。最初は x-math.rb(これは evalよりも大胆かもしれない print関数の乗っ取りをやっています)とその他エラーメッセージに出ていたいくつかのプラグインに原因があると疑って試行錯誤していたので、もはやなにが原因でなにが奏功したのかは藪の中といってよいでしょう。
コメントするために GitHubのアカウントを取った。デフォルトのプロフィールアイコンがあまりにもクソ雑魚ナメクジだったので、あわててペンタブ付属のフォトショップエレメンツ9を起動した(初回起動だった)。スカートの中に光源を配置したり、円形のグラデーションをアルファチャネルに設定したり、フォトショップはやりたいことが探せばちゃんとできるようになっている優秀なプログラムだった。自分の想像の及ばないすごいこともできるのだろう。でも Windowsネイティブではないから、数字入力フォームで[End]キーを押してもカーソルが末尾に移動しなかったり、リストで先頭の文字をタイプしても項目が選択できなかったり、戸惑うけど我慢するしかないね。使いたいもんね。
正直なところリンクを張るにあたってどれを指せばいいのかよくわからなかった。ブランチ作成、コミット、マージ、ブランチ作成、リバート、マージ、ブランチ作成、コミット、コミット、マージ、の最後のマージを指すつもりで #596のプルリクエストにリンク(※2番目の方)を張ったんだけど、これでいいの? ていうか活動の流れと全貌がさっぱりわからん。
昨日「もうGitは怖くない: 自信を持って使いたいあなたへ - 檜山正幸のキマイラ飼育記」を読んで理解したにわか知識によると、コミット(リバートももちろんコミット)とマージは同じ種類の実体(コミットオブジェクト)によって表されるらしい。ただし、コミットは親が1つでマージは親が2つ。親というのは変更の元にしたコミットオブジェクトのこと。親子それぞれがファイルシステムのスナップショットとでもいうものを保持しており、その差分を求めることで変更の内容がわかる。ブランチはコミットを継ぎ足す先を指し示す先導役で(実体は refs/heads/の中)、先導役が異なればコミットの列は別方向に伸びていく(枝分かれしていく)。枝分かれして以後の変更の蓄積としてのブランチは、たとえば masterブランチを構成するコミット集合との差集合を求めれば出るとか。
とりあえず4章でストップしてた『[単行本] 濱野 純(Junio C Hamano)【入門Git】 秀和システム』をまた読んでるけど、もう7年も前の本ですよ、これ。いやぁ(略)。アマゾンのカスタマーレビューを読むと gitが幅広い人に使われてるのが想像できるんじゃないかな。
- シンタックスエラーをうまく回避して日記サービスの利用者が信頼済みコードのコンテキストに這い出ることができるのかはよくわかりません
たとえばこういう日記を書く(※アンダースコアは例によってスペースに読み替える。日記サーバーが Windowsでないなら cmd /C dir
は ls
にするとか)。
! [cat] title _ _BODY _BODY=File.new("./zzz.txt","w").write(`cmd /C dir`)#
古い category.rbは以下のように保存しておいたプラグインロード時のバインディングで evalをする。
@conf.shorten(eval(body.untaint, @binding))
evalされる bodyの中身はこうなっている。
text = apply_plugin(<<'BODY', true) <pre> BODY BODY=File.new("./zzz.txt","w").write(`cmd /C dir`)#</pre> BODY
通常はユーザー入力たる日記のソースは ERB(eRuby)スクリプトに変換されたものがそっくり <<BODY
~BODY
で囲まれて apply_pluginへ引き渡され、セキュアモードなら $SAFE=4
で実行される。
上の例ではユーザーの入力した日記がほぼそのまま(※リダイレクト記号(<>)は <>に変換されたりする)、3ステップある(3ステップに分断された) Rubyスクリプト(1.apply_plugin, 2.定数(BODY)代入, 3.定数(BODY)参照)の2ステップ目を構成している。apply_pluginの文字列引数ではなく、apply_pluginと同列の Rubyスクリプトである。
index.rbのディレクトリに zzz.txtファイルが作成されたりしてませんか? ウチだけですか? シンボリックリンクがどうとかパーミッションがどうとかでも結果は変わりそうだけど……。そもそもセキュアモードでないならこれができても良かったんだっけ?
うーん、どうなんでしょうね。日記ホスティングサービスの制限っていうのがわからないんだよね。たとえば(tDiaryをベースにしてる?) Hikiだと単独のプラグインメソッド呼び出ししか許さないように独自にプラグイン記法をパースしていて、ただの文字列埋め込み({{"ここにタグなりなんなりを自由に書く"}}
)すらできなかったりする。もちろんそれができるとなんの工夫も必要のない XSS脆弱性が悪意ある不特定の書き手に晒されるわけで、今思うと当然なのだけど。
最近は(といって一年半前の日付だ)「[第一] クラウドへの移行を始めます」というアナウンスがあったりもして、クラウドなんてさっぱりですよ。ユーザー単位で仮想化されていて(※)、悪さをしても損をするのは自分ばかりなりけりってことになってんだろうか。
※「仮想化する」って意味を十分に説明していない気がする。何を仮想化したの? 仮想化されたそれがどうしたの? 「仮想マシンを専有していて」と書くとどうだろう。実態にあっているだろうか。
参考@2016-12-24>「原理原則で理解するDocker - Qiita」 例えば Dockerなら、プロセス毎の名前空間という、仮想化よりはゆるい仕組みによっている。
悪さの想定内容がそもそも古いんだよなー。能力の誇示や破壊なんてのは昔の話で、いまどきはみーんなお金だもんなー。お金になるから、お金になることを、する。
ぼそり。typo? >refeter
class FakeCGI < CGI def refeter; nil end def user_agent; nil; end def mobile_agent?; nil; end def request_method; 'GET'; end end
最終更新: 2017-05-16T22:48+0900
NECKER V1 Plus アクションカム/バイク用ドライブレコーダー 日本正規版
DST
¥ 15,980
USB給電を受けると自動で録画を開始する
PCの USBポートに接続したときは、充電はされるけどマスストレージモードになるだけで録画は開始されなかった。アダプタを通してコンセントにつなぐと録画がスタートした。賢いね。
USB給電中でも防水状態が保たれる
防水キャップ一体型の USBケーブルが付属してくる
低画質長時間モードがない
とはいえメモリーカード容量は倍増する一方だし、60fpsは絶対にほしいし、今のところ一番画質とファイルサイズのバランスがとれてると考える 1280x720/60fpsモードはちゃんと用意されてるので、ないものねだりの感はある。32GBのメモリーカードに無限録画するとして、常時ラスト5時間分の動画が残っているか10時間20時間分の動画が残っているかという程度の違い(※目安は1分あたり100MB)。
コマ撮り動画(タイムラプス)モードの最短撮影間隔が8秒
あんまり搭載されていない機能なので用意されてること自体は嬉しいのだけど……。
時速60kmで移動することを考えたら1秒間隔がいいところ。8秒はおろか3秒間隔でもちょっと長い。
NECKER V1Pは SDXCに対応していないので、64GBの microSDXCカードを FAT32でフォーマットした、microSDHCカードもどきを使用する。
落とし穴があって、NECKER V1Pを PCにつないでカードリーダーとして使用した場合、Windows(Vista)はカードが読めないからフォーマットをしろと要求してくる。ここで言われるままフォーマットすると FAT32 32GBのメモリーカードになってしまう。
SDXCに対応したデジカメである DSC-HX30Vをカードリーダーに使って Windowsでフォーマットしようとすると、正当な SDXCカードである exFAT 64GBになってしまう。
DSC-HX30Vを通してカードを PCに接続し、以前(20130917p01)にも使った HP USB Disk Storage Format Toolを起動すると、FAT32 64GBでフォーマットできた。
この 64GBの microSDHCカードもどきに関して
撮影して保存 | USBケーブルで接続して Windowsから読み書き | |
---|---|---|
NECKER V1P | できる | できない |
DSC-HX30V | できる | できる |
カードリーダーとしての NECKER V1Pにはフォーマットや読み書きに際して 32GBより大きい FAT32を取り扱えない制限がある様子。
LEDインジケーターが電源・録画兼用ボタンの前後に1つずつ付いてる。前が青色で、後ろが赤(緑)色。
点灯は定常状態。青点灯で電源がオン。赤点灯で Wi-Fiがオン。緑点灯で充電中。点滅は異常状態。青点滅でバッテリー切れ。赤点滅でメモリーカード異常(不在・満杯)。点滅より間隔の長い間欠点灯は過渡・持続状態。青間欠は録画中。赤間欠は Wi-Fi有効化中。
ここまでは説明書に書かれた表の通り。では緑と
2つしかないインジケーターをフルに使ってながら、色や点灯パターンがだいたい慣例や感覚にそっていてわかりにくくなってない。
UPDATE:N WIFI=0 VCT=2 PDD=0 ;; ----------------------------------------------- ; ;(WIFI) WIFI Turn ON/OFF: 0~1 (0):ON (1):OFF ;(VCT) Video Clip Time: 0~3 (0):Off (1):1min (2):3min (3):5min ;(PDD) Power Down Delay: 0~6 (0):0 S (1):10S (2):30S (3):1min (4):2min (5):3min (6):Disable Power Down
現在のファームウェアは「幸滔數位科技有限公司 - タイムライン」から拾ってきた最新 V15715版(NECKERV1P_FW_0715_1839.zip)。他に 7月 3日の V15316版とか 3月 3日の V150203版を拾ってきた。
アップデート前にはあった Gセンサーだとかタイムラプスモードの設定がなくなってダウングレードしてるみたいな。V150203版に戻すとネットや説明書通りの内容の設定ファイル(SportDV.txt)がカードのルートに作成された。もう一度最新 V15715にアップデートして、ルートにある SportDV.txtを削除したり変更したりすると、上の状態に戻る。アプリで設定しろってことなのかな。以前の設定項目を勝手に SportDV.txtに書き戻すとだいたいは反映されてるんだけど、撮影したタイムラプス動画(TLP_*.MOV)が有効なファイルではない(5MBくらいの固定サイズで真っ暗の映像。撮影ボタンを押したときの反応は一度だけ振動して青色LEDが点灯したままだった)。
たぶん緊急保存ファイル(SOS_*.MOV)を記録してるあいだじゃないかなあ。画面右下の日時表示によると空白の時間帯がある。
もしかしたら本気でしばきすぎて一時的な録画エラーが発生してたということも? でも本当にこけたときよりは弱いだろう。
余計なことはせずに録画を継続してくれた方がちゃんと撮れてる期待が高そうだし、最長でも5分区切りの細切れ録画ファイル(といっても 500MBある。そして FAT32の 1ファイル上限は 4GB)の命名規則が乱れなくて管理がしやすい。
付属していた三脚用の 1/4インチネジと GoPro互換のマウントのネジの両方がコインで回せるようになっていた。
これねえ、苦労するんだよ。ささやかでもあるとないとで大違い。どうしてネジの頭をそのごついつまみに貫通させておかないんだって、以前買った GoPro互換ネジに対して思ったもん。その代わりに栓抜き(The Tool (Thumb Screw Wrench + Bottle Opener))を持ち歩けって?(揶揄するつもりで栓抜きって書いたのに、最初からそういう商品名だったよ。チッ)
USB給電がストップして NECKERがシャットダウンをしてる最中に再度給電を開始してしまうと、そのままでは NECKERが起きてこないとはネットの誰か(といっても日本語では全部で4、5人ぐらいしかブログで取り上げてないんだよね……)が報告していた。その逆に、NECKERが起動してる最中に(これが10秒20秒かかるんだ)給電が切れた場合には、NECKERが起きたままになる(たしか LEDが青点灯だったので録画はスタートしていない)とは今日(11日)確認した。メインスイッチをオンにするのもオフにするのもゆっくり時間をかけるようにしないと、期待通り動いてないことがあるってことだ。信号待ちでキルスイッチをパチパチしてエンジンを切って、結構待ちそうだなとメインスイッチをオフオンしてヘッドライトを切ることがよくあるんだけど、それをすると録画が終了したままになるってことだ。
<追記@2017-05-16>例えば給電停止から電源オフまでの待ち時間を10秒に設定しておいて、メインスイッチをパチパチと短時間でオフオンした場合は録画が継続する。</追記>
初期設定で Wi-Fiの自動起動が有効になっており、赤色LEDが点灯しているとき NECKERは無線LANのアクセスポイントになっている。初期SSIDは NECKER_V1_Plusで、暗号化方式は WPA2-PSK。キーの初期値はネットで下載できる產品說明書に書かれている通り。そうすると、Android/iOSアプリを通してカメラの設定を変更したり、記録されてる動画を再生したり、いままさにカメラが写してる映像を見たりができる。できた。
押しにくいけど一応 Wi-Fiのスイッチ(1-2mmのでっぱり)がカメラ後部に付いてるし実際のところ Wi-Fiを使う予定はないので、自動起動をオフにして
半日走り続けた場合、例えば3時間目4時間目以降の動画が全くなかったりする。そういう走り方を2回して、2回ともそうだった。シュラウドの前っていう走行風に恵まれた設置場所なんだけど、風が当たるのはレンズばかりで筒の後端に位置するメモリーカードや USB端子部分が熱くなりすぎるんだろうか。
===
を使ったりするのかもしれないけど、いざ自分で JavaScriptを書くと、===
の使い所がなくて困る。つまり、異なる型の変数を比較する場面というのが想定されていないから、それに対処する理由がない。型が同じなら(※null
は型ナシとする) ==
も ===
も同じなのだから、あえて ===
を使おうという動機がない。予定調和を乱すもの、外部入力は全部文字列だし、あるとしたら JSONくらい? だとしてもおかしな値の混入は水際で食い止めるべきで、比較演算子の出る幕(実際の利用場面)ではない。■あえてクソを探すなら、変数の型指定が(省略できるのではなく)できないことだろう。そこは JavaScript派生言語が補完しているところ。■ネタの方を拾おうにもマジレスしかできない。三位のひとつが "\t"
なんだけど、だったら " "
がどこからか現れて「俺が神だ」と主張し始めるだろう。最終更新: 2016-11-21T21:59+0900
try { var {y:lat, x:lng} = Map.getCenterLatLng(), mag = Map.getZoomLevel(); open(`https://www.google.co.jp/maps/@${lat},${lng},${mag}z`); } catch(e) {}
javascript:try{var{y:lat,x:lng}=Map.getCenterLatLng(),mag=Map.getZoomLevel();open(`https://www.google.co.jp/maps/@${lat},${lng},${mag}z`);}catch(e){}
以前に感じた通り、分割代入の構文は左辺の key と value が入れ違ってるとしか思えなくて(※)、案の定書き間違えたのだった。
※ keyは識別子(または文字列)で valueは expressionなのだから、keyで新しい名前を導入し、valueを特別な文脈で評価することで右辺のプロパティが参照できると考える(でも間違い)。これは JavaScriptの「平板」化ですよ>20091206p02.04。言語設計者は神だけど、現実世界の神がアドホックな物理法則を定めていたら、こちらは気が狂います。
マピオンはリンクをたどって特定の番地を表示できるのでメインで使用してる。検索ベースだと存在しない番地に対してテキトーな場所を表示されてもわからない一方、リンクをたどる方式ではそれを承知したうえで近くの番地から推測することができる。
とはいえ航空写真やストリートビューで実地の景色も確認したいので、マピオンからグーグルマップへ飛ぶ。