VimFilerメモ

色々と書き集めている最中.
ある程度揃ったら,記事にまとめるかも.

VimFilerでファイルを開く時に新しいタブに開く
LSI設計雑記帳 Vim:Vimfilerのedit actionをtabopenに変更
VimFilerのキーバインド集
vimfiler のデフォルトキーバインドまとめ(機能別) - Alone Like a Rhinoceros Horn
どこを見てもoで2画面化&フォルダ同期と書かれてるけど,ubuntu上でKaoriya版をmakeして動かしている限りにおいては,ファイルオープンになる.Oで2画面化はできる

ZE500KLのフロントパネルを交換

zenfone2 laserの画面が割れちゃったので,フロントパネルを交換した.
スマホが物故われて作業途中の写真は取れんかったけど,ちょっとだけ手順を紹介.
参考にしたサイトはこちら→【自分で修理】ASUS Zenfone2のフロントパネル交換方法【ディスプレイ】 – マガリスギ.net
ただし,ネジの数や,基盤に差さるケーブルの位置などが異なるので,それらは読み替えること.

手順1:ネジを外して内装を取る

ケースのフタをあけるとこは割愛.
基本は,見えてるネジ14本と,SEALって書かれたシールの下にあるネジの1本を外せばOK.
内装を取る前に,バッテリー,SIMカードは抜くこと.microSDを差したままSIMは抜けないと思うけど,microSDはついてても干渉しないのでお好きに.
ネジ取った後も,これホントに外れんの?ってくらいうまく取れないけど,1)筐体をちょっと歪めて隙間を作る,2)隙間に細いものを差し込んで隙間を維持しテンションをかける,3)バッテリーの下や左右・カメラの上・内装の右左上の6箇所にある爪を頑張って外す,4)バッテリー上の部分が爪になってるから精密ドライバーのマイナスとかで外してやる,という手順を踏めば何とかなると思う.

手順2:基盤の端子を外す

左に2箇所,フラットケーブルが刺さっている.これはディスプレイから来ているものなので,ケーブルは切れてもいいけど,基盤側を傷つけないように.
細い方は白いストッパーを上に立ててから,爪楊枝とかで抜く.
太い方は茶色のシールを剥がしてから,以下同文.
右に1箇所,クリップ留めされている端子があるが,これは現時点では外せないので後回し.
左,上,右の3箇所が爪で留めてあるので,頑張ってフレームから基盤を外す.すると,クリップ留めされているところも一緒に浮いてくるので,フレームから浮いたらクリップを外し,そこの端子を取ってやる.

追記:
クリップ留めされているケーブルの挿し口が分かりにくいとのご指摘があった.
確かに私も,分かりづらかったような記憶がある.
基盤を最初にスマホを開いた時の面を表とした時,裏側に端子は挿さっているので,クリップを外す時に確認されたし.

銅線がもう一本つながってるけど,これは外さずに作業したので外し方は不明.
白いストッパー,というのが分からない人は,先の参考サイトを再度参照すること.

手順3:壊れたフロントパネルを外す

まず,基盤に差さっていたフラットケーブルのうち,細い方をたどるとシールで留められた金属版があると思う.
こいつをシールを剥がして外す.
実はこの裏に,GPUっぽい謎のチップがある.
シールがどういう役割かわからんけど,後で新しいパネルの同じパーツをこのシールで貼るので,綺麗に取った方がいい.
フロントパネルは超強力な両面テープで張り付いているので,気合で剥がす.
ホントは先のサイトみたくドライヤーで両面テープを温めた方が良いのだろうけど,面倒だったので力ずくで剥がした.
真似しない方がいい.
両面テープを外したら,端子をフレームのスリットから抜いて分解完了.

手順4:逆の手順でパーツを取り付け

基本は逆の手順になるだけだが,注意するのは2点.
まず1点目はフロントディスプレイの固定.
両面テープを再利用するにせよ,しないにせよ,ちゃんと固定すること.
基盤に差さっているケーブルと,銀色のテープで押さえた金属版しかパネルをフレームに固定するものはないので,パネル自体を固定せずに使っているとフラットケーブルが抜けたり断線するかも知れない.
2点目は,クリップで留められていた端子.
ちょっと固定しづらいけど,基盤を爪にはめる前に,ちゃんと端子を差してクリップでホールドしておくこと.
爪にはめてからでは固定できないので,また外すハメになる.
あと,不安なら内装をつける前にバッテリーを入れて,電源を入れてみると良い.ただ,画面を上にして置こうとするとバッテリーがストンと外れるので,あくまで動作確認だけ.

以上.
あとは,気合と自己責任でがんばれ.

Gifアニメ→mp4

$ convert -limit memory 300MB -coalesce from.gif %04d.png
$ ffmpeg -r fps_of_gif -i %04d.png -r fps_of_mp4 to.mp4

拾ったgifアニメもこれでmp4に変換できるぜ

mapと内包表記

リストの全要素へ同じ処理を適用する時に,lambda関数化してmapで適用するのと,内包表記で適用後の値を要素とするリストを生成するのはどっちが早いんだろう?

こんなタイマーを作って,試してみた.

# -*- coding: utf-8 -*-

import timeit
import sys 

'''実行速度を計測する'''

def time_measurement(script, preprocessing, number, recursion):
    '''script is main process, preprocessing includes import statements,
    number means the number of a single trial,
    recursion means the number of trials'''

    timer  = timeit.Timer(script, preprocessing) 
    result = timer.repeat(recursion, number)
    return result

試してみる.

# -*- coding: utf-8 -*-
import tm

# 内包表記
script = '''
o=[' '.join(d) for d in data]
'''
preproc = '''
import numpy;data = [('%d'%(100*numpy.random.uniform()),'%d'%(100*numpy.random.uniform())) for i in range(1000000)]
'''
result=tm.time_measurement(script,preproc,10,2)
print 'make list:',min(result)

# for文
script = '''
o=[]
for d in data:
    o.append(' '.join(d))
'''
result=tm.time_measurement(script,preproc,10,2)
print 'for:',min(result)

# map関数
script = '''
o=map(joint,data)
'''
preproc = '''
import numpy;data = [('%d'%(100*numpy.random.uniform()),'%d'%(100*numpy.random.uniform())) for i in range(1000000)];joint=lambda x:' '.join(x)
'''
result=tm.time_measurement(script,preproc,10,2)
print 'use map:',min(result)

結果

$ python test.py
make list: 1.00997805595
for: 1.52903008461
use map: 1.53125476837

内包表記の勝ち

for文とmap関数は,ほぼ同じ時間だった.同じように実装されているのかなぁ.

ログを日付別に行数カウントする

monthlyでlogrotateしているログが,ある月だけ突出してサイズが大きかったので,いつのログが問題なのかを見るためにちょっと書いたスクリプト.
ちょっと月を入力するところをサボった.
数字の0フィルは-wオプションらしい.

#!/bin/bash

for d in $(seq -w 1 31)
do
echo -n $d
echo -n ' '
echo `zcat $1 | grep $d/Nov/2015 | wc -l`
done

numpyを使った複数要素の一括比較演算

まとめて複数要素の比較をし,andを取る

import numpy as np
a=np.array([1,2,3])
b=np.array([1,2,3])
c=np.array([1,2,4])
print a==b,' is ',(a==b).all()
print b==c,' is ',(b==c).all()

出力

[ True  True  True]  is  True
[ True  True False]  is  False

まとめて複数要素の比較をし,その配列でDataFrameをフィルタ

import numpy as np
import pandas
df = pandas.read_csv(open(...))
under50 = df[df['axis1']<50]
between50_100 = df[np.logical_and(df['axis1']>=50,df['axis1']<100)]

xmonadでダイアログへのフォーカスがループする現象の対策

追記

keepass2のフォーカス問題については,原因はよく分からないものの
xmonad - ArchWikiのJava GUIの問題対策を実施し
最新のxdotoolを入れたら,keepass2のウィンドウは相変わらずフォーカスループするのだが,keepass2 --auto-typeで問題なく自動フィルされるようになった.

export _JAVA_AWT_WM_NONREPARENTING=1

xmonadからkeepass2をWinと同じく左ALT+Ctrl+aで呼び出すのは,こんな感じ.
ただしmodMaskはmod1Mask以外にしている.

-- 省略
    `additionalKeys`
        [ -- 省略
        , ((mod1Mask .|. controlMask, xK_a), spawn "keepass2 --auto-type")
        ]

でも,CPUファンが唸るので,keepass2を常駐させるのは無理ぽ


xmonad で libreoffice をはじめとするダイアログを生成し,自動的にフォーカスをダイアログへうつし,かつ元ウィンドウへのフォーカスはさせない系の動作をするアプリにおいて,ダイアログへフォーカスをうつす処理っぽいものが無限ループみたいな状態に陥って,CPU使用率はぐいぐい向上し,ほとんど操作を受け付けなくなる現象への対策.
sylpheedのダイアログとかでも直ったから,ちょー助かる.
Linux - xmonadでLibreofficeを起動するとフォーカスがループする問題 - Qiita
リンク先の方法で解決.神すぎ.

(略)
import XMonad.Hooks.EwmhDesktops -- フォーカスがループする問題対策
(略)
main = do
  myStatusBar <- spawnPipe "xmobar /home/hoge/.xmonad/.xmobarrc"
  xmonad $ ewmh defaultConfig
    { borderWidth           = 3
    , focusedBorderColor    = colorGreen
    , layoutHook            = toggleLayouts (Full) $ myLayoutHook
    , logHook               = myLogHook myStatusBar
    , modMask               = modm
    , manageHook            = myManageHook
    , normalBorderColor     = colorGray
    , startupHook           = myStartupHook
    , terminal              = "urxvt"
    }