[core] attributesfile = /Users/user/.dotfiles/git/.gitattributes
火曜日, 3月 09, 2021
~/.gitconfig を ~/.config/git/config に移しました
火曜日, 2月 02, 2021
コミットログ(コミッター、コミッターのメールアドレス)を書き換える方法【改】
こちらの過去記事に従って、コミットログ(コミッター、コミッターのメールアドレス)を変えようとしたら以下のエラーが表示されたので、修正することにしました。
コミットログ(コミッター、コミッターのメールアドレス)を書き換える方法
表示されたエラーメッセージ
WARNING: git-filter-branch has a glut of gotchas generating mangled history rewrites. Hit Ctrl-C before proceeding to abort, then use an alternative filtering tool such as 'git filter-repo' (https://github.com/newren/git-filter-repo/) instead. See the filter-branch manual page for more details; to squelch this warning, set FILTER_BRANCH_SQUELCH_WARNING=1.
なんでも git-filter-branch は不具合や実行速度が遅いので、今は Python で書かれた git-filter-repo を使うように勧められているようです。
こちらに git-filter-branch でのコマンドを git-filter-repo に書き換えるチートシートが用意されているのでこちらを見ながら、前回のブログ記事のコマンドを書き直すことにしました。
git-filter-repo/converting-from-filter-branch.md at main · newren/git-filter-repo
自分のやりたいことは間違ったメールアドレスを参照して間違ったメールアドレスのユーザー名、メールアドレスを変更することです。
従ってこちらのリンク先の git-filter-branch の例を git-filter-repo の例に書き換えます。
まずは git-filter-repo をインストールします。
インストール方法は、git-filter-repo のレポジトリに書いてありますが、パッケージツールを使ってインストールします。
サポートされているパッケージツールについては、git-filter-repo のレポジトリを参考にしてみて下さい。
git-filter-repo/INSTALL.md at main · newren/git-filter-repo
自分は、Mac の homebrew を使っているので、brew コマンドでインストールします。
$ brew install git-filter-repo
その後 .mailmap というファイル名でファイルを作り、間違ったメールアドレスと正しいユーザー名正しいメールアドレスを入力しておきます。
correct_name <correct_email@example.com> <wrong_email@example.com>
その状態で以下のコマンドを実行します。
$ git filter-repo --use-mailmap
こちらで上手くいくと思ったのですが、上手く変更されませんでした。
メールアドレスではなく、ユーザー名だと上手く行きました。
correct_name <correct_email@example.com> wrong_name
調べてみると git-filter-branch と似たような形式で変更できるコマンドが見つかりました。
How to change the author and committer name and e-mail of multiple commits in Git?
こちらを参考に変更してみます。
$ git filter-repo --commit-callback ' old_email = b"wrong@example.com" correct_name = b"correct" correct_email = b"correct@example.com" if commit.committer_email == old_email : commit.committer_name = correct_name commit.committer_email = correct_email if commit.author_email == old_email : commit.author_name = correct_name commit.author_email = correct_email '
しかし、こちらでも上手く行かなかったので、email ではなく name を参照して変更することにしました。
$ git filter-repo --commit-callback ' old_name = b"wrong" correct_name = b"correct" correct_email = b"correct@example.com" if commit.committer_name == old_name : commit.committer_name = correct_name commit.committer_email = correct_email if commit.author_name == old_name : commit.author_name = correct_name commit.author_email = correct_email '
すると、この方法では期待通りの結果を得ることが出来ました。
email では上手く変更が出来ず、name だと上手く変更が出来る理由は分かりませんでしたが、得たい結果が得られたのでヨシとします。
以上でおしまいです。
git-filter-branch を使うよりも .mailmap を使う場合はずっと簡単になります。
エラーメッセージも出ないし、精神的な負担も軽くすることができますね!
皆さんも試してみてください。
月曜日, 5月 20, 2019
gitconfig で会社用アカウントと個人用アカウントを分ける
[git] gitconfigで会社用アカウントと個人用アカウントを楽に使い分けする - Qiita<
参考にした記事では、以下のファイル名ですが、自分なりに変更をしました。
変更前
- ~/.gitconfig
- ~/.gitconfig-work
- ~/.gitconfig-other
- ~/.gitconfig
- ~/.gitconfig_work
- ~/.gitconfig_personal
この辺は、自由に決めて良いと思います。
そして、オリジナルの ~/.gitconfig から [user] の箇所を削除して、~/.gitconfig_work, ~/.gitconfig_personal それぞれに [user] を追記します。
includeIf の gitdir に含まれていないディレクトリ内で git レポジトリを作成してコミットすると、ローカルのユーザ名とマシン名(例: user1@iMac.lan)などでコミットされます。
デフォルトで name, email を設定しておきたい場合は、~/.gitconfig に [user] の設定を残して置くのが良いと思います。
ここまで設定をして、いざ、コミット!!
としてみると、思ったようなユーザ名でコミットされません。。。
原因は、includeIf の gitdir のディレクトリ名の最後に / を付けるのを忘れていたからでした。。。
こんなミスするの、自分だけなんだろうなぁ・・・。
(´・ω・`)
そして、更に設定をしてみましたが、どうやら指定したユーザ名になる時とならない時があります。
その原因は、階層の高いディレクトリ (~/dev/) を階層の低いディレクトリ (~/dev/project1/) の後に指定しているからでした。
includeIf の gitdir は、最後にマッチした条件のファイルが適用されるので、階層の高いディレクトリから順々に指定する必要があります。
最終的なファイル内容は、以下の通りです。
~/.gitconfig
# config for personal [includeIf "gitdir:~/dev/"] path = ~/.dotfiles/git/.gitconfig_personal # overwrite specific projects # config for work [includeIf "gitdir:~/dev/project1/"] path = ~/.dotfiles/git/.gitconfig_work~/.gitconfig_personal
[user] name = me email = me@personal.example.com~/.gitconfig_work
[user] name = me email = me@work.example.com将来の自分のために書き残しておきます。。。
次回は、こんなポカをしませんように。。。😅
土曜日, 2月 23, 2019
コミットログ(コミッター、コミッターのメールアドレス)を書き換える方法
現在は、git-filter-branch よりも git-filter-repo を使うことが推奨されています。
こちらの記事を参考にして git-filter-repo を使うようにしてみて下さい。
コミットログ(コミッター、コミッターのメールアドレス)を書き換える方法【改】
超久しぶりのブログ更新。
将来の自分のためにメモを残しておこうと思う。
ローカルで git 管理しているレポジトリを github に上げたら、レポジトリを作成したアカウントとは異なるアカウントでコミットしたことになっていた。
手順としては、user1 でレポジトリを作成して、その user1 のレポジトリにローカルのレポジトリを push したのに、何故か user2 のコミット履歴が表示された。
原因は、なんのことはない。ローカルのレポジトリには user2 でコミットしてた。。。😅
~/.gitconfig には以下のように設定されていたので、
[user] email = user2@example.com name = user2
$ git config user.name "user1" $ git config user.email "user1@example.com"
--global オプションをつけると ~/.gitconfig の設定が変更され、user.name、user.email の設定がされていないレポジトリは、すべて user1 のコミットになってしまう。つまり、グローバルに設定がされてしまう。😆
今回、github に push したレポジトリだけに限定したかったので、--global オプションは付けなかった。
しかし、これだと過去のコミットの user.name や user.email はそのままなので、それを修正する必要がある。
なので、こちらのページを参考に、修正をした。
How can I change the author (name / email) of a commit?
$ git filter-branch --env-filter '
WRONG_EMAIL="user2@example.com"
NEW_NAME="user1"
NEW_EMAIL="user1@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
このコマンドを実行すると、過去のコミットすべてを書き換えるので、注意して実行する。
金曜日, 5月 09, 2014
Ubuntu 14.04 起動時に無線 LAN につながらない問題を /etc/pm/power.d/wireless の新規作成で解決しました
超久し振りにブログの更新。
最近、古い iMac (確か、2007年くらいに買って、購入時に入っていた OS は Leopard)に Ubuntu 14.04 を入れたのだが、起動時に無線 LAN につながらないという問題が発生していた。再起動をすることで、一応は無線 LAN につながるようにはなるのだけれども、使いたい時に毎回、起動、再起動をしないとインターネットにつながらないのはちょっと不便なので、修正をした。
結論としては、以下のリンクにある通りに実行するだけで、問題解決した!
networking - Cannot connect to wireless in Lubuntu 14.04 - Ask Ubuntuやったこととしては、/etc/pm/power.d/wireless を新規作成して、以下の内容を記述しただけ。ファイルが存在していなかったので、新規作成をする必要があったけれども、それ以外は /etc/network/interfaces に必要な記述がされているかを確認するだけだった。
$ sudo vi /etc/pm/power.d/wireless #!/bin/sh /sbin/iwconfig wlan0 power off
これで、少しは時間の節約になるね。良かった!
火曜日, 7月 24, 2012
ターミナルでの処理が終わったらGrowlで知らせる方法
こちらに掲載されていた内容の横流し。
ターミナルでの処理が終わったらDockアイコンを跳ねさせ未読バッヂを表示、警告音も鳴らす方法 - Macの手書き説明書
"&& tput bel" をコマンドの後につけるだけ。"bell" ではなく "bel" なので注意。
$ ping -c 5 www.google.com && tput bel
とかすると、ping が終了した後に Growl でお知らせしてくれる。ターミナルがアクティブ状態になっていないことが条件のようだ。
因みに、エラー音も出る。エラー音の設定は、System Preferences の Sound で出来る。
自分はデフォルトの Funk を利用している。
地味に便利なので使ってみて!!
火曜日, 6月 19, 2012
emacs-w3m 実行時に Wrong type argument: arrayp, nil のエラー
突然ですが emacs-w3m をインストールすることにした。
まずは、いつものように環境から。
環境
- Mac OS X Version 10.6.8
- GNU Emacs 24.1.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-06-10 on bob.porkrind.org
- emacs-w3m-1.4.4
インストール
こちらのページを参考にして、emacs-w3m をインストールした。
【参考】EmacsでWebページをみる。(Emacs-w3m) - redtower's memo$ wget http://emacs-w3m.namazu.org/emacs-w3m-1.4.4.tar.gz $ tar zxvf emacs-w3m-1.4.4.tar.gz
$ cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co emacs-w3m $ cp -pr emacs-w3m/* emacs-w3m-1.4.4
$ cd emacs-w3m-1.4.4 $ ./configure --prefix=~/.emacs.d/elisp/emacs-w3m $ make $ make install
~/.emacs に以下の内容を記述。
(add-to-list 'load-path "~/.emacs.d/emacs-w3m/share/emacs/site-lisp/w3m") (add-to-list 'Info-additional-directory-list "~/.emacs.d/elisp/emacs-w3m/share/info") (require 'w3m-load)
エラーへの対応
M-x w3m として w3m を起動する。しかし、起動時に以下のエラーが表示され、起動に失敗する。
Wrong type argument: arrayp, nil
以下のページを参照すると、Emacs 22 未満でバイトコンパイルした *.elc を Emacs 23 でロードしているのが原因とのこと。
【参考】Re: (wrong-type-argument arrayp nil) in w3m-ems「*.elc を直接開いてみると、先頭の方にバイトコンパイルした Emacs のバージョンが記載されている」とのことなので、インストールされた w3m.elc の先頭を確認してみると Emacs 22.1.1 でバイトコンパイルされていた。
「おかしい。。。自分の使っている Emacs は 24.1.1 だぞ。。。」と思い、コマンドプロンプトにて Emacs のバージョンを確認してみた。
$ which emacs /usr/bin/emacs $ emacs --version GNU Emacs 22.1.1
ということで、Emacs 22.1.1 がバイトコンパイルに使われていることが判明した。これは、GUI で使っている Emacs と CUI で使っている Emacs が別のバージョンの Emacs であったことに原因がある。
- CUI - /usr/bin/emacs
- GUI - /Applications/Emacs.app/Contents/MacOS/Emacs
それぞれ CUI は 22.1.1、GUI は 24.1.1 であった。
よって、GUI の Emacs で w3m.el を開き、M-x byte-compile-file で w3m.el をバイトコンパイル。するとコンパイルエラー。先ほどのページのスレッドを辿ると「w3m-ems.el でエラーになる」とのことだったので、w3m-ems.el をコンパイルした後に、w3m.el をバイトコンパイル。
【参考】Re: (wrong-type-argument arrayp nil) in w3m-emsすると今度は、バイトコンパイルに成功!!
そして、M-x w3m をするとエコーエリアに以下のエラー。
Searching for program: No such file or directory, /usr/bin/w3m
/usr/bin/w3m にシムリンクを貼る。
$ which w3m /usr/local/bin/w3m $ sudo ln -s /usr/local/bin/w3m /usr/bin/w3m
をして、M-x w3m をしたところ、無事に emacs-w3m を起動することが出来ました!!
しかし、よくよく先ほどのスレッドのページを見なおしてみると「EMACS を指定するようにして解決しました。」とのこと。以下のように make 実行時に EMACS を指定してインストールすると、無事に emacs-w3m をインストールすることが出来た。。。手動で w3m.el や w3m-ems.el をバイトコンパイルする必要なんてなかった。。。
$ ./configure --prefix=~/.emacs.d/elisp/emacs-w3m $ make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs $ make install
何はともあれ、emacs-w3m が動いて良かった!!これで次のステップに進めるょっ!!
(・∀・)土曜日, 3月 17, 2012
Command+Tab で Finder を表示しないようにする方法
こちらのリンクを参考にやってみた。Command+Tab でアプリを選択している時に誤って Finder が選択されてしまうことが時々あったので、この Tips はとても嬉しい。
ほぼリンク先のまんまの記事で申し訳ないが、リンク先にある手順を実行するだけで簡単に設定することが出来る。
環境
- Mac OS X Version 10.6.8
$ su - # vi /System/Library/CoreServices/Finder.app/Contents/Info.plist
dict ノードの下に以下を追加する。
< key > NSUIElement < /key > < string > 1 < /string >
Doc にある Finder を Option キーを押したまま右クリックして、「Relaunch」を選び、Command+Tab で Finder が表示されないことを確認。
これは便利だ!!
(・∀・)イイ!!
金曜日, 9月 02, 2011
bm.el の色の設定を変更してみた
背景
以前、bm.el をインストールした訳だが、デフォルトの色がちょっと見にくかったので変更してみた。【参考】自分のための日記: bm.el を入れてみた
環境
- Mac OS X Version 10.6.7
- GNU Emacs 22.3.1 (i386-apple-darwin9.8.0, Carbon Version 1.6.0) of 2010-01-09 on gs674-seijiz.local
- bm.el,v 1.55
デフォルトの色
デフォルトの色は、こんな感じ。文字の色は白で、背景は紺っぽい色。文字の色が単色であれば、そんなに問題ないようにも思えるが、ソースコードなどは型名、クラス名、メソッド名、リターンタイプ、予約語などは色付けされているので、紺だとちょっと色が強すぎる気が。。。あと、文字色がすべて白になってしまうのも、ソースコードを読むとき、コーディングしているときに見づらいと思った。
デフォルトの色の変更
bm.el 内で color で検索したら、この辺が出てきた。 (((class color)
(background light)) (:foreground "White" :background "DarkOrange1"))
(((class color)
(background dark)) (:foreground "Black" :background "DarkOrange1")))
(((class color)
(background light)) (:foreground "White" :background "DarkBlue"))
(((class color)
(background dark)) (:foreground "White" :background "DarkBlue")))
(((class color)
(background light)) (:foreground "White" :background "DarkOrange1"))
(((class color)
(background dark)) (:foreground "Black" :background "DarkOrange1")))
(((class color)
(background light)) (:foreground "White" :background "DarkBlue"))
(((class color)
(background dark)) (:foreground "White" :background "DarkBlue")))
bm-persistent-face, bm-fringe-persistent-face に設定されている以下の色が怪しい、と思った。
(:foreground "White" :background "DarkBlue")
自分のバックグラウンドは白で明るいので (background light)の行を変更する。という訳で、399行と434行の設定を以下のように変更してみた。
- 変更前
(background light)) (:foreground "White" :background "DarkBlue"))
- 変更後
(background light)) (:background "LightGreen"))
設定を変更して、Emacs を再起動。
すると、何も変わらなかった。。。
Σ(゚Д゚;)ガーーーン!
よくよく bm.el のある ~/.emacs.d/auto-install ディレクトリを見ると、bm.elc ファイルがある。という訳で、bm.el をバイトコンパイル。
M-x byte-compile-file[Enter] ~/.emacs.d/auto-install/bm.el
そして、Emacs を再起動。
すると、ブックマークの色が期待した色になりましたー!
(・∀・)!
こちらの方が、foreground のカラーは維持されるし、background のカラーもどぎつくないので、断然見やすいのではないでしょうか?
因みに、今回は bm-persistent-face, bm-fringe-persistent-face の両方を変更しましたが、bm-persistent-face を変更するだけで、所望の結果が得られることが分かりました。lisp の書き方が分からないので、emacs の設定をするときは毎回「トライ&エラー」なのが悲しいところ。。。
(´・ω・`)
土曜日, 6月 11, 2011
Mac OS X で Java のアップデート
背景
JPCERT/CC からの 注意喚起にて、Java SE のクリティカルパッチアップデートがあることを知る。Java SE 6 Update 26 にアップデートする必要があるようだ。環境
現在の環境は、以下の通りです。- Mac OS X version 10.6.7
現状確認
JPCERT/CC によると、以下のページで Java のバージョンの確認が出来るようだ。Java のバージョンの確認
実際に確認してみたところ、以下のページが表示された。
Mac をお使いの場合: お使いの Mac に最新バージョンの Java がインストールされているかどうかを確認するには、アップルメニューのソフトウェアアップデート機能を使用します。
とのことだが、ソフトウェアアップデート機能を使用しても何の更新も起こらない。
iTerm2 から以下のコマンドを入力すると、古いバージョン(1.6.0_24)のままであることが分かる。
$ java -version
対策
以下の自分のブログの記事を参考にして、"Java for 10.6 Update 5" をインストールした。自分のための日記: Eclipse で rt.jar のソースを見る方法
インストールすると、/Library/Java/JavaVirtualMachines に 1.6.0_24-b07-334.jdk の他に 1.6.0_26-b03-377.jdk がインストールされていることが分かる。
ついでだから、上記の自分のブログを参考に、Eclipse で使う JRE を 1.6.0_26 の JRE に変更しておいた。
因みに、1.6.0_24-b07-334.jdk は必要なさそうというか、以下の記事を参考にすると「旧バージョンの Java は削除することを推奨する」とのことだったので削除した。
JDK および JRE 6 Update 26 が公開されています - 特に重要なセキュリティ欠陥・ウイルス情報
1.6.0_24-b07-334.jdk を削除するとどうでしょう。java -version とコマンドを入力すると、バージョンが 1.6.0_26 となっていることを確認することが出来ました。
感想
あれ?おかしくない?java コマンドは /usr/bin/java にあり、/usr/bin/java は /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java へのシムリンクになっている。$ which java /usr/bin/java $ ls -l /usr/bin/java (略)java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java の親フォルダが /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin へのシムリンクになっているのかと思ったが、そうではないようだ。
「現状確認」でも確認したように、Mac の場合、「最新バージョンの Java がインストールされているかどうかを確認するには、アップルメニューのソフトウェアアップデート機能を使用」するしかないようなので、ソフトウェアアップデートによって Java を最新の状態にすることでデフォルトの Java が最新の状態になるのかと思っていた。しかし、開発版の Java を入れることで Java が最新になった。
自分でも何がなんだか分からない。
Mac OS X 上にある java コマンドを探すと
$ find / -name java -type f 2>/dev/null /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin/java /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java /usr/share/file/magic/java
と表示される。それぞれのコマンドで java -version を実行してみた。
とする。
- /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin/java
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java
- /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
- /usr/share/file/magic/java
4. は、file コマンドが使う magicfile と呼ばれるデータベースのようだ。 【参考】 2005年4月 | 今日の一行 | column | OSS-Web
- java version "1.6.0_26"
- java version "1.6.0_26"
- java version "1.6.0_24"
- zsh: permission denied: /usr/share/file/magic/java
という訳で、システムにインストールされている Java で 1.6.0_26 のものは、
- /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin/java
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java
で、1.6.0_24 のものは、
- /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
だった。
「アップルメニューのソフトウェアアップデート機能を使用」することで、/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java のバージョンが 1.6.0_26 になるのではないか、と信じている。
金曜日, 6月 03, 2011
Eclipse で rt.jar のソースを見る方法
環境
- Mac OS X version 10.6.7
- Eclipse ( Version : Helios Service Release 2 )
ダウンロード
Developer Downloads & ADC Program Assets から "Java for Mac OS X 10.6 Update 4 Developer Package" をダウンロード(2011年6月3日現在での最新版)。インストール
ダウンロードした dmg ファイルを解凍してインストール。src.jar のパス
以下の手順に従って、src.jar があるパスを突き止める。- /Applications/Utilities から Java Preferences.app を起動する
- General タブにある "Java SE 6" をダブルクリックする
- 因みに、"Java SE 6 (System)" をダブルクリックしても何も起こらなかった
- 自分の CPU-Type は 32-bit だが、CPU-Type が 64-bit の "Java SE 6" をダブルクリックしても目的とするフォルダが開いた
- 1.6.0_24-b07-334.jdk を右クリックして Show Package Contents を選択する
- 1.6.0_24-b07-334.jdk/Contents/Home ディレクトリの中に src.jar があることを確認する
ということで、私の環境では src.jar は以下にインストールされていた。
/Library/Java/JavaVirtualMachines/1.6.0_24-b07-334.jdk/Contents/Home/src.jar
Eclipse の設定
- Eclipse メニューの Preferences を選択する
- Prefereces ダイアログの Java の Installed JREs を選択する
- Add をクリック
- MacOS X VM(多分)を選択して Next をクリック
- JRE Home に以下を入力する
/Library/Java/JavaVirtualMachines/1.6.0_24-b07-334.jdk/Contents/Home
- Directory... ボタンを押してディレクトリを選択する方式で行くと 1.6.0_24-b07-334.jdk が選択出来ない状態になっていて行き詰まる
- 名前は Home にする(適当)
- Finish をクリック
- デフォルトで使う JRE を Home にする
- 既存のプロジェクトを右クリックして Properties をクリック
- Java Build Path をクリックし、JRE System Library [JavaSE-1.6] をクリック
- Edit... をクリック
- ラジオボタンの Workspace default JRE (Home) をクリック
- Finish をクリック
- JRE System Library [Home] となっていることを確認する
- すべての既存のプロジェクトの System Library を JavaSE-1.6 から Home に変更する
既存のプロジェクトの1つを変更すると、あるプロジェクトは System Library が Home に勝手に変更され、あるプロジェクトは JavaSE-1.6 のままだった。System Library が自動で変更されなかったプロジェクトについては、手動で Home に変更した。
使い方
調べたいクラスやメソッドを選択した後、F3 を押すことで、クラス、あるいはメソッドのソースを見ることが出来る!!これは、便利だ!!
(・∀・)
感想
今まで、なんでエラーになっているかよく分からなかったところ、どういう実装になっているか興味のあったところなど、ソースをみてみたいと思う。特に Collection, Map, HashMap などは興味があるので見てみようと思う。火曜日, 5月 31, 2011
Carbon Emacs で使うフォントを Ricty にする
背景
最近、「プログラミング用フォント Ricty」というフォントが巷で噂になっているらしく、「試しに」ということで、iTerm2 のフォントを Ricty にしてみた。因みに、iTerm2 については、以下を参照。
iTerm2 - Mac OS Terminal Replacement
「フォントを変更したくらいじゃぁ、何も変わらないだろう。。。」と高を括っていたのだが、使っているうちに非常に読みやすいことが分かり感動した!!なので、普段 iTerm2 よりも頻繁に使っている Carbon Emacs のフォントも Ricty にすることにした。
奮闘
以下の複数のページを参考に、Ricty になるよう孤軍奮闘してみたが、どの設定をしても上手く行かない。。。- emacs で使うフォントをプログラミング用フォント Ricty にした。感動。 - わからん
- EmacsのフォントをRictyにした - もうカツ丼でいいよな
- Emacsのフォント設定を変えてみた - すぎゃーんメモ
- nao研究室: [Emacs]Carbon Emacsのフォント変更
- Carbon Emacsの(脱carbon-font)フォント設定 - 掃き溜め
- Carbon版 Emacs 22.1 のフォント設定
「なんだ、これはー。もうダメだ。」と諦めていたところ、ついに設定方法を発見しました。
環境
設定方法を書く前に、私の環境を晒しておきます。- Mac OS X version 10.6.7
- GNU Emacs 22.3.1 (i386-apple-darwin9.8.0, Carbon Version 1.6.0) of 2010-01-09 on gs674-seijiz.local
設定方法
Ricty をインストールした後、以下の内容を ~/.emacs に書いて Carbon Emacs を再起動することで設定内容が反映されます。(set-face-attribute 'default nil :family "Ricty" :height 140)
(set-fontset-font "fontset-default" 'japanese-jisx0208 '("Ricty" . "iso10646-*"))
参考にしたサイトでは「:height 160」となっていたが、160 では大き過ぎるので「:height 140」とした。勝手に「:height 140」としていいのかは不明。。。
参考サイト
以下のサイトを参考にしました。Mac de Emacs総合スレ v6
ありがとうございます。
感想
Ricty に変える前は、「フォントを変えるくらいでは何も変わらないのでは?」と思っていたのだが、Ricty にしてから非常に見やすくなった。特に濁点、半濁点の区別がしやすいのが気に入っている。ブラウザのフォントの設定も Ricty にしようかな?木曜日, 5月 26, 2011
bm.el を入れてみた
環境
- Mac OS X version 10.6.7
- GNU Emacs 22.3.1 (i386-apple-darwin9.8.0, Carbon Version 1.6.0) of 2010-01-09 on gs674-seijiz.local
参考
以下のページを参考にしました。- [sources] Log of /bm/bm/bm.el
- bm.el入れました - kenkov dialy
- bm.elでブックマーク一覧からブックマークにジャンプする - ぺっくブログミラー@peccul
基本、上記のページを参照して頂ければ、bm.el のインストールは出来ると思います。。。
(;・∀・)
インストール
Emacs の scratch buffer で以下のコマンドを入力して、C-j で実行する。(install-elisp "http://cvs.savannah.gnu.org/viewvc/*checkout*/bm/bm/bm.el")
上記のコマンドを入力すると、bm.el のソースがダウンロードされる。ダウンロードした後に、"C-c C-c to continue" と言われるので、C-c C-c を入力してインストールを行う。
install-elisp の引数には、http://cvs.savannah.gnu.org/viewvc/*checkout*/bm/bm/bm.el を指定する。ブラウザから http://cvs.savannah.gnu.org/viewvc/*checkout*/bm/bm/bm.el にアクセスすると、bm.el の最新のソースコードが表示される。
設定
設定をする上で、キーバインドを何にするか迷った。候補としては、参考にしたサイトを参考に以下が上がった。M-; M-: M-@ M-[ M-]
これらのキーバインドは、以下に割り当てられていた。
M-; ww-next-gtag M-: eval-expression M-@ mark-word M-[ (undefined) M-] (undefined)
M-@ に割り当てられている mark-word は何をする関数か調べてみる。
mark-word is an interactive compiled Lisp function in `simple.el'. It is bound to M-@. (mark-word &optional arg allow-extend) Set mark arg words away from point. The place mark goes is the same place M-f would move to with the same argument. Interactively, if this command is repeated or (in Transient Mark mode) if the mark is active, it marks the next arg words after the ones already marked.
単語ごとに選択が出来るようにする関数らしい。特に、使うこともないので、M-@、 M-[、M-] を使うことにした。
因みに、キーバインドがどんな関数に割り当てられているか、関数が何をするかの詳細を調べるには、以下のコマンドを利用する。
- キーバインドがどんな関数に割り当てられているか
[f1] - c
またはM-x help-for-help c
- 関数が何をするか
[f1] - f
またはM-x help-for-help f
詳細は、以下のページを参照。
いつもの操作がなんなのか調べる方法 - 32nd Diary(2010-12-12)
そういう訳で、M-@、M-[、M-] を使って設定をする。と言っても、bm.el入れました - kenkov dialy にある設定を ~/.emacs にコピペしてみました。。。
;;; bm.elの設定
;;; (install-elisp "http://cvs.savannah.gnu.org/viewvc/*checkout*/bm/bm/bm.el")
(require 'bm)
;; キーの設定
(global-set-key (kbd "M-@") 'bm-toggle)
(global-set-key (kbd "M-[") 'bm-previous)
(global-set-key (kbd "M-]") 'bm-next)
;; マークのセーブ
(setq-default bm-buffer-persistence t)
;; セーブファイル名の設定
(setq bm-repository-file "~/.emacs.d/bm-repository")
;; 起動時に設定のロード
(setq bm-restore-repository-on-load t)
(add-hook 'after-init-hook 'bm-repository-load)
(add-hook 'find-file-hooks 'bm-buffer-restore)
(add-hook 'after-revert-hook 'bm-buffer-restore)
;; 設定ファイルのセーブ
(add-hook 'kill-buffer-hook 'bm-buffer-save)
(add-hook 'auto-save-hook 'bm-buffer-save)
(add-hook 'after-save-hook 'bm-buffer-save)
(add-hook 'vc-before-checkin-hook 'bm-buffer-save)
;; Saving the repository to file when on exit
;; kill-buffer-hook is not called when emacs is killed, so we
;; must save all bookmarks first
(add-hook 'kill-emacs-hook '(lambda nil
(bm-buffer-save-all)
(bm-repository-save)))一つ変えたところは、セーブファイル名。ドットファイルから、通常のファイルにした。
- 変更前
(setq bm-repository-file "~/.emacs.d/.bm-repository")
- 変更後
(setq bm-repository-file "~/.emacs.d/bm-repository")
動作確認
~/.emacs を保存した後に、以下のコマンドを実行して ~/.emacs を読みなおす。
M-x load-file [return] ~/.emacs [return]
そして、M-@ でブックマークをし、M-[、M-] で前のブックマークに戻ったり、次のブックマークに進んだりする。
期待した通りの動作をしました!!
これで、少し速く開発できる!!と思う。
ヽ(´ー`)ノ
火曜日, 5月 24, 2011
Mac でピクセルの色を調べる方法
環境
- Mac OS X 10.6.7
手順
- 「Applications」フォルダの「Utilities」フォルダにある「DigitalColor Meter.app」を開く
- ドロップダウンリストから「RGB as Hex Value, 8-bit」を選択する
- 必要に合わせてスライドバーで「Aperture Size」を変更する
- 知りたいピクセルにマウスカーソルを合わせる
- Shift + Command + C でピクセルの色の値をコピーする
- エディタなどに値を貼り付ける
以上のことは、「Mac OS X 10.6 Help: ディスプレイに表示されている色を計測する」に書いてあります。。。
Mac OS X 10.5 を使っている場合は、以下を参照。
Mac OS X 10.5 Help: 色を HTML 書類またはグラフィックス書類にコピーする
また、画面上のピクセルの色の値を確認する「ColorSync ユーティリティ」なるアプリケーションもあるようだが、使い方がいまいち分からなかった。
Mac OS X 10.6 Help: 画面上のピクセルの色の値を確認する
(´・ω・`)
月曜日, 5月 23, 2011
ターミナルから Emacs を起動すると Symbol's function definition is void: fixed-width-set-fontset のエラー
環境
- Mac OS X version 10.6.7
- GNU Emacs 22.3.1 (i386-apple-darwin9.8.0, Carbon Version 1.6.0) of 2010-01-09 on gs674-seijiz.local
背景
普段は、Carbon Emacs を使っているが、時々、ターミナルから Emacs を使うことがあった。ターミナルから Emacs を起動した時に、以下のエラーが発生していた。Symbol's function definition is void: fixed-width-set-fontset
原因
以下の2行目でエラーが発生。if 文の中に fixed-width-set-fontset が入っていないことが原因だったようだ。(if (eq window-system 'mac) (require 'carbon-font)) (fixed-width-set-fontset "osaka" 10)
対策
以下のページを参考に、progn 式を使って、if 文の中に複数の式を書いて解決!!Lisp一夜漬け -- 1.Lispの書き方
(if (eq window-system 'mac) (progn (require 'carbon-font) (fixed-width-set-fontset "osaka" 10)))
感想
Osaka フォントは、carbon-font を require しないと使えない。なので、carbon-font の require と Osaka フォントの設定は、同時に行う必要がある。また、「if 文を取ってしまえ!」と思い、if 文を取って (require 'carbon-font) としてみたところ、ターミナルから起動した時に以下のエラーが発生。
File error: Cannot open load file, carbon-font
理由は Carbon Emacs じゃないから?詳細は不明。。。
あれ?Osaka フォント にしたときは、どこかから設定をコピーしてきて .emacs に貼り付けただけだと思うんだけどなぁ。。。コピーしたサイトも同様に設定に失敗していたか、もしくは、コピペに失敗したか、のどっちかだなぁ。。。
多分、後者。
(´・ω・`)
水曜日, 5月 18, 2011
Mac OS X で mail コマンドでメールを送る
環境
- Mac OS X version 10.6.7
- Postfix 2.5.5
因みに、Postfix のバージョンを調べるには、以下のコマンドを実行すると分かります。因みに、root アカウントでなくても出来ます。私は、出来ました。
$ postconf mail_version mail_version = 2.5.5
経緯
Linux を使っていたころは、$ mail hoge@example.com Subject: test test .
とかやれば、hoge@example.com にメールを送信することが出来た。「Mac は Unix ベースだから、Linux と同様のことが出来るだろう」と思い、同じようにコマンドを入力してメールを送信しようとしたが、一向にメールが送られない。/var/log/mail.log を見ると以下のエラー。
$ less /var/log/mail.log May 17 20:00:17 MacBook postfix/smtp[5737]: connect to gmail-smtp-in.l.google.com[74.125.127.27]:25: Operation timed out
色々と調べていたら、最近のプロバイダは、迷惑メール防止のために TCP 25 番ボートをブロックしていることが分かった。
解決方法 その1
以下のページにあるように、Gmail の SMTP サーバを利用して、Gmail からメールを送信する。Mac OS X Snow LeopardでPHPのmail()関数を使うには - Awaresoft
詳細な説明をすると、上記のページをそのままコピーすることになってしまうので、出来るだけ省いて記載します。
# vi /etc/postfix/sasl_passwd smtp.gmail.com:587 ****@gmail.com:password # postmap /etc/postfix/sasl_passwd # ls /etc/postfix/sasl_passwd.db # .db ファイルが出来たことを確認 # rm /etc/postfix/sasl_passwd # パスワードが平文で書かれているので削除 # vi /etc/postfix/main.cf # Minimum Postfix-specific configurations. mydomain_fallback = localhost mail_owner = _postfix setgid_group = _postdrop relayhost=smtp.gmail.com:587 # Enable SASL authentication in the Postfix SMTP client. smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd smtp_sasl_security_options= # Enable Transport Layer Security (TLS), i.e. SSL. smtp_use_tls=yes smtp_tls_security_level=encrypt tls_random_source=dev:/dev/urandom # postfix reload
これで、mail コマンドを使ってメールを送信することが出来ます。ただ、この方法でメールを送ると From: がすべて /ect/postfix/sasl_passwd で設定した Gmail のアドレスになってしまいます。それで問題なければ、それでいいのですが、/etc/postfix/main.cf の mydomain で設定した値を使う場合は、以下の「解決方法 その2」を使います。
解決方法 その2
以下のページにあるように、自分のプロバイダの SMTP サーバを利用します。Postfix + インストール + OP25B設定 | NINXIT-BLOG
自分のプロバイダの SMTP サーバの認証方式を確認します。最後のポート番号は、25 の場合、587 の場合とあるので、自分で試してみる必要があります。
$ telnet mail.example.com 25 Trying *.*.*.* Connected to mail.example.com Escape character is '^]'. 220 Example SMTP ehlo localhost # 入力する 250-**** 250-AUTH LOGIN PLAIN 250-*********** 250-*********** 250-*********** (略) quit
確認した内容を /etc/postfix/main.cf に反映します。
# vi /etc/postfix/main.cf relayhost = [mail.example.com] smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/authinfo smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = PLAIN
認証ファイルを作成します。ポート番号は、telnet で接続できたポート番号を利用します。
# vi /etc/postfix/authinfo [mail.example.com]:25 hoge@example.com:password # postmap /etc/postfix/authinfo # ls /etc/postfix/authinfo.db /etc/postfix/authinfo.db # rm /etc/postfix/authinfo
Postfix のリロード。
# postfix reload
これで、mail コマンドを使ってメールを送信することが出来ます。メールヘッダの From: は、ユーザ名に /etc/postfix/main.cf で設定した mydomain がくっついた形になります。
役に立ったコマンド
- 溜まっているキューを見る。
$ postqueue -p
- queue_id のキューを削除 (root で実行)。
# postsuper -d queue_id
- キューをすべて削除 (root で実行)。
# postsuper -d ALL
- /etc/postfix/main.cf の文法チェック。
# postfix check
- すべての postfix の設定を表示。
# postconf
- デフォルトから変更した postifx の設定を表示。
# postconf -n
感想
昔は、ターミナルから mail hoge@example.com って入力すれば、hoge@example.com にメールを送信することができたんだけどなぁ・・・。まぁ、昔っていっても、2004年、2005年頃のことだから、6、7年前だけどね。ってそんなに前になるのかぁ。そりゃぁ、それなりに SPAM 対策なり、セキュリティ対策なりされるわなぁ。。。それにしても、Outbound Port 25 Blocking が原因であることが分かるまで結構、時間かかっちゃったなぁ。まぁ、勉強になったからヨシとしよう!!
参考
以下のページを参考にさせて頂きました。大変、勉強になりました。ありがとうございます!!金曜日, 5月 13, 2011
Google Chart Tools を使って地図に色塗りをする
調べてみた結果、Google Chart Tools または Google Image Charts または Google Chart API を使うことで出来ることが分かった。
以下のページで、マウスをポチポチするだけで、自分の欲する地図チャートが出来上がった。
Chart Wizard - Google Chart Tools / Image Charts (aka Chart API) - Google Code
国のデフォルトカラーを設定したかったので設定し(DDF8CC)、塗りたい色を作成した(FF9999)。そして、Country を選択、Data Values に1を入力すると、行ったことのある国が塗りたい色ではなく青で表示された。
なので、Data Values に 100 を入力してみた。すると、行ったことのある国が赤で表示された。
どうやら Data Values に入力した値を正規化して色を割り当てているようだ。Color Gradients を一色にし、すべての国に対して同一の値を設定しても、思ったように色は塗られないようだ。
ということで、新たに色を作成し(FF0000)、Data Values を1に設定してみたところ、Color Gradients で最初に設定した値になった!!また、Color Gradients に同一の色を2つ設定しても期待した動作をすることを確認した。
出来た地図は以下の通り。
いつか、またどこか行ったことのない国に旅行に行って、この地図の色塗りの続きが出来るといいなぁ。。。
FLV ファイルから音声を無劣化で抽出
色々とソフトウェアをインストールしたり、Mac、Windows の環境を行ったり来たりしてたけど、ようやく本当に FLV ファイルから音声を無劣化で抽出する方法を見つけました。
こちらがその方法。
flv/mp4ファイルから音声のみ劣化無しに抽出 - 堕落した人生を目指す日記
ffmpeg と mp4box というのを使うらしい。
ffmpeg は既にインストール済みだったので、mp4box をインストール。brew でインストール出来た。
$ brew install mp4box
音声部 aac を劣化無しに抜き出す。
$ ffmpeg -i [infile (flv/mp4)] -vn -acodec copy [outfile (aac)]
抜き出した aac ファイルを MPEG4 Audio 形式でパックする。
$ mp4box -add [infile (aac)] [outfile (m4a)]
出来たー。音質良くなったし、ファイルサイズも小さくなった!!それに、FLV だけじゃなくて MP4 からも音声を無劣化で抽出することが出来た!!
一石三鳥ですね。これは本当に嬉しい!!!
(・∀・)!!
iExtractMP3 - FLV から MP3 ファイルを抽出
自分のための日記: Mac OS X で Youtube から動画をダウンロードして AAC 規格で圧縮する方法
しかし、この方法よりももっと良い方法が Moongift で紹介されていました。
気に入ったFlashビデオからMP3ファイルを抽出する「iExtractMP3」 - MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ
これはスゴイ。ということで、早速試してみることにした。
環境
- Mac OS X version 10.6.7
インストール
以下から iExtractMP3 をダウンロード。iExtractMP3 -- BONNOH FRACTION 14
展開して、/Applications フォルダに置くだけ。
FLV から音声部分のみを抽出
実際に使ってみたところ、抽出出来たファイルと抽出できなかったファイルがあった。処理が正常に終了したように見えるけれども、再生してみると音声が全く流れない。。。そんなファイルが半分くらい。あと、自分が保存していた動画は FLV だけでなく、MP4 もあった。そういう訳で、家に帰ったら以下の Windows + SplitFLV の方法を試してみようと思う。
SplitFLV
Windows では、SplitFLV というのがあるらしい。FLVからMP3を高速抽出「SplitFLV」
iExtractMP3 は、SplitFLV に影響受けて開発されたようだ。
家に帰ったら、SplitFLV を試してみよう。SplitFLV でも MP4 からの音声抽出は出来なそうなので、MP4 ファイルについては、別のソフトウェアを探してみようと思う。
家に帰って来て SplitFLV で音声ファイルの抽出にトライしてみた。すべてのファイルのファイルサイズが 0KB でした。
( ̄□ ̄;)
また別のソフトを探してみよう。。。
金曜日, 4月 22, 2011
Emacs 起動時の Warning: reference to free variable `org-directory' について
Warning: reference to free variable `org-directory'
とりあえず、Emacs を起動すると horizontal に画面が分割され、分割された下側に Compile-Log として上記のエラーが表示されていました。今までは、Emacs を起動するたびに C-x 1 を入力して Compile-Log を見なかったことにするなどして対応してきましたが、流石に毎回 C-x 1 を入力するのも面倒になってきたので直すことにしました。
とりあえず、グーグルで "Warning: reference to free variable `org-directory'" と検索してみると、なんと anything.el をインストールしたときの自分のページしか検索に引っかかりませんでした。。。
自分のための日記: anything.el のインストール
こんなエラー出してるの、オレだけなんだろうなぁ。。。
(´・Д・`;)
org-directory ってことは、多分、org-mode に関係する設定なんだろうと予測。anything.el をインストールした後に、org-mode の設定でエラーが出たので、とりあえず、org-mode の設定と anything.el の設定の順番を変更してみる。
- 変更前
; for org mode
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
(global-font-lock-mode 1)
(transient-mark-mode 1)
(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))
(setq org-agenda-files (list "~/org"))
(setq org-deadline-warning-days 0)
(add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install"))
(require 'auto-install)
(setq auto-install-directory "~/.emacs.d/auto-install/")
(auto-install-compatibility-setup)
(require 'recentf-ext)
(require 'anything-startup)(require 'recentf-ext)
(require 'anything-startup)
; for org mode
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
(global-font-lock-mode 1)
(transient-mark-mode 1)
(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))
(setq org-agenda-files (list "~/org"))
(setq org-deadline-warning-days 0)
(add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install"))
(require 'auto-install)
(setq auto-install-directory "~/.emacs.d/auto-install/")
(auto-install-compatibility-setup)すると、どうでしょう。org-mode の設定が完全に読み込まれなくなってしまいました。Messages を確認すると以下のエラーが出ていることが分かりました。
File error: Cannot open load file, recentf-ext
recentf-ext が読み込めないとのことで、よくよく .emacs ファイルを見てみると、recentf-ext は ~/.emacs.d/auto-install 内に入っていることを思い出しました。
ということで、今回は、load-path の設定のあとに recentf-ext を読み込むように設定。
; for org mode
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
(global-font-lock-mode 1)
(transient-mark-mode 1)
(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))
(setq org-agenda-files (list "~/org"))
(setq org-deadline-warning-days 0)
(add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install"))
(require 'recentf-ext)
(require 'anything-startup)
(require 'auto-install)
(setq auto-install-directory "~/.emacs.d/auto-install/")
(auto-install-compatibility-setup)すると、どうでしょう!!今回は、なんのエラーも表示されることなく、emacs を起動できました!!
因みに、以下のように、anything-startup と auto-install の require する順番を変更すると、最初の問題点である warning が表示されることを確認しました。
Warning: reference to free variable `org-directory'
原因は、よく分かっていませんが、
(require 'auto-install) (require 'anything-startup)
こうすると、
Warning: reference to free variable `org-directory'
この warning が emacs 起動時に表示されるということです。
という記事を書くなどしていたら、もっと華麗な方法で warning を消す方法を見つけてしまいました。
emacsにanythingを導入した時に出る警告 - まーのメモ
(defvar org-directory "")
org-directory は、org-mode の変数で (defvar org-directory "") とすることで warning を回避できるようです。
確かに以前の設定に戻し、(require 'anything-startup) の前に (defvar org-directory "") を設定しておくと、warning が表示されなくなることが確認できました。。。。。
じゃぁ、なんでオレの設定は、(defvar org-directory "") ってしてないのに動いているんだ!?
( ̄Д ̄;)
(require 'auto-install) の前に (require 'anything-startup) を呼ぶようにしただけで動いているんだが、これでいいんだろうか?今度は、動いていることに対して不安になってきた。
とりあえず、動いているのでヨシとしよう。。。emacs はどうやって設定したらいいのか、設定に失敗した場合、どうやって原因を探ったらいいのか、がよく分からないなぁ。。。emacs の所為というより自分の勉強不足なんだけれども。
それにしても、「defvar で回避できる」って記事にしてた人のブログは参考になるなぁ。色々と参考になる記事が上がっているので、rss reader に登録しました!!
まーのメモ
それではー。



















