Node.jsアプリケーションからトレジャーデータサービス by IDCFにデータをエクスポートする
トレジャーデータサービス by IDCFとは
IDCフロンティアが提供しているデータの収集・蓄積・分析を行うビッグデータ分析プラットフォームで、「Yahoo!ビッグデータインサイト」だったものがサービス名変更になったもの。
参考
APIキーの取得
TDにエクスポートするにはAPIキーというものが必要で、
Webコンソールから取得するか、Tresure Data toolbeltをインストールして$ td apikey
で取得する。取得したAPIキーは環境変数に入れておくことにする。
$ export TREASURE_DATA_API_KEY=`APIキー`
Node.jsアプリ
$ npm install --save td
でインストールして実行。
const express = require('express'); const app = express(); const TD = require('td'); const client = new TD( process.env.TREASURE_DATA_API_KEY, { host: 'api.ybi.idcfcloud.net' } ); const logger = function (err, results) { console.log(results); if (err) console.log(err); }; app.post('/', upload.single('data'), (req, res) => { client.prestoQuery( 'db_name', 'INSERT INTO table_name (c1,c2,c3) VALUES (v1,v2,v3),(v4,v5,v6)', {}, logger ); res.end('success'); }); app.listen(4000, function () { console.log('Example app listening on port 4000!'); });
重要なのがオプションでホストを指定しておく必要がある点。これをやっておかないと
デフォルトでapi.treasuredata.com
が指定されるらしいので、トレジャーデータサービス by IDCFを使うなら必ずapi.ybi.idcfcloud.net
にしておかないといけない。ドキュメントにも書いてないので、なかなかわからなかった。つらい。また、URLは旧サービス名のままなので、そのうち変わるかもしれない。
ファイルをcurlでアップロードしてNode.jsで受け取る
なかなかうまく行かなくて半日かかったのでまとめておく。
参考
Node.jsアプリ
まずはmulter
を入れてNode.jsアプリを構築。
$ npm install --save multer
var express = require('express'); var multer = require('multer'); var upload = multer({ dest: 'uploads/' }); var app = express(); app.post('/', upload.single('data'), function (req, res) { console.log(req.file); res.end('success'); }); app.listen(4000, function () { console.log('Example app listening on port 4000!'); });
curlコマンドでテスト
ローカルでテストする場合はlocalhostにcurlでPOSTを投げるだけ。
$ curl "localhost:4000" -X POST -F data=@test/test.csv
今回はtest/test.csvを用意した。jsonでもなんでもいい。
column0,column1,column2,column3 1,2,3,4 a,b,c,d
結果
{ fieldname: 'data', originalname: 'test.csv', encoding: '7bit', mimetype: 'application/octet-stream', destination: 'uploads/', filename: 'de080535f6452289e8b896236c0d179d', path: 'uploads/de080535f6452289e8b896236c0d179d', size: 49 }
uploadディレクトリにファイルが作成された。uploadディレクトリは勝手に作成されるっぽい。req.file
のところでreq.body
とreq.files
を指定してたのでずっと{}
とだけ表示されてかなりハマってしまった。README見たらちゃんと.single
のときはreq.file
って書いてあった。つらい。
DUO 3.0の単語帳をzuknowで作ってみた
DUO 3.0の単語・熟語を学習アプリのzuknowで作ってみた。今のところはSECTION 15まで。
https://www.zuknow.net/cardset/203280www.zuknow.net
動機
Podcastを聴いたり英語ニュースを読んだりして英語学習を続けているが、語彙力不足を日々痛感していた。短期で集中して語彙力を付けるため、もともと持っていたDUO 3.0を使ってみたのだが、苦手な単語・熟語がなかなか頭に入ってこない。苦手なものは単語カードかなにかにまとめておいて覚えたほうが効率が良いのでは、と思ってzuknowに自分用単語カードをまとめてみた。
DUO 3.0について
DUO 3.0は単語学習の超定番的な本で、ひとつの例文が複数の重要単語・熟語で構成されているタイプの単語帳だ。2000年の本なのだが、未だにTOEIC学習や大学入試用の英語学習本として評価が高い。実際よくできていて、上手く使えばかなり効率的に語彙力を伸ばすことができる。以前これを使ってTOEICの勉強をやってみたことがあるのだが、当時の僕にはレベルが高すぎて合わなかったため、積み本化していた。
zuknowについて
https://itunes.apple.com/jp/app/zuknow-you-datokuizude-jingeru/id731823316?mt=8&at=10l8JW&ct=hatenablog
https://play.google.com/store/apps/details?id=net.zuknow.android&hl=japlay.google.com
zuknowは単語帳とクイズで勉強を進めることができるアプリで、すでにかなりの量のコンテンツが作られているのでそれを使って勉強することもできるが、単語帳の自作もできる。自作できる単語帳アプリはいろいろあったが、zuknowの場合はWebから簡単に作成できそうだったので採用した。Excelなどの表計算ソフトからコピペで作成可能で、一列目に単語カードの表側(問題)、二列目に裏側(解答)の形式でシートを作成し、それをコピペすれば単語帳ができるようになっている。僕の場合はGoogleスプレッドシートで作成してみた。
https://docs.google.com/spreadsheets/d/1VJTkiq5seVMSDvkoTW1yx9ni238Xrvax9qm7zHJeLg0/edit?usp=sharingdocs.google.com
選考基準
DUO 3.0の単語すべてを載せたわけではない。すでに覚えている単語は省いた。また、覚えてはいるが重要だと思ったものや類義語を覚えたいと思ったものも選抜した。
使い方
あくまでDUO 3.0の補助教材として使うことを目的としている。単語帳形式にすることで完全にDUO 3.0のメリットが損なわれているので、この単語帳単独で勉強するのはおすすめしない。
また、問題と解答の他に解説なども載せることはできたが、アプリ側での操作が面倒*1になるので、なるべく問題と解答に情報を詰め込むことにした。なので、解答側に類義語や対義語が載っている形式になっている。解答を表示すれば同時に類義語や対義語が表示されるので、効率的な語彙力強化につながると思う。表記は基本的にDUO 3.0の表記に準拠している。英語→日本語ではなく日本語→英語の形式になっている。これは金フレと同じ形式の方がいいと思ったため。
感想
手打ちするのはつらいが、それだけでも覚えつつあるので良かった。はじめは厳選して苦手な単語に集中しようと思ったが、「これ重要かも」「これ類義語覚えたい」というものが多くて結局ほとんどの単語を載せてしまっている。つらい。1日5セクションずつ進めているが、3時間位かかっている。つらい。でもこの先にいい未来が待っていることを信じてがんばる。
*1:補足や解説を表示するのに1タップ必要になる
英語ブログはじめてました
「Go言語によるWebアプリケーション開発」に関するメモ
はまったところとか感想とかのメモ。都度追記するかも。
環境
- OS X 10.11.4
- go 1.5.1
gomniauthがインストールできない
$ brew install bazaar $ go get github.com/stretchr/gomniauth
2章のgomniauthのインストールではまった。「Bazaarをインストールしておく必要があります」とあったのでインストーラーからインストールしてもダメだったのでちょっと困った。
参考: Amazonのレビュー