子 Makefile をうまく使うメモ
一人アドベントカレンダー 2014 10 日目 by @takkyuuplayer
環境設定をmake
コマンドでやりたいときに アプリ毎に子Makefile
を作って、
親Makefile
からはそれを呼び出すだけにしたい。
current_dir
はどうやって取ればいいの?- 子
Makefile
から親Makefile
で定義した変数とか使いたい
っていう周りを解決したのでメモ
Makefile 例
- 親Makefile
./Makefile
mkfile_path=$(abspath $(lastword $(MAKEFILE_LIST))) current_dir=$(notdir $(patsubst %/,%,$(dir $(mkfile_path)))) export SRC_ROOT=${current_dir}/src # accessible from child Makefile export WEB_ROOT=/web/apps/ all: setup setup: setup_common cd ${SRC_ROOT}/app1 && $(make) cd ${SRC_ROOT}/app2 && $(make) cd ${SRC_ROOT}/app3 && $(make) setup_common: ...
- 子Makefile
./appX/Makefile
DOCUMENT_ROOT=${WEB_ROOT}/appX SRC_DIR=${SRC_ROOT}/appX all: setup setup: mkdir -p ${DOCUMENT_ROOT} ln -s ${DOCUMENT_ROOT}/css ${SRC_DIR}/css ln -s ${DOCUMENT_ROOT}/js ${SRC_DIR}/js
次回予告
明日の担当も @takkyuuplayer です。
perl で foobar.csv.gz を書き出す
一人アドベントカレンダー 2014 8 日目 by @takkyuuplayer
perl で gz 圧縮された csv を出力したいことがある。 今回はその話。
CSVの出力
Text::CSV_XS を使いましょう。
use IO::File; use Text::CSV_XS; my $out = IO::File->new("./cache/test.csv", 'w'); my $rows = [ { name => 'col1', value => 'val1', }, { name => 'col2', value => 'val2', }, { name => 'col3', value => 'val3', }, ]; my $csv = Text::CSV_XS->new({binary => 1}); for my $row (@$rows) { my @columns = map { $row->{$_} } qw(name value); ok $csv->combine(@columns); $out->print($csv->string() . "\n"); } $out->close();
gz の出力
IO::Compress::Gzip を使いましょう。
use IO::Compress::Gzip qw(gzip $GzipError); my $z = new IO::Compress::Gzip("./cache/test.csv.gz") or die "gzip failed: $GzipError\n"; $z->print('name, value' . "\n"); $z->close();
合わせ技
use IO::Compress::Gzip qw(gzip $GzipError); use Text::CSV_XS; my $rows = [ { name => 'col1', value => 'val1', }, { name => 'col2', value => 'val2', }, { name => 'col3', value => 'val3', }, ]; my $csv = Text::CSV_XS->new({binary => 1}); my $z = new IO::Compress::Gzip("./cache/test.csv.gz") or die "gzip failed: $GzipError\n"; for my $row (@$rows) { my @columns = map { $row->{$_} } qw(name value); $csv->combine(@columns); $z->print($csv->string() . "\n"); } $z->close();
次回予告
明日の担当も @takkyuuplayer です。
充分に発達した科学技術は、魔法と見分けが付かない
一人アドベントカレンダー 2014 7 日目 by @takkyuuplayer
タイトルは クラークの三法則 の1つ。 本日 6 年ぶりにディズニーランドへ行き、 そんな風に感じたアトラクションがあったのでその話。
Once Upon a Time
シンデレラ城に プロジェクションマッピング を行い、シンデレラ城そのものを映画館っぽくするアトラクションである。 ただ、映画館よりもすごい。屋外だから花火やらなんやらできるし。
抽選にあたり、正面指定席からの鑑賞。シンデレラ城から目を離すのがもったいなく、写真は最初に撮った1枚だけ。
やっぱ、ディズニーすげぇわ。
次回予告
明日の担当も @takkyuuplayer です。
S3上のファイルをMojoliciousでproxyして返す
6 日目 by @takkyuuplayer
S3 上においてあるファイルを、 アプリ側で認証した人にだけアクセス許可したい事がある。 今回はMojolicious で S3 上のファイルを proxy して返した話。
早速コード
S3への直接のアクセスは禁止だが、
アプリ経由ならok
use common::sense; use Carp (); use FindBin qw($Bin); use lib $Bin . '/../local-git/lib'; use Constants qw(AWS_S3); use Mojolicious::Lite; use Amazon::S3; get '/s3' => sub { my $self = shift; my $s3 = Amazon::S3->new({ aws_access_key_id => AWS_S3()->{access_key}, aws_secret_access_key => AWS_S3()->{secret_key}, }); my $backet = $s3->bucket('tp-sandbox'); my $response = $backet->get_key('logo.gif'); $self->res->headers->content_type($response->{content_type}); $self->res->headers->content_length($response->{content_length}); $self->render(data => $response->{value}); };
これで転送できる。
ただ, 転送するだけのために 一度$response変数に格納するのは メモリの無駄遣いなので、直接転送する方法があれば知りたい
次回予告
明日の担当も @takkyuuplayer です。
気になる Advent Calender 10選
3 日目 by @takkyuuplayer
気になる Advent Calender 10選。
1分で実現できる有用な技術 Advent Calendar 2014 - Qiita
Chocolatey Gallery を使って Windowsでchefみたいなことができる。という記事が気に入った
Atom Advent Calendar 2014 - Qiita
Markdown Editorとして Atom を使い始めたので追ってみようかなと。
- AngularJS Advent Calendar 2014 - Qiita
Backbone -> Angular に移ってきて、ちょっと Angular流に沿わないこととかやると 途端に複雑になるの、なんとかできないかなと思って。
Bitcoin Advent Calendar 2014 - Qiita
P2P技術のビジネス利用に興味があるので。
WebRTC Advent Calendar 2014 - Qiita
同上
Node.js Advent Calendar 2014 - Qiita
Client sideの環境(テストとか、bowerとか)を整える系の知識
Office 365 Advent Calendar 2014 - Adventar
最近ちらほら耳にするので。
明日話したくなる科学豆知識2 Advent Calendar 2014 - Adventar
物理学科卒です。科学は最近触れていませんが・・・。
次回予告
明日の担当も @takkyuuplayer です。
一般ユーザーで lua が有効な vim を インストール
一人アドベントカレンダー 2014 2 日目 by @takkyuuplayer
neocomplcache の進化版として neocomplete というものが出ていた。今回は neocomplete インストールのため Lua が有効な vim を一般ユーザーでインストールした話。
とりあえず環境だけ欲しい人向け
LPM: Local Package Manager を使っているなら
$ git clone https://github.com/takkyuuplayer/lpm.git $ cd lpm $ lpm install scripts/lua.lpm $ lpm install scripts/luajit.lpm $ lpm install scripts/vim.lpm
で使えるようになる。
環境構築中にはまったところ
- vim のインストール中に
link.sh: Linking failed
と言われる。
luajit は lua 5.2 に対応していない。
Lua は最新の 5.2系 ではなく、5.1系 をインストールすれば良い。
次回予告
明日の担当も @takkyuuplayer です。
一人アドベントカレンダー 2014
ブログ放置しちゃってるし、テコ入れに一人アドベントカレンダーでもやるか。
日付 | 担当 | タイトル |
---|---|---|
2014/12/01 | @takkyuuplayer | Gauche(Scheme) のデバッグ環境構築 |
2014/12/02 | @takkyuuplayer | 一般ユーザーで lua が有効な vim を インストール |
2014/12/03 | @takkyuuplayer | 気になる Advent Calender 10選 |
2014/12/04 | @takkyuuplayer | |
2014/12/05 | @takkyuuplayer | |
2014/12/06 | @takkyuuplayer | S3上のファイルをMojoliciousでproxyして返す |
2014/12/07 | @takkyuuplayer | 充分に発達した科学技術は、魔法と見分けが付かない |
2014/12/08 | @takkyuuplayer | perl で foobar.csv.gz を書き出す |
2014/12/09 | @takkyuuplayer | |
2014/12/10 | @takkyuuplayer | 子 Makefile をうまく使うメモ |
2014/12/11 | @takkyuuplayer | |
2014/12/12 | @takkyuuplayer | |
2014/12/13 | @takkyuuplayer | |
2014/12/14 | @takkyuuplayer | |
2014/12/15 | @takkyuuplayer | |
2014/12/16 | @takkyuuplayer | |
2014/12/17 | @takkyuuplayer | Amway シミュレーター |
2014/12/18 | @takkyuuplayer | |
2014/12/19 | @takkyuuplayer | |
2014/12/20 | @takkyuuplayer | |
2014/12/21 | @takkyuuplayer | |
2014/12/22 | @takkyuuplayer | |
2014/12/23 | @takkyuuplayer | |
2014/12/24 | @takkyuuplayer |