locale の設定ができない (Debian で)
背景
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
みたいなエラーが出て、困った。
解決方法
$ sudo apt install locales
にて locales パッケージを入れておいてから、
/etc/locale.gen
をrootで編集し、入れたい ja_JP.UTF-8 などのコメントを外し、
sudo locale-gen
を実行し、shell を再起動。
pipenv で python のバージョンアップデート
背景
たまにするけど、一度したらもう忘れてしまう pipenv でのpython のアップデート手順。
手順
- python をpathが通るところにインストール
こんな感じの設定で configure しました。
./configure --with-ensurepip --enable-optimizations
- Pipfile の python_version をアップデートしたいバージョンに書き換え
以下のようなところ
[requires] python_version = "3.8"
- 次のコマンドを実行(アップデートしたいバージョンを指定する)
pipenv --rm pipenv --python 3.10 pipenv install
おしまい。
参考
ネットワーク上のRICOHのプリンタにMacOS 13から印刷する
背景
年末調整に必要なPDFファイルを会社のプリンタで印刷したい。 ところが、プリンタ(RICOH MP C2504)の設定はよくわからない。
方法
ドライバー
まず、ドライバをインストール。
自分の場合こちらから。 製品:RICOH MP C2504 / ダウンロード | リコー
IPアドレス
ネットワーク上のプリンタのIPアドレスを調べる。普通はプライベートIPアドレス。
MacOSでの設定
- 環境設定から、プリンタを開く。
- プリンタの追加を選ぶ。
- インターネット(地球みたいな形)のアイコンをクリック
- アドレスにさっき調べたIPアドレスを設定
- LPDを選択
- キュー名があるなら設定(普通は空欄でOK)
- ドライバが勝手に選ばれるはずだが、自分で選ぶ
まとめ
選択すべきはLPD。説明書などには、PPDファイルがどうのこうと書かれているが無視しよう。
拡大推計とはHorvitz–Thompson推定量のこと
M1 mac で sdカードの消えた写真を無料で復活させるまでの長い道のり
背景
- 運動会で撮った (micro) sdカードが読み取れない!
- 無料(Free)と書いてある全てのソフトが有料だった!
- TestDiskというコマンドラインだけど無料のソフトが見つかった!
- M1 Macに対応していない(涙 イマココ
方法
準備
git clone https://git.cgsecurity.org/testdisk.git
Install を読むと、Xcodeが必要と書いてあった。 開発マシンという名目のマシンに今更Xcodeをインストール(ダウンロードに結構時間がかかる)
$ autoreconf --install -W all -I config zsh: command not found: autoreconf
aotoreconf 入っていないエラー。そんなコマンド名20年ぶりに聞いたよ。
$ brew install autoconf automake
build
(本当は作業用のディレクトリで作業するのかもしれんが)
$ autoreconf --install -W all -I config $ ./config $ make $ sudo make install
色々警告が出ていたかもしれない(数百行以上)が、 インストール完了。
こうなっていたら無事インストールされている。
$ ls /usr/local/bin fidentify photorec testdisk
本当必要なのは、photorec コマンド
適当な保存ディレクトリを作成しておく。
次のコマンドで対象となるデバイス(パーティション)を(サイズなどをヒントに)選び、抽出開始。
sudo photorec
結構時間がかかる(1時間くらい?)
まとめ
一月1万近いサブスクリプション費用を払わずに済んだ。Freeといっているのに、Freeじゃないから、サブスクリプション費用を払っても、Pro買えみたいな詐欺の可能性もあるので、1万円よりもっと高かったかもしれない。(まとめじゃない)
wordle をruby のワンライナーでズルする
背景
wordle をエンジニアっぽく ruby のワンライナーでズルしたい
戦略
- /usr/share/dict/words を使う
- ヒントから可能性のある単語のリストを抽出する。ヒントがない場合は5文字の全単語。
- もし単語が一語であればそれが解で終了。
- そうでない場合、その可能性のある単語のリストから頻度の高いアルファベットを抽出し、
- それらのアルファベットを含む語彙を全体の単語のリスト(可能性のある単語のリストではない)から見つけ出して使う。
- これを繰り返す。
方法
5文字単語のリスト
$ ruby -ne 'puts $_ if $_=~/^[a-z]{5}$/' < /usr/share/dict/words
本当は複数形を除きたいし、コーパスなどから出現頻度を求めたいが、今後の課題ということで。
どのアルファベットが最も多く出現するか
$ ruby -ne 'puts $_ if $_=~/^[a-z]{5}$/' < /usr/share/dict/words | ruby -ne 'BEGIN{$w=Hash.new(0)}; $_.chomp.chars.each{|x|$w[x]+=1}; END{puts $w.sort_by{|_,v|-v}.to_h;}' {"a"=>4467, "e"=>4255, "r"=>3043, "o"=>2801, "i"=>2581, "s"=>2383, "t"=>2381, "l"=>2368, "n"=>2214, "u"=>1881, "y"=>1605, "c"=>1546, "d"=>1399, "h"=>1323, "m"=>1301, "p"=>1293, "b"=>1162, "g"=>1102, "k"=>882, "w"=>685, "f"=>661, "v"=>466, "z"=>250, "x"=>189, "j"=>163, "q"=>84}
特定のアルファベットが含まれる単語
下記の場合、["a", "e", "r", "o", "s"]の5つのアルファベットが含まれる単語を抽出。
$ ruby -ne 'puts $_ if $_=~/^[a-z]{5}$/' < /usr/share/dict/words | ruby -ne 'puts $_ if "aeros".chars.all?{|x| $_.chomp.chars.include?(x)}' arose
特定の位置に特定のアルファベットがあり、かつ、特定のアルファベットが含まれない単語を抽出
下記は、a_o__ である単語で、"r", "s", "e" が含まれない語彙のリスト。
$ ruby -ne 'puts $_ if $_=~/^a[a-z]o[a-z]{2}$/' < /usr/share/dict/words | ruby -ne 'puts $_ if "rse".chars.all?{|x| not $_.chomp.chars.include?(x)}' abody ... ... azoxy
その、アルファベットの頻度
$ ruby -ne 'puts $_ if $_=~/^a[a-z]o[a-z]{2}$/' < /usr/share/dict/words | ruby -ne 'puts $_ if "rse".chars.all?{|x| not $_.chomp.chars.include?(x)}'|ruby -ne 'BEGIN{$w=Hash.new(0)}; $_.chomp.chars.each{|x|$w[x]+=1}; END{puts $w.sort_by{|_,v|-v}.to_h;}' {"o"=>52, "a"=>51, "l"=>16, "n"=>14, "y"=>13, "d"=>11, "t"=>11, "i"=>9, "m"=>8, "c"=>7, "b"=>6, "f"=>6, "g"=>6, "z"=>5, "h"=>5, "p"=>5, "u"=>4, "x"=>3, "w"=>1, "k"=>1, "v"=>1}
"o", "a" は既出なので、"l", "n", "y", "d", "t" が含まれる単語を抽出したい。
特定の位置に特定のアルファベットがあり、かつ、特定のアルファベットが含まれず、かつ、どこかに特定のアルファベットが含まれる単語
下記は、a_o__ である単語で、"r", "s", "e", "i", "n", "y" が含まれず、どこかに"l", "t"が含まれる単語
$ ruby -ne 'puts $_ if $_=~/^a[a-z]o[a-z]{2}$/' < /usr/share/dict/words | ruby -ne 'puts $_ if "rseiny".chars.all?{|x| not $_.chomp.chars.include?(x)}' | ruby -ne 'puts $_ if "lt".chars.all?{|x| $_.chomp.chars.include?(x)}' a?o?? a?o??
敢えて隠しました。どっちかは運と思います。 自分は運に負けました。
まとめ
どっちも知らない単語。
追記
修正版
最近ではこんな感じ。(情報量導入)
$ ruby -ne 'puts $_ if ($_=~/^[^a][^r][^o]..$/ and "se".chars.all?{|x| not $_.chomp.chars.include?(x)} and "aro".chars.all?{|x| $_.chomp.chars.include?(x)})' < wordles.txt | ruby -ne 'BEGIN{$w=Hash.new(0);$t=0}; $_.chomp.chars.uniq.each{|x|$w[x]+=1.0};$t+=1; END{puts $w.map{|k,v|[k,v/$t]}.map{|k,p| [k, -p*Math.log(p) + (p==1.0 ? 0 : -(1-p)*Math.log(1-p))]}.sort_by{|_,v|-v}.to_h}'
4文字の組み合わせを含む単語を見つける。
ruby -ne '"pvbwcdy".chars.combination(4).to_a.each{|y| puts $_ if ($_=~/^.....$/ and y.all?{|x| $_.chomp.chars.include?(x)})}' < wordles.txt
wordle の語彙は次でダウンロード
curl https://slc.is/data/wordles.txt
linux で文字化けしたときにやることメモ
背景
毎度Linuxを始めに使うとき文字化けしてググっているのでメモ。日本語を使わないという選択肢もあるけど、データの中身が日本語だったりすると、結局やらなくちゃいけないことになる。
方法
locale コマンドで確認
$ locale -a
すると、こんな感じで日本語入っていない。(WSL2の場合)
locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_COLLATE to default locale: No such file or directory C C.UTF-8 POSIX en_US.utf8
locale.gen を編集
$ sudo vi /etc/locale.gen
で、
ja_JP.UTF-8 UTF-8
のコメントを外す。
locale-gen の実行
$ sudo locale-gen
これで有効化されるはず、念の為、locale -a
などで確認
まとめ
文字化けしたときに思い出したいコマンド locale