btn.addEventListenerが使えなかった(nullが返ってきた)
初心者にありがち?なミスなんだけど、
//a.js const btn = document.getElementById('btn'); btn.addEventListener( 'click' , function() { socket.emit('btn', true); } ); //もしくは document.querySelector('#btn').onclick = function () { socket.emit('btn', true); }
とするとnullが返ってくる。
htmlはざっくり
<script type="text/javascript" src="a.js"></script> <body> <input type="button" id="btn" value="ループ開始" class="select" /> </body>
こんなん
理由は下記がわかりやすい
teratail.com
簡単に言うと呼び出しが早すぎて順番が逆転する状態らしい。
私流に描くと
window.onload = function(){ const btn = document.getElementById('btn'); btn.addEventListener( 'click' , function() { socket.emit('btn', true); } ); };
やらかしてしまった…。こんなんに時間を取られたのか…。
ちなみに
<script type="text/javascript" src="a.js"></script>
を
<script type="text/javascript" scr="a.js"></script>
と描くミスをたまにやる。初心者はやることが違いますね(笑)
scr
openLayers 3 で地図の移動
opeLayers2系で開発していたのだけれど、3に移行したほうがいいかなということで開発を3に割り振った。
で、いろいろなサンプルを見て回ったのだけれど見たのは全部マップを一回表示されるだけで終わっている。地図アプリケーションって検索したら別のところ行きたいじゃないですか、で苦労したんだけど灯台下暗しでした。
function setMapCenter(center){ //イベントで呼ばれる関数 view.setCenter(ol.proj.transform([center.lon, center.lat], "EPSG:4326", "EPSG:3857")); };
center:画面の中央位置のオブジェクト。別になんでもいい。
これだけ書けばいい(当たり前っちゃ当たり前なんですが…)
これやるためにはviewをグローバル変数として持っていないといけないんだけど、そこはおいおい考えるとして、これでできます。
ちなみにviewがどう定義されているかというと(だいたいどこかをコピペしているだけですが)
view = new ol.View({ projection: "EPSG:3857", maxZoom: 17, minZoom: 6 });
さらにちなみに円を描画したいときには下記のような関数を持っておくと便利です(おそらく円でなくてもこの関数は便利)
function drawCircle(center){ var circle_layer = new ol.layer.Vector({ source: new ol.source.Vector({ features: [ new ol.Feature( new ol.geom.Point( ol.proj.transform( [center.lon, center.lat], "EPSG:4326", "EPSG:3857" ) ) ) ] }), style: new ol.style.Style({ image: new ol.style.Circle({ fill: new ol.style.Fill({ color: 'rgba(255,0,0,0.8)' }), /*stroke: new ol.style.Stroke({ color: 'rgb(255,0,0)', width: 15 }),*/ radius: 120 }) }) }); return circle_layer; }
これを発展させて円をいっぱい描画したいので、それもできたら記事にします。
ちなみにlayerを消す機能を実装していないので永遠にlayerが増え続けます。ちゃんとここも修正します。
raspberry pi 3で固定IPを割り当てる
調べれば出てくるのでとりあえずやってみた
Raspberry Pi 3 (Raspbian Jessie)の無線LANに固定IPアドレスを設定する - Qiita
無線LAN設定はしてあるので、「固定IP設定」の章から読む。
で、むっちゃ初心者なので固定IPアドレスってなんでもいいと思っていたんだけど、そんなことはなかった。いろいろ迷ったあげく、現状割り当てられているIPアドレスを書いておいたら動いたので、よしとしている。変わらないといいんだけど…。
知らなかったんだけど適当なIPアドレス割り振っても
ip addr
のコマンド打てばちゃんと表示される。しかし、インターネットにすらつながらなくなるのね
パソコンのIPアドレス・デフォルトゲートウェイ・DNSサーバーアドレスの確認方法
固定IP以外の二つはwin端末から上記方法で解決した。情報が古いがそのまま使える。
暖房の使い過ぎでブレーカーが落ちて停電してからIPアドレス変わったので固定したほうがいいかなーとか思ったけど、意味あるのだろうか。
VBAの特殊性
VBAは意外と便利なんだけど、文法が特殊。しばらくVBAをやらなそうだからいくつか備忘録的に書いておこう。
Dim hensuu As Integer '変数名も大文字から始めることが多いイメージ 'コメント If A = B Then ElseIf End If Dim i As Integer For i = 0 To 10 Step 1 '10も含む Next i Dim A(9) As String '配列、10個用意される、0~9まで '参照渡し?ができる Function Plus(A, B, C) C = A + B + 1 Plus = A + B End Function 'とすると Result = Plus(1, 2, Kai) 'とできて 'Result = 3 'Kai = 4 'となる
ごめんなさい。記憶で書いているので間違っているかも。とにかく特殊性があるということが言いたい。他の言語やってればやっているほど、不思議な感覚がする。
ちなみに予測変換は
Ctrl+space
で出ます。
あといちいちエラーのところに戻されるので、設定で切っておくべきだと思います。
javascriptのappedFileが勝手に空白を入れてくる問題
javascriptにはファイルに追記するために
appendFile(path, text, code, callback) appendFileSync(path, text, code, callback)
という関数があります。
blog.codebook-10000.com
ここがわかりやすいんじゃないですかね。
ところが、変な空白が入ります。
fs.appendFileSync('data.txt', data.word + '\n', 'utf8')
とすると
a b c d
などという結果が返ってきます。
空白いらないんだけどな…と思っていろいろ調べました。
ないんだよね。
こんな初歩で誰も躓かないらしいです。
結論とすると
fs.appendFileSync('data.txt', (data.word).trim() + '\n', 'utf8')
とすれば解決しました。勝手に文字列に空白を付け足すらしいです。
よかったよかった。