Ubuntu では PlayStation 3 のコントローラ(DualShock 3)を簡単に無線接続できる

今どき持ってる人いないだろ&PCで使いたい人いないだろと言われるかもしれないですが、我が家にある一番使いやすいコントローラがDualShock3で、私がゲームをする頻度も多くは無いので未だに壊れず現役だったりします。

PS3のコントローラはUSB接続ではありましたが、仕様が公開されておらず、当初はPCにつなげることは困難だったのですが、有志の解析により使えるようになっています。

askubuntu.com

上記のページでは、専用daemonを使用する手法が書かれていますが、Ubuntu 20.04 LTS 現在では、ドライバが整備され標準で組み込まれているので、無線接続も追加のソフトインストールなしに簡単に使用することが可能です。

以下は、その具体的な操作方法です。

続きを読む

Rust nightly で rls 等がインストールできないときの対策

Rust は将来導入が検討されている機能も nightly チャンネルとしてリリースされているので、簡単に試せるのは良いのですが、コンパイラ本体である rustc 以外の周辺ツールが壊れてしまうような変更もちょくちょく入ったりするので、タイミングによっては visual studio codeプラグインがまともに動けなくて辛いことがあります。

例えば、昨年末は rls が壊されていたので、VScodeプラグインはこんなエラーを吐いていました。

> Executing task: rustup component add rls --toolchain nightly-x86_64-unknown-linux-gnu <

error: component 'rls' for target 'x86_64-unknown-linux-gnu' is unavailable for download for channel 'nightly'
Sometimes not all components are available in any given nightly. If you don't need the component, you can remove it with:

    rustup component remove --toolchain nightly --target x86_64-unknown-linux-gnu rls

そんなときは、壊れていない少し過去のバージョンを明示的に指定して使うように設定すれば回避が可能です。

  • 壊れていないバージョンを見つける
  • 固定バージョンを使用するように指定する
    • 指定方法1:rust-toolchain.toml ファイルを作成
    • 指定方法2:rustup override を使用する
    • 指定方法3: VScode で設定する
    • 指定方法4: デフォルトのツールチェインを変更
  • 結局どの方法で指定すれば良い?
  • 参考
  • 近況
続きを読む

SciPyとその仲間たち(NumPy, IPython など)の違いと関係

python でちょっとした信号処理をしたくて、存在だけは以前から知っていた numpy に手を出したので、関連パッケージなどをまともに調べてまとめました。(ある程度素人の主観が入っているので、鵜呑みにしないように)

SciPy

総本山: http://www.scipy.org/

語源は Science + Python で、発音は "Sigh Pie(サイパイ)"。

今日の記事で挙げる各種ソフトの組み合わせによって実現されている、Python ベースの数学・科学技術計算用ソフトウェアエコシステムの名称。つまり、個別のソフトではなく、その集合体による計算環境のこと。乱暴にざっくり言ってしまえば、「Mathmatica や Matlab に代わる環境を Python でつくろうプロジェクト」 が SciPy。

なお、SciPy のコアパッケージの1つに、後述の SciPy library があり、そちらを指して SciPy と言うことも多い(というか大抵そっち)ので文脈で判断を。

続きを読む

純 Python で C のライブラリを呼び出す(Linux inotifyを例に)

Python は Batteries included 哲学のもと、豊富なモジュールが標準で組み込まれていますので、大抵のことは標準モジュールを使えばできますし、そうでなくても、どこかの誰かが Python binding を作ってくれているはずですので、Cのライブラリを直接呼び出すような必要はほとんどありません。

ただ、今回、Cのコンパイル無しに(≒モジュールの追加インストール無しに) inotify を使いたい、という事情があり、直接 libc を呼び出す binding を作りました。コード自体はすごく簡単なのですが、概念が若干わかりにくかったので、今日の記事はその備忘録です。

ctypes と struct を使う!

続きを読む

RewriteRule を .htaccess に記述する際の罠

先日、ちょっとやりたいことがあり、 mod_rewrite を使ったのですが、うまく動かなくてapache の mod_rewrite のドキュメントを確認したところ、意外な罠があったのでそのメモです。

私がやろうとしたのは以下のようなものです。

  • myapp ディレクトリのなかに .htaccess と test.py がある
  • http://www.example.com/myapp/q/param へのアクセスを http://www.example.com/myapp/search.py/param と書き換えて、 search.py に PATH_INFO として "/param" が渡るようにする

最初に書いた失敗例の .htaccess はこんな感じです。

RewriteEngine on
RewriteRule ^q/ search.py/$1 [L]

で、結局正しい記述はこう。

RewriteEngine on
RewriteBase /myapp/
RewriteRule ^q/ search.py/$1 [L]

あ、それは知ってる、って人もいるとは思いますが、これ、PATH_INFO じゃなくて、パラメータとして渡す場合は、RewriteBaseを書いていなくても大丈夫だったりと、意外と複雑なトリックが隠されています。

.htaccess では RewriteRule の挙動が変わる

続きを読む

CentOS 5 に Python 2.6 & PIP を導入(EPELリポジトリの利用)

我が家には CentOS 5 で動作しているサーバーがいるのですが、そいつに新しいことをやらせたくて、Python 環境をアップグレードしようとしたので、今日はそのメモです。

CentOS 5 は Python 2.4 が標準となっていますが、PIP以前ネタにした setuptools の上位版のようなもの)は、2.6以降にしか対応していません。 CentOS のオフィシャルなリポジトリには Python のアップデートはありませんので、今回は EPEL リポジトリを有効にしてそちらから Python 2.6 を入れ、その上で easy_install と PIP を導入しました。

続きを読む