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  を開くと動作確認できる。
ちなみに、スマホでは表示されなかった。


2019年12月25日水曜日

TCP技術入門を読んだ

とりあえず読みました。
キーワードだけでも抽出しました。その後深堀していく予定。
この本のメインは輻輳制御アルゴリズム。


TCP入門

UDPについて
 HTTP over QUIC
TCPの基礎
 RUDP UDPの信頼性機能追加
 WTCP 携帯特化のTCP
 SCTP 信頼性の高い順序データ配信。メッセージ指向、マルチホーミング、マルチストリーミング、生存確認(ハートビート)、イニシエーションの改善。
 DCCP UDPの輻輳緩和目的

TCP/IPの変遷

 ARPANETの歴史から輻輳制御アルゴリズム導入。インターネット、無線、モバイル、クラウド、IoT LPWAなど。

TCPとデータ転送

ヘッダフォーマット。
コネクション管理。確立、切断
フロー制御、ウィンドウ制御
輻輳制御
再送制御
初期のアルゴリズム
 Tahoe
 Reno
 NewReno
 Vegas


輻輳制御アルゴリズム

輻輳制御の考え方  
輻輳制御の有限オートマトン
  状態
   open
   disorder
   recovery
   CWR   
   Loss
アルゴリズム
Lossbase 、Delaybase 、Hybrid
 NewReno
 AIMD
 Vegas
 Westwood
 HighSpeed
 Veno
 BIC
 HTCP
 Hybla
 Illinois
 YeAH

CUBIC

Linux標準の輻輳アルゴリズム
BICの輻輳ウィンドウサイズ増加関数を三次関数に置き換え。
擬似コードで確認

BBR

Googleが開発したアルゴリズム。
Delaybase輻輳制御
GCPでも使用。
擬似コードで確認

TCPの最新動向

通信端末の多様化
 センサー
 スマートデバイス
 M2M
接続先の変化 
 クラウド
 エッジ
 マルチアクセスエッジコンピューティング
5G
 eMBB 8Kなど
 mMTT IoT
 URLLC 自動運転、ROS
 ミリ波帯
 マルチパスTCP
IoT
 LWIG
 CoCoA
 NIDD
データセンター
 DCTCP
自動運転
 輻輳制御が必須




2019年11月9日土曜日

rasberrypiにstackをインストールしてビルドできるようにする

rasberrypi3 にhaskellのビルドツールstackをインストールして、ビルドできるようにする。
過去の情報は色々あったのですが、古い情報であったので、2019年版としてまとめておきます。

> curl -sSL https://get.haskellstack.org/ | sh
> stack new sample
> stack build
エラー発生
No setup information found for ghc-8.6.5 on your platform.
This probably means a GHC bindist has not yet been added for OS key 'linux-armv7'.
Supported versions: ghc-7.10.2, ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, ghc-8.2.1, ghc-8.2.2, ghc-8.6.3

ghc-8.6.3に変更して、再度ビルド したが、別のエラーが発生した。
armの命令が不足しているとエラーが出力される。
[1 of 2] Compiling Main             ( /home/pi/.stack/setup-exe-src/setup-mPHDZzAJ.hs, /home/pi/.stack/setup-exe-src/setup-mPHDZzAJ.o )
/tmp/ghc20362_0/ghc_6.s: Assembler messages:

/tmp/ghc20362_0/ghc_6.s:43:0: error:
     Error: selected processor does not support `movw r7,:lower16:stg_bh_upd_frame_info' in ARM mode
   |
43 |         movw    r7, :lower16:stg_bh_upd_frame_info

stack ghc でコンパイルしてみるが、同様のエラーが出る。
 コンパイルオプションでアーキテクチャ指定していないためエラーが出ているっぽい。 アーキテクチャ指定してビルドする。
ghc -opta-march=armv7-a Main.hs
ビルド成功。 stack buildでも同様にコンパイルオプションでアーキテクチャを指定できるようにする。 $HOME/.stack/config.yaml あたりをいじってみたが。。。いまいち反映されない。 ~/.stack/programs/arm-linux/ghc-8.6.3/bin/ghc-8.6.3 のスクリプトを修正する。
cat ~/.stack/programs/arm-linux/ghc-8.6.3/bin/ghc-8.6.3

#!/bin/sh
exedir="/home/xx/.stack/programs/arm-linux/ghc-8.6.3/lib/ghc-8.6.3/bin"
exeprog="ghc-stage2"
executablename="$exedir/$exeprog"
datadir="/home/xx/.stack/programs/arm-linux/ghc-8.6.3/share"
bindir="/home/xx/.stack/programs/arm-linux/ghc-8.6.3/bin"
topdir="/home/xx/.stack/programs/arm-linux/ghc-8.6.3/lib/ghc-8.6.3"
executablename="$exedir/ghc"
exec "$executablename"  -opta-march=armv7-a -B"$topdir" ${1+"$@"}
#exec "$executablename" -B"$topdir" ${1+"$@"}
この変更でビルドしたら成功した。
多分本来はglobalの設定で反映できるのだろうが、今のところこれで運用する。