2006-01-31

ショックなニュース二つ

スラッシュドット ジャパン | プログラミング情報誌「C MAGAZINE」が休刊か

2006年3月発売号で休刊だそうです。休刊≒廃刊ってことだよなぁ,残念。
私も「C MAGAZINE」の愛読者でした。私がプログラミングを始めたのは中学生ぐらいだったんですが,インターネットも無く,パソコン通信もやってない人間にとって,この雑誌は貴重な情報源でした。C言語もJavaも最初は「C MAGAZINE」で勉強しましたね(中学生に1800円は痛かったけど)。

「C MAGAZINE」はわりと骨太な技術の特集をやってましたね。確か,自分がデータ圧縮やコンパイラの構成について知ったのもこの雑誌からだったはずです。う~ん,やっぱり残念だ。雑誌はインターネットの情報量には勝てなかったということなんでしょうか? とりあえず最終号は記念に買うことにします。



ソニー、AIBO、QRIO、QUALIA撤退

AIBOが新規開発中止,生産も2005年度末までで終了となるそうです。
実は大学生のころ,AIBOを動かすためのプログラムを書いたことがあります。友人がAIBOを利用した卒業研究をやってたんですが,その助っ人として手伝いました(お礼に寿司を奢ってもらったw)。あんまり覚えてないけど,C++でプログラムを書いて,メモリースティックに転送してAIBOに挿入,再起動して読み込みって感じで開発してました。
AIBOってただのロボットだけど,プログラムを書いているうちに何だか可愛く思えてくるんですよね~。作ったのはAIBOを歩かせるプログラムだったんですけど,最初は上手くいかなくて生まれたての子馬のような動きだったんですよw それが徐々にしっかりした歩きになっていくのは,まるで子どもの成長を見守る親のよう! 
でもそれが生産中止かー。まぁたソニーが詰まらなくなっちったよ。




テンション下げてばかりでもアレなので,面白かったことも二つ。

Waterfall 2006 - International Conference on Sequential Development(via 秋元@サイボウズ研究所プログラマーBlog
「ウォーターフォール開発を見直そう!」というカンファレンス。ナイアガラの滝で開催されるそうです。アジャイル開発プロセスで論文書いた身としては,このネタはかなりキましたw。”ペア管理: プログラマ一人にマネージャ二人”!

やわらか戦車2 ラレコ先生
 Flashアニメです。音楽と絵が絶妙で,ここ最近はこれが頭の中でエンドレスになってます。作者さんのサイトにある「コアラッコ」も最高! コアラッコ,コアラッコ,生まれたときから反逆児~♪

2006-01-25

[映画]『スーパーサイズ・ミー』


Amazon.co.jp:スーパーサイズ・ミー: DVD



ダイエットの一環として見てみた。結論から言うと,もう怖くってハンバーガーなんか食えません。


『スーパーサイズ・ミー』では,監督(上でポテトくわえてる人)が「マクドナルドの食品を一ヶ月間食べ続けたらどうなるか?」ということを検証するため,身体を張ってチャレンジします。そのときのルールは三つ。
  • 1.マクドナルドで販売されているものしか食べてはいけない(水も含む)
  • 2.一日三食,残さず食べる
  • 3.”スーパーサイズ”を薦められたら断ってはいけない

”スーパーサイズ”というのはS・M・Lのさらに上のサイズです。映画で出てきたけど,デカすぎです。コーラのカップなんか子供用のバケツみたいです。

最初は笑顔でハンバーガーを食べていた監督も,二日目にして早くも気持ち悪くなり胃の中がリバースしてました。監督,さすがにスーパーサイズは辛そうです。二日目を過ぎると何とか慣れたみたいで淡々と食べてきます。取材で各地を回りながら,アメリカ各地のマクドナルドを回っていきます。監督,テキサスのご当地バーガーに喜びます(あー,さすがに飽きてたのね)。しかしこのチャレンジは20日を越えたあたりからだんだんとシリアスになってきます。なんというか,壮絶です。最後にどうなったのかは見たときのお楽しみ。
それにしても,監督の彼女がベジタリアンなのは皮肉ですねー,明らかにこの企画は彼女への嫌がらせでしょ(w



ノリとしては電波少年みたいなんですが,監督のチャレンジの合間に,真面目にアメリカの食の問題に切り込んでます。そもそも,この企画が始まったのがアメリカの二人の少女が「自分が肥満になったのはファーストフード店のせい!」って訴えたという事件からです。この事実だけ知ると,「またアメリカで変な訴訟やってんな」って感じに流してしまいそうですが,この映画を見たあとだと簡単には片付けられない問題だということが分かりますね。

マクドナルド生活が始まって,実験台の監督は「マクドナルド中毒」のようになっちゃいます。一日中うつ状態で,ハンバーガーを食べたときだけ気分が明るくなるっていうような状態です。

映画の中でインタビューされている人が言っていましたが,「タバコ会社と喫煙者」の関係が「ファーストフード企業と太っている人」の間にもあるんじゃないかって考え方が出てきます。タバコ会社はきちんとタバコの害をアピールしているし一定の責任は果たしているけど,ファーストフード企業はそれをしていない。売ってるものに中毒性がある以上,これってアンフェアじゃないの? という意見です。アメリカでは肥満が原因の病気で死ぬ人が増えているようで,タバコと比較するのもそんなに的外れではないようです。

法律で規制しようにも,当然ファーストフード企業のためのロビィ団体があるわけで,なかなか上手くはいきません。そんな状況をぶち壊すために監督はこの映画を作ったんでしょう。実際,映画公開後にマクドナルドではスーパーサイズの販売を中止したそうです。映画ではハンバーガーを食べてるだけだったけど,なんか監督がカッコよく思えてきました。


こういうのを見ると日本でも同じことをやってくれないかなーって思いますね。まずはセブンイレブンの弁当か吉野家あたりで。前にコンビニ弁当ばっかり食べてたときに,大分太りましたからね。


この映画を見たあとだと食べ物に関しては気をつけるようになりますね。とりあえずダイエット効果ありだと思います。



【参考リンク】
日本マクドナルドホームページ - 栄養情報
 マクドナルドの食品成分表。どうでも良いけどFlashは使わないでほしい。
外食、食品栄養成分分析マップ
 各種外食産業の食品成分表ページのまとめ

2006-01-24

Programmable Myself #2

以前のエントリのアイデアで思いついたことをメモ。
とっても「チラシの裏」的なエントリなんで,よく分からなくても気にしないでください。


「マネジメントをプログラミングに変える」
自分がやりたいのは「マネジメント」 という言葉を「プログラミング」に変えたいって事なんだよなー。プロジェクト・マネジメントじゃなくてプロジェクト・プログラミング。セルフ・マネジメントじゃなくてセルフ・プログラミングとか言うと素敵。

「精神的サイボーグ」
サイボーグってのは機械で身体の機能を代用する。じゃ,ソフトウェアで自分の仕事の一部を代用する,つまりスケジュールをPDAで管理してアラームで知らせるみたいなことをしている場合も,ある種のサイボーグみたいなものじゃないのかな。この例じゃそうでもないかもしれないけど,もうちょっときめ細かくサポートできて便利になれば,実感も出るのでは。


TODO:
 とりあえずプログラマブルTODOリストについて考えてみる。つーか,分かりにくいからなんか作れ>自分

2006-01-22

ドラゴンを拾った

最近,会社で組織改変がありました。上層部の考えとしては,うちの部署は利益があんまり出てないから,もうちょい収益を考えた開発をしろよってことらしいです。

そんなことで席を移動しなくちゃいけなくなって,机の掃除をしてました。ゴミ出しにいってみると,同期のS氏が何やらゴミ捨て場を漁ってました。ちょっと話してみると,本がたくさん捨ててあって,使えそうなのが無いか探していたとのこと。さすがS氏,ということで一緒に漁ることに。仕事中にゴミ捨て場を漁る男二人。

いろいろ探っていると,見覚えのある表紙の分厚い本がありました。おぉ,これはドラゴンブックではないですか!!! しかも原著! コンパイラの本としては定番中の定番ですよ。

dragonbook

当然,S氏には黙ってゲット。あとでアマゾンで調べてみると同じ本が10,000円ぐらいしてるよ。S氏ありがとう! あと誰だか知らないけど,この本を捨てた人もありがとう! っていうかこんな良い本捨てるんだったら図書室に寄付しろよ!

実際,英語の本なんで全部読むとは思えないけど,ドラゴンブックは持っといて損は無いよなぁ。なんだか言語処理系を作りたくなってきたぞ。



ついでに最近見つけた凄いページをメモ。実際にJavaScriptで作ってる様子をFlashでみれます。

10分で書く字句解析器元ページ
10分で書く構文解析器元ページ

簡単なものだけど,10分で本当に出来てるってのが凄い。下の構文解析器のほうなんか時間が余っちゃってるし。


学生時代もコンパイラの勉強はしたし,研究でPrologのインタプリタも作ったことがあるんだけど,もうちょっと言語処理系の勉強をしてみよっかなー,意外に簡単に出来るかもしれないし。というかプログラム言語作りたい!って最近思ってます。


【過去記事】
サルノオボエガキ: Programmable Myself
 書くの忘れてるわけじゃないすよ。ただこのアイデアの実現するためのプログラム言語が必要かなー,と思ってます。

2006-01-21

TopCoder: Single Round Match 283

Single Round Match (SRM) Schedule at TopCoder

20日は久しぶりにTopCoderのSingle Round Matchに参加しました。

TopCoderというのは,オンラインでプログラミングコンテストをやっているサイトで,参加者は出題された問題を解くプログラムを素早く仕上げる能力を競います。問題はパズルみたいなのが多いですね。TopCoderは,Google主催のプログラミングコンテスト"Google Code Jam"で使われてるのをみて知りました。


TopCoderでは以下のような独自のJavaアプレットで参加します。

TopCoder

上半分に問題文が出て,下半分にプログラムを入力します。右下のボタンでコンパイルやテストが出来ます。完成したと思ったらSUBMITボタンで送信。問題文を開いてからSUBMITまでの時間でスコアが決まります。

SRMがどんな流れで進むかということに関しては以前SRMに参加したときのエントリを参照してください。


で,結果ですが・・・。
またチャレンジフェーズで落とされました! うー,落とされる前までは結構上位だったんで期待してたんだけどなぁ。以下に今回出題された問題をメモっときます。


250点問題「DiagonalDisproportion」
  • 一桁の数字が正方形の行列に配置されているとき,左上から右下への数字を足したものから,右上から左下への数字を足したものを引き算した値を返すという問題。ただし行の数字は1行の文字列の配列で渡される。例:{"190","828","373"}。
600点問題「PowerSupply」
  • 時間が無かったのでパスしました。
1000点問題「FactorialGCD」
  • 整数a,bが与えられたとき,a!とbの最大公約数を求めよ。



250点問題はそんなに難しく無かったです。素直に書いて速攻サブミット。

600点問題はパスで,1000点問題。この問題が結構難しくて,試行錯誤をぎりぎりまでやってました。最初は「最大公約数はユークリッドの互除法で求めればOKだし,1000点にしては簡単じゃね?」とか思ってました。つまり次のようなアホアホなプログラムを書いちゃってました。
public int factGCD(int a, int b) {
int temp = fact(a); // 階乗を計算
return gcd(x, b); // 最大公約数を計算
}

ですが,実行してみるとすぐに分かりますが,階乗ってのがクセモノで,普通に階乗してから最大公約数を計算してると,fact(a)のところで桁あふれになっちゃいます。

ということで何かトリックを考えなくちゃいけない。ユークリッドの互除法の計算では,最初にa!をbで割った余りを求めます。なので別にa!が分からなくてもbで割った余りが分かれば,最大公約数の計算は実行できます。そこで階乗の計算途中にbで割った余りで置換する,という戦略で行きました(合同式の乗法法則)。
つまり以下のようなロジック。
public int factGCD(int a, int b) {
int temp = 1;
for (int i=a; i>0; i--) {
temp = (i % b) * (temp % b);
}
return gcd(b, temp);
}

これで桁あふれはしなくなったんですが,問題文で紹介されている例(a=2097711064, b=2147483646)だと,制限時間2秒以内に終わりません。そこで細かい条件を考えて調整しつつ,制限時間10分前で何とか2秒以内に計算させることが出来ました。結構苦労したので「やった!」と心の中で叫んでました。
で,最終的にサブミットしたのが次のプログラム。
public int factGCD(int a, int b) {
// aの方が大きかったら階乗にbが含まれるのでbが最大公約数
if ( a >= b ) return b;
int temp = 1;
for (int i=a; i>0; i--) {
temp = (i % b) * (temp % b);
// 階乗の途中計算がbの倍数になったらループを抜ける
if (temp == 0) break;
}
// a!がbの倍数になっているので,bが最大公約数
if (temp == 0) return b;
return gcd(b, temp);
}



でもチャレンジで落とされたんですよねー(チキショウ!)。今,冷静になって考えてみると,階乗の計算式がおかしい気がします。(i%b)*(temp%b)じゃなくて,(i*temp)%bでよかったんじゃないかなぁ。そこで代入されるtempで桁あふれが起こっていたと思います。


ともかく,久しぶりに全力で集中してプログラムを書けたので満足です。最近はEclipseのプラグインを弄ったりフレームワークを使ったり,素直に1からソースコードを書くことが少なかったので,こういうのは息抜きに良いですね。今後もTopCoderのSRMには参加していこうと思います。

一応,TopCoderにはdeltam81の名前で参加してますので,よろしく。


【関連リンク】
4TopCoder
日本人でTopCoderに参加している人のBlog。問題について詳細に解説されているので勉強になります。
TopCoder Events Calendar
TopCoderのイベントスケジュール。

【過去の記事】
サルノオボエガキ: TopCoder
サルノオボエガキ: Single Round Match 255 at TopCoder

2006-01-12

エクササイズリーディングのすすめ

今週はずーっと定時後に『Eclipseモデリングフレームワーク』を読んでいるので,スポーツジムに行けてませんでした。そのせいか,何だか体の調子が悪いし,気分が良くない。カロリーばっかりとって消費しないのは,ダイエットをする人間として邪道です。

そこで「本を読む」,「ジムで運動する」ということを同時にやってみました。要するにジムでエアロバイクを漕ぎながら本を読むってことです。名づけて,”エクササイズリーディング”! 実際にやってみて,いくつか良い点が分かったので書いてみます。

    良い点
  • エアロバイクに乗っている最中は他にやることが無いので,読書に集中できる。
  • 難しい本を読んでも眠くならない。
  • 運動をしているせいかテンションが高くなり,内容にのめり込める

『Eclipseモデリングフレームワーク』は比較的難しい内容の本なので,途中で読み続けるのを挫折しかけたり眠くなったりするのですが,さすがにエアロバイクに乗りながら眠るのは無理です。アドレナリンが出ているせいか,妙にやる気が出ます。
あとテンションが高くなっているので内容にノリやすいってのもあります。例えばさっき読書しているときは,心の中はこんな感じでした。

    「ヤッベ,EMFすごくね? Ecoreってのを使えばJavaコードを完全にモデル化できるし,モデル化しちゃえばあとはXMLなりUMLなりに変換し放題じゃん! バケモノだよ,バケモノテクノロジーだよ,こんなんがオープンソースかよ,世の中どうなってんだ!」
・・・。まぁ,テンション高くなってましたから。


前によくジョギングしていたときは,茂木健一郎さんの講演・講義のMP3ファイルを良く聞いていましたが,そのときも集中して聞けました。運動しながら情報をインプットするのは効率が良いのかもしれないですね。

自分としては,時間が節約できてしかも効率的なので,このエクササイズリーディングはグッドなソリューションでした。これからしばらく続けていこうと思います。

Eclipseモデリングフレームワーク


Eclipseモデリングフレームワーク



Visual Editorのソースを調べているとEObjectやeGet()なんていう文言を良く見かけます。この文言はVisual Editorの内部で使われているEMF(Eclipse Modeling Framework)に関係のあるものみたいです。

EMFはXML,Javaコード,UMLを相互に変換可能にするためのフレームワークです。例えばXML文書を元にJavaコードを自動生成したり出来ます。モデル駆動型開発(MDA)を実現するために作られたそうで,そのせいか上記の本の帯には『モデリングすべきかプログラミングすべきか,それは問題ではない』なんて格好いいコピーが書かれてました。Visual Editorでは画面レイアウトとソースコードの同期を取ってますが,その機能にEMFが使われている模様。

Visual Editorを理解するためにこの本を現在読書中なのですが,やたら抽象的で自分の頭には難しいです。ややこしいけどEMFって「モデルを記述するためのモデルを扱うためのフレームワーク」なので,やたら汎用性があって複雑です。なんか数学の本みたい。

でも早急にEMFについて覚えないと仕事が進まないので,今週中に一通り目を通しておくこと>自分。


【Visual Editor関連の過去エントリ】
サルノオボエガキ: Eclipse GUI作成プラグイン 『Visual Editor』
サルノオボエガキ: 『Visual Editor』拡張に関するドキュメント
サルノオボエガキ: VisualEditorのパレットにGUI部品を追加する

2006-01-05

VisualEditorのパレットにGUI部品を追加する

Visual Editorの簡単な拡張についてちょっと書いてみます。Visual Editorについては下の以前のエントリを参照。

Eclipse GUI作成プラグイン 『Visual Editor』



VE_Palette
左のVisual Editorの画面で赤く囲ってあるのがパレット。GUI画面を作るときは,ここから追加するGUI部品をマウスで選択して,画面上に貼り付けられます。

画面ではSwingとAWTの部品が表示されてますが,自分でカスタマイズしたGUI部品をVEで使いたい場合はどうすれば良いんでしょうか? これには二つ方法があります。一つ目はパレット上にある”Choose Bean”を選択して,表示されるダイアログに追加するGUI部品のクラス名を入力して選択する方法。二つ目はVEを拡張するプラグインを作成して,新たにパレットに項目を追加する方法です。

一つ目の方法を使えば,特別なことをしなくてもカスタマイズしたGUI部品も使えますが,いちいちクラス名を入力するのは面倒くさいですね。第一,面白くないです。なので今回は二つ目の方法の,VEパレットを拡張するプラグインを作成してみます。



テストに使用した環境は,Eclipse3.1,VisualEditor1.1.0です。他の環境では試してないので動作結果は不明。
テストのため,JLabelを継承したMyLabelというクラスを作成しました。これをVEパレットに追加してみます。以下にその手順を簡単に箇条書きしてみます。

  1. プロジェクトの新規作成
    • プラグイン・プロジェクト
        名前: AddPalette
        OSGiバンドルマニフェストは作成しない
        ”以下のテンプレートを使用してプラグインを作成”のチェックを外す
  2. 準備
    • GUI部品
        test.palette.parts.MyLabel
        テキストに接頭語と接尾語をつけるラベル
    • アイコン
        iconsフォルダ作成
        適当なアイコン追加。example.gif
    • Jarファイル
        srcフォルダをカレントフォルダにJarでエクスポート
        addpalette.jar
  3. XMIファイルの作成
    • このXMIファイルでパレットの表示内容を設定します。
    • ”プロパティ”でエンコーディングをUTF-8にする(注意! これをしないと日本語が使えません)
    • グループタグ
    • アイコンの指定
    • クラスファイルの指定
    • 表示文字列の指定
    • 変数名の指定
  4. plugin.xmlの編集
    • プラグイン依存関係を追加
        org.eclipse.ve.java.core
        org.eclipse.jdt.core
        org.eclipse.jdt.ui
    • 拡張
      • クラスパスコンテナページ
          org.eclipse.jdt.ui.classpathContainerPage
          name: AddPaletteライブラリ
          class: org.eclipse.ve.internal.java.wizard.RegisteredClasspathContainerWizardPage
      • クラスパスイニシャライザ
          org.eclipse.jdt.core.classpathContainerInitializer
          class: org.eclipse.ve.internal.java.core.RegisteredClasspathContainerInitializer
      • VEレジストレーション
          org.eclipse.ve.java.core.registrations
      • VEコントリビュータ
          org.eclipse.ve.java.core.contributors
  5. プラグインのテスト
    • ランタイムワークベンチを起動
    • SwingのJFrameを作成
    • ”AddPaletteライブラリ”を追加
    • JFrameをVEで開く
    • テストグループがあればOK
  6. プラグインのエクスポート
    • bin.includesに追加
      • icons/
        addpalette.xmi
    • ECLIPSE_HOME/pluginsに展開
    • Eclipseの再起動


このプラグインをインストールして,プロジェクトにAddPaletteライブラリを追加すると,以下のようにパレットに追加されます。

AddPalette




上記の手順で作ったプロジェクトのファイルを下に置いときます。細かいところは説明しきれないのでファイルを参照してください。というか正直良く分かってないところのほうが多いです。VE拡張は難しい!

AddPalette.zip

Programmable Myself

「プログラム可能な自分」というアイデアを思いついた。とりあえずタグ付けして,後で書く。

タグ:
ユビキタス,GTD,メッセージ,アスペクト,XMLと社会契約論,ソフトウェアプロセス記述言語

2006-01-04

GoogleDeskbarのカスタムサーチ設定を晒してみる

”GoogleDeskbarのカスタムサーチをエクスポート/インポートする” でカスタムサーチ設定の移動方法を説明したので,自分がどんな設定でGoogleDeskbarを使っているか,公開してみます。


DeskbarPict


いっぱい登録してあるけどよく使うのは2,3個だけですね。del.icio.us,辞書系,GMailが良く使うかなぁ。特にdel.icio.usのタグ検索は最近はDeskbarからしか使わなくなっちゃいました。del.icio.usとDeskbarは相性良いです。

一応,エクスポートしたファイルも置いておきます。XMLタグとして書いてあるので,見てみれば設定内容は分かると思います。

gdeskbar_exp.txt

GoogleDeskbarのカスタムサーチをエクスポート/インポートする

あけましておめでとうございます。今年もこのブログをよろしく。
新年一発目の記事は,去年書き忘れてたやつです。いきなりこんなネタです。


----
Googleがリリースしているデスクトップツールはいろいろあるけども,GoogleDeskbarには一番お世話になっています。Googleデスクトップサーチより便利だと思う。 GoogleDeskbarをインストールすると,ディスクトップのタスクバーにGoogle検索窓が常に表示されるようになります。これでWinキー+Gで検索窓に移動,キーワードを打ち込んでやれば,検索結果が小さなブラウザに表示される。この小さなブラウザがコンパクトで良くて,作業中にちょっと調べたいときなどにはちょうど良い。


GoogleDeskbarにはカスタムサーチという機能があって,これを使えばGoogle以外の検索エンジンでも検索できるようになります。というか検索サイトじゃないものも登録できるので,よく使うサイトなんかを登録しとくとIEの"お気に入り"みたいな感じで使える。私はWebアプリをいくつか登録しておいて,ランチャーのような感じで使ってます。カスタムサーチにはショートカットキーも登録できるんで,慣れるとすんごい便利。



こんな風に便利なDeskbarのカスタムサーチだけど,良くない点が一つあります。それはカスタムサーチの設定を取り出せないこと。設定ファイルとかに書いてあれば簡単なんだけど,調べてみたらどうやらレジストリにしか書いてないみたい。そこでカスタムサーチ設定をエクスポートするスクリプトを書いてみました。言語は例によってGroovy。


まずはエクスポート用。
GDeskbarExport.groovy
import org.codehaus.groovy.scriptom.ActiveXProxy

regPath = { keyNum -> "HKEY_CURRENT_USER\\Software\\Google\\CustomSearch\\${keyNum}" }

wshell = new ActiveXProxy("WScript.Shell")
try {
num = 0
while (num < 30) {
reg = wshell.RegRead((String)regPath(num++))
println reg.value
}
} catch (Exception e) {}
上記スクリプトは,"groovy GDeskbarExport.groovy > gdeskbar_exp.txt"みたいな感じで起動してください。
次にインポート用のスクリプト。これは"groovy GDeskbarImport gdeskbar_exp.txt"って感じで読み込ませてください。

GDeskbarImport.groovy
import org.codehaus.groovy.scriptom.ActiveXProxy

regPath = { keyNum -> "HKEY_CURRENT_USER\\Software\\Google\\CustomSearch\\${keyNum}" }

wshell = new ActiveXProxy("WScript.Shell")

num = 0
new File(args[0]).eachLine { line ->
wshell.RegWrite((String)regPath(num++), line, "REG_SZ")
}

上記のスクリプトではScriptomというコンポーネントを使っているので,使う場合は先にインストールしとかないと動きません。このスクリプトでは基本的にカスタムサーチの設定は全部上書きです。元々あった設定はなくなっちゃいます。あと,レジストリを触るスクリプトなんで,使う場合は自己責任でお願いします。自分のPCでは上手くいったけど。


でもこういうスクリプトは本当はVBScriptで書くのが素直だよなー,と思ったのでVBSで書いたスクリプトも一応置いときます。言語が変わっただけで,やってることは上と同じです。これならGroovyが動かない環境でも使えます。

GDeskbarImport.vbs

GDeskbarExport.vbs