ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

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が増え続けます。ちゃんとここも修正します。

デスクトップ版LINEの通知がうるさかったので切りたかった

のだけど、
ameblo.jp
面白そうだから、これを試してみました。

適当にアニメキャラクターボイスを使ってみるとほら簡単
LINE通知の度に推しの声を聞いていると、軽く死にたくなるので止めましょう。
というわけでピカチュウにしました。

快適なオタクライフを!(私はオタクではありません)

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')

とすれば解決しました。勝手に文字列に空白を付け足すらしいです。

よかったよかった。

node.jsで音声認識をする1

音声認識がしたかったので手軽にできるものを探しました。別に英語でよかったのですが、いろいろ探した結果
liginc.co.jp
こんな記事を見つけました。いいですね。なんか簡単そうです。

さっそくどんなもんか見てみるために下記サイトにアクセスして動きを見ました。
www.yoheim.net


paiza.hatenablog.com
さっそくこれを丸コピして使ってみます。

動かない

当然っちゃ当然で、サーバ側の処理何もしてないのでURLにhttpとかhttpsとか入っていないので、認証できないんですよね(たぶん)


というわけでサーバ側を描きます。今回はnode.jsを使います。
フォルダ構成は
voice.js
∟public-index.html
ああああ∟app.js
という感じにします。
index.htmlとapp.jsはそのままです。

npm install express path

してから

const http = require('http');
const path = require('path')
const express = require('express');

var app = express();
app.use(express.static(path.join(__dirname, 'public')));
var server = http.Server(app);
server.listen(process.env.PORT || 8080);

これ書いて

node voice

してlocalhost:8080にアクセスすればいいわけです。

動かない

どうやらFireFoxでは動かないようなのでChromeで動かします。
許可すれば動きました。
右クリックして「検証」を押して、コンソールで見れます。

日本語の精度はけっこういいです。けっこうというかかなりいいです。
なぜか英語が悪いです。悪いというか過学習気味なのか。単純に発音が悪いだけなのでしょうが…。英語やらねば。
公式のサイトにもデモみたいなのがあるのでそっちも使ってみてください。


さらに、継続的に音声認識する方法もあります。
適当に

recognition.continuous = true;
recognition.interimResults = true;

をつっこむだけです。いいですね簡単で。

それでも、しばらく音声がないと止まります。
それを解決するのが下記サイト
jellyware.jp
いい感じにずっとできます。あとはsocket.ioでnode.js側に飛ばしていろいろ処理します。