カテゴリー
PC

Surface Go 2の充電

Surface Go 2 (Pentium 4425Y / 8GB/ 128GB)を買ったので、手持ちのUSB PD対応の充電器やモバイルバッテリーで充電してみました。

USB Type-C端子で充電しながら、USBテスタを中間に入れて充電時の電圧を測りました。電流についてはSurface側のバッテリーの減り具合にも依存することなので、充電器ごとに最大電圧とその電圧における最大電流値を示すにとどめておきます。

充電器結果電圧対応最大電圧/電流
Anker PowerPort Atom PD 2OK20V20V=3A
Anker PowerCore 10000 PD ReduxOK15V15V=1.2A
ミヨシ IPA-C01OK14.5V14.5V=2A
Anker PowerCore III Fusion 5000NG9V=2A

この調査から以下の事が分かりました。

  • USB PDでも、15Vや14.5V(Optional)以上が出力できるものでないと充電できない。12V(現在ではOptional)で充電できるかは不明。
  • 電圧は20V・15V・14.5Vの中から充電器が対応する最大のものが選ばれる。Surface Go 2に付属しているACアダプタ(Surface Connect端子用)は15Vであるが、USB Type-C端子を使えば20Vで充電できる。
  • 充電の経過に応じて電圧が切り替わったりはしない。
  • 充電器側で、電圧における電流値が少なくとも1.2Aあれば充電できる。USB PDにネゴシエーションがあることを考えると、ちゃんとSurface側で受け入れていると思われる。受け入れる最低電流値があるかどうかは不明。

余談ですが、発売日に予約したAnker PowerCore III Fusion 5000、Surface Go 2に充電できなかったので、この調査が終わった後に友達に売ってしまいました。15Vが出れば良かったのに。

参考文献:

カテゴリー
PC

iTunesで購入した曲の題名などがローマ字になった場合の対処方法

音楽の購入も管理もiTunesを使っているのですが、購入した曲の曲名や歌手名などが、稀にローマ字表記になっている事に気づきました。対処法を記します。

(2020/4/10現在の対処方法です。ググると昔の情報とかがヒットして、操作方法が違って戸惑ったので、自分で書くことにしました)

手順は3ステップです。

  1. 問題が発生した曲をiCloudライブラリから削除する。
  2. 削除した曲を購入済み項目に再び表示させる
  3. 購入済み項目から削除した曲を再ダウンロードする。

まず、問題が発生した曲をiCloudライブラリから削除します。

次に、削除した曲を再びダウンロードできるように、「購入済み」に表示させる操作を行います。

「アカウント」→「マイアカウントを表示」から、「iTunes in the Cloud」内の「非表示の購入済みアイテム」で「管理」をクリックします。

先ほど削除した曲(アルバム)が表示されていると思うので、「表示する」をクリックします。

これで曲が再びダウンロードできるようになりました。

ダウンロードします。まず「ストア」の「購入済み」を選択します。

先ほど削除した曲(アルバム)があるので、雲マークをクリックしてダウンロードします。

確認します。曲名が日本語表記に戻りました。

カテゴリー
PC

Pythonで標準エラー出力を潰した後は、例外のログを取りましょう

Pythonを使っているときに、ログを取るのを怠ってエラーが見つからずに苦労したので、ちゃんとログを取りましょう、という話です。(Pythonに慣れている方には、おそらく常識レベルの話だと思います)

普通に処理をしている場合は、予期しない例外が発生すると標準エラー出力に例外のスタックトレースが出力されます。しかし、標準エラー出力を潰した後はスタックトレースが出力されません。

以下のような場合に問題になります。

  • daemon化する場合
  • スレッドを実行する場合

順に説明します。

daemon化する場合

double forkによるdaemon化については、Pythonでは以下のページの例のように行います。

Double forkによるプロセスのデーモン化と、ファイル変更時の自動サーバーリロードの実装 (Python)

この場合、標準エラー出力が潰されているので、 daemon化した後に例外が発生しても、 例外のスタックトレースはどこにも出力されません。

以下のようにすると、例外のログがloggerで出力できます。

def main():
    logger = getLogger()
    handler = FileHandler("./test.log")
    logger.addHandler(handler)

    daemonize() # double forkした後に標準エラー出力を潰す

    try:
        do_process() #ここで例外が発生したら、下のexceptでキャッチする
    except Exception as e:
        logger.exception("Exception {0} occured".format(e))

    

スレッドを実行する場合

さらに、daemon化してからスレッドを実行する場合、親スレッドのtry-exceptではスレッド内での例外は捕捉されず、例外のスタックトレースはどこにも出力されません。 スレッドのrun()で、例外を捕捉してログを出力する必要があります。

class TestThread(threading.Thread):
    _logger = getLogger(__name__)

    def run(self):
        try:
            self._do_process() #ここで例外が発生したら、下のexceptでキャッチする
        except Exception as e:
            self._logger.exception("Exception {0} occured".format(e))

def main():
    logger = getLogger()
    handler = FileHandler("./test.log")
    logger.addHandler(handler)

    daemonize() # double forkした後に標準エラー出力を潰す

    try:
        thread = TestThread()
        thread.start() # thread.run()で例外が発生しても、このtry-exceptでは捕捉できない
    except Exception as e:
        logger.exception("Exception {0} occured".format(e))

そんなこんなでうじゃうじゃ。

カテゴリー
FreeBSD

zvol内のNTFSデータをマウントする方法

FreeBSDのzpoolの機能であるzvolを使ってボリュームを作り、そのボリュームをiSCSIを使ってWindowsマシンに公開しています。ボリュームの中のデータをFreeBSDから取得したい時の方法を調べたのでメモします。

要点は2つ。

  • zvolのディスクイメージをマウントしたい場合は、ボリュームをsnapshot→cloneした上でvolmode=geomを使う
  • NTFSのマウントには、ntfs-3g (fusefs-ntfsパッケージ) を使う

zvolのディスクイメージをマウントする方法

zvolをマウントするには、GEOMベースのツールが使えるように、ボリュームのプロパティを volmode=geom にする必要があります。

ただプロパティを変えただけではダメで、変えた後に再起動するか、snapshotを作った上でcloneし、cloneする際にプロパティを指定する必要があります。今回は後者で。

# zfs snapshot raidtank/iscsi/windows_disk@snap
# zfs clone -o volmode=geom raidtank/iscsi/windows_disk@snap raidtank/iscsi/windows_disk_clone

ここまでやると、 /dev/zvol/raidtank/iscsi/windows_disk_clonep* ができます(ボリューム内のディスクラベルに応じて)。

NTFSのボリュームをマウントする方法

NTFSのボリュームをマウントするには、fusefs-ntfsにあるntfs-3gを使います。

fusefs-ntfsをインストールしたら、

# ntfs-3g -o ro /dev/zvol/raidtank/iscsi/windows_disk_clonep2 /mnt

なお、fusefs-ntfsのインストール後に、/usr/sbin/mount_ntfs-3gというシンボリックリンクを手動で作った場合でも、「mount -t ntfs-3g (以下略)」ではなぜか失敗します(zvolだから?)。

参考文献

カテゴリー
雑記

誕生日特典一覧 (随時更新)

今月誕生日なんですが、会員登録しているサイトから「誕生日の貴方にx%引きクーポン!」みたいなのが来るので、せっかくだからまとめてみます。

  • yoyaq.com: 7000円(税込)以上で1000円引き
  • ショップジャパン: 20%引き
  • EPARKリラク&エステ: 3000円引き
  • 東京シャツ(Yシャツ屋さん): 実店舗で500円引き
  • ケンコーコム: 5000円(税込)以上で8%引き
  • じぶん銀行: 1ヶ月ものスイッチ円定期預金、年利3%で31日間運用した金額を追加
  • セブンネットショッピング: 1000円以上で100nanacoポイント
  • JINS: オンラインショップで30%引き
  • ユニクロ: 5000円(税抜)以上で500円引き
  • とらのあな: 500円(税込)以上で8%引き
  • アニメイト: オンラインショップで1点10%引き
  • ココス: 誕生日の飲食代10%引き
  • IKEA: 2000円(税込)以上で500円引き
  • ドミノピザ: 3500円(税込?)以上で1000円引き(28日以内なら何度でも)
  • キネゾー: 映画1回1400円
  • GAP: 実店舗で定価品50%引き、オンラインショップで1000円引き(それぞれ1回)