https://www.google.co.jp/webhp?q=corinne+bailey+rae+lyrics+horse+print+dress

Horse Print Dress by Corinne Bailey Rae

馬の柄のドレスを着て―
まだ髪も湿ったままの私の
首にキスするあなた
だれにも報せることなく
二人で昼も夜も過ごしている
炎に照らされて横たわれば
私を見つめるあなたの瞳は素敵に輝く
あなたの満ち足りた顔を見ると
頭がぼうっとしてしまうほど夢中
今はただあなたから離れたくない

好き
あなたに愛される喜び
舞い上がり
揺れ動く心はカレイドスコープ
そこから戻りたくはない

ぎゅっと押し付けた口紅は
鮮やかなサクランボの色
でも髪はボサボサなまま
ベッドから出たばかりだから
ロマンスは初めてではないけれど
まるで雪崩に巻き込まれたような勢い
そんな話をうまく電話では説明できない
これまでに知っている人とは全然違っている
ぼうっとなるほど夢中

好き
あなたに愛される喜び
舞い上がり
揺れ動く心はカレイドスコープ
そこから戻りたくはない
あなたから離れたくない
そこから戻りたくはない
揺れ動く心を見続けたい

YOGA tablet 2 (1051F) を Windows 10 にアップグレード

本体の空き容量が不足しているので、Windows update からは、エラーする状態。

以下の手順で、アップグレードした。

0. Lenovo のドライバをアップデート (8種あった)

1. マイクロソフトからインストールメディアを作る。4 GB の USB メモリが必要と言われる。
http://www.microsoft.com/ja-jp/software-download/windows10
4.のことを考えると、16 GB 欲しいかも。

2. USB を指す。
(電源が取れなくなるので、フル充電しておこう。給電ハブという手はあるかもしれません)

3. USB ドライブ内の、\setup.exe を実行する。

4. OS 回復用バックアップを C: ドライブには作れないので、9 GB 空きのあるドライブを指定せよと言われる。
(USB ドライブは 4GB を使っていたので、仕方ない。D: ドライブの SDカード を指定。

5. 数回、OK を押して、アップデートが進んでいく。

6. NTFS のマウントで、D: ドライブに逃がしていた、Dropbox、OneDrive は駄目になっている。
(対策を調べているところ)

王女様のジェムストリング問題

python コード

class cnc(object):
    def __init__(self):
        self.cdict = {}

    def ncount(self, alist):
        tmp = [a for a in alist]
        tmp.sort()
        if tuple(tmp) in self.cdict:
            return self.cdict[tuple(tmp)]    
        blist = []
        if len(alist) > 1:
            for i in range(len(alist)):
                if alist[i] > 1:
                    blist.append(alist[:i] + [alist[i]-1] + alist[i+1:])
                else:
                    blist.append(alist[:i] + alist[i+1:])
            res = sum([self.ncount(b) for b in blist]) + 1
            self.cdict[tuple(tmp)]=res
            return res
        else:
            self.cdict[tuple(tmp)]=alist[0] + 1
            return alist[0] + 1

def nc(alist):
	""" ある宝石セットで作れる組み合わせの数 """
    t = cnc()
    return t.ncount(alist) - 1

# 数え上げの方は力技で積み上げてしまった	
print ( nc([4,1,4,2,1,3])
    + nc([1,3,1,4,2,1,3])
    + nc([1,4,4,2,1,3])
    + nc([1,4,1,3,2,1,3])
    + nc([3,1,4,1,1,3])
    + nc([4,4,1,1,3])
    + nc([4,1,3,1,1,3])
    + nc([4,1,4,1,3])
    + nc([4,1,4,1,3])
    + nc([3,1,4,1,1,2])
    + nc([3,4,1,1,2])
    + nc([3,3,1,1,2])
    + nc([4,2,1,1,2])
    + nc([4,3,2])
    + nc([2,3,1,2])
    + nc([3,2,1,2])
    )

計算コードの自己レビュー

最近行っていた拡散方程式の数値計算のコードの見直しがひと段落したので、振り返りをしてみる。
コードは、つまびらかにするわけにいかないので、具体的な記述はあいまいに書いています。

良かったこと

  • オブジェクト化がうまくできた。材料をクラスとして、材料のプロパティとしてそれぞれの物理定数 (質量、衝突断面積、温度係数など) を持たせることで、引数渡しが簡単にできた。
  • 基本的な物理定数を入力するのをやめて、ライブラリーから取り込んだ。
import scipy.constants as cnst
c = cnst.physical_constants['speed of light in vacuum'][0] ## m/s
e = cnst.physical_constants['elementary charge'][0]
me = cnst.physical_constants['electron mass'][0] 
ips0 = cnst.physical_constants['electric constant'][0] 
kb = cnst.physical_constants['Boltzmann constant'][0] # [J K-1] = [m2 kg s-2 K-1]
na = cnst.physical_constants['Avogadro constant'][0] ## [mol^[-1]]

とする。打ち間違いや、有効桁数のぶれが生じない。

  • ファイル名を自動的に拾って、結果ファイル名の共通部分とする。
from sys import argv
from os.path import basename

fn_base = basename(argv[0])[:-3] # ".py" stripped
## (中略)

images = []
if fig_save:    
    images.append("{fn_base:s}_fplot.png".format(**locals()))
    pyl.savefig(images[-1])
  • 画像ファイルを含めて、ひとつの tiddly wiki の記事を生成する

addtiddler.py というライブラリを使っている。 (このファイルは、ネット上で見当たらなくなっている)

  • 微分について、行列演算での表記を使った。

ベースは http://www.scientificpython.net/1/category/nonuniform/1.html
境界条件も含めて、コンパクトなコードになった。
バージョン 1 では全部場合分けしていたが、場合分け不要のコードにできた。
添え字 i,j,k を走査すると、各座標軸方向での終端にいるか否かはわかる。終端で処理も、行列表記の中で実現する。

  • 対称境界条件を導入して、計算規模を小さくしたオブジェクトと、全モデルのオブジェクトがあるが、最初のクラス宣言だけが異なり、そのあとは、同じ振る舞いをするように作れた。
  • スパース行列のライブラリを使った。pysparse1.2 scipy の sparse よりもかなり速い

numpy アレイの連結 (3D)

>>> import numpy as num
>>> t = num.arange(24.)
>>> tb = t.reshape((2, 3, 4))
>>> tb
Out[3]: 
array([[[  0.,   1.,   2.,   3.],
        [  4.,   5.,   6.,   7.],
        [  8.,   9.,  10.,  11.]],

       [[ 12.,  13.,  14.,  15.],
        [ 16.,  17.,  18.,  19.],
        [ 20.,  21.,  22.,  23.]]])
>>> zb = tb[0:1, 0:1, :]
>>> num.vstack([zb,zb])
Out[9]: 
array([[[ 0.,  1.,  2.,  3.]],

       [[ 0.,  1.,  2.,  3.]]])

>>> num.vstack([zb,zb]).shape
Out[10]: (2L, 1L, 4L)  # 最初の軸方向に積む (x 方向) 
>>> num.hstack([zb,zb]).shape
Out[11]: (1L, 2L, 4L)  # 第二の軸方向に積む (y 方向)
>>> num.dstack((zb, zb, zb)).shape
Out[12]: (1L, 1L, 12L) # 第三の軸方向に積む (z 方向)
## これだけの話

念のため、別の形のブロックを積んでみる
>>> yb = tb[0:1, :, 0:1]
>>> yb.shape
Out[14]: (1L, 3L, 1L)
>>> num.vstack((yb, yb, yb)).shape
Out[15]: (3L, 3L, 1L)
>>> num.hstack((yb, yb, yb)).shape
Out[16]: (1L, 9L, 1L)
>>> num.dstack((yb, yb, yb)).shape
Out[17]: (1L, 3L, 3L)

ロジクールのブロードキャスターをイーモバイルのwi-fi ルータで使う

ロジクールブロードキャスター
http://www.logicool.co.jp/ja-jp/product/broadcaster-wifi-webcam
を、e-mobilewi-fi ルータ― GL04P を介して、Mac につなごうとして、認識しないもんだいの解決策メモ。

イーモバイルの プライバシー・セパレーター機能が端末間の通信を通さない。
http://faq.emobile.jp/faq/view/105757
に従って、「プライバシーセパレータ」を無効にしたら、Mac から認識できるようになった。