2016年8月10日水曜日

[MFC] Visual Studioでダイアログ等のリソースをプロジェクト間コピー

はじめに


いまどき使っている人も少ないかもしれないMFC。
MFCプロジェクトを新規ソリューションで作成したけど、別のソリューションのプロジェクトからダイアログを流用したいことがたまにあります。

手動でやると、

  1. リソースファイル(.rc)をテキストエディタで開いて該当ダイアログの部分をコピー。
  2. 必要なリソースIDをresource.hに追加。
  3. ダイアログに対応したソースコード(ヘッダとcpp)をコピー
という感じになります。1.と2.がかなり面倒ですね。

もっと手軽にできないものかと、Visual Studioのリソースビューからダイアログを選択して右クリックしてみると、メニューからコピーは選べます。
しかし新しいソリューションのリソースビューに貼り付けようとするとうまくいきません。。

そんなとき、

同一ソリューション内ならダイアログリソースがコピーできる


とう話を聞いたので試してみました。
使用しているのはVisual Studio 2010です。(古!)

まずコピー元のダイアログを用意します。





新規ソリューション・プロジェクトを作成します。
ソリューションエクスプローラでソリューションを右クリックして既存のプロジェクトを追加を選びます。
上のコピー元ダイアログを含むプロジェクトを選択します。



すると、下のようにソリューション内に2つのプロジェクトが含まれるようになります。


リソースビューを開き、コピー元ダイアログを右クリックして「コピー」


コピー先のプロジェクトの「Dialog」を右クリックして「貼り付け」すると、今回はコピーできました!


コピー元のプロジェクトを新しいソリューションから削除してもこの通り、ダイアログがコピーされています!

2016年5月24日火曜日

Excel VBA最初の一歩: とりあえずメッセージボックスを出す

細かいツールのプログラムを作成する環境として、Excel VBAが結構普及しているようなので、
少し前から勉強しようと思っていました。

簡単なツールを作成する機会があったので、基本から調べたことをメモしています。

まず今回は最初の一歩。とりあえずVBAメッセージボックスを出すところまで。

環境

  • Windows 10
  • Excel 2016 (最近のバージョンなら同じ手順だと思います。)

1. Excel 2016を起動する





2. Visual Basicウィンドウを開く


ショートカットは Alt + F11 (要暗記!)





3. コードを書く場所(標準モジュール)を作成


プロジェクトの右クリックメニューから「挿入」「標準モジュール」を選択


4. コードを書く


4行だけです。
下のコードで、Helloというサブルーチンがマクロとして登録されます。

Option Explicit

Sub Hello()
    MsgBox "Hello"
End Sub



5. Visual Basicウィンドウから入力したコードを実行してみる



 F5で実行できます。
 マクロ名でHelloを選択して、実行ボタンをクリックします。



6. 実行結果


無事メッセージボックスが表示されました。



7. Excelシートからマクロを呼ぶ

普段はわざわざVisual Basicウィンドウを開かずにVBAを実行したいですよね。
そのためにはここではまず図形を追加します。



8. 図形にマクロを登録する


図形を右クリックして、「マクロの登録」を選択します。





9. 登録するマクロを選択します。


ここではHello。



10. 同じようにメッセージボックスが表示されました。






ここまでくれば、あとはVisual Basicウィンドウのエディタでコードを書けばいろいろなことができそうです。









2016年5月11日水曜日

[C++] 引数の型も個数も不定な関数を定義したいのでBoost.Preprocessorを試す

複数の変数の値を適当なフォーマットでログに出す関数を作成しているとします。

呼び出し側はこんな感じ。

int a;
string b;
ClassA c;
logFunction(a, b, c);

色々な型の引数をもつ関数を定義するなら関数テンプレート。
引数が1つの場合こんな感じになります。

template 
void logFunction(T arg) {
  DO_SOMETHING(arg);
}


DO_SOMETHINGは、

std::cout << arg;


みたいないろいろな型を受けられるようにになっているものをイメージしてください。

ですが、さらに引数の型も数も不定な場合、どうしようかと。

最近ならC++11以降の可変長引数テンプレート(Variadic template)でできるのでしょうが、
残念ながらコンパイラのバージョンが古くて使えない状況。。

最初はごり押しで書いてみました。

template <typename T0, typename T1>
void logFunction(T0 arg0, T1 arg1) {
  DO_SOMETHING(arg0);
  DO_SOMETHING(arg1);
}
template <typename T0, typename T1, typename T3>
void logFunction(T0 arg0, T1 arg1, T2 arg2) {
  DO_SOMETHING(arg0);
  DO_SOMETHING(arg1);
  DO_SOMETHING(arg2);
}
.
.
.

しかしいつの間にか引数が数十個まで必要になってしまい冗長にもほどがある状態になってしまいました。


Boost.Preprocessor


ある日、この肥大化した関数たちの処理を修正したいときがきまして、
そろそろなんとかしようかなと適当に検索していたら
Boost.Preprocessorでできそうな気がしてきました。
(繰り返しになりますが最近のコンパイラならVariadic templateでできそう)。

数少ない手に入るサンプルをこねくり回して作成したのが下記のコード。
これで引数25個まで一気に定義できます。
MAX_SIZEを変えればもっと多くてもできそうです。




#include <boost/preprocessor/repetition.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>

#define MAX_SIZE 25

#define repSomething(z, n, unused) \
DO_SOMETHING(arg##n);\

#define DefLogFunction(z, n, unused) \
template <typename T BOOST_PP_COMMA_IF(n) BOOST_PP_ENUM_PARAMS(n, typename T)> \
void logFunction(\
T arg\
BOOST_PP_COMMA_IF(n) \
BOOST_PP_ENUM_BINARY_PARAMS(n,T,arg) \
) {\
DO_SOMETHING(arg);\
BOOST_PP_REPEAT(n, repSomething, ~)\
}\


BOOST_PP_REPEAT(MAX_SIZE, DefLogFunction, ~)


#undef DefLogFunction
#undef repSomething



2016年4月12日火曜日

[C++][MFC]「今後このメッセージを表示しない」付きメッセージボックスはCTaskDialogですぐできる

タイトルの通り、「今後このメッセージを表示しない」付きメッセージボックスの作り方を調べたのでメモ。

Visual Studio 2010以降ではMFCにCTaskDialogという多機能メッセージボックスクラスが追加されています。

CTaskDialog クラス

CString message(_T("何かメッセージ"));
CString title (_T( "警告"));
CString emptyString;
CTaskDialog messageBox(message, emptyString, title , TDCBF_OK_BUTTON);
messageBox.SetMainIcon(TD_WARNING_ICON);
messageBox.SetVerificationCheckboxText (_T( "今後このメッセージを表示しない"));
messageBox.SetVerificationCheckbox (FALSE);
messageBox.DoModal();
if (dlg.GetVerificationCheckboxState()) {
  // フラグをレジストリかどこかに保存
}

こんな感じで表示できます。
あとは、ダイアログ表示前に保存しておいたフラグをチェックして、フラグによってCTaskDialogの表示を制御すればいいだけ。

これは便利!

2016年3月26日土曜日

[Ruby] AmazonのASINからJANコードを取得したい

以前クラウドワークスの募集中の仕事をなんとなく眺めていた時に、
ASINからJANコードを取得するツール作成
の依頼があったと記憶しています。
クラウドワークスは手頃な練習課題を探すのにいいですね。
Rubyで試しにやってみました。

準備


gem install amazon-ecs

この記事執筆時点ではamazon-ecs-2.4.0を使用しています。

コード


ASINから商品情報を取得するAPIはItemLookupです。
gemを使えばとても簡単。
Amazon内ではJANコードのことはEANと呼ばれているようです。
Ecs.item_lookupの第一引数がASINです。


# -*- coding: utf-8 -*-
require 'amazon/ecs'

Amazon::Ecs.options = {
    :associate_tag => 'YOUR_ASSOCIATE_TAG',
    :AWS_access_key_id => 'YOUR_ACCESS_KEY_ID',
    :AWS_secret_key => 'YOUR_SECRET_KEY',
}


res = Amazon::Ecs.item_lookup(
    'B015J4FFRE', :response_group => 'ItemAttributes', :country => 'jp'
)

res.items.each do |item|
  puts item.get('ItemAttributes/Title')
  puts item.get('ASIN')
  puts item.get('ItemAttributes/EAN')
end

実行結果


たまたま目に付いた
を例に実行してみました。
グッドモーニングアメリカ【初回限定盤】
B015J4FFRE
4988001781868
実際のAmazonのページはこちら。
確かに情報が得られているのがわかります。


おわりに


クラウドワークス見てるとExcel VBAでツール作る仕事がよく目に付きます。
今回のネタもユーザー的にはExcelで動くのが便利なんでしょうね。
Rubyコードで納品なんかされようものなら、WindowsだったらRubyのインストールから必要になりますしね。
というわけで、今度VBA化してみようかな。

2016年3月16日水曜日

freeglutをCMakeでビルドする

はじめに


OpenGLでちょっとした実験をするには相変わらず便利なGLUT。
GLUTはマルチプラットフォームでOpenGL描画のためのウィンドウ表示とマウス・キーボード・コンテクストメニューを作成できるライブラリです。
そして、本家は更新止まっているので、オープンソースで代替品がつくられています。
それが、freeglut
久しぶりに使ってみようと思ったら最新版はビルドにCMakeが要るようになったんですね。
以前はVisual Studioのプロジェクトが含まれていたような気がします。
そこで、cmakeを使ってfreeglutをビルドしてみました。
一応ビルドずみのものもこちらから入手できるようです。
(後日freeglutの中を少しいじりたいので今回はソースからビルド)

環境




ビルド

CMakeのGUIバージョン(cmake-gui)を起動します。

「Where is the source code:」欄にfreeglutを解凍したフォルダ(CMakeLists.txtが含まれるフォルダ)を指定します。

ビルドの出力先フォルダを適当に作成し(ここではC:\freeglut-3.0.0\build)、「Were to build the binaries:」欄に指定します。

左下のほうにあるConfigureボタンをクリックします。

使いたいVisual Studioのバージョンを指定して「Finish」ボタンをクリックします。

コンフィグレーションが行われ、しばらくするとビルドオプションが表示されます。
「Advanced」チェックボックスをチェックするとさらに細かいオプションが表示されます。
ここでは何も変更せずにさきほどの「Configure」の右隣の「Generate」をクリックします。

最初に指定したbuildフォルダの下にVisual Studioのソリューションやプロジェクトファイルが作成されます。
Visual Studioを起動し、freeglut.slnを読み込んでビルドします。


とりあえずDebug版をビルドしました。下のようにビルドできているのがわかります。

実行

freeglutのサンプルもビルドされていますので、その中の1つ、Fractalsというプロジェクトを実行してみました。
fractals.datがないとかエラーが出ていますがパスの問題でしょうか。
とりあえずWindowが表示され何かしらOpenGLで描画できているようです。





2016年3月14日月曜日

RapberryPiで学ぶ電子工作メモ - MCP3204について

去年末くらいから「RapberryPiで学ぶ電子工作」
http://www.amazon.co.jp/dp/B00UKG5KRW/
を少しずつ実践しています。
必要なパーツの通販コード等も載っていてとても便利です。

ただし、掲載されているパーツで入手できないものがあったのでメモしておきます。

p.133
6章・AD変換によるアナログ値の利用
12ビットADコンバータ MCP3208-CI/P
「ピンの配置を読み替えれば、MCP3204-BI/Pでも演習可」

このMCP-3208が通販ですぐに見つからず、MCP3204を購入しました。
この場合ピンの配置をを自分で調べる必要があります。

そこで見つけたのが下記のサイト。
https://developer.mbed.org/cookbook/SPI-communication-with-external-ADC-MCP3

MCP-3208とMCP-3204のピン配置図が並んでいてとてもわかりやすいです。
ありがとうございます。

2016年3月10日木曜日

7-Zipをコマンドラインで使って圧縮ファイル作成

7-Zipで圧縮ファイル作成


Windowsはエクスプローラで右クリックからzip作成ならできるのに、コマンドライン(コマンドプロンプト)で使うコマンドはなさそうですね。バッチファイルでzip作成したいとき困ります。

そこでどうすればいいか探してみました。
7-Zipが使えそうです。

7zipのコマンドラインバージョンをこちらからダウンロード
https://sevenzip.osdn.jp/download.html

適当にPathを通すか、絶対パスで起動します。

単純にフォルダをzipに固めたいだけならこんな感じ。

7za.exe a output.zip inputFolder

出力ファイルの拡張子を7zに変えれば7-Zip形式で出力されます。
出力が2GB超えると普通のzipでは対応できないらしいので、その可能性がある場合はこちら。

7za.exe a output.7z inputFolder

複数のフォルダをまとめたい


ここまでは少し調べればすぐ見つかると思いますが、複数のフォルダを1つのフォルダにまとめてからzipを作成したいケースがあって少々悩みました。

普通にコピーして1つのフォルダにまとめてから上記の方法で圧縮すればいいのですが、後処理の都合でまとめたフォルダを元に戻したい状況です。

たとえば下記のような構成の2つのフォルダがあったとします。

  • folder1/subfolder1
  • folder1/subfolder2
  • folder2/subfolder3
  • folder2/subfolder4

これらをまとめて、zip内にサブフォルダをフラットに含めたいのです。
  • subfolder1
  • subfolder2
  • subfolder3
  • subfolder4
それでどうしたかというと、7zaのaオプションは既存のzipファイルに追加もできるようなので、
  1. cd folder1
  2. 7za a ..\output.zip *
  3. cd ..\folder2
  4. 7za a ..\output.zip *
これでとりあえずoutput.zipにフラットにサブフォルダが含まれるようになりました。

2016年3月8日火曜日

ドラッカーさんに教わったIT技術者が変わる50の習慣

「ドラッカーさんに教わったIT技術者が変わる50の習慣」


去年買って最近ようやくパラパラと読みました。内容的にはドラッカー本をIT技術者向けに書いたものです。記憶に残ってるのは2点。

  1. 生産性をひたすら上げろ
  2. 強みを活かせ


生産性をひたすら上げろ


毎日0.3%効率をあげれば一年で2倍になるとか(数字は記憶違いあるかもしれませんが、とにかく毎日効率化を心がけようという感じ)。

この本では具体例として著者は新入社員の頃毎日タイピング練習をしてタイピング速度を上げていたと書かれていました。

個人的にはタイピングがプログラミングに占める割合は少ないので、手っ取り早いのはツールの使いこなしかなと思います。ツールで生産性上げる意味ではEffective Programmerという本がそれに特化していたはず。今度読み返してみよう。


強みを活かせ


人より優れているところを伸ばしていこうという感じ。

プログラマーとして日々精進するのはいいとしても、本業以外に何か勉強しようとすると飽きっぽくて長続きしないですね。本業が一番の強みと言えるように集中するのがいいんでしょうかね。

2016年3月5日土曜日

Mesa 3D Graphiccs Library (OpenGLのオープンソース実装)を試す

はじめに


OpenGLアプリをリモートデスクトップで動かすとまともに動かなかったりします。
以前調べたときはリモートデスクトップで起動するとOpenGLがWindows標準のソフトウェアレンダラーを使用してしまうとの書き込みがありました。つまりOpenGLのバージョンが1.1相当になってしまうようです。

仮想環境でも一般的にOpenGLのサポートは弱いですよね。1年前くらいにParallelsでWindows使ってましたが、OpenGL 2.0くらいでした。

普通にクライアントPCで起動する際にもGPUドライバの不具合があって表示に不具合がでることがあります。

そのような時、遅くても確実に動くソフトウェアレンダラーを使用したいことがあります。Windows標準のソフトウェアレンダラ?はOpenGL 1.1でさすがに機能少なすぎるので、

Mesa 3D Graphics Library

を試してみることにしました。

Mesaとは


OpenGLのオープンンソース実装です。昔はLinux用のグラフィックスアクセラレータのドライバとかなかったのでLinuxでよく使われていた気がします。Windowsでは上記の必要がないとなかなか使わないかもしれません。

ビルドはなかなかハードル高いのでこちらからダウンロードしました。
https://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/
mingw-w64-x86_64-mesa-11.0.5-1-any.pkg.tar.xz


Mesaの実行


ダウンロードしたファイルを展開するとopengl32.dllがありますので、アプリケーションと同じフォルダに置くだけです。

glGetStringで情報を取ってみるとこんな感じでした。

GL_VENDOR : VMware, Inc.
GL_RENDERER : Gallium 0.4 on llvmpipe (LLVM 3.7, 256 bits)
GL_VERSION : 3.0 Mesa 11.0.5 (git-27c6440)

GL_SHADING_LANGUAGE_VERSION : 1.30 

手元のOpenGLプログラムはOpenGL 3.3くらいの機能を使っていたので、いろいろ動かない箇所がありました。ジオメトリシェーダどうしよう。。

Mesaの実行速度


とりあえず実行速度だけ試しました。比較対象は下記の環境。
GL_VENDOR : NVIDIA Corporation
GL_RENDERER : NVS 4200M/PCIe/SSE2
GL_VERSION : 4.5.0 NVIDIA 354.13

GL_SHADING_LANGUAGE_VERSION : 4.50 NVIDIA 

CPUは型番記録し忘れましたが、core i7の3000番台で2コアのやつです。

10万triangles程度のデータを表示してみると、
Mesa : 約13fps
Nvidia : 約130fps

Mesa思ったより速いですね。緊急用には十分か。


2016年3月1日火曜日

楽天APIではまったポイント

はじめに


前回まで楽天APIを使ったことを書きましたが、その中ではまったポイントをメモしておきます。

1秒間に1アクセス


実際の運用では1日に1万以上のキーワードについてAPIで検索しています。
当初は問題なかったのですが、数日後には途中で止まることが多くなってきました。
そういえば利用制限のこと気にせずリクエスト発行しまくっていたなぁと思い調べてみると、、


1秒間に1アクセスだったんですね。。

今、APIのリファレンスを見返してみるとアクセス制限ならそれっぽいエラーが返ってくるようですが、止まってしまっていた時はそんなエラーではなかった記憶があります。
単にネットワークが不安定だったのかもしれません。。

とはいえ利用制限は守るべきですので、1アクセスごとに適当に1秒待つようにして運用しています。それ以来途中で止まることがなくなったようです。

キーワードは2文字以上


keyword parameter is not valid

「keyword が正しい値でなかった時。(半角1文字のみ指定など)」

このエラーも出ました。

例えばキーワードを「ドラゴンクエスト 4」としても出ると思います。「4」が半角でその前にスペースが入っているから「4」が1単語とみなされエラーになるようです。

実運用時には大量のゲームソフトのタイトルでそれぞれ検索をかけています。中にはタイトルに変なスペースが入っていたりしてエラー条件に引っかかることがよくあります。

とりあえず下記のようなコードで1文字単語を取り除いて検索をかけることにしてエラーを回避しました。

    keywords = keyword.split(' ').select {|item| item.length > 1}
    keyword = keywords.join(' ')

2016年2月28日日曜日

楽天APIでJANコードからBOOKOFF価格を取得したい

はじめに

前回、楽天APIでBOOKOFFの価格を取得する方法を試してみました。前回の方法は、

「キーワードとshopCodeから商品リストを取得する」

というものでした。さらにAmazonの値段と比較したいとなると、タイトルをキーワードに与えて検索するだけではAmazonの商品と違うものがヒットする可能性があります。それでJANコードも指定してBOOKOFF価格を取得できないか試してみました。環境やAPIは前回と同じです。

以下、ゲームソフトの場合を試しています。

開発・実行環境

MacBook Pro
OSX El Capitan (10.11.3)
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]

使用したAPI

楽天商品検索API (version:2014-02-22)

BOOKOFF取り扱い商品のJANコード

APIリファレンスを見てもJANコードを指定するようなパラメータは見当たりません。適当にゲームソフトを検索してみるとJANコードは下の画像のように表示されているので情報はあるようです。


そこで、
RakutenWebService::Ichiba::Item.search
の結果を見てみました。itemCaptionの項目が商品説明文なのですが、その中に含まれていました。例えば上のソフトの検索結果のitemCaptionは次のようになっています。

「ニンテンドーDS販売会社/発売会社:スクウェア・エニックス発売年月日:2010/03/04JAN:4988601006392機種:ニンテンドーDS国民的RPG「ドラゴンクエスト」シリーズ9作品目。物語の舞台は「天使界」。世界樹に女神の果実が実るとき、神の国への道が開かれる!それは天使界に伝わる言い伝え。しかし、ある日、恐ろしい事件が発生して・・・!?壮大な世界を冒険するという本来の魅力に加え、キャラクターカスタマイズや転職でき、多彩なキャラクター作りが楽しめます。さらにワイヤレス通信でのマルチプレイ、さまざまなサブストーリーを体験できる「クエスト」など新要素満載の充実した内容となっています。」

思いっきり説明文中にJANと含まれていますね。というわけで、JANコードからBOOKOFF価格を強引に取得する方法として、

  1. タイトルをキーワードにして検索し、商品リストを取得
  2. 商品リストを片っ端から調べ、itemCaption中にJANコードが含まれていたら該当商品とみなし価格を取得
を試したコードが下のもの。前回のコードに、
if caption.include? (jan_code)
の行が追加されています。


require 'rakuten_web_service'require 'uri' # 楽天のサンプルに追加
RakutenWebService.configuration do |c|
  c.application_id = 'YOUR_APPLICATION_ID' # 取得したアプリケーションIDで置き換える  
  c.affiliate_id = 'YOUR_AFFILIATE_ID' # この行はなくても大丈夫そう。
end
jan_code = '4988601006392'items = RakutenWebService::Ichiba::Item.search(:keyword => 'ドラゴンクエストIX', :shopCode => 'bookoffonline')
items.each do |item|
  if item['availability'] == 1 #在庫があるか    
    caption = item['itemCaption']
    if caption.include? (jan_code) # 説明文にjan_codeが含まれているか      
      p item.price.to_i
    end  
  end
end

おわりに

普通にJANコードをキーに検索できても良さそうですし、もしかしたら方法があるのかもしれません。見つかったらまた更新します。

2016年2月27日土曜日

Rubyで楽天APIを試す

はじめに

Ruby初心者ですが、個人的プロジェクトで勉強がてら使っています。そのプロジェクトで楽天のAPIを使ってBOOKOFFの価格を調べるという必要が出てきたので、ちょっとやってみました。

開発・実行環境

MacBook Pro
OSX El Capitan (10.11.3)

ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]

使用したAPI

キーワードと楽天ショップを指定して商品リストを取得するAPI。
楽天商品検索API (version:2014-02-22)

準備

  1. 楽天でアプリケーションIDを取得こちらから。
  2. Rubyのgemが用意されているので、gem install rakuten_web_service

サンプルコード

上記楽天のサイトにRubyのサンプルが載っています。下のコードはサンプルを少しだけいじったものです。楽天のサンプルそのままだと私の環境ではエラーが出たので、
require 'uri'
を追加したところ動作しました。
Item.searchで楽天ショップのshopCodeというのを与えるのですが、BOOK OFFの場合、urlが下記のようになっています。
http://www.rakuten.ne.jp/gold/bookoffonline/
最後の"bookoffonline"の部分がshopCodeのようです。
入れてみたらそれっぽく動きました。

require 'rakuten_web_service'
require 'uri' # 楽天のサンプルに追加

RakutenWebService.configuration do |c|
  c.application_id = 'YOUR_APPLICATION_ID' # 取得したアプリケーションIDで置き換える
  c.affiliate_id = 'YOUR_AFFILIATE_ID' # この行はなくても大丈夫そう。
end

items = RakutenWebService::Ichiba::Item.search(:keyword => 'ゼノブレイド', :shopCode => 'bookoffonline') 
items.each do |item|
  if item['availability'] == 1 #在庫があるか
    #取得したデータを適当に出力
    puts "#{item['itemName']}, #{item.price} yen, #{item['shopName']}, #{item['genreId']}, #{item['itemCode']}" 
    puts "#{item['itemCaption']}"
    puts "#{item['itemUrl']}"
  end
end

おわりに

できればJANコードから検索できるといいのですが、このAPIでは対応していないようです。keywordにJANコードを入れるとBOOKOFF指定では何も結果が得られませんでした。店舗指定なしだと、商品名にJANコードが入っていればヒットします。

2016年2月26日金曜日

ロジクール MMOゲーミングマウス G600をプログラミング用に使う(2)

はじめに

前回開封したロジクールG600を仕事用PCにつないで設定してみました。
左がG600、右が今まで使っていたAnkerのエルゴノミクスマウス。サイズはG600の方がやや小さく感じます。

Logicool ゲームソフトウェア 8.78

G600の設定用にWebからソフトウェアをダウンロードします。インストールは特に設定項目もなく、次々とクリックするだけです。終了後再起動を求められます。インストールされた設定用アプリの名前はゲームソフトウェア。仕事中に起動するのを一瞬躊躇してしまうネーミングですね。。以下、画面はバージョン8.78のものです。

起動後の画面はこんな感じ。さすがゲーム用(?)。シンプルで使いやすそう。


まず前回気になったボタンのライトの点滅を止められるのか。設定はすぐ見つかりました。
「ライトの効果」をOFFにすれば常時点灯になります。
色も変えられます。色を真っ黒にすればライトの点灯をOFFにするのと同じことかな?


親指で押す12個のボタンもやはりカスタマイズできます。デフォルトではテンキーに合わせてあるようです。MMOゲームはやったことないですが、テンキーを結構使うんでしょうね。3パターン登録できるようです。ゲームに合わせて切り替えられるんでしょうが、仕事用にもアプリに合わせて切り替えたら便利かもしれませんね。まだそこまでは試していません。


プログラミング用にカスタマイズ

メインで使用している開発環境Microsoft Visual Studioに合わせて少しカスタマイズしてみました。Visual Studio自体、既にキーボードに合わせてカスタマイズしてあるので、そのキーボードショートカットを登録しています。ビルド・コンパイル・デバッグ実行・ステップオーバー・ステップイン・ステップアウト・ブレークポイントを割り当ててみました。


デバッグ中はマウスオーバーで変数の中身を見たりするのでマウスとキーボードを行き来していましたが、このマウスなら右手だけで大抵のデバッグ中の操作ができそうです。

Visual Studioのショートカットには"Alt+K, C"のようにキーをシーケンシャルに押すものもあるので、マウスに登録できるか試してみましたが、無理そうでした。"Alt+K"までしか入りません。Visual Studio側でキー割り当てを変える必要がありますね。

まとめ

ロジクールG600のいいところ

  • カスタマイズ可能な多数のキー。
  • 設定ソフトも使いやすい。
  • 設定内容はマウス内メモリーにも保存できるらしい。別のPCに接続しても設定をやり直さなくてもいいらしい。
  • 個人的にはちょうどいいサイズ。どのボタンにも指が届く。

ロジクールG600のいまいちなところ

特徴的なマウスなので慣れが必要な部分はあります。
  • 右クリックボタンのさらに右側にもボタンがあるので間違えやすい
  • 親指ボタンを素早く押せるようになるのかちょっと不安

2016年2月25日木曜日

ロジクール MMOゲーミングマウス G600をプログラミング用に使う(1)

プログラミング用マウスの買い換え

仕事で使用していたマウスの調子が悪くなってきたためマウスを新しく買い換えたいと思っていました。今まで使用していたのはAnkerのエルゴノミクスマウス。ホイールボタンの接触が怪しくなりました。3年前くらいの購入時は確か2000円しなかったと思います。今見たら約5000円。。国内取り扱いがなくなり値段上がってしまったのでしょうか。3年近く使っているので十分元は取れたと思います。

エルゴノミクスマウスの効果

一般にエルゴノミクスマウスは手首に負担をかけないように出来ています。私の場合、もともと手首が痛くなったこともなく予防的に使っていたので結局効果はよくわかりません。そもそもプログラミング中はキーボード操作が主体になるのでマウスが原因で手首が痛くなることはあまりないのかもしれません。というわけで次は普通のマウスでもいい気がしていました。

Amazon Prime Now!でポチる

先日Amazon Primeに入ったばかりで、Prime Now!のクーポンがありました。そういえばマウスが不調だったなぁとPrime Nowアプリでマウスを眺めてみました。すると親指ボタンが多数並んでいるロジクールのG600に目が留まりました。MMOゲーミングマウスとありますが、MMOゲームはやったことないのでよくわかりません。ただ、プログラミング中は結構キーボードショートカットを使います。特にデバッグ中はマウス操作も多いためマウス側からショートカットを呼び出せたら便利になりそうな気がしました。きっとボタンにキーボードショットカットを割り当てられるだろうと見越してさっさとPrime Now!でポチりました。クーポン使用で約4000円でした。

ロジクールG600開封

注文した当日中に届きました。さすがAmazon Prime Now!。早速開封してみます。


箱。ロジクールのゲーミングラインのテーマカラー?黒ベースに青字。


表紙はぱかっと開くことができ、店頭に箱のまま置かれていてもマウスのサイズ感がわかるようになっています。この表紙はマグネットでピタッと閉まるので持ち運び中にプラプラすることがないです。意外と凝ってる。


パッケージ内容はこれだけ。最近はCD-ROMは付属しなくなったのですね。どうせ最新版ダウンロードするから不要ですしね。


このマウスの最大の特徴。親指ボタンが3×4=12個もあります。


上面にも右ボタンの右側にもう一つボタンがあります。ホイールの下にも二つボタンがあります。


とりあえずUSBで接続してみました。サイドのボタンが光ってオシャレです。ただ点滅するのが仕事用には目障りかも。。カスタマイズでオフにできるのかなぁ。