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を設定する
Hylangで蟻本
Hylangで蟻本をやる
蟻本って何?
プロコンの勉強本としてお馴染みのプログラミングコンテストチャレンジブック(通称:蟻本)
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?
- 作者: 秋葉拓哉,岩田陽一,北川宜稔
- 出版社/メーカー: マイナビ
- 発売日: 2012/01/28
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 473回
- この商品を含むブログ (36件) を見る
概要
蟻本自体は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歳が書いた量子力学の教科書」の適当まとめ
概要
後で見返して、こんな感じだったなーと思い返す用のまとめ。
本
- 作者: 近藤龍一
- 出版社/メーカー: ベレ出版
- 発売日: 2017/07/01
- メディア: 単行本
- この商品を含むブログを見る
適当まとめ(見返し用)
- 量子力学とは何か
- 万物の根源
- 歴史的な流れ(古代〜)
- 単位系の話
- 前期量子論
数学的定式化
内在的矛盾と解釈問題
量子力学の先へ
近未来応用への道
感想
Pythonで代数学をやる
ライブラリ
ライブラリ | Version | 説明 |
---|---|---|
Sympy | 1.1.1 | 代数計算 |
NetworkX | 2.0 | グラフ理論 |
概要
PythonでMaximaやMathematicaのような代数計算ができるライブラリであるSympyとグラフ理論用のライブラリであるNetworkXを使ってみたかった。
そのうちmatplotlibと連携してグラフとか出力してみたい。
導入
- pipでインストールできる
はじめに
- Sympyは公式のチュートリアルをやってみると何ができるのかなんとなくわかる
実践
- 数検の過去問を説いてみる
Tips
- 絶対値を含む方程式を解く
- https://gist.github.com/onionmk2/d424e83f4fda6eaf07f22312ad2dd5b4
- symbolsの定義時にreal=Trueをつける
- 絶対値はabs()で良い
- 解の範囲
- symbolsでの定義次に、positive=Trueをつけると、solve時に正整数の範囲で算出してくれる
- 連立方程式
- solveにリストで渡せば良い
- 変数もリストで渡す
- N進法
参考
- Sympy
- NetworkX
TODO
- NetworkXを触っていないので後日なんか作る
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上でのインストールはダメくさい
まとめ
- これ以上はめんどくさいので、とりあえず保留
- 後日再挑戦する