イヤホンのイヤーピースを買った

  • 概略

イヤホン Ultimete Ears Metro.fi 220 のイヤーピースをなくした.
純正でない SONY のイヤーピースを買った.
別のイヤホン Jabra VOX が気になってしまった.

  • 詳細

イヤホンのシリコンイヤーピースが片側だけ脱落してなくなっていたので,かわりになるイヤーピースを買った.
イヤホンは UltimateEars の Metro.fi 220 だろうと思う,Metro.fi 170 と同じ形みたいなので区別できない.イヤーピースを変えるにあたって,形が同じようなのでどちらでもいい気分だ.

イヤーピースが無くなったのは少し前だったのだが,今まではイヤホンに付属していた低反発素材のイヤーピースをつけていた.最近になって家電量販店に行ってイヤホンを試す機会があり,シリコンイヤーピースで音楽を聴き,低反発素材のものよりもシリコンイヤーピースのほうが自分の好みであると気づいた.

UE が Logicool に買収されていることも今回イヤーピースを買うときに調べて知った.そしてどうやら Metro.fi 220 の純正イヤーピースは Logicool で販売している(していた?)らしいということが分かった.家電量販店に純正イヤーピースを探しに行ってからインターネットを検索し, store.logicool.co.jp に行き着いたのだがサイトが存在しているのかどうか怪しい状態だった.

よって,互換性のあるシリコンイヤーピースを探すことになった.
こちらの
Ultimate Ears Metro Fi220 ちょっとレビュー - RemのDigitalCaravan < http://blog.goo.ne.jp/remmaya/e/3ceebfb80871119d59ec3ab442e89c74 >
を参考に SONY のハイブリッドイヤーピース(品番EX-EP***)を探すことにした.結局買ったのがスペアーイヤーピース(品番EP-EX11M)というものだ,この製品のパッケージには「ハイブリッドイヤーピースモデル専用」と書いてあったので分かりやすかった.

イヤーピースを探しつつ試し聴きしたイヤホンで Jabra VOX というものがすごく心に残ってしまったので近いうちに買ってしまいそう.リモコンつきの4線ジャックはうまく聞こえなかったりすることがあるから避けるという習慣があるにもかかわらず…….

Ultimate Ears MetroFi 220 MF220 ...
Ultimate Ears
 

プライバシーについて

Python の数値計算ライブラリで固有ベクトルを求める

そうだ! 固有ベクトルを求めよう!

SymPy で求めよう.

import sympy
matrix = sympy.Matrix([[1,1,2],[0,2,-1],[0,0,3]])
matrix
matrix.eigenvals()
matrix.eigenvects()

出力

Matrix([
[1, 1,  2],
[0, 2, -1],
[0, 0,  3]])

{1: 1, 2: 1, 3: 1}

[(1, 1, [Matrix([
[1],
[0],
[0]])]),
 (2, 1, [Matrix([
[1],
[1],
[0]])]),
 (3, 1, [Matrix([
[1/2],
[ -1],
[  1]])])]

NumPy で求めよう.

import numpy
matrix = numpy.array([[1,1,2],[0,2,-1],[0,0,3]])
matrix
(vals,vects) = numpy.linalg.eig(matrix)
(vals,vects)

出力

array([[ 1,  1,  2],
       [ 0,  2, -1],
       [ 0,  0,  3]])

(array([ 1.,  2.,  3.]),

 array([[ 1.        ,  0.70710678,  0.33333333],
       [ 0.        ,  0.70710678, -0.66666667],
       [ 0.        ,  0.        ,  0.66666667]]))

SciPy で求めよう.

import scipy
from scipy import linalg
matrix = scipy.mat([[1,1,2],[0,2,-1],[0,0,3]])
matrix
linalg.eig(matrix)

出力

matrix([[ 1,  1,  2],
        [ 0,  2, -1],
        [ 0,  0,  3]])

(array([ 1.+0.j,  2.+0.j,  3.+0.j]),

 array([[ 1.        ,  0.70710678,  0.33333333],
       [ 0.        ,  0.70710678, -0.66666667],
       [ 0.        ,  0.        ,  0.66666667]]))

SymPy では固有値が何重の解になっているか,も一緒に出してくれた.
NumPy では固有ベクトルを正規化して出してくれた.
SciPy では複素数の範囲で固有値を探してくれ,固有ベクトルを正規化して出してくれた.
あと,NumPy と SciPy はインデントつけて出してくれたので見やすい.

数値,文字,文字列リテラルを使わずHello World

「数値,文字,文字列リテラルを使わずに Hello World を出力」するという問題があったらしいのでやってみた.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
     
class Hello:
    def __init__(self):
        pass
     
class World:
    def __init__(self):
        print Hello.__name__, World.__name__
     
hello = World()

9月30日追記
別にクラスでやる必要もなかった

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def World():
    pass
def Hello():
    print Hello.__name__, World.__name__
Hello()    

pygame を使ってスライドショー

なぜかwindows標準らしきスライドショーの開始が数十秒かかるようになってしまっていて,使い勝手が悪い.なので画像を一定間隔で表示するだけのスライドショーを作った.ディレクトリを選択する機能はつけなかったのでスクリプトと同じディレクトリのファイルを読み込んで表示する.
画像以外のファイルも表示しようとするので,その場合は間隔が不等になることに今気付いた.まあいいや.

ディスプレイの解像度を取得する部分は
なんかいろいろこんぴゅーたかんけいのなぐりがき - python ctypesでディスプレイの解像度を取得する(win32)
を参考にして,ウィンドウを表示する位置については
pygameでウィンドウ位置の保存と復元 - tomoemonの日記
を参考にさせていただいたが,全画面表示で手抜きすることでその必要がなくなったので,後者はコメントアウトしておいた.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import pygame
import ctypes
import win32gui
from pygame.locals import *

def next_image(img_idx):
    img_idx += 1
    img_idx = img_idx%(len(gazo_list))
    try:
        img = pygame.image.load(gazo_list[img_idx])
    except:
        return img_idx
    img_size = img.get_size()
    if 1.0*img_size[0]/width > 1.0*img_size[1]/height:
        img_size_to = (width, int(1.0*img_size[1]*width/img_size[0]))
    else:
        img_size_to = (int(1.0*height*img_size[0]/img_size[1]), height)
    img = pygame.transform.smoothscale(img, img_size_to)
    img_rect = img.get_rect(center=(width/2,height/2))
    screen.fill(black)
    screen.blit(img, img_rect)
    return img_idx%(len(gazo_list))

def prev_image(img_idx):
    img_idx -= 2
    img_idx = img_idx%(len(gazo_list))
    img_idx = next_image(img_idx)
    return img_idx%(len(gazo_list))

dir_path = os.path.abspath(os.path.dirname(__file__))+"/"

gazo_list = os.listdir(dir_path)
for i in xrange(len(gazo_list)):
    gazo_list[i] = dir_path + gazo_list[i]

pygame.init()

size = width, height = ctypes.windll.user32.GetSystemMetrics(0), ctypes.windll.user32.GetSystemMetrics(1)

black = 0, 0, 0

#wm_info = pygame.display.get_wm_info()
#handle = wm_info['window']
#win32gui.MoveWindow(handle, 0, 0, width, height, 1)

screen = pygame.display.set_mode(size, pygame.FULLSCREEN)

img_idx = 0
last_time = 0
stop_toggle = 0

while 1:
    now_time = pygame.time.get_ticks()
    if now_time - last_time > 1000:
        last_time = now_time
        if(not stop_toggle):
            img_idx = next_image(img_idx)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == K_ESCAPE:
                sys.exit()
            if event.key == K_SPACE:
                stop_toggle = 0 if(stop_toggle) else 1
                last_time = pygame.time.get_ticks()
            if event.key == (K_RIGHT or K_DOWN):
                last_time = pygame.time.get_ticks()
                img_idx = next_image(img_idx)
            if event.key == (K_LEFT or K_UP):
                last_time = pygame.time.get_ticks()
                img_idx = prev_image(img_idx)

    font = pygame.font.Font(None, 30)
    text = font.render("Push ESC to EXIT.", True, (200,200,200))
    screen.blit(text, (0,0))
    text = font.render("Push ESC to EXIT.", True, (55,55,55))
    screen.blit(text, (0,20))
    pygame.display.flip()

Raspberry Pi に USB カメラを繋いでブラウザから動画を見てみた.(motion)

最初に mjpg-streamer で試した時は(おそらく)給電力不足で出来なかったのでセルフパワー USB ハブを買ってきて,なぜか mjpg-streamer ではなく motion というアプリで動画を見ることに挑戦した.セルフパワー USB ハブを使った際には mjpg-streamer でも動画を見ることが出来た(し,色んな所で電源の話題があった)ので給電力不足だと推測した.
今回は Webcam on RaspberryPi | Raspberry Pi Adventures を参考にした.

あとで PC の USB ポートからの給電で動かしたら動いたので,給電力不足じゃなかったかもしれない.

用意したもの

  • Wheezy Raspbian を導入した Raspberry pi
  • USB カメラ(uvc 対応*1のもの)
  • セルフパワー USB ハブ
  • USB-MicroB ケーブル

ちなみに Elecom UCAM-DLA200H を使った.

手順

lsusb コマンドで USB カメラが認識されているか確認する.
lsusb
motion をインストールする.
sudo apt-get install motion
設定ファイルを編集する.

nano だか vi だか vim だかなんでもいいので編集する.

sudo nano /etc/motion/motion.conf

どこかにある

control_localhost on
webcam_localhost on

control_localhost off
webcam_localhost off

にそれぞれ変更してください.

motion を実行してブラウザから確認する.
sudo motion -n

ブラウザから http://xxx.xxx.xxx.xxx:port にアクセスすると表示される.
xxx の部分は Raspberry Pi の IP アドレスを入れて, port には設定ファイルで指定したポートを入れる(デフォルトは 8081 で閲覧,8080 で操作)

設定

設定ファイルは /etc/motion/motion.conf なので英語の説明を読みながら編集できる.

daemon on

にしておくと Raspberry Pi 起動時に motion がバックグラウンドで起動する.

*1:USB 挿すだけ とか 一発認識 とか書いてある

Raspberry Pi に USB カメラを繋いでブラウザから動画を見てみた.(mjpg-streamer)

mjpg-streamer, motion, ffmpeg の三種類が代表的なアプリだそうだ.
mjpg-streamer というアプリを使うと簡単らしいのでそれを採用した.

http://www.teslasassistant.com/?p=97 を参考にしてそのまま実行した.
PC からの USB 給電で電流が足りなくてカメラが使えなかったり本体の電源が落ちたりすることがあるらしいのでセルフパワー USB ハブを使った.
セルフパワー USB ハブって高いのね.

あとで PC の USB ポートからの給電で動かしたら動いたので,給電力不足じゃなかったかもしれない.

用意したもの

Wheezy Raspbian を導入した Raspberry pi
USB カメラ(uvc 対応*1のもの)
セルフパワー USB ハブ
USB-MicroB ケーブル

ちなみに Elecom UCAM-DLA200H を使った.

手順

lsusb コマンドで USB カメラが認識されていることを確認する.
lsusb
mjpg-streamer が依存するパッケージ libv4l-dev, libjpeg8-dev と mjpg-streamer をコンパイルするのに必要なパッケージ subversion, imagemagick を導入する.
sudo apt-get install libv4l-dev libjpeg8-dev subversion imagemagick
mjpg-streamer をダウンロードしてコンパイルする.
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
cd mjpg-streamer/mjpg-streamer
make USE_LIBV4L2=true clean all
make DESTDIR=/usr install
mjpg-streamer を実行してブラウザから確認する.
mjpg_streamer -i "/usr/lib/input_uvc.so -d /dev/video0  -r 640x480 -f 30" -o "/usr/lib/output_http.so -p 8090 -w /var/www/mjpg_streamer"

ブラウザから http://xxx.xxx.xxx.xxx:port/?action=stream にアクセスすると確認できる.
xxx の部分は Raspberry Pi の IP アドレスを入れ,port には設定したものを入れる(上記では 8090 ).

設定

-i 以後の二重引用符部分が入力の設定で
-d: 入力デバイスの選択
-r: 解像度
-f: フレームレート
-y: YUYV 形式で撮影するかどうか(なければ MJPEG 形式)

-o 以後の二重引用符部分が出力の設定で
-p: ポートの設定
-w: 出力ディレクトリの設定

その他

<img src="http://xxx.xxx.xxx.xxx:port/?action=stream"> で埋め込みが出来る.

*1:USB 挿すだけ とか 一発認識 とか書いてある

Python os モジュールでファイル削除

何かのアプリケーションがログファイルをたくさん吐いていて,ファイルがいっぱいあった.どうせ読まないのでファイル名から判断して削除してもらうことにした.

import os
for root,dirs,files in os.walk("c:/directory/"):
    for _file in files:
        if("ファイル名" in _file):
            os.remove(os.path.join(root,_file))

もっといいやり方があるかな……なんて言う前に,せめて正規表現を使ってファイル名を判断しましょう.