Fork me on GitHub

2011/11/02


このエントリーをはてなブックマークに追加
Windowsで作業する事も多いので、普段からthincaさんが書いたCoffeeScript on JScriptを使ってたんだけど、JScriptを使ってるという点がどうも気持ち悪くて、コンパイルエラーメッセージに「Microsoft JScript 実行時エラー」とか出るとかなり (´・ω・`)ショボーンな気分でした。
あと、thincaさんのは-eオプションで動かした時にconsole.log()が無いのでエラー出る事もあって、ちょっとしたスクリプトを書くのに困ってました。

で、v8のソースリポジトリに含まれるシェルd8を使ってバッチファイルから呼び出して...ってやればうまく行くんじゃね?オレ天才!とか考えながら進めていったらd8では標準入力が使えないのもあって断念。
あと、この手のはcoffee-script.jsを一緒に持って歩く必要があって、なんか僕の趣味に合わなかったので(どんな趣味だよ)、実行モジュール1個だけで動いて、LinuxでもWindowsでも動いて、極力node(v8)と挙動の近い物が欲しくなった。

こうなれば...と思ってv8使ってC++だけで書いてみた。
mattn/coffee-script-v8 - GitHub

CoffeeScript compiler/runner

https://github.com/mattn/coffee-script-v8
coffee-script.jsのコードはソース埋め込みなので、実行モジュール1つあれば動きます。
v8は普通にコンパイルするとスタティックリンクなので、実行モジュールだけの依存になります。
Windowsだとコンパイルは
g++ -o coffee coffee.cc -lv8 -lwinmm -lws2_32
こんな感じ。他の環境だと
g++ -o coffee coffee.cc -lv8
で行けると思います。
「いや、coffee-script.jsのバージョン上がったらどないすんねん!」って人は、どうぞ改造して使って下さい!
Posted at 16:40 in ソフトウェア::lang::coffee
Tagged as: c++, coffeescript, v8, windows
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2011/10/31


このエントリーをはてなブックマークに追加
WindowsをUNIXライクに使っておられる方も多いかと思います。僕もその一人で、僕はコマンドプロンプトを常に開きっぱなしの状態で作業します。
msysを使っても良いのですが、bashはbashで色々と問題もあり/c/Program\ Filesみたいなパスでは問題が起きたり、メールに貼り付けられているパスをコピペして動かないのは苦痛であったりもします。
なので常にコマンドプロンプト(cmd.exe)を使い、vimやlessというUNIX向けツールを使っています。
gitやmercurialでのdiff表示やlog表示の際、ページャは不可欠です。lessを使っているmsysgitでもある程度綺麗に表示されますが、マルチバイトでの検索が出来なかったり、nkf等といったフィルタを噛まさないと表示出来なかったりしました。
lessの場合は以前パッチを書いたlessを使えばコマンドプロンプトでもフィルタ無しにutf-8が表示出来るのですが、自動判定や他のエンコーディングに弱かったりもしました。
そういった理由から日本のUNIXユーザの中にはlessの変わりにlvを使う方も多いです。おそらく日本語を読む事についてはlessよりも高機能なので、ずっとWindowsでもlvを使いたいなと思ってました。
さらにWindows向けのgitに含まれるlessはなぜか稀に最終行の色が綺麗に終端しておらず、git diffを表示し終えた後も画面が緑色のままになったりして、困っていました。

先日からlvをWindowsにポーティングし始めていて、ようやくlessと同等にカラー表示出来る様になったので公開しようと思います。
  • Windows版lessの代わりに使えます
  • フィルタ無しに日本語utf-8が示出来ます
  • iso-2022-cn, iso-2022-jp, iso-2022-kr, euc-china, euc-japan, euc-korea, euc-taiwan, shift_jis, big5 といったアジア圏のエンコーディングが扱えます
  • UTF-7, UTF-8, iso-8859-1 ... iso-8859-9 も問題なく扱えます
  • エスケープシーケンスを含んだテキストをカラー表示出来ます
gitであれば、~/.gitconfig
[core]
    pager = lv -Iu8
こう書いておけば使えます。またmercurialではtpager extensionと併用すればwindowsでも色つきdiff表示が出来ます。
alexandrul / TPager / overview — Bitbucket

Mercurial pager with color support on Windows

https://bitbucket.org/alexandrul/tpager
~/.hgrc
[extensions]
hgext.color=
# tpager.pyへのパス
tpager = ~/tpager/tpager.py

[color]
# win32ではなくansiにする事でエスケープシーケンスを吐く
mode = ansi

[pager]
# ページャを使うコマンド
attend = annotate, cat, diff, export, glog, help, log, qdiff, status, tip
# おまじない
hg16mode = yes
# どのページャを使うか
pager = lv -Iu8
この様に設定すれば色つきのdiffが表示出来る様になります。
リポジトリのmasterブランチは、オリジナルそのままにしてあります。windowsブランチに僕が手を加えた物がpushされています。
mattn/lv421-window - GitHub

windows port of lv421

https://github.com/mattn/lv421-windows
まぁこんなの使うのは変態くらいしかいないと思いますが、よろしければどうぞ。
Posted at 10:51 in ソフトウェア
Tagged as: less, lv, pager, windows
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2010/02/03


このエントリーをはてなブックマークに追加
darcs github流行ってますね。オープンソース開発者にとってgitは必須アイテムでもあり登竜門的な技術要素になってきました。しばらくはgitが一般的なVCS(version control system)になっていくんだろうなと思います。まぁLinus氏が飽きればまた次のが流行るのかな。
ちょっと前からgoのgtkバインディングを開発していますが、先日とある方がforkしてpull requestしてくれました。
David Roundy氏。知っている人は知っている、darcsのauthorです。ちょっと久しくdarcsを触って無かったので思い立ってバージョンを上げ、試してみました。
commitじゃなくてrecordだったり、logじゃなくchangesだったりと少しgitやsvnと違和感があったりもしますが、とても単一モジュールで動いているとは思えない程の機能を持ち合わせています。
昨日iratqqさんがmpc(Music Player Client: Client for Music Player Daemon)のhttpd版をHaskellで書いてたので試そうと思い、リポジトリを見たらpatch-tag.comというSCMサイトでした。これまたサービス自体もHaskellで書かれているとの事で、Haskellなんかまともに書けない私が参加して良いものだろうかとか考えながら登録してみました。
さて、darcsも内部では(デフォルトは)ssh通信を行うので、使うにはgitの時と同じ様に
Big Sky :: SSHポートが通らなくてもgithub.comにpushする方法

pushはsshを使うのでport 22が開いてないとpush出来ない物と信じ込んでいました。が、今日解決しました。

http://mattn.kaoriya.net/software/20081029172540.htm

Big Sky :: SSH/Gitの設定を修正しなくてもファイアウォール内からgithub.comにpushする方法

Gitはトランスポート層が選択出来るのは知っていたけど、まさかこんな書き方出来るとは思ってなかった。

http://mattn.kaoriya.net/software/20090624103050.htm
こんな手順を踏まなきゃ駄目なのは分かってたんですが、なんとなしに「ssh.patch-tag.com」というキーワードでググってたら...見つけました!
How to get around firewalls using Patch-Tag « the Patch-Tag blog

We have been tweaking the retrieval parameters for repository access via SSH. Did you know you can get around firewalls that block port 22? Thats right, we have now added support for this.

http://blog.patch-tag.com/2009/02/25/how-to-get-around-firewalls-using-patch-tag/
github.comがssh.github.com:443を開けているのと同じ様にpatch-tag.comもssh.patch-tag.com:443でsshを開けているとの事。ここに書かれている手順通りでも良いのですが、リポジトリ名を修正しなくても使える方法を今日はご紹介。
gitの時の手順と同じ様に、ssh/configファイルを使い、patch-tag.comへのsshアクセスをssh.patch-tag.comの443ポートへと繋ぎ変えます。
Host patch-tag.com
    Hostname ssh.patch-tag.com
    Port 443
    IdentityFile c:/docume~1/mattn/.ssh/id_rsa
    TCPKeepAlive yes
    IdentitiesOnly yes
    ProxyCommand c:/docume~1/mattn/.ssh/connect -h ssh.patch-tag.com 443

proxyでFirewallを越えるのでProxyCommandを使います。connectはここにある物をコンパイルして使います。
さて、これでokと思ったのですが1点問題が発生しました。何度やってもsshのログインプロンプトが表示されません。おかしいなと思い色々調べていたら
Wiki - WindowsConfiguration

If you want to use darcs over ssh you need to set up passwordless ssh login (password-based authentification is currently broken on windows).

http://wiki.darcs.net/WindowsConfiguration
おーまいがっ!
Windows版は現状壊れてるのでパスワード無しでないと駄目らしい。それは痛い。puttyを使いたくない派には残酷なお知らせ。
諦めかけたその時思い出した。
Big Sky :: Windowsでもssh-agentとssh-addを使ってパスフレーズ入力を省略する。

開発を始める前にコマンドプロンプトで1回これを動かすとパスフレーズを聞かれ、1回入力すれば以降は聞かれない様になる。

http://mattn.kaoriya.net/software/20081106192615.htm
ちなみに手元の最新版ssh-env.batは以下の様になってます。
@echo off
if "%1" == "-f" goto force
if not "%SSH_AGENT_PID%" == "" goto end
:force
for /f "eol=; tokens=1,2 delims==;" %%1 in ('ssh-agent.exe') do (
 if "%%1" == "SSH_AUTH_SOCK" set SSH_AUTH_SOCK=%%2
 if "%%1" == "SSH_AGENT_PID" set SSH_AGENT_PID=%%2
)
ssh-add
:end
強制フラグ付けただけですが...。
これをコマンドプロンプトで1回実行した後にdarcsを実行します。
C:¥TEMP>ssh-env
Enter passphrase for /c/docume~1/mattn/.ssh/id_rsa:
Identity added: /c/docume~1/mattn/.ssh/id_rsa (/c/docume~1/mattn/.ssh/id_rsa)

C:¥temp>darcs get mattn@patch-tag.com:/r/mattn/mattn-testproject
Copying patches, to get lazy repository hit ctrl-C...
Finished getting.

C:¥temp>
うぉーーー!でけた。ちなみにチェックアウトしたファイルに変更を加えてdarcs pushもうまく動いています。

これでdarcsライフも満喫出来そうです。gitとは少し違ったVCS味わってみませんか。
Posted at 02:07 in ソフトウェア::darcs
Tagged as: darcs, windows
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip

2009/11/24


このエントリーをはてなブックマークに追加
最初Goがリリースされた時には、自分がPortingするんだーとか意気込んでましたが、google codeにホスティングされている方のほうが良い物作ってくれそうだったので、ずっと見守ってました。
hectorchu-go-windows - Project Hosting on Google Code

go for Windows

http://code.google.com/r/hectorchu-go-windows/
Windows PEのリンカも入って、適当な物ならばコンパイル&リンク出来る様になってます。
ただ一般的なWindows Portingの問題として、POSIXなAPIであるpipeやfork、ソケットディスクリプタ等といったWindowsで完全に模倣出来ない部分が残っています。例えばhttpクライアントを扱うhttpパッケージは、netパッケージに依存し、かつ内部ではos.Fdを使う為にそのままのコードではWindowsで実行出来ません。さらにgodoc等ファイルおよび外部プログラムを扱う様な物は内部でos.Pipe()、os.Fork()が呼ばれており、こちらもWindowsなAPIで置き換えなければなりません。
現在の所、src/pkg/osとは別にsrc/pkg/windows/osというフォルダで、Win32 APIを使ってosパッケージを模倣され様としています。移植という点ではこれからになりますね。Issue Trackerが開かれていないのでバグ報告出来ないですが、もし気になる事があればメーリングリストに投げようかなと思っています。

ちなみに、スレッドまわりの実装は既に入っているのでgoroutineは動きます。
ぜひ遊んでみましょう!
Posted at 23:13 in ソフトウェア::lang::go
Tagged as: go, golang, windows
Bookmarks: add to hatena add to hatena | add to delicious.com | add to livedoor.clip add to livedoor.clip