guakeの起動時にコマンドを実行するオプションが効かない件

概要

  • guakeの起動時にbyobu-screenを実行させたい。
  • 以下のコマンドを叩くと、VTEの引数がおかしい的なエラーが出る
guake -e byobu-screen

調査

 本家のissueに当該内容の記述があったので、以下のファイルの外部コマンドを渡す箇所を修正してみた。

  • ファイル : /usr/lib/python3.6/site-packages/guake/guake_app.py
#terminal.feed_child(command, len(command))
terminal.feed_child(command)

 修正して実行してみると、「0番目のアイテムは文字列ではなく、数字を渡してください」とか言ってきた。しょうがないのでVTEのAPIを見に行ったが、何も解決しなかったので諦めろん

どうしようか?

 コマンドの実行は無理っぽいので、別アプローチを模索していたところ、guakeの設定をよく見てみると、Shellなる項目があった。中を見るとDefault Interpreterという項目があり、ここに設定したコマンドが、起動時に実行されるらしい。なので、ここにbyobu-screenを設定できればよいはず。
 項目の増やし方がわからなかったが、この質問の回答よると/etc/shellsの記述を表示しているだけらしい。追記して再度Default Interpreterのリストを見てみると、追加されていた。

結論

  • /etc/shells に /usr/bin/byobu-screen を追加する
  • guakeの設定のShellで、Default Interpreterにbyobu-screenを設定する

byobuのエスケープキーの設定

概要

  • basix4.0に変更したので、byobuをインストールし直した。
  • エスケープキーがデフォルトで"A"になっているので、"]"に変更したい
  • 何度やっても反映されない!

解決

 よくわからんが、"]"はF1のconfig画面からだと設定できないようである。
 以下のファイルを直に変更することにより、直接エスケープキーを変更する。

  • ファイル
    • $HOME/.config/byobu/keybindings
bindkey "^A"
escape ^]]

Hylangで蟻本

Hylangで蟻本をやる

蟻本って何?

 プロコンの勉強本としてお馴染みのプログラミングコンテストチャレンジブック(通称:蟻本)

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

概要

 蟻本自体はC++で書いてあるので、C++のソースをHylangに移植する。

進捗&作業期間

 完了
 本を買ってから5〜6年ぐらい、Hylangで実装を初めてから足掛け3年ぐらい

Github

ここ : GitHub - dis-kaichi/programming-contest-challengebook

感想

 クッソ疲れた(訴訟)。以下は愚痴
 この本についてだが、基本的にソースが載っているのでソレを打ち込めば動くのだが、入力を一部変換して実装してあったりするところが有り、単純に打ち込めば終わりというわけでも無かった。グラフとか最後の方とかで、前の方のページで実装済みを前提でコードが書いてあったり、本に載っていない短縮記法(for文とか)がいきなり出てきたりしたことがあったので、そこら辺はちゃんとリンクとか注意書きとか書いて欲しかった。
 物量がかなりあるので、頭から全部実装するとかは余りオススメしない。(時間のかかりぐあいが半端ない)何が書いてあるのか抑えておいて、後から必要に応じて実装してみるのがいいと思う。勉強にはなるので、時間があるときにちょこちょこやる感じがいいかな?

 今回、C++からHylangの移植を行ったが、言語間の仕様の差を埋めるのが結構大変だった。
 特にHylangの仕様が固まっていないので、2〜3年の間に書き方がガラリと変わった事が大きかった気がする。昔は引数の展開(*list, **dict)みたいなやつが書けなかったので、applyを使って無理やり書いてたし、letが途中削除になったので、修正したり(今は復活)、defが削除になったので、setvに書きなおしたり、強制敵にreturnができなかったり(今はできる)などなど。

 この本に手を出した経緯については、プロコンに興味があったので、本を買ってC++で勉強したのが、5〜6年前。それで途中で飽きて放置、完全に積読本となっていたのを掘り出したのが3年ぐらい前、その時ちょうどPython上で動くLispの方言(Hylang)を見つけたばっかりだったので、勉強がてら実装してみようと始めたのが苦行の始まり。完了するのに3年も掛かった上、今年のGWはコレで潰れた(憤怒)。当時はLispの書き方もよくわからんかったのが、今ではかなり書けるように…(Hylang限定)。大分成長したなぁ。
 取り敢えず、githubのアドレスは晒しておくので、Hylangを勉強していて、蟻本にも興味がある人の一助になればいいなぁと思う。(そんな奴いるのか?)

 以上、終わり  

Hylangで最大ヒープ

概要

 Pythonの組み込みライブラリにはheapqなる、ヒープ木を実現するためのモジュールがあるのだが、最小ヒープしか対応していないので、小細工して最大ヒープをできる様にしてみた。
 ※ ただし言語はHylang

最大ヒープって何?

 ヒープ木でルートの値が最大値のもの。
 詳しくは、http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_9_B&lang=jpを参照

実装

 比較演算子のオーバーライドでどうにかしてみた。

;; ----------------------------------------
;; Max Heap : ルートが最大値
;; ----------------------------------------
(import [heapq [heappush heappop]])

(defclass ReverseOrder []
  []
  (defn --init-- [self x]
    (setv (. self _x) x))
  (defn --lt-- [self other]
    (> (. self _x) (. other _x)))
  (defn --le-- [self other]
    (>= (. self _x) (. other _x)))
  (defn --gt-- [self other]
    (< (. self _x) (. other _x)))
  (defn --ge-- [self other]
    (<= (. self _x) (. other _x)))
  (defn --str-- [self]
    (-> (. self _x) str)))

(defn heap-push [que x]
  (heappush que (ReverseOrder x)))

(defn heap-pop [que]
  (. (heappop que) _x))


;;; テスト
(def xs [])
(heap-push xs 2)
(heap-push xs 3)
(heap-push xs 1)
(print (heap-pop xs)) ;; 3

おまけ

 流石にHylangの需要がなさすぎるので、Python Versionも公開しておく。

from heapq import heappush, heappop


class ReverseOrder:

    def __init__(self, x):
        self._x = x
        return None

    def __lt__(self, other):
        return (self._x > other._x)

    def __le__(self, other):
        return (self._x >= other._x)

    def __gt__(self, other):
        return (self._x < other._x)

    def __ge__(self, other):
        return (self._x <= other._x)

    def __str__(self):
        return str(self._x)

def heap_push(que, x):
    return heappush(que, ReverseOrder(x))

def heap_pop(que):
    return heappop(que)._x

## テスト
xs = []
heap_push(xs, 2)
heap_push(xs, 3)
heap_push(xs, 1)
print (heap_pop(xs)) # 3

「12歳が書いた量子力学の教科書」の適当まとめ

概要

 後で見返して、こんな感じだったなーと思い返す用のまとめ。

12歳の少年が書いた 量子力学の教科書

12歳の少年が書いた 量子力学の教科書

適当まとめ(見返し用)

  1. 量子力学とは何か
  2. 万物の根源
    • 歴史的な流れ(古代〜)
    • 単位系の話
  3. 前期量子論
    • プランク〜ボーアの時代
    • 光は波か粒子か?
      • 光の二重性
    • コンプトン散乱
    • 教科書の物理モデルは間違い
      • ラザフォードの太陽系型原子モデル
      • ボーアモデル
    • ド・ブロイ
  4. 数学的定式化

  5. 内在的矛盾と解釈問題

  6. 量子力学の先へ

  7. 近未来応用への道

感想

  • 量子力学というか物理学自体に明るくないが、なんとなく概要はつかめるようになった気がする。
  • 数学的定式化の行列のところはある程度知識がないと辛いのではないかと感じた。
  • コレをベースに量子コンピュータの勉強をすすめることにする。

Pythonで代数学をやる

ライブラリ

ライブラリ Version 説明
Sympy 1.1.1 代数計算
NetworkX 2.0 グラフ理論

概要

 PythonMaximaMathematicaのような代数計算ができるライブラリであるSympyとグラフ理論用のライブラリであるNetworkXを使ってみたかった。
 そのうちmatplotlibと連携してグラフとか出力してみたい。

導入

  • pipでインストールできる

はじめに

実践

Tips

参考

TODO

  • NetworkXを触っていないので後日なんか作る

Tidalに入門したかった

概要

  • プログラミングで音を奏でられる&LiveCodingができるということで、Tidalをインストールしようとしたがダメだったのでメモしておく

環境

Softwares Version
Basix(OS) 3.0
Stack 1.3.2
SuperCollider 3.6.2

インストール

ダメだった点

まとめ

  • これ以上はめんどくさいので、とりあえず保留
  • 後日再挑戦する