月別アーカイブ: 2014年1月

夢の乗り物?

アニメの「ド〇ゴン〇ール」で出てきた一輪バイクが実現されたそうです。

Ryno

「RYNO」という電動バイクでセグウェイと似たような乗り物の様です。こんな乗り物が普通に街中を走る日も来るのでしょうか?

うさぎいっぱい

本物のうさぎではなく、シルバニアファミリーの人形ですが、いつの間にか娘のおもちゃ置き場に繁殖してまして。。。

妻が娘の為という口実でお店で買ったり、ヤフオクで落札していたりしていた様で知らぬ間に増えておりました。

当時7~8千円のものが絶版品で2~3万円で取引されているものもあるようで興味がないとおもちゃがなぜそんなに高額で?っと思うばかりです。

家にあるパソコンやゴルフクラブも妻からみれば同じ様なものでしょうから、文句は言えませんけど。

MT-01

これが私のマシン(YAMAHA MT-01)です。

facebookの仲間から描いていただきました。

1616242_395706290564964_1195725258_n

かなり精巧に描かれています。絵心を持つ才能がうらやましいですね。

テレビ

普段はほとんどテレビを観ることがないのですが、LANにつなぐと
テレビでインターネットをしたり、Youtubeを観ることができるようなので、
何か需要があるかも?と思い、少し気になっています。

好奇心をくすぐるものは、なぜか弱いですね。
先日も電子レンジの扉部分が中々開かない、開いてもやたらと重い、
更に扉がしっかり閉まらないため、全く動作しなくなったので、
「そろそろ買い替え時かな」と思いながらも分解してみたところ、
扉を引き上げるバネが劣化して折れていたため、何とか直しました。

現在は無線LANを使って、いかに費用をかけずにうまく(見た目も綺麗に)接続できるか
を時々頭の片隅で思案中です。
また、うまくいった場合は、DLNAにも挑戦してみようと思います。

※無線LAN内蔵テレビもあらゆるメーカーから販売されていますので、
新しいテレビだと比較的楽に接続が可能なようです。

なわとび

小学2年生の子供が最近よくなわとびをしています。
そう言えば、私が子供だった頃も冬になると、なわとびとマラソンを
していました。これは福岡県だけでしょうか???

まぁそれはさておき、なわとびを連続して飛べないという子供に
手取り足取り教えるのですが、中々うまくなりません。

「論より証拠」じゃないですが、口で何度言っても中々上手くいかないので、
ここは手本を本人に見せた方が分かるかもしれないと思い、私もなわとびを
借りて久しぶりに跳んでみました。何十年ぶりでしょうか。

何度か手本を見せたところ、何とか子供もうまく跳べるようになりましたが、
私もつい懐かしくなって、Myなわとびが欲しいなーと思い、店に行ったところ、
なわとびも進化していますね。
昔ながらの物もあるのですが、今は縄が細くなっているものや、跳びやすく
設計されている物、何回跳んだか分かるようにカウンタが付いている物もありました。

もちろん良い物や便利な物は高価になるので、昔ながらのノーマルのものに
したのですが、そのまま保育園に通う娘に没収?されて、結局一度も使用しない
ままとなりました。

春の訪れ?

先日に寒い中、庭の草むしりをしていたら、
チューリップの芽が少し出始めていました。

まだまだ寒いですが、植物は少しずつ春の準備を
しているようです。

寒いと体の動きも鈍くなるので、
早く春が来ないかなーと思いました。

VisualStudio2013の拡張機能を作る4 -サブメニューとしてコマンドを追加する-

前回でコマンドを増やすことができましたので、これらのコマンドをサブメニューの中に入れたいと思います。

公式サイトの「サブメニューを追加する」をみると

  1. vsctファイルを開いて
  2. IDSymbolを追加して
  3. Menusセクションにサブメニュー用のMenuを追加して
  4. GroupsセクションにGroupを追加して
  5. Buttonsセクションにサブメニューコマンド用のButtonを追加しろ

と書いてあります。

実は社内用の拡張機能を作った際にはこの部分でひっかかり、1,2ヵ月放置していました。

この公式ページの説明どおりにTopLevelMenuという名前のVSPackageを作って、説明どおりにIDSymbolやらMenuやらを追加すれば良かったのですが、説明を斜め読みのまま、

  1. VSPackage1という名前で作ったプロジェクトのvsctファイルの内容を書き換えよう。
  2. とりあえずIDSymbleを追加。
  3. MenusセクションへのMenu追加はコピペしてguidを書き換えよう。
  4. GroupsセクションのGroupを書き換えよう。
  5. 最後のコマンド用Buttonは既に作ったコマンドのParentのidを書き換えて使おう。

ってな感じで進めた結果、まったくサブメニュー化できませんでした。

どこを間違えていたかというと、GroupsセクションにGroupを追加する部分です。「追加」しなければいけないのですが、説明ページの内容に置き換えてしまったわけです。

<Groups>
    <Group guid="guidVSPackage1CmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
    </Group>
</Groups>

これを

<Groups>
    <Group guid="guidVSPackage1CmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
    </Group>
    <Group guid="guidVSPackage1CmdSet" id="SubMenuGroup" priority="0x0000">
        <Parent guid="guidVSPackage1CmdSet" id="SubMenu"/>
    </Group>
</Groups>

こうしないといけませんでした。

ちなみにid=”SubMenu”はMenuなのでこんな感じです。

<Menus>
    <Menu guid="guidVSPackage1CmdSet" id="SubMenu" priority="0x0100" type="Menu">
        <Parent guid="guidVSPackage1CmdSet" id="MyMenuGroup"/>
        <Strings>
            <ButtonText>Sub Menu</ButtonText>
            <CommandName>Sub Menu</CommandName>
        </Strings>
    </Menu>
</Menus>

で、各コマンド用ButtonのParentをid=”SubMenuGroup”に変更します。

<Button guid="guidVSPackage1CmdSet" id="cmdidMyCommand" priority="0x0100" type="Button">
    <Parent guid="guidVSPackage1CmdSet" id="SubMenuGroup" />
    <Icon guid="guidImages" id="bmpPic1" />
    <Strings>
        <ButtonText>My Command name</ButtonText>
    </Strings>
</Button>
  1. メニュー「ツール」の中にサブメニュー(id=”SubMenu”)を配置するために必要なのがParentを id=”IDM_VS_MENU_TOOLS” にしたGroup(id=”MyMenuGroup”)。
  2. サブメニューの中にコマンドを配置するために必要なのがParentを id=”SubMenu”にしたGroup(id=”SubMenuGroup”)。
  3. 配置するコマンドのParentはGroup(id=”SubMenuGroup”)にする。

サブメニューを親にしてコマンド配置用のGroupを作らないといけないんですね。よく読まずにコマンドの親をそのままサブメニューにしていたためにサブメニュー化できずに放置していました。

こうしてめでたくサブメニューになりました。

2014-01-17_193310

同じようにMenuやGroup、Buttonをもうワンセット作成し、一番上の親になるGroupのParentを以下のようにすればコンテキストメニューへ追加も完了です。

<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>

ショートカットキーの設定は簡単でKeyBindingsセクションにKeyBindingを追加してidに目的のコマンドIDを指定するだけです。修飾キーとして使えるものは入力補完で表示されます。

<KeyBindings>
<KeyBinding guid="guidVSPackage1CmdSet" id="cmdidMyCommand" editor="guidVSStd97" key1="M" mod1="Control Shift" key2="A" mod2="Control Shift" />
    <KeyBinding guid="guidVSPackage1CmdSet" id="cmdidMyCommand2" editor="guidVSStd97" key1="M" mod1="Control Shift" key2="B" mod2="Control Shift" />
</KeyBindings>

こうしてメンバから要望のあったサブメニュー化、コンテキストメニュー化が実現できて、めでたく社内公開できました。

VisualStudio2013の拡張機能を作る3 -コマンドを追加-

引き続きVisual Studioの拡張機能を作ります。

正味の話、前々回のウィザードにしたがって作る部分は公式サイトをみれば一発です。

さて今回は公式サイトの「VisualStudioのメニューバーにメニューを追加する」や「サブメニューを追加する」あたりを参考にしてメニューコマンド増やしたいと思います。

メニューコマンドを追加するにはvsctファイルに記述する。

公式サイトをみると「TopLevelMenu.vsctを開いて編集~」とあり、vsctファイルに色々と書き込むことでメニューを追加したりしています。なので VSPackage1.vsct を編集します。

ちなみにvsctファイルのXMLスキーマリファレンスはこちら

2014-01-16_192532

実行すると、VisualStudioのメニュー「ツール」に My Command name という項目が追加されますが、Buttons にある Button で設定されます。追加される位置は Parent で指定されます。

id=MyMenuGroupを探してみると Groups にid=MyMenuGroupのGroupがあります。そしてその Parent は guid=”guidSHLMainMenu” id=”IDM_VS_MENU_TOOLS” 。

これはvsctファイルに記述が無いですが、VisualStudio上での位置を指定しています。これを変えることで好きな位置にコマンド追加することができます。

例えば、idをIDM_VS_MENU_EDITに変えるとメニューの「編集」にコマンドが追加されます。

<Group guid="guidVSPackage1CmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_EDIT"/>
</Group>

その他のguidやidはこちらをご参考に。

さて、サクッとコマンド「My Command name 2」を追加しましょう。

SymblosのGuidSymbolの中に My Command name のid、cmdidMyCommandがありますのでこれを参考に「My Command name 2」用のcmdidMyCommand2を追加します。

<GuidSymbol name="guidVSPackage1CmdSet" value="{0347ac17-ebae-4ec3-b6bb-72a5ba8a702c}">
    <IDSymbol name="MyMenuGroup" value="0x1020" />
    <IDSymbol name="cmdidMyCommand" value="0x0100" />
    <IDSymbol name="cmdidMyCommand2" value="0x0102" />
    <IDSymbol name="cmdidMyTool" value="0x0101" />
</GuidSymbol>

Buttonsにコマンドのボタンを追加。Iconのidを変えてアイコンも変更してみました。ButtonのpriorityはParentに追加される順番になります。試しにcmdidMyCommandのpriorityよりも前になるように設定しています。

<Button guid="guidVSPackage1CmdSet" id="cmdidMyCommand2" priority="0x0001" type="Button">

    <Parent guid="guidVSPackage1CmdSet" id="MyMenuGroup" />
    <Icon guid="guidImages" id="bmpPic2" />
    <Strings>
        <ButtonText>My Command name2</ButtonText>
    </Strings>
</Button>

vsctファイルを弄っただけでコールバックメソッド等を記述していませんが、実行してみます。

2014-01-16_200936

バッチリです。
ちなみにクリックしても何も起こりません。まずは「My Command name」と同じ動作をするようにしてみます。

コールバックメソッドが記述されている VSPackage1Package.cs を開いて Initialize() メソッドに追加。

CommandID menuCommandID2 = new CommandID(GuidList.guidVSPackage1CmdSet, 0x0102);
MenuCommand menuItem2 = new MenuCommand(MenuItemCallback, menuCommandID2);
mcs.AddCommand(menuItem2);

CommandIDに渡すIDはPkgCmdIDListに定義するのが正しいのでしょうが、とりあえずベタ書き。変数もこんなネーミングをしていると殴られます。気をつけましょう。コールバックメッソッドとしては「My Command name」と同じにしています。

前回、エディタにHello, World.と追加するように変更していましたが、メッセージボックスを表示するように戻しておきましょう。

実行して、「My Command name2」をクリック。

2014-01-16_202340

上手くいきました。

MenuCommandに渡すコールバックメソッド(イベントハンドラ)を変えればめでたくコマンドの追加完了です。

でも、メニュー「ツール」に自作コマンドがポコポコ追加されても邪魔なのでサブメニュー化したいものです。

というわけで次回はサブメニュー化とコンテキストメニューへの追加、ショートカットキーの設定を行いたいと思います。vsctファイルとの格闘です。

PM2.5

PM2.5の飛散状態があまり良くありません。
中国では測定不能となっているようです。
日本では明日から週末に掛けて6段階中の3段階まで来るようです。
http://guide.tenki.jp/guide/particulate_matter/
屋外に出る際はPM2.5用マスクが必要かもしれません。
この時期は花粉も飛んでいますので注意が必要です。