カテゴリー「プログラミング」の22件の記事

2016年12月 7日 (水)

EditorConfig Vim Plugin を日本語環境の Windows で

EditorConfig は様々な種類のエディタや IDE で編集するテキストファイルのフォーマットを統一する仕組みです。プロジェクトで EditorConfig を使うことで、改行コードの種類や、インデントに使用するスタイル (空白文字にするかタブにするか、タブ幅はどうするか) を統一できます。

Vim (welcome home : vim online) の場合は editorconfig/editorconfig-vim: EditorConfig plugin for Vim が使えます。

しかし、Windows で日本語ファイル名のテキストファイルを開くと Python インタプリターのエラーが表示されて残念な感じに。

ただ、そもそも日本語ファイル名のファイルで EditorConfig を積極的に使いたい場面は殆どありません。

そこで _vimrc に以下を追加することで、日本語ファイル名の時だけ EditorConfig を無効化してみました。

これでエラーが表示されることはなくなりました。

2013年8月22日 (木)

NetBeans を Mac の Java 6 で使う

2013年2月15日 (金)

Bitbucket と GitHub のユーザー名を変更しました

BitbucketGitHub のユーザー名を変更しました。

主な理由は Bitbucket Pages 及び GitHub Pages 対応です (現状、使ってないし、直近で使う予定も特にないのですが)。

どちらも URL のホスト名にユーザー名が使われます。

ところが自分の場合、Bitbucket はユーザー名が _wa_ だから _wa_.bitbucket.org に、GitHub はユーザー名が wa- だから wa-.github.com になってしまいます。

URL というか、ホスト名には _ を使うことは出来ません。また、先頭や末尾に英数字以外の文字を使うことも出来ません。このため、ユーザー名を変更にすることにしました。

新しいのは以下の通り、watagashi です。どちらも同じユーザー名になりました。

後、以前のブログの記事も本文中の URL だけ直しました。

2011年11月21日 (月)

Mercurial で Office (2007) Open XML や OpenDocument を管理する

Microsoft Office 2007 で新しくなった Word、Excel、PowerPoint のファイルフォーマット、Office Open XML ですが、そのまま Mercurial のリポジトリにコミットすると、リポジトリの管理領域 (多分 .hg/store/data の中) のサイズが大きくなってしまいます。

これは、Office Open XML が XML 文書を ZIP 圧縮したファイルであるためです。

Mercurial はコミットするとき、変更されたファイルの差分を抽出して記録しますが、ZIP 圧縮すると差分情報を効率的に抽出できなくなってしまいます。

ところが、そんな問題を解決できそうな ZipdocExtension - Mercurial を発見。

This extension is not distributed with Mercurial と書いてありますが、 TortoiseHg なら一緒に入ってます。

使い方ですが、ホームディレクトリの .hgrcmercurial.ini ファイルに、或いはリポジトリの .hg/hgrcにこんな設定を追加して zipdoc エクステンションを有効にするだけ。

この例では Office Open XML だけでなく、OpenOffice.org の ODF の設定も入れてみました。ODF も XML を ZIP 圧縮しているようなので。XPS / OpenXPS と EPUB も追加してみました。

これで、hg commit するときはファイルの ZIP 圧縮を内部で自動的に解くようになります。だから、差分情報を効率よく抽出してリポジトリに記録してくれるはずです。

また、hg update したらファイルを ZIP 圧縮してから作業領域を更新してくれるようになります。

リポジトリをクローンするときは、クローン先でも zipdoc エクステンションが有効になるように設定しておきましょう。

とはいえ、クローンしたリポジトリで zipdoc エクステンションが有効になっていなくても、作業領域のファイルが圧縮されていない (圧縮形式が Store の) ZIP になるだけなので、ファイルを開くことも普通に出来るようです。

とにかく、Windows で TortoiseHg と Microsoft Office を使うなら zipdoc は必須と言っていいエクステンションだと思います。コミットを繰り返すほど効果が大きくなるはずです。

2011年6月 8日 (水)

Gist の raw ファイルの URL が変わった

Gist で HEAD (最新) の raw ファイルを示す URL が変わってしまいました。

従来は https:/gist.github.com/771444.txt のように、通常の URL に .txt を付けるだけで良かったのですが、この記法が使えなくなりました。

また、https://gist.github.com/609613 の例のように、Gist に複数のファイルがある場合、https://gist.github.com/raw/609613/sharetweet.js のように /raw/ の後、gist の番号を続けて、その後にファイル名を付ければ良かったのですが、これも変更になりました (一応リダイレクトされる)。

今は以下のようになっているようです。

  • 従来記法 https:/gist.github.com/771444.txt
    • 新記法 https:/raw.github.com/gist/771444
  • 従来記法 https://gist.github.com/raw/609613/sharetweet.js
    • 新記法 https://raw.github.com/gist/609613/sharetweet.js

twicli だと Gist に .txt の記法でプラグインを読み込ませて使ってる人も多いと思いますし、影響が大きいですね。

それから、複数のファイルのある Gist に .txt の記法で参照すると、従来は全てのファイルがまとめて取得できましたが、今は最初のファイルだけしか取得できません。

2011年5月27日 (金)

array.push(x) と array[array.length]=x はどっちが速い?

2008年3月とちょっと古い資料ですが、Internet Explorer 8 Beta 1 for Developers ホワイトペーパー の「プラットフォーム パフォーマンスの向上」の資料に以下の記載があるのを見つけました。

配列の記憶域および JScript エンジン内でのアクセスの最適化によって、ほとんどの組み込み Array メソッドでパフォーマンスが向上します。組み込み Array メソッドのより迅速な代替メソッドとして独自の Array メソッド (Array.push や Array.pop など) を実装している JScript 作成者は、組み込みメソッドを使用してコード パフォーマンスを向上させることを検討してください。

そういえばこちらは原文が 2006年11月ともっと古い記事ですが、Dev.Opera の「効率的な JavaScript」にはこう書いてあります。

効率的な JavaScript - Dev.Opera

ふつうのコードでは効き目が薄いけれど, 性能の肝になるループや関数では高速化できることがある. 例の一つは配列の push メソッド. これは配列の最後を指す添字に要素を追加するより遅い.

http://dev.opera.com/articles/view/efficient-javascript-ja/?page=2#primitiveoperator

ということで、どっちが速いか実験してみました。

array.push(x) と array[array.length]=x はどっちが速い? - jsdo.it - share JavaScript, HTML5 and CSS

結果はこんな感じ。Windows 7 32bit です。

Opera 11.11

array.push(x);         // 131 ms
array[array.length]=x; // 60 ms

Windows Internet Explorer 10 Platform Preview 1

array.push(x);         // 32 ms
array[array.length]=x; // 44 ms

Windows Internet Explorer 8

array.push(i);         //1192 ms
array[array.length]=i; //1377 ms

ウェブブラウザによって特性が違うんですね。

ほかのブラウザでは実験しないのかという話はちょっと置いといて…

ということで、初めて jsdo.it 使ってみたのでした。

2011年4月14日 (木)

PowerShell で Mercurial の作業領域を削除する

Windows Server 2008 R2 って目立つところに Windows PowerShell のアイコンがありますね。

これからの Windows は CUI の標準シェルが「コマンドプロンプト」 (cmd.exe) から PowerShell に置き換わってしまうんでしょうか。

そんなことを思いつつ、何も知らないまま PowerShell を弄ってみたけれど、これはこれで面白そう。

ということで Mercurial SCM の作業領域を削除し、リポジトリと Mercurial 関連ファイルだけ残す1行スクリプトを PowerShell で作ってみました。

Get-ChildItem|Where-Object{$_.Name -notmatch '^\.hg'}|Remove-Item -Recurse

コマンドプロンプトから実行する場合はこんな感じ。

Gist は PowerShell のシンタックスハイライトできなくて、逆に SyntaxHighlighter は Windows コマンドスクリプトのシンタックスハイライトに対応してないのね。

Windows PowerShell、エイリアスが最初から充実してるからコマンドプロンプトと似た感じで使えるし、コマンドプロンプトと違って実行時パスも見てファイル名補完してくれたりするのも嬉しいところです。

2011年4月13日 (水)

TortoiseHg で差分表示に Vim を使う

TortoiseHg でファイルの差分表示をするとき、デフォルトでは付属の KDiff3 が使われたりします。

しかし、KDiff3 は日本語のファイルを扱うとどうもうまく表示できません。

そこで、慣れた Vim (vimdiff) を使う設定。

Mercurial の設定ファイルに以下を追加すると TortoiseHg の差分表示で gvimdiff を選べるようになります。

Mercurial の設定ファイルは %USERPROFILE%\.hgrc%USERPROFILE%\mercurial.ini などです。

詳しくは hg help hgrc を実行するか hgrc を見て下さい。

でも hgrc には $parent1 とか $child などの使い方が載ってなかったんですよねぇ。

diff3 の場合もこれが最適なのかよく分かりませんけれど、取り敢えず。

2011年4月 2日 (土)

オライリーの PDF の余白を切り取る140文字以下のスクリプト

2011年4月4日追記。

実は以下のやり方ではファイルが壊れるため SONY Reader では読めなくなることが分かりました。すみません…


先日の大盛況だった O'Reilly Village/オラの村 - Deal of the Week - 被災者支援キャンペーン開催 ですが、この後、以下のように PDF の余白を切り取って、電子書籍リーダーで PDF を見易くする方法を紹介してる記事を見つけました。

これなら Vim でやったら自分でも結構簡単に出来るんじゃないかと思い、ちょっとやってみました。

なんと137文字!
(exe とか使わず、制御文字 (CTRL-A など) を直接使えばもっと短くなりますね。)

Vim で PDF を読んで (多分、バイナリモードにしておいた方が無難)、このスクリプトを実行し、ファイルを保存するだけです。

スクリプトの 30 と書いてあるところ (4箇所) を任意の数値にすれば、切り取る量が変わります。

また、gvim *.pdf などと実行して PDF をまとめて開き、以下のスクリプトを実行すれば、開いたファイルをまとめて変換して保存します。こちらは157文字。

リンク先の記事にも書かれていますが、オライリー・ジャパンの Ebook のように、PDF に DRM が掛かってても問題ないみたいです。

2010年10月28日 (木)

MinGW を使った Vim のビルドに挑戦

Windows で MinGW を使った Vim のビルドに挑戦してみました。

また、 Kaoriya 版 Vim 7.2 のパッチを Mercurial の MQ で管理してみます。

前準備

MinGW は C と C++ のコンパイラのみインストールしました。

ほかに GnuWin32 もインストール済みです。

ソースコードの取得

まず Vim のリポジトリを Mercurial SCM で複製します。

私は TortoiseHg に付いているコマンドを使ってますが。

hg clone https://vim.googlecode.com/hg/ vim
cd vim

Kaoriya 版のパッチの取り込み

vim オリジナルが vim ディレクトリに、Kaoriya 版が vim72-kaoriya-w32j ディレクトリにあるとします。

Kaoriya 版のパッチが Mercurial でどのリビジョンを対象にしているか調べます。

hg log --keyword "7.2.416"

対象のリビジョンに更新します。

hg update e9c9f37be306

MQ にパッチを取り込みます。事前にエクステンションを有効にしておく必要があります。

MQ について、詳しくはこちら。

hg init --mq
hg qimport ..\vim72-kaoriya-w32j\patches\kaoriya-hg.diff
hg commit --mq -m "hg qimport ..\vim72-kaoriya-w32j\patches\kaoriya-hg.diff"

thinca さんの記事で公開されているリビジョンに更新します。

hg update 3331756e4232

thinca さんのパッチを MQ に取り込みます。

hg qimport --force --name kaoriya-hg.diff http://gist.github.com/raw/470028/cb2c6a95120e3527fab148d550c5b02feca1dada/kaoriya.diff

以下のファイルのエンコーディングが正しく反映されなかったので、パッチファイル (.hg\patches\kaoriya-hg.diff) を直接開いて、これらのファイルの個所をオリジナルの Kaoriya パッチに戻しました。

  • runtime/tutor/tutor.ja.euc
  • runtime/tutor/tutor.ja.sjis
  • src/kaoriya.mnf
  • src/po/ja.po
  • src/po/ja.sjis.po

パッチファイルを Vim で開くときに、以下のようにバイナリモードにすると安全です。

:set binary
:e

直したパッチを適用して、パッチの更新をしておき、適用解除します。

hg qpush
hg qrefresh
hg qpop

パッチを MQ にコミットします。

hg commit --mq -m "hg qimport --force --name kaoriya-hg.diff http://gist.github.com/raw/470028/cb2c6a95120e3527fab148d550c5b02feca1dada/kaoriya.diff"

default ブランチの最新のリビジョン (このとき Vim 7.3.035) に更新します。

hg update default

パッチを適用します。

hg qpush

一部、パッチの適用に失敗したので、.rej ファイルを見ながら修正して、

hg qrefresh
hg qpop
hg commit --mq -m "Vim 7.3.035"

パッチの修正

src/po/ja.sjis.po は書式が古いようなので (今はバックスラッシュのエスケープが不要らしい)、src/po/ja.po を元に直します。

src/po/ja.po を開き、以下の行を探します。

"Content-Type: text/plain; charset=euc-jp\n"
これを以下のように変え、src/po/ja.sjis.po のファイルに Shift_JIS エンコーディングで保存します。
"Content-Type: text/plain; charset=cp932\n"

パッチを作って MQ にコミットします。

hg qnew ja.sjis.po
hg commit --mq -m "remove backslash escape from ja.sjis.po"

取り敢えず make

いよいよ make です。

cd src
mingw32-make -f Make_ming.mak OLE=yes

コンパイルエラーが出ちゃいました。

gcc -c -Iproto -DWIN32 -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 -DHAVE_PATHDEF -DFE
AT_BIG -DHAVE_GETTEXT -DHAVE_LOCALE_H -DDYNAMIC_GETTEXT -DFEAT_OLE -DFEAT_CSCOPE
 -DFEAT_NETBEANS_INTG -DFEAT_GUI_W32 -DFEAT_CLIPBOARD -DFEAT_MBYTE -DFEAT_MBYTE_
IME -DDYNAMIC_IME -DDYNAMIC_ICONV -pipe -w -march=i386 -Wall -O3 -fomit-frame-po
inter -freg-struct-return -s gui_w32.c -o gobj/gui_w32.o
In file included from gui_w32.c:47:0:
gui_w48.c:3431:1: error: static declaration of 'convert_filter' follows non-stat
ic declaration
gui_w48.c:3285:14: note: previous declaration of 'convert_filter' was here
mingw32-make: *** [gobj/gui_w32.o] Error 1

static 宣言になっているから関数が見えないというような意味かと思い、山勘で直してみました。

diff --git a/src/gui_w48.c b/src/gui_w48.c
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -3427,7 +3427,7 @@
  *
  * Keep in sync with convert_filterW() above!
  */
-    static char_u *
+    char_u *
 convert_filter(char_u *s)
 {
     char_u     *res;

やり直してみます。

mingw32-make -f Make_ming.mak clean
mingw32-make -f Make_ming.mak OLE=yes

今度はエラーが出ずに終了したので、これを新しくパッチにして MQ にコミットしました。

日本語のメッセージの反映

今度は日本語のメッセージのファイルを作ります。

cd src\po
set LANGUAGE=ja.sjis
set VIMRUNTIME=..\..\runtime
mingw32-make -f Make_ming.mak
mingw32-make -f Make_ming.mak ja.sjis.mo
set LANGUAGE=ja
copy ja.sjis.mo ja.mo
mingw32-make -f Make_ming.mak install

また関連 DLL を Kaoriya 版からコピーします。

copy ..\vim72-kaoriya-w32j\intl.dll src\libintl.dll
copy ..\vim72-kaoriya-w32j\iconv.dll src\

Kaoriya 版の便利スクリプトの取り込み

Kaoriya 版だけに入っているスクリプトをコピーします。

robocopy ..\vim72-kaoriya-w32j . *.vim /s /xc /xn /xo /xx
robocopy ..\vim72-kaoriya-w32j . *rc 

これらのスクリプトを MQ でパッチ化します。

hg qnew kaoriya-scripts
hg add glob:**.vim
hg add vimrc
hg add gvimrc
hg qrefresh
hg commit --mq

Bitbucket に入れてみた

書き出してみると結構手順が多いのと、自分が楽をするために、 MQ リポジトリを Bitbucket に入れてみました。

この場合、手順としてはこんな感じになります。

hg clone https://vim.googlecode.com/hg/ vim
cd vim
hg init --mq
hg pull --mq -u http://bitbucket.org/watagashi/vimpatches
hg qpush --all

Vim 本体の最新のリビジョンをプルするときは、事前に qpop しておくのを忘れないように。

hg qpop --all
hg pull -u
hg pull --mq -u http://bitbucket.org/watagashi/vimpatches
hg qpush --all

ビルドはこんな感じのバッチで。

Social connection

  • Check

最近のトラックバック

2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

これも見とるよ

その他

無料ブログはココログ