駄文型

プログラミングとか英語とかの話題を中心にした至極ちゃらんぽらんな日記です。

使わなくなったCDコンポとオーディオケーブル1本で始める、お手軽爆音テレビ&スマホ生活

オーディオケーブルを買って、テレビやスマホの音声出力をいい感じにした。

続きを読む
広告を非表示にする

Geeks Who Drink in nulabに行ってきた

English

nulab.connpass.com

Geeks Who Drinkに参加してnulabさんのオフィスに行ってきた。福岡での勉強会・交流会は初参加になる。

続きを読む
広告を非表示にする

ゆるい糖質制限を3ヶ月続けて7kg痩せた

結果

体重 体脂肪
制限前 61kg 21%
現在 54kg 15%
-7kg -6%
続きを読む
広告を非表示にする

SIerを卒業してついでに首都圏も脱出しました

※本稿は個人の見解であり所属する組織のうんたらかんたら

新卒で入社した会社を8月に退職してIDCフロンティアに転職して福岡で働きはじめた。

続きを読む
広告を非表示にする

Node.jsアプリケーションからトレジャーデータサービス by IDCFにデータをエクスポートする

トレジャーデータサービス by IDCFとは

www.idcf.jp

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は旧サービス名のままなので、そのうち変わるかもしれない。

シンプル・パワフルIDCFクラウド攻略―ワンコインではじめる大規模システム構築

シンプル・パワフルIDCFクラウド攻略―ワンコインではじめる大規模システム構築

広告を非表示にする

ファイルを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コマンドでテスト

ローカルでテストする場合はlocalhostcurlで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.bodyreq.filesを指定してたのでずっと{}とだけ表示されてかなりハマってしまった。README見たらちゃんと.singleのときはreq.fileって書いてあった。つらい。

広告を非表示にする