生存報告

仕事でバックエンド、趣味でフロントエンド・デザイン

Tidal Cycles環境構築

Getting started

環境構築に若干手こずったのでメモ。 必要なものは以下。

公式サイトには自動インストールのスクリプトがあるけど動かなかった。中で何やってるかよくわからんので手動でやったほうが無難だと思う。

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

MacOS | Tidal Cycles

TidalCycles入門 (2): VS Code 上での実行環境 - DAW悪戦苦闘記

基本情報技術者を受けずに3ヶ月で応用情報技術者に合格するには

はじめに

タイトルが胡散臭い情報商材みたいだけどやったことは至ってクソ真面目。
堅実にやれば受かると思います。
ただ、少しコツみたいなところもある気がするのでそちらもお伝えできればと思います。

前提

2020年10月に受験。
非CS専攻の工学系大学院卒のエンジニア1年目。
勉強時間は主に土日で、仕事終わりは参考書を読む程度。
時間があるor体力が無尽蔵にある方はもっと短期間でいけるはず。

全体の流れ(忙しい人用)

  1. 基本情報の参考書を1周読む(1週間)
  2. 基本情報の過去問を1回分解く(1週間)
  3. 応用情報の参考書を1周読む(2週間)
  4. 応用情報の過去問を8回分解く(8週間)
  5. 全体通して復習(1週間)

トータル13週間。91日で合格。

1~2週目

まず基本情報の参考書をやります。基本情報やってたほうが応用情報やるときの理解が早いです。 僕が使った参考書は以下です。

www.amazon.co.jp

とりあえず1週目で全部読む。500ページ弱あるので1日70ページくらい。章末問題もやります。
2週目で巻末についてる過去問1回分をやる。わからないところは本で復習するかネットで調べて理解します。全部完璧に理解するのは無理なのである程度で諦めます。

3~4週目

応用情報の参考書やります。基本と同じシリーズのやつ使いました。2週間かけて読み切ります。圧倒的な情報量と略語の多さで禿げそうになります。全て覚えるのは不可能ですので一旦無視しましょう。参考書を読む作業は頭の中にインデックスをつくるためですので、あとで「そういえばこんなのあったな〜」くらいに思えればそれで良いと思います。

www.amazon.co.jp

5~12週目

知識がぼんやりとインプットされた状態で、ひたすら過去問を解きます。ただそれだけです。IPAさんが過去問を無料で公開してますのでそちらを使いました。 1週間に1回分ずつやります。わからないところはチェックしといて後で本で調べるなりネットで調べるなりします。正直最初は全然解けないです。キレそうになります。でも少しずつ解けるようになっていきます。

www.jitec.ipa.go.jp

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/samplesMQTTClient_publish.cMQTTClient_subscribe.cがあるのでこちらを使用します。 今回はローカルで通信するので、どちらのソースコードも通信するアドレスを以下のように変更します。

#define ADDRESS     "127.0.0.1:1883"

ライブラリのトップディレクトリでビルドとインストールを行います。

cd paho.mqtt.c
make
make install

makeMakefileに従ったビルドを行います。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.

参考記事様方

github.com

qiita.com

最後に

本当は今回やったことをAndroid上でやりたかったのでした。 頭のいい人教えて下さい。完

Termuxを使ってAndroid上でPythonを実行したい

はじめに

TermuxとはAndroidLinuxカーネル部分をターミナルで操作することができるという、頭のいい人が作ったAndroidアプリ。 GooglePlayStoreでインストールできますが、CUIでやれると何かと便利なのでそうします。

Termuxのインストール

  • apkファイルのインストール(こちら
  • Android端末にadbでapkファイルをインストール
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名の調べ方

  1. Google Play StoreのURLから調べる(太字部分) https&://play.google.com/store/apps/details?id=com.termux&hl=ja&gl=US

  2. adbコマンドで調べて探す

adb shell pm list packages

class名の調べ方

adb shell pm dump package名
  • 以下の記述を探す(色付きがclass名) class名の場所

Python実行環境構築

  • Termux初期設定(aptはpkgでもOK)
apt update
apt upgrade
apt install python
python
  • 適当に実行してみる
print("Hello, world")
  • 実行結果画面 pythonの実行結果

参考記事様方

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されたのでそういうことだと思う。

参考記事様方