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側に飛ばしていろいろ処理します。
raspbianでmongodをしたら止まらなくなった。
原因がわかりませんが、とにかく止まらなくなって焦りました。
結論
mongo use admin db.shutdownServer()
で止まりました。確認で
mongo
と打つと「だめー!」とエラーが出ます。
めでたしめでたし。
openframeworksで自分の手入力した曲線の多項近似式を算出してくれる。
Visual Studio 2015
openframeworks 0.9.8
です。
hatenaブログに公開できないので、こっちで公開してURL飛ばそう。投稿できるはずなんだけど。まぁいっか。 pic.twitter.com/MvVQL0gX20
— ツタンラーメン (@hungrykirby) 2017年1月17日
こんな感じに自分でこんな感じの曲線がほしいなと思ったときに、書いてみると近似曲線が得られます(すごく需要のない…)。現状は2~9次曲線までです。いや普通に20次とかもできるっちゃできるんですが、確か21次くらいでdouble型の上限を越えます。
左上の数字(小さいが…)が最高次数です。ちなみにx、yともに0~1です。プログラム上は(0, 0)で始まって(1, 1)で終わるようになあっていますが、もちろんそうじゃないようにもできます。
かなり独力で頑張ろうとしたのですが、普通に無理だったので
www.mk-mode.com
こちらを参考にしました。最小二乗法を解くのに、ガウスジョルダン法なんてあるんですね、知らなかった。
こういう風に絵が簡単に描けて、C++の強みも活かせるopenframeworksはすごく便利ですね。
ちなみにこのソースコードはgithubにあるっちゃあるんですが、その…次数をfor文で回そうとした痕跡がかなりあって…気持ち悪いコードに…。
GitHub - hungrykirby/curveFitting
一応載せておきます。誰も見ないとは思いますが。ちなみに個人利用用だったので一切例外処理をしていません。エラーが出たら起動し直します。
windowsは本当にMacに劣るユーザビリティなのか。
今回はwindows10を想定しています。7や8.1は考慮していません。
研究室ではちょくちょくMacを使います。
たまにしか使わないので比較する記事ではないことをご了承ください。
ターゲットはある程度プログラミングなどをするヘビーユーザです。
これをとりあえず覚えてください。無理ならマルチデスクトップの項だけでも覚えてください。実際のところ私も「こんなの使うのか…?」「Alt+tab」でいいのでは…(あんまり使いやすいと思ってないけど…)。などと思っていました。
とはいえ、使ってみると
あら便利!
個人差はあると思いますがむっちゃ便利です。すっきりして見やすいし、ノートパソコンでは(も?)「Alt+tab」って押しにくいんですよね。いや、なんかうまく説明できないんですけど開発も含めてすべてがすごく楽になりました。
raspberry pi 3をwindowsで開発できるようにするまで
Windows 10環境です。
まずはコンソール?コマンドライン?を使えるようにするために
teratermを入れて実行します。そしてログイン
ifconfig
すると
inetアドレスというのが2つありますが、下の方です(私の環境では)。
下記手順で簡単に入りました。
www.stdio.jp
つぎにcyberduckを入れて実行します。
tool-lab.com
ポート番号がデフォルトで21になっている可能性があるので直します。
あとはraspberry.localでは動かなかったので、記載の通りinetアドレスを入力します。
あとは編集して実行するだけ。
私はすでにnode.jsが入っていたので
test.jsに
console.log('yes');
とだけ打ったものを動かしたら動きました。
javascriptで文字列の中に、ある要素のうちどれかがあるかを検出したい場合
端的に言うとツイッターからのデータに対して
['ピカチュウ','カービィ','ハム太郎','シナモン']
のどれかがあるか、あったら
かわいいいいいいいいいいいいいいいい!!!
と自動でリプしたいとします。
どんな方法がわかりやすいかなーと調べていたのですが
JavaScript - ある文字列に対して、配列に入っている文字列のどれかに一致する判定をシンプルに書きたい(28134)|teratail
これがあんまりわかりやすい印象がない(というか若干やりたいことと違う?)ので、友達のコードを参考に書いてみました。
const str = "i can see you again" const wantDetect = ['i', 'you', 'pokemon']; let has = false; for(let d of wantDetect){ if(str.indexOf(d) > -1){ has = true; } } console.log('has', has);
あるいは
const str = "i can see you again" const wantDetect = ['i', 'you', 'pokemon']; let has = false; for(let d of wantDetect){ if(str.indexOf(d) > -1){ has = true; console.log('has', has); break; } }
上のほうが見やすくて好きだけど現実的には下のほうがいいのではないかと。
結果はどちらも
has true
おまけ:何が検出されて、何が検出されなかったかを教えてくれる。
const str = "i can see you again" const wantDetect = ['i', 'you', 'pokemon']; for(let d of wantDetect){ if(str.indexOf(d) > -1){ console.log('detect:', d); }else{ console.log('not detect:', d); } }
結果は
detect: i detect: you not detect: pokemon
これは役に立つのではないか。
ちなみに、友達は
for(const d of wantDetect){
と書いていました。こっちの方がいいのかな。constで書けるならそっちのほうが良さそうだけど、なんとなく直感的ではない。少なくとも私には。
どうでもいいんだけどQiitaの記事とかって結果が書かれていなくて、いまいち初心者にはわかりやすくないなーという印象。