nokの雑記

技術的な内容にしようと思ったけど無理でした。

Ubuntuで拡張子関連付けがうまくいかないのでupdate-desktop-databaseをしたけどコケる

Sublime-textがOpen withのリストに出てこないので登録できないものかと思って調べていたらこんなページが。

askubuntu.com

これ幸いと回答を見ると、解決手順が2つにわかれています。

  1. /usr/share/applications/sublime_text.desktop~/.local/share/applications/sublime_text.desktopにコピー
  2. sudo update-desktop-databaseを実行

これらのうち、1番目についてはすでに~/.local/share/applications/sublime_text.desktopにファイルがあったので省略し、2を実行したらこんなエラーが。

$ sudo update-desktop-database 
Error in file "/usr/share/applications/evince-previewer.desktop": "" is an invalid MIME type ("" does not contain a subtype)
Error in file "/usr/share/applications/evince.desktop": "" is an invalid MIME type ("" does not contain a subtype)

2つのファイル(両方ともevinceなるものに関連)でエラーが出ているようです。これも調べるとちゃんと情報が出てくるんですね。先駆者すごい。

ubuntuforums.org

こちらを見ると、ファイル内に邪魔なセミコロンがあってエラーが出るようです。該当のファイルを開いてみるとこんな感じで、ちょうどカーソルの位置に邪魔なセミコロンがあります。これを消したら2のコマンドが通るようになりました。

f:id:nok0714:20171103170314p:plain


ちなみに~/.local/share/applications/sublime_text.desktopはランチャーにロックしたときに自動で生成されるものだったので中身がめちゃくちゃでした。結局1のコピーをやり直しましたとさ。

AnkerのSoundCore Boostを暫く使っての所感

発売後すぐに買いました。

tl;dr

  • ここが良いよ
    • 触り心地のよいラバー&布筐体
    • 意外と便利なBassBoost
    • 値段の割に良い音質
    • 防水
  • もうひと声欲しかったポインツ
    • 曲送り/戻しに専用のボタンはない
    • AUXポート、USBポートの蓋が開けづらい
    • BassBoostは良い方向にも悪い方向にも働く
    • 防水だからって風呂で使ったりすると布部分が……
  • これ仕様?それとも不具合?
    • 満充電にならない

Amazonのリンクはこちら↓

買った背景

 BluetoothスピーカーはSony SRS-X1を使っていたのですが、もう少し音に余裕が欲しいなあと思って新しいものを探していました。ステレオ再生ができるのも条件ですね。

外観

 黒いです。上面下面はラバーとなっていて、側面は布張りです。中々触り心地が良いので所有欲を満たせます。大した価格ではないんですが。
 コントロールは上面に位置しています。電池残量のインジケータ、電源ボタン、BassUpボタンにはLEDが仕込まれています。ボタン類は順に電源、音量マイナス、再生、音量プラス、BassUpとなっています。
 側面には一カ所突起というかタグ様になっている部分があります。ここを引くと外部入力(3.5mmジャック)、充電用microUSBポート、給電用USBポートがこんにちはします。給電用USBポートがあるということはつまりモバイルバッテリとして動作することを意味します。プレイヤーのバッテリが怪しくても安心!正直使わん……。あとこの蓋が結構硬いので開けづらい。

 最初は物凄く籠もった音を出していたので「は?」と思ったのですが、しばらく再生を続けていたらそれなりによく抜ける音になりました。価格からしたら十分な音質だと思います。
 多分この価格帯にはよくあるボーカルをちょっと押し出した感じの音です。ついでにギターとスネアドラムの音も押し出されてます。曲単位で相性の良い悪いがあるようで、かなり綺麗に鳴る曲と籠もった音になる曲に分かれます。
 外観のところでボタンの存在については触れましたがこのスピーカ、BassUpなる機能がついています。名前の由来でもありますね。BassUpボタンを押すと低音域が強調されます。ドムドムうるさい感じになるわけではなく、自然に持ち上げるような挙動です。うおおベースが聞こえるううう。ただし曲によっては効果はまちまちで、オンだと不自然にドラムが強調される曲もあります。必要に応じてオンオフした方が良いでしょう。

機能

 SRS-X1を使っていて非常に便利だったのでNFCの存在がありがたいですね。ただしNFCの動作についてはSRS-X1と異なっていて、電源オフの状態でNFCポートに端末を近づけても電源が入りません。そのまま接続に失敗します。個人的にはこの仕様がけっこう不満です。タッチするだけで電源オン&接続の動きをしてほしかった。
 SRX-X1と同様にスプラッシュプルーフ程度の防水性能があるので、お風呂でも使えます。ただ布部分が水を吸うと乾かすのが面倒です。音も籠もります。
 ここはSRS-X1と大きく違うのですが、曲送り/戻しは再生ボタンの2度押し、3度押しで対応します。専用のボタンがほしかったなあ。

その他

 しばらく使っていて気づいたのですが、充電してもなぜか満充電になりません。満充電だ!と思ってケーブルを抜いて起動すると,4つある電池残量LEDが3つ点灯した状態でスタートします。 どのAC-USBアダプタを使っても同じ挙動になってしまうので、故障かと思ってサポートに連絡し交換してもらいましたが、交換機も同じ挙動だったのでもう仕様だと思います。
 動作そのものに異常はないのでこれ以上クレーマーみたいなことをするつもりはありませんが、精神衛生によくない……

Macでplist経由の自動起動を切ろうとした話

td-agentを使っていたのですが,自動起動させたくないので設定を見直したらちょっとハマった話.
たぶん他の.plistでも効くと思われます.

よもやま

td-agent.plistの場所はこちらでした.

/Library/LaunchDaemons/td-agent.plist

起動と停止はこちら.
(起動)sudo launchstl load /Library/LaunchDaemons/td-agent.plist
(停止)sudo launchstl unload /Library/LaunchDaemons/td-agent.plist

本題

まずはファイルを見てみましょう.こんな感じ.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>td-agent</string>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/td-agent/usr/sbin/td-agent</string>
    <string>--log</string>
    <string>/var/log/td-agent/td-agent.log</string>
    <string>--use-v1-config</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/opt/td-agent</string>
</dict>
</plist>

自動起動をしないときはRunAtLoadの下にある<true/>から<false/>にしたらOKと思ったら,ダメでした.
実は上の方に記述されているKeepAliveが<ture/>の場合,システムはこのデーモンをなんとか起動し続けようとするらしいです(killしてもすぐに復帰するとか).

なので,KeepAliveとRunAtLoadの<true/>を両方とも<false/>にしたら解決しました.

matplotlibのfigureオブジェクトをpickleで再利用しようとしてハマった話

備忘録がてら……

tl;dr
pickle化するならfig.show()の前にやる.

参考 stackoverflow.com

やりたかったこと

matplotlibのfigオブジェクトをpickleでダンプする → あとで読み込んで再利用する
(一応plt.show()のウィンドウで拡大縮小できるし,軸いじったりしたいし)

やったこと&おきたこと

やったこと

(i)python3.5.2(Anaconda; win32)で試したコード

スクリプト1

import matplotlib.pyplot as plt
import pickle

fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

ax1.plot([1,2,3],[3,2,1])
ax2.plot([1,2,3],[1,2,3]) 

fig.show()

# あとで使うために保存
with open("./myfig.pkl", "wb") as f:
    pickle.dump(fig, f)

スクリプト2

import matplotlib.pyplot as plt
import pickle

# スクリプト1で保存したものを読み込み
with open("./myfig.pkl", "rb") as f:
    fig = pickle.load(f)

fig.show() # スクリプト1と同じものが表示されるはず

おきたこと

ipythonで順番に打ち込んでいくと出てくるエラーはこちら.まあとにかく表示できない.

In [4]: fig.show()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\hoge\Anaconda3\lib\site-packages\matplotlib\figure.py in show(self, warn)
    380         try:
--> 381             manager = getattr(self.canvas, 'manager')
    382         except AttributeError as err:

AttributeError: 'NoneType' object has no attribute 'manager'

対処

pickle化をfig.show()の前に行うだけ.スクリプト1は以下のようになる.

import matplotlib.pyplot as plt
import pickle

fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)

ax1.plot([1,2,3],[3,2,1])
ax2.plot([1,2,3],[1,2,3]) 

# fig.show()の前に保存する!
# あとで使うために保存
with open("./myfig.pkl", "wb") as f:
    pickle.dump(fig, f)

fig.show()
P.S.

今回の図はこんな感じでした. f:id:nok0714:20170413140253p:plain