ツタンラーメンの忘備録

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

openframeworksで自分の手入力した曲線の多項近似式を算出してくれる。

Visual Studio 2015
openframeworks 0.9.8
です。

こんな感じに自分でこんな感じの曲線がほしいなと思ったときに、書いてみると近似曲線が得られます(すごく需要のない…)。現状は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を使います。
たまにしか使わないので比較する記事ではないことをご了承ください。

ターゲットはある程度プログラミングなどをするヘビーユーザです。

fukuyuki.net

これをとりあえず覚えてください。無理ならマルチデスクトップの項だけでも覚えてください。実際のところ私も「こんなの使うのか…?」「Alt+tab」でいいのでは…(あんまり使いやすいと思ってないけど…)。などと思っていました。
とはいえ、使ってみると

あら便利!

個人差はあると思いますがむっちゃ便利です。すっきりして見やすいし、ノートパソコンでは(も?)「Alt+tab」って押しにくいんですよね。いや、なんかうまく説明できないんですけど開発も含めてすべてがすごく楽になりました。

次はMac book Pro買おうかなと思っていたのですが、次もWindowsにします。いい時代になったものだ。

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の記事とかって結果が書かれていなくて、いまいち初心者にはわかりやすくないなーという印象。

パワーポイントでテキストのみ保持でペーストする

ショートカットキーだけでペーストしたいのだけど、なんか直接ペーストできなさそうなので、
「Ctrl」+「Shift」+「V」
で、できたらいいなぁ…。

「Ctrl」+「V」
「Ctrl」
「T」

の順で

node.jsでmongodbを使ってherokuにデプロイした

激しく苦戦したのでメモがてらに書いておく

まずはheroku上でmongodbが使えるようにする。
ためにクレジットカードをherokuに登録する必要がある。いやだね、これ。

そしたら

heroku addons:create mongolab:sandbox

コマンドを打ち込む。
公式だと手順が一つ前にあるけど、最初なのですっ飛ばす。

heroku config

でMONGOLAB_URIがゲットできる。

あとはこれをmongoのconnectのところに書けばいい。

krdlab.hatenablog.com
ここがわかりやすかったので、丸コピする。動いているか確認するためにちょっとだけ、createServerする。コード全体は下記

var mongoose = require('mongoose');
var Schema   = mongoose.Schema;
var UserSchema = new Schema({
  name:  String,
  point: Number
});
mongoose.model('User', UserSchema);
//var db_uri = 'mongodb://localhost/hogehoge';
var db_uri = "さっき得たやつ";
mongoose.connect(db_uri);
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(process.env.PORT || 8000);
console.log('Server running');

var User = mongoose.model('User');
var user = new User();
user.name  = 'Hungry';
user.point = 2586;
user.save(function(err) {
  if (err) { console.log(err); }
});

User.find({}, function(err, docs) {
  if(!err) {
    console.log("num of item => " + docs.length)
    for (var i = 0; i < docs.length; i++ ) {
      console.log(docs[i]);
    }
    mongoose.disconnect()
    process.exit()
  } else {
    console.log("find error")
  }
});

うーん、まさに何も考えていない。とりあえず、
Procfileを作ったら、とりあえずデプロイ。
usernameとpasswordを聞かれて、正しいのを入力しているのに、ちゃんと通らなかったらぐぐれば出た。(URL忘れたけどheroku authみたいなので出てきたキーをusernameを空欄にしてパスワードに入れれば、できる)

たまにProcfileをpushし忘れて動かなくなったりする。そういうのにすぐ気づけるようになりたい。


さて、これで当然heroku openすればサイトに飛ぶと思った。

Application Error

logを見るとどうやら、データベースにはちゃんと保存できているらしい。
すごいなやんだすえ

process.exit()
process.exit()

process.exit()

このコードは探索が終わると、落ちるようになっているのである。
人のコードを丸コピするのではなく、ちゃんと考えて使えというよい教訓になった。

javascriptについて

qiita.com

これを読むとけっこう衝撃的なことが書いてある。
javascriptはなんとなく曖昧な感じでとっつきやすいが共同開発に向かない印象がある。
一人で書く分にはいいが、人と共同で書くと

var functionName = function(data){
  console.log('hogehoge');
};

function functionName(data){
  console.log("hogehoge");
}

みたいに違いが出てきて腹が立ちそうなところである。
予め意思統一をしておいた方がいい。