2021年8月28日土曜日

標準入力をファイル入力にする

まぁあるあるの実装かもしれないけど、とりあえずログとして残しておく。

#include <stdio.h>
  
int main(){
        int ret = 0;
        FILE* tmpstd = stdin;
        stdin = fopen("test.txt" , "rb");
        ret =getchar();
        printf("getchar ret= %d/n",ret);

        // 
        stdin = tmpstd;
        ret =getchar();
        printf("getchar ret= %d/n",ret);

        return 0;
}

ファイルがない場合EOFを返すので注意する。

環境依存する実装のため、必ずすべて動作するとは限らない。

 

2021年2月11日木曜日

goを2日だけ勉強してみた

2日ちょいですが、goの勉強をした内容をまとめてみました。


環境構築

install script を作ってみた。
goをインストールしただけでREPLは使えない。
最小構成を提供し、必要に応じてインストールというのは正しい。

Hello World

当たり前だが、golangのプロジェクトレイアウトに沿って構築。

Makefileを使ってビルドするのが慣例らしい。

Module

Redmine REST Clientのモジュールを作ってみた。rest.go
コマンドライン引数解析、JSON解析

ローカルで開発したモジュールは相対パスで記述しない。
go.modのreplacce directiveを使って相対パスに置き換える仕組みを使うのが一般的らしい。

手こずったところ
  • Naming Rule
    • publicの関数が先頭大文字
    • JSONの構造体も先頭大文字

Test

go test を実行するだけで簡単にテストが実行できる。
しかも、カバレッジ計測も簡単にできるのが嬉しい。
まだ、テストユーティリティが使いこなせていない。

> go test -v  ponta027.dip.jp/rest -coverprofile = covert.out
> go tool cover -html= cover.out -o cover.html

これだけでカバレッジ結果がHTML出力される。

使ってみた感想
  • 動かすだけであれば学習コストが低い。
    • 言語仕様をまだ調べきれていないので。
  • コンパイラが未使用変数、importがあるとエラーとなるため、クリーンなコードがかける。
  • NamingRuleは慣れるまで大変。
  • 周辺ツールが結構充実している。
  • クロスコンパイルが簡単にできる
    • 環境変数を設定するだけで実現
全然知らないことが多いので、これからもう少し勉強してみようかと思う。





2020年11月3日火曜日

Apache mesos調査_paper_abstract

 諸々経緯があってApache Mesosを調べてみることに。

論文があったので、読んで理解を深める。

Mesos:  A Platform for Fine-Grained Resource Shareing in the Data Center

Abstract

Mesosはcomodity clusterを共有するplatform
対象はHadoop , MPI(Message Passing Interface)などclustering computing framework間

  • framework毎のdata replicationを排除
  • fine-Grained mannerでresourceを共有
各machineにstoreされたdataを順番にreadすることにより、frameworkにdata localityを実現。Mesosはdistributed two-level- scheduling(resource offers)を導入
各frameworkにどれくらいのresourceがofferできるか決める。
frameworkはどのresourceをacceptできるかとどの計算が実行できるか決める。
Mesosがframework間でclusterを共有するときに、ほぼ最適なdata localityを実現できる。

以降、一章ずつまとめていくかな。

2020年5月6日水曜日

AWS lambdaの簡単な環境構築_CLI

ほとんどAWSのサイトに書いてあるので、リンクだけまとめます。

AWSの登録、IAMの設定は省略。

AWS CLIの環境構築
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html

Lambdaの操作方法
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-awscli.html

ケアレスミスで躓いたこと。

$ aws lambda list-functions --max-items 10

Could not connect to the endpoint URL: "https://lambda.us-east2.amazonaws.com/2015-03-31/functions/"

regionの設定をミスってしまったため、コマンド発行が失敗しました。

補足:上記リンクにはupdate-function-codeがなかったので、以下のように更新します。

 aws lambda update-function-code --function-name hello-world  --zip-file fileb://function.zip




2020年3月22日日曜日

nodejsでmidi作成

TonejsのMidiを調査
https://github.com/Tonejs/Midi

Midiプロジェクトの説明は

Convert MIDI into Tone.js-friendly JSON

Tone.js親和性のJSONにMidiを変換する。

実際はMidiのパースしてJSONに変換も可能。



Midiのパース、Midi書き出し自体は、midi-fileで実現している。
https://github.com/carter-thaxton/midi-file


JSONフォーマットは下記

https://github.com/Tonejs/Midi#format


1からMidiを作成する場合
https://github.com/Tonejs/Midi#encoding-midi


JSONフォーマットのサンプル
https://github.com/Tonejs/Midi/tree/master/test/midi/bach



ちなみに3つissueがあがってる。
https://github.com/Tonejs/Midi/issues


2020年2月13日木曜日

chrome music labのsong makerについて

https://musiclab.chromeexperiments.com/Song-Maker/

ブラウザ上で簡単に作曲ができて、midi ,wav にダウンロードできるサイト。
面白そうなのでどんな動きをしているか調べてみる。

ブラウザ上の動作
* マス目をなぞるのはchrome music lab のmelody makerを少し拡張したもの。
* 再生したり音を鳴らしたりするのはtone.jsを使っている。

midi,wavのダウンロード機能
* saveボタンを押したときに、midiファイルと楽譜データをsave
* ダウンロードするファイルを選択するときには、サーバ上のファイルをダウンロードするだけ
ー>つまりクラウド上でwav変換を行っているように見える。


https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:375983427419:applications~s3-lambda-ffmpeg-aac-wav-to-mp3-s3
このような仕組みがあるので、S3にmidiと楽譜データをアップしてしまえば勝手にlambdaが変換してくれる仕組みを作れるらしい。

https://github.com/simalexan/s3-lambda-ffmpeg-aac-wav-to-mp3-s3
ソースコードを見た限りspawnしているだけですね。
簡単簡単。




2020年2月3日月曜日

tone.jsの環境構築(chrome-music-lab/melodymaker)

chrome-music-labというところで、WebAudioAPIのサンプルがたくさんあるので
動かしてみました。
https://github.com/googlecreativelab/chrome-music-lab

まずは、melodymakerを動かすまで。

■準備
nvmのインストール
> curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
> nvm install --lts
> nvm use --lts

LTSにすると、node-saasでビルドエラーが発生するため、バージョンを下げる。

> nvm install v10.18.1
> nvm use v10.18.1
> git clone  https://github.com/googlecreativelab/chrome-music-lab
> cd chrome-music-lab/melodymaker
> npm init
> npm install
> npx webpack
> npm install webpack-dev-server webpack-cli --save-dev
> npx webpack-dev-server
validateSchema is not a function

上記エラーが出力され起動できなかった。
webpackとwebpack-dev-serverのバージョンの不一致かなと。
##後ほど要調査

> python3 -m http.server 3000
とりあえず起動確認のため、上記コマンドで確認。

ブラウザで http://localhost:3000  を開くと動作確認できる。
ちなみに、スマホでは表示されなかった。