久々にメインPCを自作機に変更
実は前々から計画はしていたのですが、資金も余裕があったのでメインの環境を自作のデスクトップに変更しました。
2年前に購入したHP Pavirion notebook dv4a/CTでもまだ余裕といえばそうだったのですが、事務所から22インチのモニタを2台譲り受け(一応保管する名目)たのもありますが、ノートPCの解像度が低くて解像度の高いモニタを2枚置く事を考えいましたので。まあそのノートPCがソフマップでそれなりの買値になったので・・・げふんげふん(汗、つまり差し引きゼロを狙った面
あと拡張性はやっぱり欲しいなと思ったのと、ネットワークをギガビットに対応してこうと計画していたので(微笑
久々の自作なので、なんとなく作成記録を作る
久々だったので、メモリのさし間違いや、ATX 12Vコネクタを挿し忘れたり、CPUを落としてピンを曲げたりしましたがなんとか動かせました。
環境としては、コードを描いたり音楽聞いたりネットする程度なので、
- CPUはデュアルコアで静音にできれば
- メモリは前環境と変わらず4GB
- 内蔵グラフィックボードでデュアルディスプレイ可能
こういう意味で、AMD環境のほうがコストパフォーマンスは優れていますのでそちらを選んでいます。
また、今後の拡張性も考えるべきなので、socketAM3とDDR3対応のマザーボードにしています。CPUはAMD AM3系一番安いやつですね。
メモリが一番高かったです・・・4GB環境は欲しかったの。でも購入当初より今はもっと値上がりしていますね。
HDDはシステムに500GBで、データは音楽程度しかない上にネットワークストレージもあるので増設はあまりしていません。もちろん自作なのでいくらでもつけれますね。
パーツ一覧
kakaku.comのリンクを載せておきます。
- サイコムで購入した自作PCのケース(中身は別のケースに入れてサーバ)
- ケース付属の電源
- OSは、ノートPCで使ってたWindows 7 Home Premiumのアップグレード版をライセンス移行して利用
コストパフォーマンスが優れてる
制作風景
あれ枚数少ない・・・
撮った程度でコメントを入れておきます(汗
CPUです。AMDはピンがCPUコア側にあるので、取り出しや取り付けが一番緊張しますね!
当然落としてピンを曲げましたよ!!
マザーボードです。ケースのインターフェースパネルが付属、PATAのケーブルとSATAのケーブルがそれぞれあります。フロッピーケーブルはなかったです。
いまどきフロッピーは要らないですよね。
CPUをマザーボードに入れるときはボード側のロックを上げて、差し込んで下げます。
リテールCPUファンの裏側には、予めそのまま使えるようにグリスがシート状についています。
焦って位置間違いをしないように注意。自分はこれが原因でCPUを飛ばしてピンを曲げて・・・
曲げた時に写真はとても取れなかった。値段はそれほどでなくても心臓に良くないなあ
ファンの電源をつけつけ
あとはマニュアルを見ながらケーブルを繋いていくだけです。最初はHDDやドライブ類は接続せずに、モニタとキーボード(USBでもok)を接続。
さて起動テスト・・・っとあれ動かない。うんともすんとも言わない。曲げたピンが頭を過ぎります。
数分見直して、マニュアルを見直すとやっぱり間違ってて、上に描いたメモリスロットの位置とATX 12Vコネクタをさし忘れる失態・・・
そして無事に動いたあとの状態。
すいません。内容がすかすかの制作風景でした :-(
ともあれ、ピンを曲げても戻せましたし、それ以外は特にトラブルらしいものもなく至って普通に作成終了
実際に使ってみて
22インチのモニタは2台並列して接続。デジタル+アナログでOKでした。
メモリはもちろん余裕があります。CPUもクロックが上がっているのでinkscapeが立ち上がり早かったりブラウザもキビキビ動いているように思います。
静音性は、ファンが近くにあったノートPCよりは案外悪く無いです。ただCPUファンは早く回りすぎなので、ユーティリティで制御する予定。
いい忘れていましたが、購入時の値段は27000円程度でした。安くて普通に動いて申し分ないPCです。
自作PCは
おまけ
ノートPC+メモリと使っていない物を書いとってもらいましたが、価格は3万円でした。黒字かよw
実はCPUファンも買う予定だったのですが、それはまた来月以降に考えるとして。あと忘れていたカードリーダーを入れなくては。
diveintopython 7章読書メモ
例によって個人的メモなので、見落としや誤解があるかもしれません。
気がついたら直します。
始まり始まり
今回は正規表現。知っている人はreモジュールのリファレンスを見れば大体できることはわかるそうです。
4.2 re -- 正規表現操作
正規表現 HOWTO
すっとばそうと思ったけど流し読みして気がついたことを上げてみます。
バックスラッシュの扱い
ある文字列が単語の最後にある場合で表現するときには「\b」を使う。
pythonでは\はエスケープシーケンスの意味(改行の\nを表すときに\を使うことをエスケープ)があるのでそのままでは使えない。
よって、「\」自体をエスケープさせるためにバックスラッシュを1つつけて「\\b」とする。
raw文字列
上記のバックスラッシュ病を回避するためには、pythonの文字列をraw文字列として扱うと良い。
文字列は「"text!\n"」で仕切るが、「r"text!\n"」とするとraw文字列として処理される。普通の文字列は"\n"で改行されるはずだが、raw文字列は"\n"がそのまま表示される。バックスラッシュもエスケープシーケンスの意味を持たなくなる。
raw文字列ってなんだろうって思ったけど、要は、文字列を見てpythonが決めている文字列定義を外して文字(コード)そのものを扱うって意味なのかなと理解した。
3. 形式ばらない Python の紹介
#Example 7.2. 全ての単語にマッチする >>> s ='100 BROAD' >>>re.sub('ROAD$' ,'RD.', s) '100 BRD.' >>>re.sub('\\bROAD$' ,'RD.', s) 1 '100 BROAD' >>>re.sub(r'\bROAD$' ,'RD.', s) 2 '100 BROAD' >>> s ='100 BROAD ROAD APT. 3' >>>re.sub(r'\bROAD$' ,'RD.', s) 3 '100 BROAD ROAD APT. 3' >>>re.sub(r'\bROAD\b' ,'RD.', s) 4 '100 BROAD RD. APT 3'
その他
あとローマ数字をチェックするとか、電話番号をチェックするとか書いてある。
ある文字の個数チェックとか、いくつかの文字のいずれかのマッチとか。まとめで大体わかります。
正規表現は奥が深すぎるのか、紹介程度な感じでした。
最後に1年前の自分に贈る言葉
正規表現はかなり強力ですが、すべての問題にたいして正しい解決法とは限りません。どの場合に使用するのが適切であるか、いつ問題を解決してくれるのか、いつ問題を解決するよりも問題を引き起こしてしまうのか、を知るためにそれについて十分よく学習しておくべきです。
問題に直面したときに、次のように思う人もいます。"よし、正規表現を使おう"2つの問題を抱えています。
- Jamie Zawinski, in comp.emacs.xemacs
なんか雑になってきたか
この先は各ライブラリの紹介やらが多そうでした。英語は今のところはがつがつ読める人でないので、ゆるりと見ていこうと。
diveintopythonはこの辺でひとまずお休みにして、いろんなソフトのコードを眺めて行きたいし、何か書きたい。
(まて、作ったもののメンテをしろよ。)
diveintopython 6章読書メモ
このメモは、diveintopythonの日本語訳を読んで、個人的にまとめたものです。
個人的に理解した内容なので劣化している部分があると思います。
はじまりはじまり
5章から1ヶ月放置していて若干抜けてます。
何となくやり方を変えて、基本的な説明と、気になったことの記録程度にします。
あんまり長いとキーボード打つのも面倒ですし
前回まではクラスを重点的にやりました。5と6章まででfileinfo.py の解説を網羅するそうです。
6章は、ファイルの取り扱いと、それに伴って必要になる例外処理のお話。fileinfo.pyの解説ではlistDirectory関数の解説を行い全てをまとめてる。
例外処理
Chapter 6. 例外とファイル操作
pythonの例外処理は、try...exceptブロック(文)
try節で例外があるだろう処理を入れて、あるだろう例外をexcept節で指定。
その他に使える節はfinally文、raise文、else文
finally文では、例外が発生してもしなくても最終的に動く節。
else文はif文のと同じ意味。ここでは例外が起こった場合と起こらない場合を分けたときにこれを使う
(ここでの例ではファイルの読み込みとクローズ処理をfinally節で実装してる。他方else節を使っている人もいました。どっちのほうがいいのかな?)
Python: ファイル読み込み時の例外の扱い例 - try、except、else、finallyブロック - Yukun's Blog
raise文はここでは説明がない。pythonのドキュメントでは例外を強制的に発生させるものらしい。
8. エラーと例外
最後に文なのでコロンを忘れずに。
try : fo = open("/file/to/path/hogehoge","r") except IOError : print "hogehoge not open error!"
ファイルのオープンや読み込み書き込みは、例外がつきもの。
別のプログラムによってそのファイルがいきなり消えたり、誰か別のユーザが書き込んだりと(排他処理により)自分の持ち物でない可能性がある。
try節で例外がでそうな内容を入れて、exceptででた例外についての処理を書く。exceptの例外指定は複数可能、もちろん例外に対して処理を分けるために複数のexceptも書ける。
例外とは、プログラムに組み込んだ内容から想定以外の事柄の事をいい基本的にエラーが出る物。そのとおりに利用するほかにも、それを利用して他の方法を行う場合がある。特定の環境での代替処理とか。
##Example 6.2. プラットフォーム固有の機能をサポートする # getpass という名前に適当な関数を割り当てる try: import termios, TERMIOS except ImportError: try: import msvcrt except ImportError: try: from EasyDialogsimport AskPassword except ImportError: getpass = default_getpass else : getpass = AskPassword else: getpass = win_getpass else: getpass = unix_getpass
ファイル入出力
6.2. Working with File Objects
もう例外のところで出てきているopen関数は、開きたいファイルパスを引数にして実行するとファイルオブジェクトを返す関数。そのファイルオブジェクトを使って、読み込んだり中身のプロパティを調べたりする。
open関数の引数はファイルパス以外にも、オプションとしてファイルのモード(読み込み、書き込み、テキストかバイナリか)、バッファリングパラメータの指定が行える。モードはとりあえず大事ですね。
ファイルを開いたら読み込む。読み込みには、tellとseekメソッドを使ってファイルのどの位置を読みたいか指定して読み込むとか、全部読み込むreadメソッドや、改行がある場合は1行ごと読み込めるreadlineメソッドとか。
ファイルを書き込む時は、writeメソッドを使う。ファイルモードが'w'か'a'でないとダメ。wは上書きしてaは追記できる。
ファイルを閉じるときはcloseメソッドを使う。
ファイルを開いている間は、そのプログラムが利用中の事だから他のプログラムは排他的処理により使えない。ので開放する必要がある。メソッドを使い開放すると、ファイルオブジェクト側では読み込めないことがわかる。
forループの説明
pythonのfor文は、リストの中身だけ繰り返す。数字指定のカウンタとかは普通はしないらしい。はじめて知ったときは衝撃的(他の言語にfor each文があればそれに似ている。)
しかし、リストの中身をそのまま使えるのでわかるととても便利。
##Example 6.8. for ループの紹介 >>>li = ['a' ,'b' ,'e'] >>>for sin li: ...print s a b e >>>print "\n".join(li) #リスト読み込み a b e
ちなみに、カウンタをやるなら、range関数を使う。range関数は数値のリストを作成してくれるので、実質的にそうなる。
##Example 6.9. シンプルなカウンタ >>>for iin range(5): #range(5)を動かすと[1,2,3,4,5]が作られる ...print i 0 1 2 3 4 >>>li = ['a' ,'b' ,'c' ,'d' ,'e'] >>>for iin range(len(li)): #わざわざリスト内の個数を数えてリストの位置指定で出す必要は無い。 ...print li[i] a b c d e
forループ(もといリストのマップ)はあらゆるものを繰り返す。辞書も使えるが例にある。
というか辞書が使えたらだいたいの格納されている事柄は何でも出力できる事になって面白い。
(例えばdir関数でモジュールの関数やメソッドの一覧が見れるけどあれは辞書なので、一覧出力とかも普通にできる。
→dir()関数 - バリケンのPython日記 - pythonグループ→さらに便利→Coffee and Ashtray: pythonにsee()を入れる)
6.10の例では、OSの環境変数の一覧を出している。for文とリストマップの例がありどちらも出力結果は同じに見える。
forループの使いどころとしては、取り出したリストの内容を関数を使って処理させたい場合なんかだろうか。
リスト読み込みは結果としてリストを返すし、わざわざリストを作る必要がない場合はこれを使う方が良いのかな。
sysモジュールを使う
sysモジュールとは、OSのシステムレベルの情報や行える操作をまとめたモジュールのこと、多分(おい
再帰の深さの最大値まで決まってるなんてのはしなかった!
sys.modulesの中には現在利用されているモジュールの一覧がある。
#Example 6.13. sysモジュールを使用する >>>import fileinfo 1 >>>print '\n'.join(sys.modules.keys()) win32api os.path os fileinfo exceptions __main__ ntpath nt sys __builtin__ site signal UserDict stat >>>fileinfo <module 'fileinfo' from 'fileinfo.pyc'> >>>sys.modules["fileinfo"] 2 <module 'fileinfo' from 'fileinfo.pyc'>
sys.modulesは辞書になっている。値がモジュールのリファレンスでキーが名前なので、キーを指定するとモジュールのリファレンスが手に入る。
これをこの章では、MP3以外の定義をしてあるFileinfoクラスを探すために使う。次のosモジュールを使うとそれが実現するとか。
__module__クラス属性とは
組み込みのクラス属性、クラスが定義されているモジュールの名前が出てくる。
つまり、あるクラスに__module__属性を参照すると、そのクラスのモジュール名が分かる。モジュールがファイル名と同じなら追跡が楽になるかもしれない。
os.pathモジュールを使う
ここでは、os.pathモジュールでファイルパスの操作を行う。プラットフォームに依存するモジュールだがこれを使うことで、プラットフォーム固有の違いを隠喩してる。
pathというだけにファイルパスの操作を行える。ファイルのフルパスからファイルのパスとファイル名を分離したり、パスとファイル名を統合したり。
今回で大事なところは、拡張子も分離出来る点。これを使って、特定の拡張子の定義をしてあるFileinfoクラスを探す方法を実装している。
これを使うとファイルパスをいじるのが大変楽に思う。こちらが手入力するパスなんかは気を遣うかもしれない。
最後にまとめてる
というわけで、上の解説から今回のfileinfo.py の解説を見てみる。
Example 6.6. MP3FileInfo 内のファイルオブジェクト
try : fsock = open(filename,"rb" , 0) try : fsock.seek(-128, 2) tagdata = fsock.read(128) finally : fsock.close() . . . except IOError: pass
MP3FileInfoのファイルオブジェクトを見ると、なんてことない普通のファイル操作。
seek(-128, 2)でmp3ファイルのタグ情報の位置へ移動(どうやらタグ情報はデータの後ろに載っているらしい)、read(128)でそのタグ情報を読み込む。この間で例外をキャッチしたらこの処理自体をパスする。
Example 6.11. MP3FileInfo 内の for ループ
. . . def stripnulls(data): "strip whitespace and nulls" return data.replace("\00" ,"").strip() . . . tagDataMap = {"title" : ( 3, 33, stripnulls), "artist" : ( 33, 63, stripnulls), "album" : ( 63, 93, stripnulls), "year" : ( 93, 97, stripnulls), "comment" : ( 97, 126, stripnulls), "genre" : (127, 128, ord)} . . . if tagdata[:3] =="TAG": for tag, (start, end, parseFunc)in self.tagDataMap.items(): self[tag] = parseFunc(tagdata[start:end])
tagDataMapは、タグ情報のどの部分がどの項目(アーティストとかアルバムとか)を示すマップを作ってる。辞書の値がタプルで3番目が解析するための関数の名前になってる。
そのマップを下のロジックに取り込む。
まずfor文でマップ無いのキーと辞書をタプルで分離。paeseFuncには関数名が入り、これを関数として実行することができる。
次に、リストを継承したクラスの中に解析関数で実行した内容を入れる。中身はstart:endでわかるように、タグ情報をマップの数値でスライスして、parseFuncにある関数名の関数を実行している。
stripnullsは、"\00"を消してstrip関数で先頭と松尾部分の空白文字の除去を行う。
・・・あれ、strip関数ってとっても便利ですね。今度コードを書くときに早速使ってみよう。
Listdictionary関数詳細
今回のfileinfo.py では、MP3以外のファイルもメタ(タグ)情報も対応出来る仕組みを作ってる。それがlistDirectory関数
Example 6.15. fileinfo.pyないの sys モジュール
def getFileInfoClass (filename, module=sys.modules[FileInfo.__module__]) #1 "get file info class from filename extension" subclass ="%sFileInfo" % os.path.splitext(filename)[1].upper()[1:] #2 return hasattr(module, subclass)and getattr(module, subclass)or FileInfo #3
- #1
このgetFileInfoClass関数では、与えられたファイル名(ファイルのフルパスではなくて、パスを取り除いてるらしい)と、オプションにmodule変数の引数を持っている。
moduleのデフォルトには、sys.modulesからFileInfoクラス内のモジュール名を入れている。と言ってもこれはオプションで、実際には使っていないことが後で分かる。あくまで定数扱い
- #2
次に、いわゆる文字列整形が使われている。%sには、os.path.splitext関数により分離されたfilenameの拡張子が入れられている。
その後にupperメソッドは小文字を大文字に変換するメソッド。さらに文字列をスライスして拡張子の大文字だけを残してる。
hoge_audio.mp3というファイル名が来たら、ここのsubclassは"MP3FileInfo"となるはず。"huga_huga.txt"ならTXTFileInfo
- #3
最後に三項演算子っぽい実装になってる。といっても実際にはgetattrを使ってmodule内のメソッドを探しに行ってる。
今回の場合は、modules(このモジュール内のリファレンス一覧)からsubclassを探して、リファレンスを得ると言うこと。
拡張子が.mp3ならこのモジュール(fileinfo.py)内のMP3fileinfoクラスを参照していることになる。
hasattrは、subclassがそのモジュールに有るか確認を取るために入れているらしい。三項演算子だから、hasattrで存在を確認したらgetattrを実行、そうでないならFileInfoクラスを使うことにしてある。
2.1 組み込み関数のhasattrを参考
ほかのプログラムに応用するならFileInfoの部分をモジュール内の適当なクラスにでもすればいいのかな。
Example 6.19. fileinfo.py 内の辞書をリストする
def listDirectory(directory, fileExtList): "get list of file info objects for files of particular extensions" fileList = [os.path.normcase(f) for f in os.listdir(directory)] #1 2 fileList = [os.path.join(directory, f) for f in fileList if os.path.splitext(f)[1]in fileExtList] #3 4 5
6.18の上にある処理の話しで、2回のリスト読み込みで指定したディレクトリ内の特定のファイルのリストを作成している。
- #1,2
dictionary(と言う指定したディレクトリ)より、os.listdir()でディレクトリ内の全てのファイルとフォルダのリストを返して、os.path.normcase関数でパスの大文字小文字をシステムの標準にししたリストをfileListに入れてる。パスを扱いやすくしているというイメージかな。
- #3,4,5
次でfileExtList(という扱いたいファイルの拡張子のリスト)を使ってリストフィルタリングをして、ファイルのフルパスに戻したリストを格納してる。
これで、対象のディレクトリ内から指定した拡張子のファイルだけを集めた段階になる。
listDirectory関数を見る
def listDirectory(directory, fileExtList): "get list of file info objects for files of particular extensions" fileList = [os.path.normcase(f) for f in os.listdir(directory)] fileList = [os.path.join(directory, f) for f in fileList if os.path.splitext(f)[1]in fileExtList] def getFileInfoClass (filename, module=sys.modules[FileInfo.__module__]) "get file info class from filename extension" subclass ="%sFileInfo" % os.path.splitext(filename)[1].upper()[1:] return hasattr(module, subclass)and getattr(module, subclass)or FileInfo return [getFileInfoClass(f)(f) for f in fileList] #1
- #1
この関数の最後に、ファイルごとのメタ情報(の辞書)をリストにして返してる。
getFileInfoClassでファイル名を引数指定すると、そのファイルにあったメタ情報解析クラスが見つかり、
さらに(f)でクラスの引数としてファイル名を与えると、結果としてメタ情報を解析したインスタンス(インスタンス自体が辞書)が返ってきて、リスト化されてる。
これで全て解説されました!
長かった・・・(自分がサボってただけ)
最後に見直してみる。
このモジュールの最後に、pythonコマンドで実行された場合が書かれている。
if __name__="__main__"がコマンドでの実行時の命令だが、ここではディレクトリと拡張子が指定されている。デフォルトでの指定らしい。
もしコマンドの引数でディレクトリを指定した場合の書き方としてはこんな感じ?(何もチェックしていないけど)
Python: コマンドライン引数の取得 - sys.argv変数 - Yukun's Blog より
. . . if __name__ =="__main__": argvs = sys.argv argc = len(argvs) print(u"引数にディレクトリ先を指定することで実行されます。\n====") if argc != 2 : print u"Usage: python %s directory" % argvs[0] quit() for infoin listDirectory((argvs[1]), [".mp3"]): print "\n".join(["%s=%s" % (k, v)for k, vin info.items()])
感想として
ファイルに書き出してもおもしろいかもしれませんね。実用的で本当にモジュールに組み込んでも良さそうなじゃないかと思ったところです。
次は7章ですね。正規表現だ!!
ガジェットの聖域を自作したよ!
昔こんなガジェット置き場を見ました
ポケットの中身を一カ所にまとめるTheSanctuary : Gizmodo Japan(ギズモード・ジャパン), ガジェット情報満載ブログ
ガジェットの充電スポットであり、小物置き場としても使える。そして何よりシャープ。これはほしい・・・
しかし値段が2万円はする代物。高級品は手に入らずで。でも小物置き場はほしい。
そんなことを考えて数ヶ月。良く通う100円ショップのSeria(セリア)で、ちょうど似たような仕切りケースを発見しました。(写真は後にて)気に入っていくつか買い込み机の引き出しに使ってみてると、これに滑り止めシートを敷いたらガジェット置き場として使える!!ことを思いつき。早速試行錯誤。
いっそのこと充電も出来る場所に出来ればなあと考えつき、100円ショップの材料(+充電器)でガジェット聖域を試作し始めました。
材料
- 仕切りケース x 2:充電のためにUSBACアダプタを格納するために2段にして重ねています。ちょうど重ねやすいケースです。
- 電源延長ケーブル:USBACアダプタを内蔵するためにコードの延長をさせる(あくまで飽きたら再利用可能にするために
- 充電する機器のケーブル:携帯電話やiPodのケーブル!(セリアで手に入った!)など。
- 滑り止めシート:これは大きいものがあるといいです。ホームセンターで切り売りしてたらそちらの方がいいです。
- USBACアダプタ:ポートが多ければ多いほどですが、今のところこれに入りそうなもので多めのは4ポートのやつです。仕切りケースの高さとアダプタの幅がほぼ同じなのでこれを選択。
道具
穴を開けるのでドリルは必要。きれいに仕上げるために切れるニッパやバリ取りのやすりは必ず。マーキングにマジック等、後はその辺のデスク用具で。
作業開始!
電源ケーブルを出すために隙間を作る
USBACアダプタを下部側に固定
下段に入れるアダプタを固定します。両面テープで良いですがクッションのあるやつが良いです。というのもケースのゆがみがあるのでクッションで補う意味です。ただ厚めのクッションだと収まりきらないのでほどほどで。
上部側のケースに充電ケーブルの入り口を作る
ドリルで大まかに穴を開けてニッパで慎重に切ります。無理をすると周りにヒビが入りますのでご注意。
加工後はさらにやすりでなめらかにするといいです。やすりが無ければ適当に整えてそのまま使ってしまってもいいです。(やすりを用意しわしれたので自分もそのまま・・・)
ケーブルを上に出し易くするために、側面ぎりぎりにコードを出すくぼみを作るとなお良いです。(今回はやってないので後でやろうっと)
滑り止めシートの加工:ケースの大きさに切り出し、切れ目を入れてケーブルを出しやすくする
滑り止めシートの加工ははさみが楽です。台紙を作った方が楽に切れます。
ケーブルを上に出すためにシートも多少の切れ目を入れておくと、ケーブルを出しやすくなります。加工したケースのくぼみと同じ場所に切れ目を入れるとなお使いやすいです。
完成!
最後に、上段と下段を重ねて完成!浮いちゃうときはとりあえずセロテープでも留めておけば良いです。
試作段階としてこんな感じになりました。
イメージしたものが出来たと思います。ただスペースがあまり無いような。携帯電話とiPodをおいたら限界か。
実は、サンクチュアリの大きさはこのスペースの倍はあるのです。同じ面積の仕切りケースがあれば良かったのですが、デザインを優先してこれを選んだので仕方が無しというわけです。でも、USBACアダプタでの充電は可能ですし、ケーブルも4本も使えれば十分です。
アダプタの厚みでケースを重ねても浮いてしまうことがありますが、その際にはテープで固定するなりすればいいです。蝶番と鍵をつけてしっかり固定してもいいですし。
ちなみにこの下段はケースとして使えるので延長ケーブルも充電用のケーブルも収まります。ケーブルを探す手間も無くなります。
今回の試作でやり残した部分は、浮いてしまうケースの固定方法、上段の穴のバリ取り、ケーブルのくぼみ作成、滑り止めシートをちゃんとしたものにする。といったところで、少なくとも滑り止めシートをしっかりしたものにすればきれいに仕上がりそうです。早速来週中にシートの調達をしたいと思います。出来としてはケースの加工をちゃんとし直してシートをちゃんとすれば自分は満足の出来だと感じていますよ!
本体作成の材料としては100円商品の(ケース2個+滑り止めシート2枚+延長ケーブル)で525円+USBACアダプタが1500円だったので2025円、プラス充電ケーブルで3000円もしませんでした。 サンクチュアリにあこがれが有ってもなかなか手が出せない、DIY大好きっ子なら挑戦しがいがあるかもしれません。
といってもやっぱりというか、余裕が有ったらほしいものですが・・・
ノートパソコンにカッティングシート(ダイノックシートカーボン調)を貼ってみた
前々からやりたかった、ノートパソコンの天板にカッティングシートを貼るを実行しました!
完成はこんな感じ。
天板を上から見ていますが、なかなかいい感じです。
利用したシートは3Mのダイノックシート カーボン調(型番)です。このシートの切り売りって1m四方のサイズでよく売っています。ちょっと高めです。
手が出せな(もとい勇気が出せな)かったのですが、最近になって50cm四方で売っているお店を見つけました。
【楽天市場】ハロー工房:住友スリーエム製の看板用材料や反射材、ガラスフィルム等を販売しております。
【楽天市場】その他. > 3M〓 ダイノック〓 カーボン:ハロー工房
早速購入して貼ってみたんですよ!今回は先日に購入したAcerのAS1410です。
貼り方は以下のリンクを参照しました。
カッティングシートの貼り方講座 クルマをドレスアップ編 (ダイノックやベルビアンなど) - リノクウ お部屋作りを楽しく、カンタンに! - Yahoo!ブログ
行程としてはこんな感じ
- 対象部分の汚れとほこりを取る
- シートを対象部分より大きめに切り取る
- 端から貼り付けて、空気を抜きながら張り切る
(この下のタオルっぽいやつは、厚紙にタオルを巻き付けたもの。これで空気を抜きました。)
- 曲面はドライヤーで暖めながら丁寧にのばして貼り付ける
- 端のあまりを切り取る。よく切れるナイフやはさみでゆっくりと丁寧に
シートの切り出しは完成予定のサイズより1〜2センチは大きい方がやりやすいです。型を使わずにおおよそでやりました。
曲面にはドライヤーでシートを伸ばすとよいらしいです。ダイノックシートはかなり伸びるので有名で、伸ばしすぎに注意したほうが良いです。
シートのカットは良く切れて小回りが効くデザインナイフでやるのが一番らしいです。とにかくよく切れるものでないとコントロールが効かなくて下手な出来になってしまいます。
ちなみに自分はカットした部分はこんなふうに・・・ 100円のカッターでやったのが間違いだったorz
天板は綺麗に仕上がったので良しとしましょうか。天板だけは空気も入らずにきれいに仕上がりましたし。今回は成功ということで!
おまけ
カッティングシートというのは中山ケミカルの商標だそうです。調べていて知りました。
カッティング用シート ブックマーク変更のお願い
こういうシートって製品名でなくて総称としてはなんていうんでしょうね。
装飾用シート?マーキングフィルムっていうのも見ましたし。
勉強メモ:Cのポインタの意味を考え直す
これは本当にメモ
Cのポインタって結局なんなんだろうなって考えていていまいちまとまらない。
構造体にポインタがある理由は何となく、構造体の枠組みを複製する際に、複製したメンバ(構造体内の変数でいいっけね?)にアクセスするためには、ポインタを使ってアドレスを割り出さないといけないって意味があるのかなと思ったから。
あと、ドット演算子とアロー演算子の違いは、ドット演算子は構造体変数自体からメンバにアクセスする際には必要で、アロー演算子は構造体のアドレス変数からメンバにアクセスするために必要ってことかな。
結局ポインタという機能は本当はいらないのかもしれないけど、より自由にメモリにアクセスするためには、メモリのアドレスを直接参照出来る機能があるといいって話だったのかな。そうするとCってやっぱり上級者向けなんだなーとも感じる。
あとポインタを割り出すってやっぱり何か計算してるのかな。変数名とポインタの関係ってどこかメモリ上にあるのかと思ってたけど、どうなんだろう、そうなのかな?
PulseAudioを使うとリモートサーバーになると聞いてWindowsもクライアントになるのか調べてみた
追記:2010/02/01
すいません、下記内容は誤りで参考にならないかと思います。
まず、Ubuntu Weekly Recipe(以下UWR)のテーマと、その次のリンクの方のテーマ
が全く違いました。
UWR側では、手元のPCからスピーカーをつなげたサーバーに音を送信するというもの。次のリンクの方では手持ちのPCにリモートサーバーの音を受信させるというものです。テーマが全く違います。
誤りを起こした理由としては、リンクの内容を良く読まなかったことが原因です。申し訳ないです。
というわけで、PulseAudioを使いWindowsが音を送信してLinux側で音を受信させる方法は今のところよくわかっていません。
以下は試してみた結果わかったことを追記しています。
- PulseAudioのWindowsバイナリは32bit版
次に、PulseAudioのバイナリは32bit版でした。64bitの環境で動作させてみましたが、64bitでは動かないようです。(win32のオーディオデバイスを探しに行っているらしい。)プログラム自体を64bit向けに変更されないとだめかもしれません。
(もしWindowsで32bit環境を整えられましたら再度確認してみたいと思います。)
- 仮想環境のUbuntuでは
Ubuntu同士で行えるなら、仮想環境のOSで行ったらどうなるか。音を送信する側をVirtualbox側のUbuntuとして実験し直しました。
接続を試みましたがUWRのやり方では失敗しましたので、Virtualboxのサウンドデバイスについても何か問題があるように思います。
以下は内容に誤りがあります。履歴として訂正していません。
Ubuntu Weekly Recipe:第106回 PulseAudioでリモートスピーカを使う|gihyo.jp … 技術評論社
これ目から鱗というか、こんな使い方あるのかよとびっくりな記事を見かけました。前からPulseAudioはサーバーがどーとかこーとか聞いたことがありましたが、こういう使い方も出来るとは。
うちの環境もPCから離れたところにコンポがあります。そこから音を出したいと、ちょうどサーバーに接続できるところにあるならそのサーバーへリモートで音を飛ばせたらなあと考えていたところにこの話を見たのでこれはやってみる価値がありそうだ!
Ubuntu Weekly Recipeでは、クライアントもサーバーもUbuntuを扱っていますが、たとえばクライアントをWindowsに出来ないかなと調べていると出来るそうです。PulseAudioにはWindowsバイナリもあるとか!
以下からダウンロード出来ます。ちなみにGUIではないそうです。
(まだ実践してはいないので、試してみたらまた報告します!)
Cendio AB - PulseAudio BinariesちなみにPulseAudioのWikiでもWindowsについて言及があります。そこで紹介されてるWinESDは結構古めのソフトのようなのでメンテもされていないようです。(で公式Wikiからも、Windowsバイナリは上のcendio.comにいってくれといわれてますね。)
FAQ – PulseAudio