今年の漢字

早いもので、もう年末が近づいてきましたね。

毎年この時期になると、「今年の漢字」が発表されます。
何だろうと予想して、意外と楽しみにしていたりするんです。

昨年(2014年)の「税」には、ちょっとがっかりしましたけどね。
さて今年の漢字はなんでしょうか?
ちなみに、毎年12月12日の漢字の日に、京都の清水寺で発表されます。
昔からやっていたように思ってましたが、1995年から始まったみたいです。

私の予想としては、
「上」  日本郵便上場、株価上昇、物価上昇…
「雨」  鬼怒川の反乱など、各地で豪雨被害
という感じだと予想しておりました。

そして今年の漢字発表されました。 「安」だそうです。
「異常気象やテロの不安」と、「安心して下さい」 からノミネートだそうです。

何だかここ数年はしっくり来ないですね。

研修旅行 in ○○○

閲覧ありがとうございます。Armadaです。
先日、研修旅行で日本有数の温泉地を訪れました。
さて、○○○に入る文字は何でしょう??

DSC_0206宿にチェックイン後、散策に出発。
紅葉のピークは過ぎていましたが、それでも山は綺麗でした。

 

 

 

 

 
DSC_0209散策後は名物の「湯もみショー」。
ショーが開始する前の風景ですが、開始してからは御姉様方の草津節に合わせた「湯もみ」に魅了されてしまい、写真を撮るのすっかりを忘れてしまいました。

 

 

 

 

DSC_0210夕暮れ時の「湯畑」。建物に灯された明かりと湯けむりがなんとも言えない雰囲気を醸し出していました。冬場になると「湯畑」を挟んだ反対側が見えなくなるほどの湯けむりになるとか。次は冬に来ようと思います。

 

 

 

 

もうおわかりですね。○○○に入る文字は『くさつ』です。
(2枚目の画像をよく見ると「湯もみ板」に”くさつ”と書いてありますね)
湯もみショーで御姉様方に癒されたあとは、宿に戻り温泉・食事を満喫。
もちろん夜の草津を散策したことは言うまでもありません。

DSC_02152日目は「草津ガイドツアー」。赤いジャンパーの方がガイドさんです。
推定70歳オーバーですが、バイタリティ溢れる元気な方でした。
ちょいちょい草津から脱線するのですが、いろいろと勉強させて頂きました。
 
DSC_0216「湯畑」の湯量は毎分4,000リットル。何気なく歩いていた遊歩道は岡本太郎氏デザインの煉瓦をモチーフにしたものです。ガイドさんの話を聞かなければ気付かないところでした。

 

 

 

 

DSC_0222ガイドツアー終了後は各自お土産を買って「長野原草津口駅」に移動。とても綺麗な駅でした。これで研修旅行も終わりです。

 

 
人生初の草津でしたが、宿泊した宿、温泉は最高でした。
また、プライベートで来てみたいと思います。
その時は6代源泉を制覇するぞ!

ChartDirector

こんにちは。こんばんは。おはようございます。
Q-39です。お世話になっております。

最近ChartDirectorをはじめました。
なかなかネットに情報がないので、
コメント付きサンプルソースを
備忘録的な感じで残しておきます。



#include "chartdir.h"

void Test(void)
{
  // データの定義
  double Data[] = { 9.5, 8.7, 5.9, 3.7, 1.1, -0.2, -1.6, 1.8, 3.0, 5.6 };

  // 作成するビットマップのサイズを決める
  XYChart *graph = new XYChart(500, 300);

  // ビットマップとプロットエリア(グラフ)の位置関係を決める
  // (プロットエリアのサイズは400×200)
  graph->setPlotArea(50, 50, 400, 200);

  // Y軸のスケール(-5~15で5刻み)
  graph->yAxis()->setLinearScale(-5, 15, 5, 0);

  // X軸のスケール(1~12で2刻み)
  graph->xAxis()->setLinearScale(0, 12, 2, 0);

  // グラフ作成レイヤの作成
  LineLayer *layer = graph->addLineLayer();

  // X軸のデータ範囲を決める(データが10個なので1~10とした)
  layer->setXData(1, 10);

  // グラフのデータを設定(色は赤(RGB))
  layer->addDataSet(10, Data, 0xff0000);

  // ファイルに出力(拡張子で自動判別してくれる)
  graph->makeChart("c:\\temp\\test.png");

  return;
}


こんなグラフが出来上がりです。
グラフの出来上がり

入社のごあいさつ

皆様はじめまして、今年6月に入社しました kmrmshk ともうします。

これまでは主にウェブサイトのコンテンツ制作にかかわることが多く、今は懐かしいフルフラッシュサイトであったり、JavaScriptとCSSを駆使してステートフルなウェブサイト、ウェブアプリの開発に携わらせていただきました。
また、ネイティブアプリ開発にも興味があり、Objective-CやAIRによるiOS/Androidのアプリ開発も行って参りました。

最近は自宅サーバーにてインフラまわりの環境構築や、Node.js、Jenkinsなどを活用した自動化をいろいろ試すのが趣味となっています。さらには、dockerやvagrantによる仮想化技術を活用して効率の良い環境構築方法を探るのも楽しみの一つです。

好きなCMSはMODX、好きなLinuxディストリビューションはDebianです!
最近SublimeText3をメインエディタに鞍替えしました。Sublimergeは神ツールです!
なにとぞよろしくお願い致します!

さて、早速なのですが普段の生活で配列やオブジェクトを操作するとき、処理が地味に面倒なときがあるかと思います。
例えば連想配列に対して、要素だけを取り出してから配列として扱いたい!など・・・

// こんな連想配列を・・・
hash = {
  1: {hoge: "hello"}, 
  2: {hoge: "world"},
  3: {hoge: "!"}
};

// 必要な要素だけ抽出して配列として宣言したり・・・
var props = [];
for(var item in hash){
  var obj = {};
  obj[item] = hash[item];
  props.push(obj);
}
/*
// propsの中身
props = [
  {hoge: "hello"},
  {hoge: "world"},
  {hoge: "!"}
];
*/

// 配列要素を取り出して文字列として操作したいとき
var props = [];
for(var item in hash){
  props.push(hash[item]['hoge']);
}
console.log(props.join(" "));
// [output] hello world !

と、いうことがお料理を作っている最中や、洗濯物を干すときについつい出てくるかと思います。
でも、毎回 for…in でまわすのはちょっと・・・、とか、「hoge」というキー文字列で指定して値取り出すのはイケてないなんて思ってらっしゃることでしょう。

そんな時に、手軽に扱えるユーティリティライブラリ「Lodash.js」というのがあります。
もともとは JavaScript のライブラリとして「Underscore.js」という、これまた便利なオブジェクト操作のユーティリティライブラリがあるのですが、その派生ライブラリとして登場しました。
このライブラリを利用すると、次のように可読性があり、メンテナンス性の高いコードが書けるようになります。

hash = {
  1: {hoge: "hello"}, 
  2: {hoge: "world"},
  3: {hoge: "!"}
};
// 必要な要素だけ抽出して配列として宣言します(lodash版)
var props = _.map(hash, function(item){return item;});
/*
// propsの中身
[
  {hoge: "hello"},
  {hoge: "world"},
  {hoge: "!"}
]
*/

// 配列要素を取り出して文字列として操作したいとき(lodash版)
console.log(_.map(hash, function(item,key){
   return _.chain(item).groupBy().keys().first().value();
}).join(" "));
// [output] hello world !

実装で地味に時間のかかりがちなコレクション処理が、lodash(underscore)によってかなりシンプルで扱いやすいものになるはずです!

この便利なライブラリは、有志によってJavaScript以外の言語でも提供されています。
・PHP 「underscore.php
・Objective-C 「underscore.m
・Python 「underscore.py

RubyやSwiftでは最初からコレクションメソッドが充実しているので、導入しなくても標準で扱えます(さすがRuby・・・)
また、C++では標準テンプレライブラリとして搭載されています。

長文失礼しました。
普段の生活で何らかのご参考になりましたら幸いです。

Windows10

こんにちは、tomです。
いつまで暑い日が続くのでしょうか、夏バテ気味です。

Windows10がリリースされました。
最近ツールを作成する事が多いので、OSなどの互換性テスト等をする事が多く。
ツールでの対応等テストするために、Windows10を入れようと作業をしました。

アップデートだか実施するとエラーになり、中々進まないとの情報を得たので、
メディアを作成してから、インストール作業を開始する事にしました。
メディアから実行したからか、思ったより簡単にインストールが終わったので、
Windows10でどのように変わったのかと見ていたら、
画面が突然ブラックアウトし、ウンともスンとも言わなくなりました…
再起動してみると、Windowsの窓画像まではでるのですが、
その後ずっと黒画面のまま…

調べてみると、どうやらDellでまだ確認が取れていない機種のようで、
「Windows10へのアップグレードをテストしていない製品」 でした。

載っているのだけがWindows10のテスト済の製品みたいです。
http://www.dell.com/support/article/jp/ja/jpbsd1/SLN297954

ディスプレイドライバが原因みたいですが、とっとと諦めて、
テスト済みの製品と載っているPCがあったので、そのPCにWindows10を
インストールしたところ、特に問題は発生しなかったです。
先にもう少し調べてからインストールすればよかったです。

Salesforceで気を付けたい全角/半角の扱い

閲覧ありがとうございます。Armadaです。
今回はSalesforceネタです。

クライアントアプリからSalesfoceにデータを登録する際、キー重複を避けるために事前にSOQL(Salesforce独自のクエリ言語)でデータを抽出→重複キーの存在チェックという流れでアプリ側でチェックを行うわけですが、ここで全角/半角問題が出てきます。

どんな問題かというと、文字によってSOQLとデータ登録時では全角/半角の区別が異なるため、SOQLでは重複なしとなってもデータ登録時に重複ありでエラーとなるのです。

文字による全角/半角の扱いをまとめると以下のとおりです。

文字 SOQL 登録時
アルファベット 区別なし 区別なし
数字 区別なし 区別なし
カタカナ 区別あり 区別なし
記号
※文字により異なる
区別なし 区別なし

アルファベット、数字は全て同じで「区別なし」、カタカナはSOQLでは「区別あり」、登録時は「区別なし」となります。

記号は、というと文字によって異なります。
基本的には上記の表のとおりですが、一部の記号は区別ありだったり、なしだったり。
扱いが異なる記号について調査した結果は以下のとおりでした。

文字コード 記号 SOQL 登録時
0×22 区別あり 区別あり
0×27 区別なし 区別あり
0x5c \ 区別あり 区別あり
0x5e ^ 区別あり 区別なし
0×60 ` 区別なし 区別あり
0x7e ~ 区別あり 区別なし
0xa1 区別あり 区別なし
0xa2 区別あり 区別なし
0xa3 区別あり 区別なし
0xa4 区別あり 区別なし
0xa5 区別あり 区別なし
0xb0 区別あり 区別なし
0xde 区別あり 区別あり
0xdf 区別あり 区別なし

これらの記号やカタカナは基本的にキー項目の値としては利用しないため、登録時の入力チェックでエラーとするなど、登録しない仕組みを考えた方が良さそうです。
是非、参考にしてください。

OnePlus One / BALMUDA AirEngine

昨今、ハードウェアの世界で色々なベンチャーが誕生し、特色のあるスマートフォンや家電を手に入れる機会が増えてきました。私は、人と違ったものを欲しがるところがあるので、気になった製品を勢いで購入してしまいます。その中で私が気に入っている製品として OnePlus One と BALMUDA AirEngine があります。

1. OnePlus One

composition-main-aw@2x

こちらは、中国の新興メーカーOnePlus社が販売しているスマートフォンで、THE FLAGSHIP KILLER と謳っており、他の大手メーカーのフラッグシップ機を超えるようなスペックを誇っています。購入するためにはInvitationを受ける必要があり、購入までのハードルが非常に高かったのですが、現在は自由に購入することができます。

OSはCyanogen 11S というAndroid 4.4をベースにしたカスタムOSを搭載していますが、OxygenOSというAndroid 5.0.2をベースとしたカスタムOSをOnePlus社が開発しており、そちらへ載せ替えることもできます(ただしRoot化が必要)。

16GBのSILK WHITE と、64GB SANDSTONE BLACK の2種類が販売されており、2015/6/15現在、それぞれ249ドルと299ドルとスペックに対して非常に低価格に設定されています。私が購入した当初はそれぞれ299ドル、349ドルだったので円安の影響を含めても非常に安く手に入れることができます。ただし、直接日本への発送はしていないため、海外転送サービスを利用するなどの必要があり、配送料を含めて考えると100ドル以上高くなると考えたほうがよいです。

もちろんSIMフリー端末なので、私はOCNモバイルONEを契約し格安運用しています。

2. BALMUDA AirEngine

001

BALMUDA社は2003年に設立された日本の家電メーカーで、デザイン性の高い白物家電をメインで販売しています。いわゆる大手家電メーカーの製品と比べるとやや高めですが、従来の製品には見られないスタイリッシュなデザインでインテリアコーディネートするときに一役買ってくれます。

私は、AirEngineという空気清浄機を利用しています。購入当時は花粉の季節だったので、花粉を除去したいという思いが非常に強かったのですが、購入後は大分楽になった記憶があります。ただ、上部の大きなファンで空気を天井から循環させ、下部のフィルターで集塵するというコンセプトで、花粉等の小さな粒子には非常に効果的なのですが、どうも猫の毛などの大きめのハウスダストに関しては、ダイキン社の空気清浄機に分があるように感じています。ですので、我が家ではAirEngineのJETモードで空気を循環させつつ、ダイキン社の空気清浄機を併用して大きなハウスダストを取り除くというソリューションを展開しています。

最後に

もともと半導体設計エンジニアで、ハードウェア寄り仕事をしていたことから「ものづくり」に対するこだわりについてはわかっているつもりです。今はゲーム開発を行っていますが、ハードウェアベンチャーも最近盛り上がりつつあるので、いずれはそちらの分野にも強いエンジニアになりたいです。

Macの画面を頑張って広げる

MacBookをはじめとするLaptop型のMacは、単体で開発に使用するとどうしても画面が狭くて辛いです。
特にAirの場合Retinaがないので、コーディング中に:vsplit等すると幅が足りず作業効率が落ちてしまいます。。。
そこで表示領域を広げる方法をいくつか考えてみました。

1. Duet Display

http://www.duetdisplay.com/
iOSデバイスを外部モニタとして使用できるアプリです。手軽に物理的に表示領域が増やせるので、モニタを用意できないとき等とても重宝します。
導入はアプリをiOSとMacにそれぞれインストールして、ケーブルで接続するだけなのでとても簡単です。
似たような他のアプリと比べると、有線の為レイテンシが比較的低いですが、Unityのゲームビュー等ではさすがに表示が追いつきませんでした・・・。自分の環境では、UnityのConsole表示にちょうど良いです。

2. AirServer

http://www.airserver.com/
別のPCをAirPlayのサーバにできるソフトです。サーバとしてはWindows/Mac両方対応していますが、そもそもクライアントとなるMacと別にそれらが一台必要なので、活用できるケースは限られそうです。
Wi-Fiですがなかなかレイテンシが低く、コーディング程度ならさくさくこなせます。そもそも本来の用途と若干違う気もしますが・・・。

3. QuickRes

http://www.quickresapp.com/
1, 2と違って、外部デバイス無しで広げられます。
Macの解像度を設定するツールです。パネルの解像度以上に無理やり上げることができます。
単純な表示領域は広げることができますが、当然パネル自体の画素数は変わらないので、精細さは損なわれます。
文字が読みづらくなるので、場合によっては逆に作業効率がおちてしまいますが、Mac単体で画面が広くなるので気に入っています。

私は最終的に安定性と使いやすさでDuet Displayのみ使用に落ち着きました。
捗ります。

CStringのFormat()が浮動小数点の桁指定で四捨五入する問題

こんにちは。こんばんは。おはようございます。
Q-39です。お世話になっております。

最近Visual studioでC++を始めました。

MSのCStringのFormat()は浮動小数点の小数の桁指定をすると
四捨五入になります。
ネットで調べてみたら、浮動小数点の難しい問題と混同している
サイトが見受けられました。

この手の問題は、数字で考えずに、文字で考えれば楽勝です。

小数点以下第4位まである場合に
小数点以下第3位を切り捨てるなら、

double a;
CString s;
だとして、

s.Format(“%.4f”, a)
s = s.Left(s.GetLength() – 2);

で終わり。

0.005を引いてみるとか、そういうのは桁によって浮動小数点の難しい問題にぶち当たります。

ウィルス検知

おつかれさまです。tomです。

ここ最近 Vistual Studio 2012 を使用して、C#にてGUIのプログラムを作成していたのですが、
ある時から、ノートンが
「プログラムがコンピュータ上で疑わしい動作をしていました。このプログラムは削除されました。」
とウィルス検知とされてしまうようになってしまいました。
信頼できるプログラムとして登録すれば問題ないのですが、
特に特別な処理はしていないのに、と思い原因を調査しました。

二重起動防止のため、Mutexクラスを作成している時に、発生していることが解かりました。

static class Program
{
///
/// アプリケーションのメイン エントリ ポイントです。
/// 

[STAThread]
static void Main()
{
// Mutexクラス作成
//using (System.Threading.Mutex hMutex

// A: 問題なし
// = new System.Threading.Mutex(false, Application.ProductName))
// B: こちらだとウィルス検知される
// = new System.Threading.Mutex(false, g_mtx_name))
// C: 問題なし
// = new System.Threading.Mutex(false, ”ProgramName”))
{
…

///
アプリ名
public const string g_mtx_name = "ProgramName";

上記のソース上だと、「B」だけがウィルス検知されます。

どうやら、Mutexクラスの作成時の名称を 外部からの変数を使用すると、
「疑わしい動き」
と扱われてしまうようです。
変数ですが、const指定しているので固定値なんですが、
ノートンもそこまでは見てくれてないみたいです。

とりあえず原因が解かって良かったです。