2012年2月29日水曜日

Eclipseでウィンドウタイトルに出続けるプロジェクト名を消す

EclipseのNavigatorビューでプロジェクトを右クリックして「Open in New Window」とすると、
ウィンドウタイトルにそのプロジェクト名が表示されて
そのプロジェクトだけ開いた状態のEclipseが新たに開いて結構便利。

でもふと気付くと、Eclipseを閉じて、再度開くとそれがそのまま。
Navigatorで「up」や「back」としてもウィンドウタイトルは変わらず、
閉じて開いてもそのまま保存され続けます。
更にはそのプロジェクトをcloseして閉じて開くと、事もあろうかエラーダイアログまで表示してきます。

別なプロジェクトを「Open in New Window」するとそちらに移りますが、
なんとなくそれもそれですっきりしない。

さほど実害はないのですが、気分の問題でこれをデフォルトに戻したいと思って試してみた。

1.ワークスペース内の
  /.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml
 をエディタで開く。

2.二箇所修正します。
  <page focus="true" label="【プロジェクト名】 - 【パースペクティブ名】">
  となっている部分を
  <page focus="true" label="">
  に修正。

  <input factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/【プロジェクト名】" type="4"/>
  の行を削除。

3.保存してEclipseを開きます。

開いた直後はちょっと微妙な感じ(自分の場合はPyDev Explorerにプロジェクトが何も表示されない状態になった)になるけど
Navigatorなどを表示したり色々したところ大丈夫そう。

やってみる時は全て自己責任で。

2012年2月28日火曜日

IBusの再起動

FreeMindをちょっと使ってみているが、何かするとすぐキー入力が効かなくなる。
以下のコマンドで
ibus-daemon -drx
IBusを再起動してやればまた通るようにはなるが…
何とかしないと使ってられないな。

2012年2月25日土曜日

Ubuntu 11.10で複数のGmailアカウントの着信通知

最近のUbuntuはUnityのメールのアイコンにIMやメール、Ubuntu Oneなどの機能がまとまっています。
gm-notifyというパッケージをインストールすることで
ここでGMailの着信通知を受けることも可能ですが、
gm-notifyの場合、1アカウントしか対応できません。

そのかわりgnome-gmail-notifierならば、複数のアカウントを設定する事が可能です。
が、その場合今度はインストールして実行しただけでは、アイコンが表示されません。

以下の手順で、アイコンが表示されるようになります、
1.まずはgnome-gmail-notifierをインストール。
sudo apt-get install gnome-gmail-notifier
2.シェルで以下を実行、
gsettings set com.canonical.Unity.Panel systray-whitelist "['all']"
3.自動起動の設定。
  右上のアイコンで「Startup Applications...」(英語モードなので)をクリックし、設定を追加。
  内容はこんな感じ。
4.ログアウトしてログイン。

あとはアカウントの設定を追加する。

Unity 2Dを使っている場合でアイコンが表示されない場合は、
gsettings set com.canonical.Unity.Panel systray-whitelist "['Gnome-gmail-notifier']"
として再度ログアウトとしてログイン。

2012年2月24日金曜日

Aptana Studio 3は結局イマイチ

Aptana Studio 3をスタンドアロンでインストールしたら
xdebugでのPHPがデバッグ出来なくて残念だったのですが。

Eclipseのプラグイン版もあったなーと思ってそれを入れてみたところ、
やっぱりデバッグできなくなってしまいました。
ブレークポイントで止まってくれません。
「先頭でデバッグ」は止まるのですがそれじゃどうにも。

coffeeとかlessのシンタックスハイライトだけ出来りゃいいんだけどなあ。

ちなみにプラグインをアンインストールしたらとりあえず元の状態に戻れました。
PHPのデバッグは出来るようになっても、なにやら起動時に
An internal error occurred during: "Loading bundle: /home/XXXXXX/.eclipse/org.eclipse.platform_3.7.0_155965261/configuration/org.eclipse.osgi/bundles/174/1/.cp/bundles/coffeescript.ruble".
(LoadError) no such file to load -- ruble/ui
とか出たりPreferencesの画面やメニューバー[Window][Help]のところに「Aptana」みたいなのが残って
とても気持ちが悪い。

以下、自己責任で。
1.Eclipseを終了。
2.ホームディレクトリ以下にある
 .eclipse/org.eclipse.platform_3.7.0_155965261/plugins
 以下の、「com.aptana」で始まるディレクトリを全消し。
3.Eclipseを起動。
4.落ちたらeclipseに関するプロセスが動いていないか確認して動いていたら殺す。
5.3に戻る

2012年2月12日日曜日

djangoのmodels.pyの分割

models.pyを分割してみた。

こんな感じのdjangoアプリがあるとして
+ [app]
    + models.py
    + views.py
    + その他
models.pyの中にはモデルクラスAaaとかBbbとかがあるとする。

こんな感じにしてみた。
+ [app]
    + [models]
        + __init__.py
        + Aaa.py
        + Bbb.py
    + views.py
    + その他

Aaa.py は普通にこんな感じに書くだろうとして、
# -*- coding: UTF-8 -*- 
from django.db import models

class Aaa(models.Model):
    name = models.CharField(max_length=50)

    class Meta(object):
        app_label = 'app'

__init__.pyはこう書けばこれはこれでいいっぽいんだけど
from Aaa import *
from Bbb import *

思いつきの開発中にモデルを色々こねくり回す事を考えると
ソースファイル作ったり消したりした後に
いちいち__init__.pyを直すのも面倒だなーと思い、
何とかならないか色々試行錯誤した挙句…。
__scope = locals()

def __modelLoader():
    import inspect
    import os
    curdir = os.path.dirname(__file__)
    for file in os.listdir(curdir):
        root,ext = os.path.splitext(file)
        if root[0] not in ['_','.'] and ext == ".py":
            obj = __import__(root,globals(),locals())
            for att in dir(obj):
                if att[0] not in ['_']:
                    attobj = getattr(obj,att)
                    if inspect.isclass(attobj):
                        __scope[attobj.__name__] = attobj

__modelLoader()
del __scope

とてもとてもうさんくさい。
配列外のlocals()の戻り配列に追加とか、アリなのか?

とりあえず、動いてはいるっぽい。
新しくCcc.pyを書き足してmanage.py syncdbすると新しくテーブルも作られた。

どう考えても、modelが固まったら普通にimportの列挙に替えるべき…。

2012年2月8日水曜日

Windows版Ubuntu Oneがうまく動かなくなった場合の対処法

ふと、Windows7にいれたUbuntu Oneがまともにファイルの同期をしてくれていない事に気付いた。
常駐プロセスなどを立ち上げ直してみてもダメ。

情報を探す。あった。
http://ubuntuforums.org/showpost.php?p=11495412&postcount=7

途中のパスがXP仕様なので、Windows7向けに書くと

1.タスクマネージャで「ubuntu」と入っているexeを全て終了させる。
2.C:\Users\【ユーザ名】\AppData\Local\xdg\ubuntuone\syncdaemon\tritcask にあるファイルを全消し。
3.Ubuntu Oneを起動する。

となる。
これでひとまず復活。

2012年2月4日土曜日

gitで過去を改ざんする(5/5)


ではgit rebaseでガッと行きます。
変更を施す一つ前のリビジョンを指定。
$ git rebase -i 40e910ba
こんなのがエディタで開きます。
pick f1cf7c1 途中まで(早春賦)
pick a5bdfe7 誤字を修正
pick b3d4dfa 歌詞を最後まで(早春賦)
pick 20899eb 途中まで(椰子の実)
pick fe623a8 レイアウトを修正
pick 85767e2 歌詞を最後まで(椰子の実)
pick 94fba12 作詞者を追加(早春賦)
pick 16d9acd 作詞者を追加(椰子の実)

# Rebase 40e910b..16d9acd onto 40e910b
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
こんなふうに変更して保存します。
edit f1cf7c1 途中まで(早春賦)
fixup a5bdfe7 誤字を修正
edit b3d4dfa 歌詞を最後まで(早春賦)
edit 20899eb 途中まで(椰子の実)
fixup fe623a8 レイアウトを修正
edit 85767e2 歌詞を最後まで(椰子の実)
edit 94fba12 作詞者を追加(早春賦)
fixup 16d9acd 作詞者を追加(椰子の実)
(以下略)
詳細はコメントになっている部分を読んでください。
fixupとしているものは、その上の行に混ぜ込まれます。
editは、コミットログを書き換えるためです。

保存するとこんなメッセージが出てきます。
Stopped at f1cf7c1... 途中まで(早春賦)
You can amend the commit now, with

 git commit --amend

Once you are satisfied with your changes, run

 git rebase --continue

--amendでコミットログを書き換えます。
$ git commit --amend -m "早春賦を途中まで"
[detached HEAD 79526ef] 早春賦を途中まで
 1 files changed, 4 insertions(+), 0 deletions(-)
 create mode 100644 sousyunfu.txt
$
一旦終わったように見えますが、まだrebaseの途中です。
$ git rebase --continue
[detached HEAD 63992fe] 早春賦を途中まで
 1 files changed, 4 insertions(+), 0 deletions(-)
 create mode 100644 sousyunfu.txt
Stopped at b3d4dfa... 歌詞を最後まで(早春賦)
You can amend the commit now, with

 git commit --amend

Once you are satisfied with your changes, run

 git rebase --continue
同様にやっていきます。
$ git commit --amend -m "早春賦を最後まで"
$ git rebase --continue
$ git commit --amend -m "椰子の実を途中まで"
$ git rebase --continue
$ git commit --amend -m "椰子の実を最後まで"
$ git rebase --continue
$ git commit --amend -m "作詞者を追加"
$ git rebase --continue
一番最後にこう出ます。
Successfully rebased and updated refs/heads/work_3.
$



Eclipseで見てみると…
出来上がりです!
ORIG_HEADの枝はこの後mergeか何かすれば動いて消えるので、気にしなくてもOKです。



おっと、ブランチ名がwork_3では格好がつかない。
$ git branch -m work_3 master



完了。

gitで過去を改ざんする(4/5)


分割したので、次は結合していきます。
目的の形に結合しながら作っていく事もできますが、
まずcherry-pickを使ってまず並べ替えてしまう事にします。



スタートはこの状態。(3/5の最後の状態)
40e910ba「初期コミット」からbranchを作ります。
(0b291edf「途中まで(早春賦)」からでもいいですが)
$ git branch work_3 40e910ba
$ git checkout work_3



cherry-pickしていきます。
$ git cherry-pick 0b291edf
[work_3 f1cf7c1] 途中まで(早春賦)
 1 files changed, 4 insertions(+), 0 deletions(-)
 create mode 100644 sousyunfu.txt
こんなことになりますが気にせずcherry-pickしていきます。
$ git cherry-pick 36e6ca31
[work_3 a5bdfe7] 誤字を修正
 1 files changed, 1 insertions(+), 1 deletions(-)

$ git cherry-pick eccb4de3
[work_3 b3d4dfa] 歌詞を最後まで(早春賦)
 1 files changed, 2 insertions(+), 0 deletions(-)
途中経過。



「作詞者を追加」はおいておいて、椰子の実の方をcherry-pick。
$ git cherry-pick 8eb28748
[work_3 8e9bf2c] 途中まで(椰子の実)
 1 files changed, 4 insertions(+), 0 deletions(-)
 create mode 100644 yashinomi.txt

$ git cherry-pick dcf7a7f6
error: could not apply dcf7a7f... レイアウトを修正
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add ' or 'git rm '
hint: and commit the result with 'git commit'
おおっと。
椰子の実

<<<<<<< HEAD
名も知らぬ 遠き島より
流れ寄る 椰子の実一つ
=======
名も知らぬ遠き島より
流れ寄る椰子の実一つ
故郷の岸を離れて
汝はそも波に幾月
>>>>>>> dcf7a7f... レイアウトを修正
きちんと修正。
椰子の実

名も知らぬ遠き島より
流れ寄る椰子の実一つ
保存してaddしてcommit。
$ git add yashinomi.txt
$ git commit -m "レイアウトを修正"
[work_3 fe623a8] レイアウトを修正
 1 files changed, 2 insertions(+), 2 deletions(-)

$ git cherry-pick 17293681
error: could not apply 1729368... 歌詞を最後まで(椰子の実)
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add ' or 'git rm '
hint: and commit the result with 'git commit'
また失敗。
行の末尾に改行が入っていなかったのが問題だったかな。

直す。
椰子の実

名も知らぬ遠き島より
流れ寄る椰子の実一つ
故郷の岸を離れて
汝はそも波に幾月
addしてcommit。
$ git add yashinomi.txt
$ git commit -m "歌詞を最後まで(椰子の実)"
若干ゴタゴタしましたがこんな形に。



作詞者も追加。
$ git cherry-pick 667a4a79
$ git cherry-pick 670d4aff
こうなった。



確認。
$ git diff master
OK。
これで並べ替え完了。



要らないブランチを削除。
$ git branch -d work_1
$ git branch -d work_2
masterも一旦削除。
$ git branch -d master

少しゴニョゴニョしているのでORIG_HEADがうろうろしているのは無視してください。

つづく。

gitで過去を改ざんする(3/5)


次は「歌詞を最後までと作詞者を追加、を1ファイルずつにわけつつ歌詞と作詞者も別に」をやります。
基本的にやることは一緒ですが、歌詞の追加と作詞の追加を別コミットにするためにgit addで-pオプションを使います。



「歌詞を最後までと作詞者を追加」をwork_2ブランチとします。
$ git branch work_2 6c25eb04
$ git checkout work_2



同様にreset。
$ git reset 8eb28748
ORIG_HEADが移動した事で紐付けが無くなったブランチは非表示になりました。



ここで、git add を -pオプション付きで実行します。
$ git add -p sousyunfu.txt
diff --git a/sousyunfu.txt b/sousyunfu.txt
index bd56e50..6b6961a 100644
--- a/sousyunfu.txt
+++ b/sousyunfu.txt
@@ -1,4 +1,7 @@
 早春賦
+吉丸一昌
 
 春は名のみの 風邪の寒さや
 谷の鶯 歌は思えど
+時にあらずと 声も立てず
+時にあらずと 声も立てず
Stage this hunk [y,n,q,a,d,/,s,e,?]? 
この作詞者と歌詞の部分を分けたいので、sを入力します。
Stage this hunk [y,n,q,a,d,/,s,e,?]? s
Split into 2 hunks.
@@ -1,4 +1,5 @@
 早春賦
+吉丸一昌
 
 春は名のみの 風邪の寒さや
 谷の鶯 歌は思えど
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? 
何となく先に歌詞の方をaddしたいので、nを入力します。
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? n
@@ -2,3 +3,5 @@
 
 春は名のみの 風邪の寒さや
 谷の鶯 歌は思えど
+時にあらずと 声も立てず
+時にあらずと 声も立てず
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? 
ここをaddしたいので、yを入力します。
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? y

$



commitします。
$ git commit -m "歌詞を最後まで(早春賦)"
こうなります。

diffはこうなります。
歌詞の部分だけがコミットされました。



残りの作詞の部分をコミットします。
$ git add sousyunfu.txt
$ git commit -m "作詞者を追加(早春賦)"



もう一方も同様に。
$ git add -p yashinomi.txt
(略)
$ git commit -m "歌詞を最後まで(椰子の実)"
$ git add yashinomi.txt
$ git commit -m "作詞者を追加(椰子の実)"
こうなりました。



またrebaseします。
$ git checkout master
$ git rebase work_2

ひとまず分割は完了。

gitで過去を改ざんする(2/5)


まず今のヒストリーの中で、必要なところを分解したブランチを作成してみます。

分解する必要があるのは以下。
・途中まで、を1ファイルずつに
・歌詞を最後までと作詞者を追加、を1ファイルずつにわけつつ歌詞と作詞者も別に

やっていきましょう。

「途中まで」をwork_1ブランチに分割し、チェックアウト。
$ git branch work_1 e444489f
$ git checkout work_1
Eclipseの画面で見るとこんな状態。



git resetで、「『途中まで』のコミットをする直前の状態」に時間を巻き戻します。
$ git reset 40e910ba
Eclipseの画面で見るとこんな状態になります。
ディレクトリツリーはこうなって、ファイル追加前の状態になっています。
ファイルもこの通り「途中まで」の内容のままです。



一つずつコミットしていきます。
$ git add sousyunfu.txt
$ git commit -m "途中まで(早春賦)"
こんな状態になります。



もう1ファイルもコミット。
$ git add yashinomi.txt
$ git commit -m "途中まで(椰子の実)"
こうなりました。



この状態でe444489f「途中まで」と 8eb28748「途中まで(椰子の実)」は全く同じ内容になっているはずです。
確認方法はこう。
$ git diff e444489f 8eb28748
何も出なければ、差異なし。



さてここで、今のmasterを8eb28748「途中まで(椰子の実)」(=work_1)から959f5666「歌詞を最後までと作詞者を追加」に繋がった形にしてみます。
まずは今いる位置をwork_1からmasterに移動します。
$ git checkout master
こうなります。HEADがmasterの位置に来ます。



そして、git rebaseを実行。
$ git rebase work_1
First, rewinding head to replay your work on top of it...
Applying: 途中まで
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
Applying: 歌詞を最後までと作詞者を追加
Applying: 誤字を修正
Applying: レイアウトを修正
$
これでこんな事になります。

つづく。

gitで過去を改ざんする(1/5)

過去を改ざんしてみる。

サンプルのリポジトリの初期状態はこんな感じ。


それぞれ状態はこんな感じ。
リビジョン(コメント)sousyunfu.txtyashinomi.txt
初期コミット
.projectファイル(特に意味はない)
途中まで
早春賦

春は名のみの 風邪の寒さや
谷の鶯 歌は思えど
椰子の実

名も知らぬ 遠き島より
流れ寄る 椰子の実一つ
歌詞を最後までと作詞者を追加
早春賦
吉丸一昌

春は名のみの 風邪の寒さや
谷の鶯 歌は思えど
時にあらずと 声も立てず
時にあらずと 声も立てず
椰子の実
島崎藤村

名も知らぬ 遠き島より
流れ寄る 椰子の実一つ
故郷の岸を離れて
汝はそも波に幾月
誤字を修正
早春賦
吉丸一昌

春は名のみの 風の寒さや
谷の鶯 歌は思えど
時にあらずと 声も立てず
時にあらずと 声も立てず
レイアウトを修正
椰子の実
島崎藤村

名も知らぬ遠き島より
流れ寄る椰子の実一つ
故郷の岸を離れて
汝はそも波に幾月

これを最終的にこんな風にしてみようと思います。
リビジョン(コメント)sousyunfu.txtyashinomi.txt
初期コミット
.projectファイル(特に意味はない)
早春賦を途中まで
早春賦

春は名のみの 風の寒さや
谷の鶯 歌は思えど
「途中まで」+「誤字を修正」
早春賦を最後まで
早春賦

春は名のみの 風の寒さや
谷の鶯 歌は思えど
時にあらずと 声も立てず
時にあらずと 声も立てず
「歌詞を最後までと作詞者を追加」+「誤字を修正」ー作詞者
椰子の実を途中まで
椰子の実

名も知らぬ遠き島より
流れ寄る椰子の実一つ
「途中まで」+「レイアウトを修正」
椰子の実を最後まで
椰子の実

名も知らぬ遠き島より
流れ寄る椰子の実一つ
故郷の岸を離れて
汝はそも波に幾月
「歌詞を最後までと作詞者を追加」+「レイアウトを修正」ー作詞者
作詞者を追加
早春賦
吉丸一昌

春は名のみの 風の寒さや
谷の鶯 歌は思えど
時にあらずと 声も立てず
時にあらずと 声も立てず
椰子の実
島崎藤村

名も知らぬ遠き島より
流れ寄る椰子の実一つ
故郷の岸を離れて
汝はそも波に幾月
作詞者を追加

続く。

2012年2月1日水曜日

mysqldump使って特定の行をinsert文の形で取り出す

単なるmysqldumpの使い方メモ。

誤って消してしまったデータを別なサーバに復元したバックアップからピンポイントで戻すために使う。

mysqldump -u【ユーザ】 -p【パスワード】 【スキーマ名】 【テーブル名】 --compact -t "--where=【where句】"

パイプで繋いで、mysqlコマンドで戻し先に直接突っ込むもよし。