にっくき tracker-miner-f
うちのPCがスゲぇ音立ててた。
tracker-miner-fってプロセスと
tracker-extract ってプロセスがめっちゃ占有してた。
とりあえずtopコマンドで表示されたPIDをKILLした。
なんやこれ
■
redux、そびえ立つ難しさよ。
なんとなく何が難しいのかわからない、本当にヤバイ状態なので今自分にわかっていることをまとめる
React
言わずとしれたすっごいフレームワーク。何でも出来る。ただしやってることはprops
渡してcomponent
描画してるだけ。
props
には何でも渡せる。functionだって渡せる!!
<header /> <main /> <title /> <footer />
みたいに(最終的には)すっごく単純に見せれる。
Redux
https://redux.js.org/redux.js.org
端的に言うとprops
管理するためのフレームワーク。なぜこれが必要かと言うと
component
に子component
をもたせるとどこまでprops
渡したのか複雑なアプリになってくるとわからなくなってくるため、store
で一元管理する。
これをデータの流れを作ることでシンプルに利用しよう、というわけらしい。
create-react-native-app → npm start できなかった。
centOS7でreact-native-app作ろうと思ったらできなかった。
watchmanがないらしい。
てことでソースからインストール。
$ git clone https://github.com/facebook/watchman.git $ cd watchman $ git checkout v4.9.0 # the latest stable release $ ./autogen.sh $ ./configure $ make $ sudo make install
npm start
でバーコード表示されたから行けたかと思ったけど無理だった。
経過わかったら書きます。
車で~時間圏内がどこからどこまでか
Google Mapを使用したサービスのIsochrone and Isodistance Map Demoというサービス
これでどこまでかが一目瞭然。
使い方はマップ内にフラッグを立ててその後
duration(距離)とdriving(車)にチェックしてCompute Polygonボタンを押してしばらく待てばOKです。
これは便利。
連想配列にforループを適用する
連想配列を色々とまとめて処理したい。
①for ~in ループを使う
これが一番簡単でわかりやすい。メインで使う
var IDs = { "name1":"hoge1", "name2":"hoge2", "name3":"hoge3", "name4":"hoge4", }; for(var key in IDs){ console.log(IDs[key]); }
②forEachを使う
Object.keys(array)を使うと連想配列のキーのみ配列として取り出せることを利用する
var IDs = { "name1":"hoge1", "name2":"hoge2", "name3":"hoge3", "name4":"hoge4", }; Object.keys(IDs).forEach(value => { console.log(IDs[value]) },IDs);
ちょっと無理やり感がある。
③mapを使う
mapを使うと配列の処理がいらなくなるみたい
var IDs = { "name1":"hoge1", "name2":"hoge2", "name3":"hoge3", "name4":"hoge4", }; Object.keys(IDs).map(value => console.log(IDs[value]));
これだとmapとforEachの違いがイマイチつかない。
ついでにはなるが、
をみて書いたのでが、forEach文をアロー関数になおそうとするとエラーになった。
var IDs = { "name1":"hoge1", "name2":"hoge2", "name3":"hoge3", "name4":"hoge4", }; Object.keys(IDs).forEach(value => { console.log(this[value]) },IDs);
という書き方だとエラーが出る。 アロー関数内のスコープは基本外側に向けて開かれているため、という理解。 この場合thisが何のオブジェクトなのか定義されていないため、みたい。 ちょっとした違いだけど心に留めておく。
javascriptでダブルクリックをエミュレーションする
【やりたいこと】
DOMをダブルクリックしたときのイベントを発火させたい
<html> <head></head> <body> <div id = "ex_event" ondblclick = click_event></div> </body> </html>
click_eventを発火させたい
MouseEventメソッドを使う。
var evt = new MouseEvent("dblclick", { bubbles: true, cancelable: true, view: window }); elm = document.getElementById("ex_event"); elm.dispatchEvent(evt);
これでダブルクリックをエミュレーション出来る。
WebExtensionsことはじめ
以前仕事で必要があって
WebUIとFlask,Seleniumを使ってPC内にサーバーを立ててブラウザ操作を自動化するアプリを作ったんですがこれがちょっと使いづらかったらしい
使いづらい理由:
- 起動の仕方がわからない:起動はパワーシェルでFlaskでHTTPサーバー立てる→ブラウザでアクセス→そっからWebUIで呼び出し、というふうな感じで作ってたのですが、なんでそんなメンドイことするの?て風な感じで誰も起動しようとしなかった。
- たまにSeleniumがブラウザオブジェクトを見失ってしまう:そんなときは最初からやり直して下さいと言っていたのですが、見失うのが若干多かったりしたのでわからんとの指摘があった。
フッざけんな!とも思ったのですが、まぁ確かに使いづらいのかな、とも思ったのでWebExtensionsで書き直すことにしました。
てことで以下を手習いに写経しました
色々とタイポが多くて苦労はしたのですが、ようやくチュートリアルがうまく行ったのでこれから作っていきます。
作りたいのはクライアントのページを操作するWebExtensions
【サーバー側】
・WebExtensionsからクエリがあったらそれを返すAPIを作成する
【WebExtensions側】
・UIを作成する
・元となるページからDOMを取得し、取得したDOMに応じてクエリを作成し、サーバー側へPOSTかGETする
・帰って来たレスポンスを成形してUIに流し込む
・流しこまれたUIを元にユーザーが色々と成形する。
・元のページに成形されたデータを流し込む
この辺ができれば、と思う。