碧落にて気まぐれに一言

2011/10/16

「ペンをカスタマイズする人はいない。ペンの使い方をカスタマイズするのだ」

Filed under: 未分類 — タグ: , — Suguru Yamamoto @ 21:27

電子書類の整理をしていたところ古い読書メモが出てきました。何かの縁ということで、掲載。

2009-05-17 16:29
A.D.ノーマン著「エモーショナルデザイン」より:

ペンをカスタマイズする人はいない。ペンの使い方をカスタマイズするのだ

非常に稀にならペンをカスタマイズする方もいらっしゃるかもしれませんが、そのような人は特殊中の特殊であり、デザインする上ではあまり対象として考えるべきではないでしょう。ほとんどの人はペン自体をカスタマイズしませんし、する必要が無いと思います。

カスタムできること自体は良いことですが、百万人のユーザ全員のニーズを満たしきるようにカスタマイズオプションを用意することはできません。結局の所、あるユーザのニーズを完璧に満たすことができるとしたら、そのユーザ自身の手によってデザインしてもらう以外にありえないでしょう。したがって、ユーザニーズをより良く満たしたいという動機で何らかのオプションを製品に加えるのであれば、その製品だけで完結するようなオプションよりも、他の製品と組み合わせやすいようにする方が良いと思います。たとえば各種の標準規格を採用したり、単純または汎用的なインタフェースを備える、といったアプローチです。

デザインという考え方は色々なものに適用できますが、特にこの考え方は汎用的ですね。ソフトウェアでも、電子機器でも、携帯電話でも、何でも。

2011/09/24

VAIO Z用にOperaをカスタマイズ中

Filed under: 未分類 — タグ: — Suguru Yamamoto @ 13:13

最近仕事でvimを使ってCプログラミングをしていたため指先にvim中毒の気配が……というのは四分の一くらい本当の話ですが本日の投稿とは関係ありません :) 。先日買ったVAIO ZでのWebブラウジング環境を改善することを目的に、Opera 11のキーバインドをカスタマイズしてvi風にスクロールできるようにしてみました。具体的には、「hjklで左下上右」にスクロールするようにしてみただけです。カスタマイズ方法はごく普通で、設定ダイアログからショートカットキーの変更画面を開いてjに”Scroll down”、kに”Scroll up”、hに”Scroll left”、lに”Scroll right”を割り当てるだけです。

Operaのショートカットキー設定画面

しばらく使ってみて、気に入ったらCtrl+Uで”Page up”、Ctrl+Dで”Page down”なども定義してみようかなと思います。あるいはvi風と言わずless風と言いながらfで”Page down”、bで”Page up”でも良いかも、ですが ;)

もう一点、カスタマイズではありませんがVAIO Zは対面積での画面解像度が非常に高く、普通の設定では文字が小さく目が疲れてしまいます。そのためWeb表示時などは拡大表示しているのですが、普通に拡大表示するとすぐ横方向の画面が足りなくなり、読みにくくなってしまいます。そこで、Operaの「ウィンドウ幅で表示」機能を使っています。機能はその名前の通りですが、かなり優秀な機能です。Ctrl+F11キーで同機能を有効化し、0キーや9キーで拡大率を調節すると、なかなか目を気遣ったWebブラウジングが可能です。

ちなみにOperaには「シングルショートカットキーを有効にする」というオプションがあり、私のようにキーボードをメインに操作したいと考える人には便利なショートカットキーが色々と用意されています(例: zとxで戻ると進む、1と2でタブの切り替え、sとwで見出しジャンプ)。「戻る」、「進む」などについては同オプションを使い続けているため慣れており、新しくvi風なキーバインドを設定していません。興味のある方は一度ショートカットの設定画面で”Feature ExtendedShortcuts”と検索窓に入力してみてください。同オプションを有効にすると使えるようになるショートカットキーが確認できます(”Feature ExtendedShortcuts”とキーの前に書かれているものは、本オプションが有効な場合にだけ使えるようになる)。

2011/09/18

AiB ToolsのためにMercurialを導入してみました

Filed under: 未分類 — タグ: , — Suguru Yamamoto @ 22:22

AiB Toolsのソース管理のために、分散バージョン管理システムMercurialを使ってみることにしました。AiB ToolsはライセンスもMITですしソースを公開していますからオープンソースと言えばオープンソースです。が、SorceForgeやCodePlexなどといったサービスを利用していません。というのも、ユーザ層は日本の重度視覚障害者なので、スクリーンリーダ等でアクセスしやすい上に日本語で使用できるサービスでないとダメだと思っています。残念ながら、そのようなサービスが今のところ見つからないので、ローカルで開発しているわけです。

さて、で、先日VAIO Zを購入したので2台で作業を共有する必要が出てきました。今まではローカルファイルシステムにレポジトリを作ってSubversionで管理していたのですが、2台ともにその構成を取ると非常に不都合です。両方にレポジトリを置いた場合は同期が面倒ですし(思いつく方法はどちらかでsvnserveを起動してsvn syncをかける…)、かといってどちらか一方をマスターにしてしまうと2台に作業環境を用意している意味が無くなります。というわけで、マスターという概念がシステム的に存在しないDVCSを使おうと思いつき、gitとMercurialを比べて、用語が自分により自然な印象を受けるMercurialを採用してみました。もう一つの理由はTortoiseGitとTortoiseHgの比較結果ですが。とりあえず本日修正の機会があったので少し使ってみましたが、同期は次のような手順で行えました。

  1. デスクトップPCのレポジトリを右クリックしてWeb Serverを起動
  2. ノートPCからデスクトップPCのIPアドレスとポート番号を指定してpush
  3. デスクトップPC側でpush結果をmerge

使い始めたばかりなので用語が違うかもしれませんが、ご容赦ください。うーん、思ったより楽でも無いですが、Subversionで同じことをするよりはマシですね。

ただ一つ思ったのは、DVCSが出てきた頃によく話に上がった作業形態の違いよりも、Subversionで言うところのワークスペース・ローカルコピー自体がレポジトリになるという点が一番知っておきたかったです。Subversionのつもりで空フォルダをhg initしてcheckoutしようとしてしまいました。trunk/branches/tagsという管理用フォルダ分け、という考え方も、ありませんしね。それを知らなかったためSubversionのレポジトリのルートをhg convertしてしまい、一からやり直しになりました(Subversionレポジトリのtrunkを指定してhg convertするとタグやブランチもMercurial的に望ましい形で取り込んでくれる)。

Windows Server 8。コマンドだけの世界で*nixへ挑めるのか、それとも。

Filed under: 未分類 — タグ: , — Suguru Yamamoto @ 16:15

マイクロソフトの開発者向けカンファレンス「//Build/」にて、”Windows Server 8 apps must run without a GUI – learn more now”というセッションがあったそうです。私はWindows Server用サーバアプリケーションを業務で開発していますので、刺激的ですね。なお題名に “must” とあるものの、必須ではなく強い推奨ですので勘違い無きよう :)

さて、セッション内で言われているリソースの話やセキュリティの話は「おっしゃるとおり」ですので議論の余地は無いと思います。ただ、捉え方によっては常にGUIを備えることで(言い方は悪いですが)技術的知識・経験の浅い人でも操作できることを最大の価値としてきたWindowsが、PowerShell上の「コマンドだけの世界」に戻ることになるのではないでしょうか。そして「コマンドだけ」という部分だけに着目するならば、そこは*nix(UNIXやLinux)勢の独壇場だと私は考えています。私にとっては、今でも実用に耐える*nixのコマンドライン環境は本当に優秀な環境であり、MS-DOSを引きずるWindowsのコマンドライン環境は「放置された廃墟」です。

*nixのコマンド環境を考えると、困ることがあっても探せば何らかの解決方法が見つかってきました。また基本機能は十分強力ですから、(機能面では)コマンドだけで業務をこなすにあたって不足は無いと感じます。ちなみに私が業務で*nix用サーバアプリケーションを開発する際にはWindows XPからTeraTerm (SSH)でリモートログインし、vimとmakeとシェルスクリプトで全開発作業を行っています。X Windowを使うのは、システム設定を変更する際に「設定ファイルがドコにあるのか分からないからGUIメニューで探した方が速い」場面だけです。実経験として、*nixではGUIが無くとも最初から何一つ問題がありませんでした。

Windowsのコマンド環境を考えると、第一にバッチファイルや標準コマンド群といった基本機能が貧弱すぎます。この点はPowerShellを導入することで改善しますが、まだまだWindows Server 2003などが主流で残っている現状ですからPowerShellが使えることを前提にはできません。第二に、コマンド操作用画面として使うCMD.EXEの多言語対応度合いの低さが問題です。日本語WindowsではShift_JIS以外を選択できず、レジストリを変更して無理矢理UTF-8に対応させたならカーソル位置が正しく表示されず妙な動きをします(無理矢理動かしているので当然ですが)。コマンドプロンプトでShift_JIS文字列しか表示できないため、C/C++で開発するコマンドを内部文字コードUTF-8とするのが無駄に難しくなり、多言語化もほぼ不可能です(Shift_JIS文字しか表示できない環境では日本語・英語以外の文字を表示できないので確認もできない)。第三は、権限昇格の仕組みがコマンドベースでは実現できない問題です。Windows 7などでは、特権が必要な場面に出くわすたびに特権で起動したCMD.EXEのインスタンスを再作成し、そちらで作業する必要に迫られます。もちろん最初から特権でCMD.EXEを起動しておけば手間的には良いのですが、それは「UNIXシステムへ常にrootでログインする」のと同じですから、そんなことを強制される環境は、とても使いたいと思いません。以上の問題はすべて、アプリの作り込みでは解決できません。こうした面があるため、魅力的なWindows向けのコマンドアプリを開発しても、その実行環境が魅力的で無いため、トータルで魅力が失われる気がしてしまいます。そして、コマンドアプリのニーズを実感として感じていないというトドメがあり、結局Windows向けのコマンドアプリにまったく投資してきませんでした。

GUIを考えるとWindowsに軍配が上がりますが、コマンドという観点では*nixに大きく軍配が上がると思います。そうだというのにコマンドベースのサーバアプリがWindows Server向けに求められるというのは、面白い話です。少なくとも私にとってのWindows Serverの価値を、少し考え直す必要があると思います。

2011/09/17

リモートデスクトップでファイルの「コピー&ペースト」

Filed under: 未分類 — タグ: — Suguru Yamamoto @ 17:23

普段から業務でWindowsの「リモートデスクトップ」機能を使っているのですが、ファイルをローカルPC(接続元)からリモートPC(接続先)に転送したい場面がよくあります。そのような場合は毎回ローカルPCから共有ファイルサーバにファイルをアップロードして、リモートPCでダウンロードして使っていたのですが…リモートデスクトップ画面を通して「コピー&ペースト」感覚操作でファイル転送する機能があったことを今日知りました。つまり、ローカルPC上でファイルをCtrl+Cでコピーして、リモートPC上でCtrl+Vで貼り付けると転送できます。今日になって気がついて「なんて便利なんだろう!」と思って調べてみたところ、Windows XP SP3以降であれば使えるとのこと。てっきりWindows 7の新機能だと思ったのですが…もっと早く気付けば良かった…。ま、ともあれ便利なので今後は活用しようと思います。 :)

@IT – リモート・デスクトップでリモート・コンピュータとファイルをコピー&ペーストする

2011/08/17

IS12TとVAIO Zを予約

Filed under: 未分類 — タグ: , , — Suguru Yamamoto @ 00:29

そういえばTwitterで投稿していたもののブログでは投稿していなかったので後追い追記。オリジナルのつぶやきに少し加筆しています。

8月5日にIS12Tを予約しました。待ちに待ったWindows Phone 7です。原宿で実機を触った感じからすると、とりあえず最初の画面は他の2大スマホOSよりはるかに楽しいとは思いました。Windows Mobileから乗り換えるので、まあどう転んでも天国ですね…来月が楽しみです :) 。最近思うに製品の価値とは、小型電子デバイスの場合は特に、OSなどの一部分だけを取り出しても意味が無く、フルスタックでの総力戦とでも言おうか、ハード・OS・アプリなど全体をまとめて評価するべきものだと思います。さもないと、たとえば「すばらしいOS」をゴミのようなハードに搭載した製品は、やはりゴミでしかない。その点を強く感じさせてくれるのがApple製品ですね。全体として一つの製品という点を非常に強く意識・重視しているからこそ、閉鎖的などと言われようともハードとOSは独立しきらないのだろうと思います。

同じく8月5日、VAIO Zを購入しました。私は現在、自宅では基本的にデスクトップPC一台で開発作業からゲームまで行っています。そのため「つい」開発作業中にゲームや音楽などへと時間を使ってしまうことがあります。ところが、学生時代はノートPC(IBMのThinkPad T42)で開発作業などを行っており、ノートには遊び道具を入れていませんでした。その結果、あの頃は仕事と遊びをマシンで物理的に分離しており、それがうまくいっていたと思っています。それが正しかったというのであれば、今ThinkPadを引っ張り出してきて使えば良いのですが、さすがにパワーが足りない上にハード的にガタがきています(ディスプレイのヒンジが折れているとかファンが異音を立てるとか)。そこで、また向こう数年間は使える良いモノを買おうと考えてVAIO Z購入に踏み切ったという次第です。現在、VAIO ZはノートPCとしては最高級だと思いますが、ThinkPad T42を買った値段より安いんですよね。情報機器を買うたびに同じ状況に気付くわけですが、何度経験しても感慨深いものがあります…良くも悪くも時代は進む。

2011/08/15

昭和16年夏の敗戦を読んで

Filed under: 未分類 — タグ: , , — Suguru Yamamoto @ 00:51

(本日の投稿は、技術ネタではなくまじめな読書感想文です)

兄の(間接的な)薦めで知った猪瀬直樹著「昭和16年夏の敗戦」を読み終えた。事実は複雑怪奇で一言に表現するにあたわず。確固たる自らの見解としてではなかったにせよ本書を読む前の自分ならば、聞かれれば「太平洋戦争の開戦および敗戦の原因は軍部の暴走にある」などと一言で済ませていたであろうことは間違い無く、「日本」に対する自分の無知・無関心に恥じ入るばかりである。

自分の無知および無関心について言い訳するのは簡単である。「知る機会が無かった」と言うこともできるし、高校時代に教員から自虐的歴史観という偏見を教わったことなども原因として挙げることはできる。しかし、自らの属する組織のことを知らずして組織員でいられるはずもない。すなわち自国の歴史に関して言うならば、すべての国民が「当事者」であり、知っておくべきものであろう。ただし、ここでの歴史とは戦争責任云々の話ではなく、近代日本史における最大の「失敗」(表現に語弊あり)を成功の母という意味で指している。そこから何も学ばずして未来へ歩みを進めるのは、組織として愚かと言わざるを得ない。そこに齢28でやっと気付いたのであるから、恥である。

終戦間近の日本では、官僚主義が壊れず、誰も意思決定を下せなかった。そのため物事が成り行きに任せる形でズルズルと進んでしまった。少なくともそれが、国家の総力を引き出すにあたって大きな障害になっていたことは確からしい。日本はそのまま敗戦という、行くところまで行ってしまった。それでは同じような運営をしている私の所属組織は、どこまで行ってしまうのだろうか。もしかすれば、そのまま行くところまで行ってしまうのかもしれない。「下っ端でしかない私には仕方のないことだ」と言って傍観を決め込むのでは、組織員としての責任放棄になると思う。そして何より、傍観は何も生み出さない。幸い戦時中の日本とは異なり、私が現在所属する組織では多少の分不相応な言動を取っても煙たがられる程度であって処刑されるようなことは無い。今まで以上に、やれることはやっていこうと思う。

2011/07/30

Java 7とラムダ式

Filed under: 未分類 — タグ: — Suguru Yamamoto @ 15:35

Java 7がリリースされたようですね。ラムダ式が先送りになったので、個人的に興味を持つようなエンハンス内容は今回は無いですね…むしろJava FX 2.0のリリースが気になる。

以下、すべて個人的な意見というか見解です。Javaはオブジェクト指向原理主義だったため、本来はオブジェクト指向でない方法が適している場面でも、他の流儀を取り入れずオブジェクト指向的に実現してきたと思います。具体例は、コレクションの中から特定条件を満たすような要素を検索する、コレクションを特定の条件に従ってソートする、GUIやタイマーなどによって発生するイベントが発生した直後に実行したい処理をGUIやタイマーに指示する、といった場面です。これらはみな、「処理を変数として扱う」ことができれば何も苦労はありません。こうした場面では、いわゆる関数ポインタ(C)、述語オブジェクト(C++)、匿名メソッド(Lisp, JavaScript, C#)、クロージャ(色々な言語)といった言語機能を使うとスッキリ実現できるのですが、Javaではこのような場面でComparatorインタフェースやKeyListenerインタフェースを実装したクラスのオブジェクトを用意する必要があります。このあたりが非常に面倒だと感じているわけなのですが、ラムダ式が正式導入され、各種コレクションやGUIクラスにラムダ式をパラメータとして受けるオーバーロードなどが実装されれば、非常に世界は明るくなります。できれば複数行を記載できるクロージャになるともっと良いと思いますが。

具体的に、もしArrayListにラムダ式を引数に取るindexOfのオーバーロードやsortメソッドなどが追加された場合、おそらく次のようなコードが書けると思っています。

ArrayList<int> numbers = getSomeNumbers();

// 最初の奇数を検索
numbers.indexOf( #{int n -> ((n%2) != 0)} );

// 昇順にソート。ただし4だけは特別扱いして常に最初に来るようにする
numbers.sort( #{int x, int y ->
        if(x == 4) {
            return -1;
        } else if(y == 4) {
            return 1;
        }
        return (x - y);
    });

うーん、ラムダ式はとりあえず見送りという話ですが、クロージャはどうなんだろう(クロージャが導入される場合、ラムダ式はクロージャの一機能・一形態という話になると思います)?ま、いずれにせよJava 8以降ですから、当分先ということで忘れるとします :)

2011/07/27

ブラウザというプラットフォームに「機械語」を

Filed under: 未分類 — タグ: — Suguru Yamamoto @ 23:02

Webブラウザはロジック実行のためにJVM、CLI、Parrotのような仮想マシンを内蔵し、その上でJavaScriptを動作させるべきだ!…というのが本日の妄想の結論です。

妄想の発端は何かというと、「プラットフォームとしてブラウザ」を正視した場合、私が一番イヤだと感じるのは「JavaScript以外に選択肢が無い」という話です。個人的にJavaScriptはVisual BasicやPHPと比較するのも失礼というくらい言語的に大嫌い(←思いっきり主観)なので、とにかく使いたくないと思っています。あ、一応補足しておきますが、一人で趣味プログラムを「書き捨て」で作るなら良いのです。が、チームプレイで数万行のソースを書いて十年以上メンテしていく状況を想像したら、あの言語は心の底から使いたくないのです。

次に、アプリのロジックを記述するもっともプリミティブな表現形式が超高級言語JavaScriptである点は、ありえないと思えるのです。超高級言語を最下層に置くのですから、直感的に処理効率が下がるのではないかと思えますし、JavaScript以外の言語以外をほぼ使えなくなると思います。というのも、もし他の言語を使うことを考えると「ブラウザ上でJavaScript以外の言語Aを使いたければ言語AのソースをJavaScriptにコンパイル(変換)する必要がある」といった話になるからです。もしJavaScriptがJVMバイトコードぐらいにプリミティブな言語であれば納得できますが、「コンパイル先はJavaScriptです」と言われると強烈な違和感を覚えます。たかだか少しばかりHTML/CSSをいじくるスクリプトだったJavaScriptを本格的に使いこなす必要に迫られる感覚は、ExcelのVBAをがんばって使いこなすような感覚にも近いように思います(形だけ)。その観点からすると、今の「JavaScriptしか使えないブラウザというプラットフォーム」は、「VBAしか使えないExcelというプラットフォーム」と同じかもしれません。

で、個人的趣味によるJavaScript嫌いと、技術者としての違和感および不都合を解消するための策は何なのか。きっとブラウザが「機械語」のような非常にプリミティブな表現系を解釈できるようになり、JavaScriptはその上で動作するようになれば良い。つまり、そう。ブラウザ自身がJVM、CLI(.NET処理系)、あるいはParrotになれば良いのです!…ま、いくらHTML5が盛り上がっても、そんな話は実現しないんだろうなぁ…。

2011/06/26

コマンドプロンプトでUTF-8の文字列をアドホックに表示

Filed under: 未分類 — タグ: , — Suguru Yamamoto @ 19:16

なぜか、コマンドプロンプトでUTF-8の文字列を表示できなくなってしまいました。「chcp 65001」でコードページを変更するのは当然良いのですが、レジストリを編集して追加したはずの日本語フォントがリストアップされず、英語フォントでの表示しかできません。この話をWeb検索するとおおよそXP時代かVista時代の情報が出てくるのですが、今日試した限りどれもうまくいかない…はて?
きっとWindows 7になってから仕様が変わったのだろうと勝手に納得して、代替案を捜しました。結局の所良い方法が見つからなかったのですが、とりあえずの応急処置策を見つけましたのでメモしておきます。

コマンドプロンプトは、どうも起動した方法(起動時のウィンドウのタイトル文字列?)によってまとめて設定が切り替わる仕組みになっているようです。逆に考えると、ウィンドウのタイトル文字列ごとに表示方法などの設定項目が一式どこかに保存されている、ということになります。今回私が採った方法は、この設定を直接書き換えてしまうことで起動時のコードページとフォントをアドホックに変更する、というものです。

起動した方法ごとの設定は、HKCU\Consoleキーの下に並んでいます。たとえばcmd.exeを直接起動した場合は「C:\Windows\system32\cmd.exe」といったタイトルになります。私の環境では、これに相当する「%SystemRoot%_system32_cmd.exe」というキーがありましたので、それを開いて次のように変更しました。

  • CodePageを65001
  • FaceNameを「MS Gothic」に
レジストリエディタのスクリーンショット

レジストリエディタのスクリーンショット

応急処置ですが、これで起動した時点でUTF-8表示できるような状態になりました。なおこのようにUTF-8モードにした場合、文字幅の計算が正しく行えていないようで、たとえば入力した日本語の上をカーソル移動すると…変な位置にカーソルが移動します。Unicodeで文字幅という概念を扱うのはきわめて難しい上コマンドプロンプト自体レガシーと考えているであろうMicrosoftの立場からすると労力をかけられないのでコマンドプロンプトだけは表向きにもUnicode対応を前面に出さないのだろうなと勝手に理解しています。

« Newer PostsOlder Posts »

Powered by WordPress