Tidalに入門したかった
概要
- プログラミングで音を奏でられる&LiveCodingができるということで、Tidalをインストールしようとしたがダメだったのでメモしておく
環境
Softwares | Version |
---|---|
Basix(OS) | 3.0 |
Stack | 1.3.2 |
SuperCollider | 3.6.2 |
インストール
- Tidal自体はHaskellらしいのでStackを使ってインストールする
- Tidalの元ネタというか内部的にSuperColliderという言語を利用しているので、それもインストール
ダメだった点
- SuperDirtという音楽セット?をインストールしようとして、Quarkが無い旨のエラーが出て失敗する
- (*) include("SuperDirt")をSuperColliderIDE上で打ち込むと失敗する
- 2017/11/19日現在、Linuxにおいて、SuperColliderのバージョンは3.6までしか提供していない
- https://launchpad.net/~supercollider/+archive/ubuntu/ppa]
- 2014年以降止まっているのか?
- Quark関連のbugfixがされているのが,3.7以降
- 上記の理由により、apt-get上でのインストールはダメくさい
まとめ
- これ以上はめんどくさいので、とりあえず保留
- 後日再挑戦する
Kivy備忘
Kivy使い方メモ
概要
環境
App | Version |
---|---|
Python | 3.5.2 |
hylang | 0.13.0 |
Install
- 参照先と同様にインストールを行う
- http://kuroneko0208.hatenablog.com/entry/2014/02/04/210343
- (注意) githubからkivyをDLすること
作成メモ
デフォルトで読み込まれるkvファイル
- Appを継承したクラスの名称でデフォルトの名前が決まる
- クラス名からApp部分を取り除いた部分を小文字にしてファイル名にする
- MainApp -> main.kv
- https://pyky.github.io/kivy-doc-ja/guide/lang.html
Properties
- Observer patternに該当する
- kvファイルとのやり取りとか、メモリ管理とか色々やってくれるらしい
- on_
で値変更時のイベントが飛んでくるようになるらしい
KV File
- 基本的に木構造な感じで作成していく
<LoginScreen>: # Class Name GridLayout: # Layout to the parent rows: # Property of a layout
(defclass Main [App] ;; build()の戻り値がメインのルートになる (defn build [self] (setv (. self root) (apply Button {:text "BTN"})) ;; Buttonがルートになる (. self root)))
参考プログラム
Pong Game Tutorial
- https://kivy.org/docs/tutorials/pong.html
- とりあえず作ってみたが、サイズを変えたりするとNoneで落ちたりする
- 動作が安定しないのが謎
Kivyでテトリス
- https://github.com/mmueller/tetrivy
- PC上での操作性はもっと改良する必要がある気がする
- マネして作ってみてイベント操作性とか改良してみると結構勉強になる
Tips
キーボード入力のやり方 (Windowクラス利用)
- 上記のPongGameでやった方法を利用する
- https://stackoverflow.com/questions/17280341/how-do-you-check-for-keyboard-events-with-kivy
- https://github.com/kivy/kivy/blob/master/examples/widgets/keyboardlistener.py
キーボード入力のやり方 (FocusBehaviorクラス利用)
- mixin方式で、継承するクラスに追加する
- keyboard_on_key_down()でキー押下時のイベントが取得できる
- メンバ変数のfocusがTrueにならないとイベントが取得できないので注意
- focusがあたって無いとイベントが飛んでこないので、単純にキーイベントを取るだけだと使いづらい
- https://kivy.org/docs/api-kivy.uix.behaviors.html?highlight=behavior#module-kivy.uix.behaviors
Errors
"__no_builder"的なやつ
- https://www.cocept.io/blog/development/kivy-unexpected-keyboard-no-builder/
- superの呼び出し時にkwargsを渡さないと発生するらしい
履歴
Date | Notice |
---|---|
2017/11/12 | 初回作成 |
LxPupインストール
概要
家のゴミPC(EeePC初期型:容量4GB)にPuppyLinuxのLXDE版をインストールした際の話
インストール
なぜLxPupなのか?
容量的に通常のLinuxだと明らかに足らない。軽いと思っていたBasixですら4GBが必要で、上記PCの表記上は容量が足りている様に見えるが、システム領域があるので実質4GB未満しか使えない。
PuppyLinuxは200MB未満でインストール可能なので、上記PCでも余裕でインストール可能。(LxPupは300MBぐらい)
派生のLxPupにした理由は、PuppyLinuxのデスクトップがゴチャゴチャしているのと、アイコンのデザインが好きに慣れないから。
ダウンロード
ダウンロードはリンクより可能。今回は16.08.2のisoを落とした。
設定
- メニュー → セットアップ → Puppyユニバーサルインストーラを選択
- SDカード領域を選択する
- 領域を適当に初期化する。(bootの設定を入れる様にする)
- インストール時にファイルの指定を迫られるので以下のファイルを指定
- /initrd/mnt/tmpfs/puppy_lxxenial_XX.XX.sfs
- 以下の4ファイルをUSBからコピーしてインストール先に突っ込む(今回は/mnt/sda1)
- initrd.gz
- vmlinuz
- puppy_lxpup_XX.XX.sfs
- zdrv_lxpup_XX.XX.sfs
- メニュー → システム → Grub4Dosブートローダの設定を起動する
- 上記ファイルを入れておくと場所(/mnt/sda1)を認識してくれる筈
- lang_pack_ja-2.1.sfsをリンクから落としてタブルクリックでインストール
- 再起動
アプリケーション等
その他
- ユーザ領域をどのぐらいのサイズにするか?
- 2Gにすると起動が遅くなったので、1Gぐらいがいいのか?
- PETgetマネージャでインストールできないものが結構ある(vimがダメだった)
- 本体の電源で切ると、次回起動時に立ち上がらない事がある(EeePC側の問題か?)
- 起動が不安定
まとめ
良い子のみんなはマネしないで、もっといい中古のPCを買おう。
参考
FSharp導入編
概要
F#をちょいちょい弄っているので、オボエガキ兼簡易まとめ。
Visual Studio 2010以降はデフォで入っており、スクリプト形式で実行できるので、Windowsの場合だとバッチファイルの代りになるのがいい。
インストール
Linux
環境としては、monoとfsharpが入っていればいいみたい
- http://qiita.com/takanemu/items/be47fbea4c1483776c8f
- http://qiita.com/c0hama/items/aab918126ab0550fc476
Windows
Visual Studioをインストールすると多分自動的に入ってくる
スクリプト実行
Linux
取り敢えず、HelloWorldを出力させてみる。以下の内容でファイルを作成する。
// ファイル名 : hello_world.fsx
printfs "Hello, World"
コマンドで、以下を実行する。
fsharpi --exec hello_world.fsx
Windows
バッチファイルを作成して実行させるので、以下の内容でバッチファイルを作る。
因みにfsi.exeのパスは環境によっては違う場所に入っている可能性があるので注意
REM ファイル名 : run_fsharp.bat @echo off SET BIN_PATH="C:\Program Files (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0\fsi.exe" %BIN_PATH% --exec %1
上の内容で、hello_world.fsxを作成し、以下のコマンドで実行する。
REM run_fsharp.batが存在するフォルダに移動する REM run_fsharp.bat と hello_world.fsx は同じフォルダに入れておく run_fsharp.bat hello_world.fsx
後記
Windowsのバッチファイルでちょっと複雑な処理をするようなスクリプトを書こうとすると、配列とかループとかがクソ面倒で詰む。F#も文法が手続き型言語から多少離れているので若干書きづらいが、慣れればそれなりに書けるので選択肢としては有りだと思う。
また、F#の他に開発環境にはJRE(Java Runtime Engine)が入っている事が多いので、clojureも候補としては有り。但し、LISPの方言特有の括弧地獄に悩まされる事にはなるが。
Linuxの自動実行
自動起動設定
概要
Ubuntuの起動時に自動でプログラムを実行したいので、設定ファイルの直接編集で、どうやったらいいのか調べた。
環境
OS | バージョン | 備考 |
---|---|---|
Basix | 12.04 | Ubuntu派生 |
設定
自動起動時の設定は、各段階に於いて設定ができる。
他にも色々あるとは思うが、今回はOS起動時、ログイン時、シェル起動時の3つ。
OS起動時
OS起動時には、rc.local ファイルが実行される。このファイルは2つ存在して以下の順で呼ばれる。
正確には、init.d直下のrc.localが、etc直下のrc.localを呼んでいる。
- /etc/init.d/rc.loocal
- /etc/rc.local
また、etc直下のrc.localは、/etc/rc.local.d/ 直下のファイル群を呼んでいる。
よって、結論としては、単体のスクリプトを/etc/rc.local.d/ の直下におけば良い。
ログイン時
ログイン時には、/etc/profile ファイルが呼ばれる。このprofileファイル内で、/etc/profile.d/ 直下のファイル群を呼んでいる。
よって、結論としては、単体のスクリプトを/etc/profile.d/ 直下におけば良い。
シェル起動時
シェル起動時には、ユーザのホーム直下(~/)の.bashrcファイルが呼ばれる。
このファイルに記述しておけば、シェルの起動時に毎回実行される。毎回実行されるので、2回実行するとまずいコマンドとかは、ここには記述しないようにしよう。
予定
USBが挿入されたタイミングで設定が適用される様にしたいので、そこら辺を調査する予定。
干支の逆引きについて
概要
干支(かんし/えと)にちなんだ地名や歴史的事件名などが結構あるが、そこから逆算して年代を推測できると便利なのでは?と思ったので考察してみた。
ちなみに干支は、「えと」としてお馴染みの子、丑、寅・・・ではなく、甲子、戊辰、辛亥・・・の方をいうので注意。
干支の逆引き
十干と十二支の一覧
十干
番号 | 十干 | 音読み | 訓読み |
---|---|---|---|
0 | 甲 | こう | きのえ |
1 | 乙 | おつ | きのと |
2 | 丙 | へい | ひのえ |
3 | 丁 | てい | ひのと |
4 | 戊 | ぼ | つちのえ |
5 | 己 | き | つちのと |
6 | 庚 | こう | かのえ |
7 | 辛 | しん | かのと |
8 | 壬 | じん | みずのえ |
9 | 癸 | き | みずのと |
十二支
番号 | 十二支 | 音読み | 訓読み |
---|---|---|---|
0 | 子 | し | ね |
1 | 丑 | ちゅう | うし |
2 | 寅 | いん | とら |
3 | 卯 | ぼう | う |
4 | 辰 | しん | たつ |
5 | 巳 | し | み |
6 | 午 | ご | うま |
7 | 未 | び | ひつじ |
8 | 申 | しん | さる |
9 | 酉 | ゆう | とり |
10 | 戌 | じゅつ | いぬ |
11 | 亥 | がい | い |
逆算方法
逆算式
逆算式は以下の通り、十干と十二支の番号をそれぞれ当てはめると算出できる
10の位 = (十干 - 十二支) mod 12 / 2
1の位 = 十干
干支番号 = 上で算出した数に1を足す
例
甲子園でお馴染みの「甲子」
10の位 = (0 - 0) mod 12 / 2 = 0
1の位 = 0
干支番号 = 0 + 1 = 1
よって、干支番号は1辛亥革命でお馴染みの「辛亥」
10の位 = (7 - 11) mod 12 / 2 = 8 / 2 = 4
1の位 = 7
干支番号 = 47 + 1 = 48
よって干支番号は48甲午農民戦争でお馴染みの「甲午」
10の位 = (0 - 6) mod 12 / 2 = 6 / 2 = 3
1の位 = 0
干支番号 = 30 + 1 = 31
よって干支番号は31
modについて
modは簡単に言うと割った時のあまりのことである。ただし、マイナスの場合にも定義されることに注意。
例えば、以下のような感じになる。
25 mod 12 = 1
-4 mod 12 = 8
順方向
干支番号から干支の算出
一応順方向についても記述しておく。
干支番号から干支の算出は簡単で以下の通り
干支番号から1を引いたものについて考える。
十干 = 1の位から算出
十二支 = (10の位 + 1の位)から算出
久しぶりに見直したら明らかにおかしかったので修正。(2019/03/10)
十干 = 干支番号 mod 10
十二支 = 干支番号 mod 12
例
「辛亥」
干支番号は上記の通り48なので、47を元に計算する。
十干 = 7 = 辛
十二支 = 4 + 7 = 11 = 亥
十干 = 47 mod 10 = 7 = 辛
十二支 = 47 mod 12 = 11 = 亥
修正(2019/03/10)「丙午」
干支番号は43なので、42を元に計算する。
干支 = 2 = 丙
十二支 = 4 + 2 = 6 = 午
干支 = 42 mod 10 = 2 = 丙
十二支 = 42 mod 12 = 6 = 午
修正(2019/03/10)
なぜ偶々成功する例を2つ引いてしまったのだろうか・・・
年の予測
還暦について
年の予測の前に還暦について説明する。60歳のお祝いで還暦というものがあるが、これはこの干支が一回りした際のお祝いとして行われる。
十干(10)と十二支(12)の組み合わせは、全部で120通り存在するが、干支としてカウントされるのは半分だけである。この組み合わせが存在するパターンと存在しないパターンの違いは、組み合わせが偶数同士、奇数同士に限定される所にある。
つまり、甲(0)、丙(2)、戊(4)、庚(6)、壬(8)は、子(0)、寅(2), 辰(4), 午(6), 申(8), 戌(10)との組み合わせは存在するが、丑(1), 卯(3), 巳(5), 未(7), 酉(9), 亥(11)との組み合わせは存在しないということである。乙(1)、丁(3)、己(5)、辛(7)、癸(9)の場合は、その逆となる。
予測
60で一回りすることを応用して、ある程度の年代の予測が可能である、例えば、私の誕生年である1988年は戊辰であったので、戊辰戦争は、1988から60の倍数となるはずである。実際に、戊辰戦争の開戦は1868年なので、1988年のちょうど120年前である。
地名とか、建物とかに干支が入っている場合、大体その年に作られたかなんかしたものだと思うので、ある程度の年を予測できるのではなかろうか。甲子園とか甲子温泉とか庚申塚、辛亥革命などなど・・・
十干の覚え方
十二支はともかく、十干を覚えるのはきつい。甲乙丙丁まではいいとしても、それ以降は馴染みがなく覚えづらい。
ベストな方法は知らないが、五行(木火土金水)と絡めて覚えるのが、一番いい気がする。
甲(きのえ)は、木の兄で「きのえ」であり、乙(きのと)は、木の弟で「きのと」である。十干は兄弟(えと)の順で並んでいるので、五行の相生を木を起点として覚えればいい。
正直なところ、この方法の場合、五行を新たに覚える必要があり、敷居は結構高い。私の場合は「デモンズゲート」というゲームで相剋関係を覚えていたので、この方法でなんとか順番を把握することができたという感じである。
参照
MFC事始め
MFC簡単まとめ
MFCとは?
MicrosoftがVC++用に開発した、Widnowsアプリケーション開発用フレームワーク。
WindowsAPIを直に呼び出すよりは多少マシぐらいで、新規で覚えるメリットは、ほとんど無い。
WindowsXP以前は、よく使われたので、そのメンテナンスとか移植とか、そんな感じの仕事につくと使う羽目になる。個人でやるならば、素直に.Netを使おう。
環境
項目 | 情報 |
---|---|
OS | Windows 7 |
Visual Studio | 2015 |
インストール
VisualStudioをインストールするとデフォルトで入っている。特に自分でインストールする必要は無い。
プロジェクト作成
とりあえずダイアログベースプログラムを作成
- 以下の流れで作成
基本的な流れ
大体以下の流れで開発していく
(今回はプロジェクト名をMFCSamplesにしました)
- リソースビューからダイアログを開いて、視覚的に画面パーツを追加
- ダイアログのクラス(MFCSamplesDlg.cpp内)に、追加したパーツに対するイベントやDDX/DDVを記述
- パーツを拡張したり、別クラスに処理を分ける
ボタンなどの処理/イベントを細かく管理する場合は、基本クラスを拡張すると良い
拡張の流れは以下の通り
コーディングスタイルについて
クラス名は必ずCを先頭につける必要がある。ファイル名にはつける必要が無いが、クラス名につける必要がある。
例
ファイル名 | クラス名 |
---|---|
MFCSamplesDlg.cpp | CMFCSamplesDlg |
また、Mustではないが、MFCのフレームワークの各クラスが、がっつりハンガリアンで書かれている。Mustではない思うが、周りに合わせる場合は使うべきなのかもしれない。
他はC++の基本的なスタイルでコーディングしていけばいいのでは無いかと思う。
サンプル
とりあえず、GitHub上に公開しているので、見てもらえばいいと思う。
メインダイアログから、各パーツのサンプルダイアログへ飛べるようになっている(追加予定)。