Macbook proで内蔵サウンドデバイスが認識されなくなったときの解決法
アブスト
Macbook pro 13-inch(Touch barモデル)で内蔵サウンドデバイス(スピーカー,マイク両方)が突然認識されなくなった.SMCリセットというものを試したら直った.
経緯
使用環境は,Macbook pro 13-inch(Touch barモデル)に,外部ディスプレイでPhilipsの25インチを接続している.
このディスプレイは,USBハブ,Ethernetポート,スピーカー,USB-Cでの電力供給の機能を持っている.
キーボードとEthernetと電源給電を,ディスプレイとの接続であるUSB-C1本に相乗りさせて使っていた.
ある日,スリープ状態のままUSB-Cを抜いて持ち運んだら,復帰時に異常な時間がかかり,サウンドデバイスが認識しなくなった.
ディスプレイをつなげても,サウンドデバイスは内部・外部ともに何も認識しなくなった.
正解の解決策
SMCリセット(起動時control+shift+option+電源ボタン(TouchIDボタン)10秒→電源投入)
考察
SMCリセットで直った.SMCリセットは,蓋の開閉時の制御も司っているようなので,スリープ状態でいきなりUSB-Cを抜いてしまったときにこのあたりがバグったのではないかと推測される.
作業環境の見直し・整備
先週で一仕事終わってキリがよくなったので,作業環境のメンテナンスをしています.
先延ばしにしていたMacOSのアップデートにはじまり,ドローツールGraphicの購入,メモ管理サービスwri.peのお試しなど.
また,ずっと右画面左下に常駐している(放置している)ポモドーロテクニック用のツールもまた使おうと決意.
いつか,これらを振り返れればいいなと思います.
Jupyter notebookで.py形式でも保存したい(importされる側)
アブスト
Jupyter notebookでクラスを書いて,他のノートブック(.ipynb)からimportしたかった..ipynb形式のままではインポートできないようなので,.pyを出力してインポートすることになるが,Downloadするんじゃなくて同じ階層に生成さえしてくれればよかった.Jupyterのコマンドで解決した.
ノートブックにこのセルを作っておこう
import subprocess subprocess.run(['jupyter', 'nbconvert', '--to', 'python', 'ファイル名.ipynb'])
何をやってる?
コマンドラインで,
jupyter nbconvert --to python ファイル名.ipynb
を実行してるのと同じです.
これを,ipynb保存時に自動的に実行する方法がネットに色々落ちていますが,
毎回.pyを生成するのは遅いし必要ないと思ってセルで実装しました.
Jupyter notebook (IPython notebook)をリモートサーバ,ワークステーションで動かした
アブスト
Pythonでシミュレーションを組んで回すとき,メモリの関係でワークステーションで回す必要があった.普段使ってるJupyter notebookをワークステーション上で走らせ,自分の端末のブラウザから使えたら便利だなと思った.調べてやったらできた.
気をつけること
Jupyter notebookは,IPython以外も使えるように拡張されたものであり,設定ファイルはIPython notebookのものとは異なります.
おまけにqtconsoleも接続する
qtconsoleはIPythonのコンソールですが,すでに起動しているカーネルに接続することができます.これが何を意味するかというと,notebookでは決まった形で結果を表示しておいて,途中の変数や配列の一部を見たい時にqtconsoleでチョロっと眺めることができます.Jupyter notebookには選択部分を実行ってのがないので,「すぐ下にセル追加→ちょこっと実行→セル削除」ってやってた部分がなくなり捗ります.
bashで書く
#!/bin/bash scp ユーザー名@ワークステーション名:/Users/ユーザー名/Library/Jupyter/runtime/kernel* /tmp/qtconsole.json jupyter qtconsole --existing /tmp/qtconsole.json --ssh ユーザー名@ワークステーション名
実行するときは,上のコマンドをテキストエディタで書いてqtconsole.shとして保存し,ターミナルで
bash qtconsole.sh
とするなど.ファイル名は自由
使用感
どの端末からもJupyter notebookを開ける(iPhoneからも開けることは開ける)ので便利です.端末側はブラウザさえあればいいので環境も汚れません.
PythonのNumpyで複素数の相関係数を計算したかった
アブスト
Python3.5で@演算子による行列計算ができるようになった(y=A@x)
のを機に,Pythonで研究を進めた.
複素数をバリバリに扱う内容で,numpy.corrcoefに複素数を適当に突っ込んだら全く意図しない挙動を示した.
corrcoefが複素数に対応していないのかと思って自力で実装したりしたが,結局Pythonが悪いのではなく,自分が突っ込んだ数列がマズかった.
問題の挙動
以下のコードで確認できます.
import numpy as np
s1=np.array([1+1.0j,1+2.0j])
s2=np.array([1+1.0j,1+1.0j])
cor = np.corrcoef(s1,s2)
print(cor)
原因
信号のエネルギーが0だと,分散が0になり,結果0除算になってNaNになる.
上記の例ではs2が直流(信号のエネルギーは0)となっている.