Tidal Cycles環境構築
Getting started
環境構築に若干手こずったのでメモ。 必要なものは以下。
- Haskell
- Tidal Cycles(Library)
- SuperCollider
- SuperDirt
- VS Code(& 拡張機能)
公式サイトには自動インストールのスクリプトがあるけど動かなかった。中で何やってるかよくわからんので手動でやったほうが無難だと思う。
Environmental setup
Haskell
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
パスを通す
echo '. $HOME/.ghcup/env' >> "$HOME/.bashrc" source ~.bashrc
動作確認
ghci
こんな感じの表示があればOK
GHCi, version 8.10.5: https://www.haskell.org/ghc/ :? for help Prelude>
Tidal Cycles(Library)
インストールするためのライブラリインストール
brew install cabal-install
Tidal Cyclesをインストール
cabal update cabal new-install tidal --lib
動作確認
ghci import Sound.Tidal.Context
こんな感じの表示があればOK
Prelude Sound.Tidal.Context>
以下のエラーが出たときはTidal Cyclesをインストールできていないので再度インストールし直す。
<no location info>: error: Could not find module ‘Sound.Tidal.Context’
SuperCollider
ここからzipで落としてきて解凍。 SuperCollider.appを起動。
SuperDirt
SuperCollider.appを起動して、左側のEditor部分に以下を記述。
記述した行にカーソルを合わせてcmd + Enter
で実行
Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.7.2"); thisProcess.recompile()})
※公式ではSuperDirtのバージョンが1.1.3になっている。自分の環境にバージョンを合わせないと動かないので注意。
右下のPost windowに以下のような表示があればOK
-> Quarks Installing SuperDirt Installing Vowel Vowel installed Installing Dirt-Samples Dirt-Samples installed SuperDirt installed . . . compile done localhost : setting clientID to 0. internal : setting clientID to 0. Class tree inited in 0.01 seconds server 'localhost' already booting *** Welcome to SuperCollider 3.11.2. *** For help press Cmd-D.
動作確認のため、SuperColliderを再起動する。
左側のEditor部分に以下を記述してcmd + Enter
で実行し、SuperDirtを起動。
SuperDirt.start;
以下のような表示があればOK
SuperDirt: listening to Tidal on port 57120
File > Open startup file
で以下を記述しておけば、SuperColliderを起動したときにSuperDirtが自動で起動する。
/* This is an example startup file. You can load it from your startup file (to be found in Platform.userAppSupportDir +/+ "startup.scd") */ ( s.reboot { // server options are only updated on reboot // configure the sound server: here you could add hardware specific options // see http://doc.sccode.org/Classes/ServerOptions.html s.options.numBuffers = 1024 * 256; // increase this if you need to load more samples s.options.memSize = 8192 * 32; // increase this if you get "alloc failed" messages s.options.numWireBufs = 64; // increase this if you get "exceeded number of interconnect buffers" messages s.options.maxNodes = 1024 * 32; // increase this if you are getting drop outs and the message "too many nodes" s.options.numOutputBusChannels = 2; // set this to your hardware output channel size, if necessary s.options.numInputBusChannels = 2; // set this to your hardware output channel size, if necessary // boot the server and start SuperDirt s.waitForBoot { ~dirt = SuperDirt(2, s); // two output channels, increase if you want to pan across more channels ~dirt.loadSoundFiles; // load samples (path containing a wildcard can be passed in) // for example: ~dirt.loadSoundFiles("/Users/myUserName/Dirt/samples/*"); // s.sync; // optionally: wait for samples to be read ~dirt.start(57120, 0 ! 12); // start listening on port 57120, create two busses each sending audio to channel 0 // optional, needed for convenient access from sclang: ( ~d1 = ~dirt.orbits[0]; ~d2 = ~dirt.orbits[1]; ~d3 = ~dirt.orbits[2]; ~d4 = ~dirt.orbits[3]; ~d5 = ~dirt.orbits[4]; ~d6 = ~dirt.orbits[5]; ~d7 = ~dirt.orbits[6]; ~d8 = ~dirt.orbits[7]; ~d9 = ~dirt.orbits[8]; ~d10 = ~dirt.orbits[9]; ~d11 = ~dirt.orbits[10]; ~d12 = ~dirt.orbits[11]; ); }; s.latency = 0.3; // increase this if you get "late" messages }; );
VS Code
VS Code自体のインストールは略。 以下の拡張機能をインストールする。
setting.json
に以下を追記。
"files.associations": { "*.tidal": "haskell" },
以下の記述があれば音の確認ができて便利(VS Codeの左端にあるツールバーのTidal Cyclesから確認できる)
"tidalcycles.sounds.paths": [ "/path/to/your/sounds" ]
Sound Test
音を鳴らしてみる。
以下のコードを.tidal
として保存。
d1 $ sound "bd sn"
行にカーソルを合わせてshift + Enter
で音がなればOK。
音を止めたい場合は以下を記述してshift + Enter
すればOK。
hush
References
基本情報技術者を受けずに3ヶ月で応用情報技術者に合格するには
はじめに
タイトルが胡散臭い情報商材みたいだけどやったことは至ってクソ真面目。
堅実にやれば受かると思います。
ただ、少しコツみたいなところもある気がするのでそちらもお伝えできればと思います。
前提
2020年10月に受験。
非CS専攻の工学系大学院卒のエンジニア1年目。
勉強時間は主に土日で、仕事終わりは参考書を読む程度。
時間があるor体力が無尽蔵にある方はもっと短期間でいけるはず。
全体の流れ(忙しい人用)
- 基本情報の参考書を1周読む(1週間)
- 基本情報の過去問を1回分解く(1週間)
- 応用情報の参考書を1周読む(2週間)
- 応用情報の過去問を8回分解く(8週間)
- 全体通して復習(1週間)
トータル13週間。91日で合格。
1~2週目
まず基本情報の参考書をやります。基本情報やってたほうが応用情報やるときの理解が早いです。 僕が使った参考書は以下です。
とりあえず1週目で全部読む。500ページ弱あるので1日70ページくらい。章末問題もやります。
2週目で巻末についてる過去問1回分をやる。わからないところは本で復習するかネットで調べて理解します。全部完璧に理解するのは無理なのである程度で諦めます。
3~4週目
応用情報の参考書やります。基本と同じシリーズのやつ使いました。2週間かけて読み切ります。圧倒的な情報量と略語の多さで禿げそうになります。全て覚えるのは不可能ですので一旦無視しましょう。参考書を読む作業は頭の中にインデックスをつくるためですので、あとで「そういえばこんなのあったな〜」くらいに思えればそれで良いと思います。
5~12週目
知識がぼんやりとインプットされた状態で、ひたすら過去問を解きます。ただそれだけです。IPAさんが過去問を無料で公開してますのでそちらを使いました。 1週間に1回分ずつやります。わからないところはチェックしといて後で本で調べるなりネットで調べるなりします。正直最初は全然解けないです。キレそうになります。でも少しずつ解けるようになっていきます。
13週目
過去問を解いてみて理解が浅いところを書き出します。再度本を読んだりネットで調べて補強します。あと用語とか公式の確認をやっときます。1週間かけて不安なところを復習します。ここまでやり切ると謎の自信が湧いていきます。
午前問題のコツ
根性論みたいで申し訳ないですが、数の暴力で対処します。過去問1回分で80問あるので8回分で640問も解くんです...。1つ1つの問題を復習していれば、同じような問題が出てくるので自然と解けるようになります。
午後問題のコツ
まず、選択する問題を決めます。お好みで。1回分だけ全問解いてみて決めてもいいかもしれないです。
あと、ほぼ国語の問題だと思ってください。文章をよく読めば意外と解けます。文章中に答え、あるいはヒントが隠れています。文章が長すぎて腹立ちますが過去問である程度慣れます。「なげえな」という気持ちは変わりません。
本番当日
腕時計(スマートウォッチはあかん)、シャーペン、消しゴム、受験票を忘れずに。
僕は受験票以外忘れていたので筆記用具はコンビニで買い、時計は無しで受けました。
試験は途中退出できます。午前は時間が余ると思うので、見直しまで終わったら退出しましょう。午後はクソ長い文章問題が待っているので、集中力を保つためにも昼寝しましょう。
最後に
「頑張る」はクソです。自戒を込めて。
方針を決めて計画を立てて、淡々と進めれば大丈夫だと思います。
僕を支えたのは「こんなめんどくさい資格試験2回も受けるなんて絶対にいやだ...」という気持ちでした。完
C言語でMQTT通信
はじめに
頭のいい人が作ったMQTTライブラリを使って、ローカル環境でMQTT通信してみます。
ローカル環境
MQTT brokerのインストール
MQTT通信をやるためにはMQTT brokerと呼ばれるサーバを動作させておく必要があるみたい。
- Homebrewを使ってインストールします。
brew install mosquitto
- 以下のコマンドでサーバを立ち上げます。
/usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf
MQTTライブラリのインストール
opensslというライブラリも必要ですので一緒にインストールします。
brew install openssl git clone https://github.com/eclipse/paho.mqtt.c.git
サンプルコードの変更、ビルドとインストール
paho.mqtt.c/src/samples
にMQTTClient_publish.c
とMQTTClient_subscribe.c
があるのでこちらを使用します。
今回はローカルで通信するので、どちらのソースコードも通信するアドレスを以下のように変更します。
#define ADDRESS "127.0.0.1:1883"
ライブラリのトップディレクトリでビルドとインストールを行います。
cd paho.mqtt.c make make install
make
でMakefileに従ったビルドを行います。make install
をすることでOSの共有includeディレクトリにライブラリがインストールされ、ライブラリとして使用することが可能になります。
Publish, Subscribeしてみる
paho.mqtt.c/build/output/samples/
に実行ファイルができてます。
MQTTClient_publish
でPublishして、MQTTClient_subscribe
でSubscribeしてみましょう。
- Subscribeで待ち受ける
./MQTTClient_subscribe
- Publishで3回メッセージを送ってみました
./MQTTClient_publish ./MQTTClient_publish ./MQTTClient_publish
- 実行結果(Sub側)
Message arrived topic: MQTT Examples message: Hello World! Message arrived topic: MQTT Examples message: Hello World! Message arrived topic: MQTT Examples message: Hello World!
- 実行結果(Pub側)
iMac:samples user$ ./MQTTClient_publish Waiting for up to 10 seconds for publication of Hello World! on topic MQTT Examples for client with ClientID: ExampleClientPub Message with delivery token 0 delivered iMac:samples user$ ./MQTTClient_publish Waiting for up to 10 seconds for publication of Hello World! on topic MQTT Examples for client with ClientID: ExampleClientPub Message with delivery token 0 delivered iMac:samples user$ ./MQTTClient_publish Waiting for up to 10 seconds for publication of Hello World! on topic MQTT Examples for client with ClientID: ExampleClientPub Message with delivery token 0 delivered
ちなみにMQTT brokerを立ち上げたターミナルでは以下のようなログが出ます。
1615900025: mosquitto version 2.0.9 starting 1615900025: Config loaded from /usr/local/etc/mosquitto/mosquitto.conf. 1615900025: Starting in local only mode. Connections will only be possible from clients running on this machine. 1615900025: Create a configuration file which defines a listener to allow remote access. 1615900025: Opening ipv4 listen socket on port 1883. 1615900025: Opening ipv6 listen socket on port 1883. 1615900025: mosquitto version 2.0.9 running 1615900030: New connection from 127.0.0.1:62674 on port 1883. 1615900030: New client connected from 127.0.0.1:62674 as ExampleClientSub (p2, c1, k20). 1615900035: New connection from 127.0.0.1:62676 on port 1883. 1615900035: New client connected from 127.0.0.1:62676 as ExampleClientPub (p2, c1, k20). 1615900035: Client ExampleClientPub disconnected. 1615900036: New connection from 127.0.0.1:62677 on port 1883. 1615900036: New client connected from 127.0.0.1:62677 as ExampleClientPub (p2, c1, k20). 1615900036: Client ExampleClientPub disconnected. 1615900037: New connection from 127.0.0.1:62679 on port 1883. 1615900037: New client connected from 127.0.0.1:62679 as ExampleClientPub (p2, c1, k20). 1615900037: Client ExampleClientPub disconnected.
参考記事様方
最後に
本当は今回やったことをAndroid上でやりたかったのでした。 頭のいい人教えて下さい。完
Termuxを使ってAndroid上でPythonを実行したい
はじめに
TermuxとはAndroidのLinuxカーネル部分をターミナルで操作することができるという、頭のいい人が作ったAndroidアプリ。 GooglePlayStoreでインストールできますが、CUIでやれると何かと便利なのでそうします。
Termuxのインストール
adb install /hogehoge/com.termux_107.apk
Termuxの起動
- アプリの起動コマンド
adb shell am start -n package名/class名
- Termuxの場合は以下
adb shell am start -n com.termux/.app.TermuxActivity
package名の調べ方
Google Play StoreのURLから調べる(太字部分) https&://play.google.com/store/apps/details?id=com.termux&hl=ja&gl=US
adbコマンドで調べて探す
adb shell pm list packages
class名の調べ方
adb shell pm dump package名
- 以下の記述を探す(色付きがclass名)
Python実行環境構築
- Termux初期設定(aptはpkgでもOK)
apt update apt upgrade
- pythonインストール
apt install python
- pythonを起動
python
- 適当に実行してみる
print("Hello, world")
- 実行結果画面
参考記事様方
- https://developers.cyberagent.co.jp/blog/archives/27889/
- https://f-droid.org/packages/com.termux/
- https://noitalog.tokyo/adb-shell-start/
- https://chayarokurokuro.hatenablog.com/entry/2019/05/09/Android%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%ABtermux%E3%81%8B%E3%82%89python%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B
GoをクロスコンパイルしてAndroid上で実行させたい
はじめに
Goの環境構築からやります。
環境構築方法には
1. 公式サイトからインストール
2. goenvを使用してインストール
の2種類あるらしい。
バージョン管理のしやすさ的にgoenv使います。
ローカル環境
Androidの環境
Goの環境構築
goenvのインストール
git clone https://github.com/syndbg/goenv.git ~/.goenv
初期設定
環境変数の設定諸々やります。
source ~/.bash_profileはターミナル再起動でもOK。
sudo echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bash_profile sudo echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bash_profile sudo echo 'eval "$(goenv init -)"' >> ~/.bash_profile source ~/.bash_profile
動作確認
goenv -v
以下が表示されればOK
goenv 2.0.0beta11
goのインストール
以下でインストールできるバージョンを確認
goenv install -l
以下でバージョンを指定してインストール
goenv install 1.15.0
ローカルでhelloworld
作業ディレクトリを作ってバージョンを指定
mkdir -p ~/test/src/hello cd ~/test goenv local 1.15.0
ソースファイルを準備
cd ~/test/src/hello touch hello.go
hello.goに以下を記載
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
buildする
go build
実行する
./hello
以下が出力されれば成功
hello, world
Android上でGoの実行ファイルを動かす
hello.goをビルド
CGO_ENABLED=0 GOOS=linux GOARCH=arm go build
実行ファイルをAndroid端末に送る
adb push hello /data/local/tmp/
実行する
adb shell /data/local/tmp/hello
実行結果
hello, world
注意事項
実行ファイルは /data/local/tmp/ に配置せにゃあかんらしい。 たぶん権限の問題で、rootに適当にディレクトリ作って試みたけどPermission deniedされたのでそういうことだと思う。