Windows 用 Gauche スクリプトで日本語:ファイル一覧

ファイルの一覧を試してみた

結論

  • 漢字ファイル/ディレクトリ名の取得はできる(S-JIS として)
  • でも、取得元としての指定は NG

つまり、以下は動く

;;
;; -*- coding: UTF-8 -*-
(use os.windows)
(use gauche.charconv)

(define-constant *read-dir* "D:/temp")

(define (msgbox msg)
  (sys-message-box
   #f
   (ces-convert msg 'utf-8 'shift_jis)
   (sys-basename *program-name*)
   MB_OK))

(define (main args)
  (guard (e [else (sys-message-box #f (format "ERROR: ~a" (~ e'message))
                                   (sys-basename *program-name*)
                                   (logior MB_OK MB_ICONERROR))])
     (let ((dirs (sys-readdir *read-dir*)))
       (map
        (lambda (f)
          (msgbox (format "~a" (ces-convert f 'shift_jis 'utf-8)))
          ) dirs))
     )0)

だけど、

(define-constant *read-dir* "D:/temp/日本語ディレクトリ名")

と、すると動かない。

エラーは

Searching directory failed by windows error 3

となる。それなら、と S-JIS に変換すると

incomplete string not allowed

となる。これは「不完全文字列」ってヤツで Gauche の内部チェックっぽい。

スクリプト側でラップすれば済むかと思ったんだけどなぁ。うーむ。

Windows 用 Gauche スクリプトで日本語を表示する

明示的に S-JIS に変換してやれば MessageBox() が使える

;;
;; -*- coding: UTF-8 -*-
(use os.windows)
(use gauche.charconv)
(define (main args)
  (guard (e [else (sys-message-box #f (format "ERROR: ~a" (~ e'message))
                                   (sys-basename *program-name*)
                                   (logior MB_OK MB_ICONERROR))])
     (sys-message-box #f (ces-convert "hello ゴーシュ" 'utf-8 'shift_jis) "" MB_OK)
     )
  0)

スクリプトは utf-8 で書く。ただし、スクリプトのエンコーディングは何でも良いはず。

要は、スクリプト中の文字列が正しく gosh インタプリタに認識され、内部エンコーディングである utf-8 に 変換されれば良い。つまり、上のスクリプト中の utf-8 は内部エンコーディングの指定。

Squid を Windows ファイアウォールに通す

購入時についてきたマカの試用期間が終了したので、きれいさっぱりアンインストールして Windows ファイアウォールを設定している。で、ちょっとハマったのでめもめも。

テスト用も兼ねて、ブラウザを複数立ち上げたりするので、proxy を別にしている。その為に使っているのが Squid 。Windows 用のをサービスとして。

ポイントは 2 つ

  • DNSUDP 53)を許可する
  • サービスではなく、実行ファイル(squid.exe)に対して許可する

いやぁ、ちょっとアセった

Windows 用 Gauche

前のエントリの続き。その他、気づいた事を。

インストールは Windows用バイナリインストーラを使用した。

日本語でつまづくまでは、サクサク動いて良いなぁと言う印象。 (Linux ではちゃんとマルチバイトが扱えているのは知ってる)

でも、まぁ wiliki内の Windows 対応の歴史(Gauche:Windows/VC++ とか)を読んでいると、Windows でちゃんと動くだけでスゴイんだな、 と思えてくる。 開発者の人が「来年はGaucheに軸足を戻していろいろ試してみたい」との事なので、ちょっと期待。

その他。

  • .scm スクリプトはちゃんと関連付けされて「開く」で gosh で動く
  • .scm スクリプトのショートカットを SendTo に放り込んでも、実行ファイルって認識してくれない。.vbs や .ps1 だと、スクリプトのショートカットで動く
  • 開発環境。Windows 環境とか持ってない、との事なので、以下の方法はどうだろう。
    • gcc for win のソースを持ってきて自環境でコンパイルする。クロス開発用のコンパイラを作成し、 Windows 用バイナリを生成する。(coLinux でやってる方法)
    • テストは wine で行う。ちょっと前、wine でゲームが動くようになったなんて話題もあった様に 大抵のものは動くと思われる。(フォント回りをちゃんとインストールすると日本語表示も OK だし)

とりあえず、sys-message-box で日本語を表示させるとこまででも。

Windows 用 Gauche スクリプトが動かない

バックアップ用スクリプトを作ろう、それもどうせなら新しい言語で。そう思って Gauche を少し使ってみた。

結果、僕の環境下では使えなかったので、めもめも。

作ろうとしたのは pdumpfs もどき。前回のバックアップが有ったらハードリンクする事で ディスク領域を節約する。また、任意のの全ファイルを簡単に取り出せる。そういうヤツ。 ただ、日時にはしたけど。

問題は日本語のディレクトリ名にあった。ファイルでも同様かもしれないが。ディレクトリの作成に 失敗してしまう。

スクリプトを Shift-JIS で書いたり、先頭に UTF-8 の宣言を入れたり等したけど、うまくいかない。 なので、とりあえず諦めて、別の言語で書く事にした。 まぁ、日本語が絡まなければ、機能するようなので、以下に張り付けておく。

と、思ったけど、うまくコードブロックにならない。ので、また今度。

emacs の php モード

emacs で簡単な php のスクリプトを作成しようとして、ハタと手が止まった。カラー表示やオートインデントがうまくない。書けない。いや、自覚は無かったけど、もう、そういう依存体質になってしまっていた。

で、php モードを探したので、めもめも

結論:PHP mode for Emacsを使う

debian には html-helper-mode というパッケージがあって、色分けは良いんだがインデントしてくれないので NG だった。それも、なぜか php ではなく html の方の。

PHP mode は上記ページからダウンロードして入れた。

で、今気付いたんだけど、これは php-elisp と言うパッケージになっているらしい。 この辺り、うまく探せないものかな

レスポンシブデザインってすごい

別件の検索でたどり着いたサイトの別記事だったんだけど、 ブラウザの幅に応じてレイアウトをきれいに整列できる「jQuery Masonryプラグイン」。ここから(別サイト経由で)紹介されてるNHKスタジオパークが、なるほど、すごい。

ブラウザの幅に応じて画像や文字のサイズを変え、レイアウトを自動調整して (殆んど)ウインドウからはみ出さないようにしてくれる。

ちょっと小さめの要素が並んだあたりを表示させて、ウインドウの横幅を 変えて行くと、画像サイズが変わったり、文字サイズが変わったり、 その結果として折り返し位置が変わったり、そんな様子が見えて、 すごさを実感する。

また、何より驚いたのは Javascript を切っていても有効だった点。 有効にすると、レイアウト変更がより滑らかで、アニメ的な効果も かかる感じだった。

これなら、スマホ用ページを別に作るとかが要らなくなるなぁ。あるいは iPadiPad ミニ~iPhone までを同じページで対応させる事ができそう。 更には、今までと異なる画面サイズの端末が出てきても大丈夫って事になる。

なんか進歩してるんだなぁ、って感じ。