ヘキサ日記 Blog

 

2017年6月30日

変化する勇気

        

信じてました。
当然のことだと思ってました。
スーパー戦隊シリーズのヒーローは5人組だって…。

 

こんにちは、イヌカイです。

 

シリーズ1作目は「秘密戦隊ゴレンジャー」

     アカレンジャー
     アオレンジャー
     キレンジャー
     モモレンジャー
     ミドレンジャー
5人揃って、ゴレンジャー!

 

ラグビーボールのような武器をアカレンジャーがキックして敵を倒す
決め技ゴレンジャーハリケーン
心躍らせながら観ていたのはもう40年以上前のことです。

 

このときからヒーローは5人って決まってました。

 

息子が生まれて一緒に観るようになったトッキュウジャーもニンニンジャーも
ジュウオウジャーも基本メンバーは5人でした。

 

ところが、、、

 

今放送中のシリーズ41作目は、
9人の究極の救世主「宇宙戦隊キュウレンジャー」

 

えっ、えっ、えっ???
キュ、キュウニン???

 

スーパー戦隊シリーズのヒーローは5人じゃなかったの?
最初はすごく戸惑いました。

 

ところが、いざ観てみると、、、

 

ん?なんか面白いぞ!

 

宇宙で一番ラッキーな男シシレッド
「しくよろ!」「ごいすー」などチャラい口調の機械生命体テンビンゴールド
野性的なスピードと攻撃力の獣人戦士オオカミブルー

      ・

      ・

      ・

 

9人とも個性が際立っていて魅力的なキャラばかり。

それぞれの生い立ちも描かれ興味を惹かれます。

 

いい意味で期待を裏切られました!

 

やっぱり既成概念に捕らわれるのは良くないですね。

歴史や伝統を守るのも大切だけど、変化することも大事だと思います。

同じことを続けるのは楽です。
変えるのには勇気が要ります。

でも思い切って変えてみることによって、そこからまた新しい歴史が
始まることもあると思います。

 

40年続いた伝統を打ち破ってさらに面白くなったスーパー戦隊シリーズのように

変化する勇気を持ちたいものですね

 

それではまた


        

こんにちは ポエミです。
 
ですね。
 
「冬の時期から今か今かと順番を心待ちにして、いざ、!」
 
今年はそんな感じでが来た!と思ってるのに
これを書いてる私の指の爪は信じられないくらいの紫色です
をまだ感じられていない私の指先・・寒い・・
 
 
夏の訪れをあまり実感出来ていないままですが、
いよいよ、今週末から始まります。
夏の風物詩、ツール・ド・フランス2017が!
紫色の爪はともかく、気持ちは熱いです。
 
 
いよいよ始まるのかあ。
胸の高鳴りを抑え切れません。
 
 
レースで走るコースの沿道にはたくさんのファンがレースを観戦しに来ているのですが、

コスプレしてたり、アフロの帽子をかぶったり、顔に落書きしたりして、
ファンはお祭り状態です。
みんな「行け!行けー!」と選手たちを応援していて、それを観るのもすごく楽しめます。
 
 
それにしても時速50キロや60キロで走っていたら、
沿道の応援ってどんな風に聞こえているのかしら。
 
声の塊みたいなのが空気に乗って伝わる感じなのかしら。と
 
想像はしてみるけれど、自分では一生味わう事の出来ない速度なので想像だけで終わっています。
 
 
自転車に限らず、スポーツ観戦での応援は
競技者のマインドにどれくらいの影響があるのかなあとふとそんな事を考えた時に、
数年前、自分が自転車イベントに参加した時の事を思い出しました。
 
 
それは自治体主催の1日イベントで、のんびり走ってゴールするような
ゆるい大会だったんですが、
沿道に地元の方々が応援に来てくださり、「がんばれー」と声を掛けてくれました。
 
ゆるい大会とはいえ、峠を越えるコースだったので、けっこう疲れます。
疲れたなーって思いながら走ってるところに、
どこの誰かも知らない素人の私に
 
「あと少しー がんばれー」 と
 
地元の方に声援を送ってもらった時、ちょっとだけ気持ちがピっとなって
ペダルを踏みこめたんです。
 
なんか自分の知らない力がちょっと出ました。
 
 
応援を頂くってありがたい。
 
 
素人に向けられた小さな声援ですら、知らない力が出るくらいですから
きっと他のスポーツでもプロ・アマ問わず同じように、
声援を受けて、声の塊みたいなのが競技者たちを後押しするのかもしれない。
裏付けるデータはないですが。。

 
 
こんなスポーツ大好きっ子みたいな事を書いている私ですが、
自転車以外のスポーツはほとんどルールもままならない始末です。
 
 
ジャンルを問わず、誰かを応援する、誰かから応援されるって嬉しいですね
 
 
ヘキサドライブの事を応援して頂いてるみなさん、いつもありがとうございます
もし、応援だけでは飽き足らず、自分もみなさんから応援されるような何かを
ヘキサドライブで創りたい!
そう思ってる方、少しはいるのではないでしょうか!
ぜひご応募下さい!
 
 
 
 
私は今週末、ツール・ド・フランスで走る選手をテレビの前で応援します!
と、こんなにも楽しみにしてるくせに、
毎年テレビ観戦途中に寝たりします。


        

お久しぶりです、コウスケです。

前回、今年の大阪マラソンを目指したい

と宣言していたにも関わらず参加メンバーを募って
そろそろエントリーしようと思った日が
エントリー締め日の翌日でした。

アホですね~。

 


 

さて、今回は久しぶりに感銘を受けたゲームの紹介をします。

 

その名も

アンダーテイル

です。

 

このゲームはSteamでリリースされている、いわゆるインディーゲームです。
システム的には珍しいものでもない普通の2DRPGで、キャラクタに話しかけたり
ちょっとした仕掛けをときながらストーリーを進めていく感じです。
戦闘も普通のコマンドバトルですが、ちょっとしたSTG的要素もあります。
(作者の話では、一番近いのはMOTHERシリーズでしょうか・・)

 

ふとしたきっかけで人からおすすめされたのですが、
私はファミコン、スーファミ時代の古い人間なのでゲームは
専用ゲーム機でやるもんやろが!
とSteamのゲームは遊んだことがありませんでした。

 

それに家のPCはMacBookだし、うーん、Steamか・・という感覚でした。
ですが、調べてみるとMacでも動く(ものもある)じゃないですか!
と知ってめでたくプレイすることができました

 

結論から言って、このゲームは私と同じ下記性質を持つ人にはとてもおすすめできます!

 

  • ゲームは芸術だ(な面もある)!
  • 特にゲーム音楽が好き
  • 3Dゲームよりも2Dゲームのほうが好き
  • 面倒で複雑なことはキライ

 

このゲーム、なにがいいって、何と言っても「BGM」です!
RPGなのにBGMが一番のおすすめにくるって珍しくないですか?

 

これは聴けばわかります!
ストーリーとBGMがこんなにもマッチするRPGは他にないと。
新しいBGMが流れるたび、
うーんいいな・・」というレベルではなく、
うーんすごいな・・」という感嘆の言葉が漏れていました。

 

音楽のクォリティが突出して高いので、
きっと音楽とそれ以外で分業して作っているのだろうと思いきや、
まさかの、もともと作曲家だった人がたった一人で作っているとのことです。
なので、グラフィックはというと、こんな感じになります・・

 

ううむ、なんというか、個性的で味がある感じです。
(それだけに先日のE3でPS4+日本語対応版が出ると発表があり、別の意味でたまげました。)

 

インディーゲームをやっていてよくわかるのは、
一つの要素が尖っていれば他の要素は通り一遍でも充分なんだなあと。

 

人を感動させるコトっていろんなやり方があるし、
たった一人でもできてしまうんだなあと、
改めて実感する次第でした。

 

RPGといえども気軽にプレイできるので、気になったらぜひ試してみてください

それでは。


2017年6月27日

続・社員旅行

        

お久しぶりです!
マイキーです

 

先のブログで書かれております通り、先々週の中程ヘキサドライブスタッフは社員旅行で台湾へ行っていました!
今回は写真を交えて社員旅行で見て回ってきた箇所を書いていきたいと思います。

 

龍山寺(りゅうざんじ)
台北最古の寺院と言われる龍山寺。
敷地内には仏像がまつられており、それぞれご利益が異なる為、参拝者は順々に像を拝んでいました。
1_01_1

 

今回の社員旅行に重なる形で台湾は入梅した事もあり、龍山寺を訪れた時にはかなり強い雨に降られてしまいました。
雨は屋外観光には不向きですが、こういった寺院を見て回る際には風情があって良いですね。
1_2
1_3
1_4

 

前殿の天井は、ドーム状に木が組まれており、金に塗装されており・・・こう・・・複雑ですね!
1_5

 

中正(ちゅうせい)紀念堂
蒋介石(しょうかいせき)の功績をたたえる為に建てられ、本堂には巨大な同氏の銅像が置かれています。
2_02_1

 

本堂の基礎部分は全て正方形で構成されており、これによって蒋介石の本名である「中正」をあらわしているのだとか。
天井の「青天白日」も2つの正方形に囲われています。
2_2
良い天井ですね~

 

中には様々な展示が。
こちらは蒋介石の執務室が再現されています。
2_3

 

雨がパラつく中でもさん然と輝く、我らがGoodSun
2_4

 

国民革命忠烈祠(ちゅうれつし)
建国や革命、日中戦争等で戦没された英霊がまつられている霊廟で、日本でいう所の靖国神社のような場所です。
3_0 3_1

 

中正紀念堂もそうなのですが、ここは儀仗兵(ぎじょうへい)とその交代の儀式が有名のようで、交代の時間になると周りが黒山の人だかりとなりました。
3_2 3_3
惜しくもこの日は雨だったので、儀式は省略されたものになってしまいました。

 

故宮(こきゅう)博物院
台北市内にある博物館で、その所蔵のほとんどが台湾で集められたものになります。
そして故宮博物院といえばコレ
4_0
白菜よね!

こちらは翠玉(すいぎょく)白菜と呼ばれる硬玉(こうぎょく) = ジェダイトの彫刻です。ピントが迷子になっている点には目を瞑って下さい。
ちなみに、硬玉があれば軟玉もあり、こちらは原料がネフライトを指すようです。ふーん

 

台湾の至宝を目の当たりにし、はしゃぐ弊社スタッフ
4_1 4_2

 

九份(きゅうふん)
斜面に沿って建てられた、日本統治下に造られた建物が残るレトロな町並みを見ることが出来ます。
5_0
5_1
5_2
日本人観光客が多いせいか、日本語表記のなされている店舗もちらほら見受けられました。

 

残念ながらこの日も天候に恵まれず、有名なフォトスポットからも海を見ることが出来ませんでした。

5_3

 

九份といえば、上に挙げたようないかにも中国の下町めいた細い路地や喫茶店を連想されますが、少し外れた所には洒落た喫茶店や雑貨屋さんも。
5_4
5_5
5_6

 

九份は近畿地方だった・・・!?
5_7

 

****

以上が社員旅行で回った台湾の観光地となります。
これ以外にも、自由時間中に市内をウロウロしていましたが、その模様は他のスタッフがブログに書いてくれるかもしれません。

ネットで検索すれば、世界中の国や地域の画像や映像を簡単に見ることが出来ますが、やはり実際に足を運ぶとただ見る以上のものを得る事が出来ます。
私事になりますが、今回の社員旅行がおよそ10年ぶりの海外旅行だったので、なかなか良い刺激になりました。
機会があれば、またプライベートで行ってみたいですね。

それではまた!


2017年6月26日

STEAMサマーセール!

        

こんにちはお久しぶりです大阪デザイナー阿部です。
今回は小煩い話は無しでゲームの話をします!

STEAMがサマーセールをしているということで
マイSTEAMフォルダからこれはっっ!と思っているものを紹介します!
(多分過去に紹介してないと思うのだけど、紹介してたらごめんなさい)

 

——————————————
■Ballpoint Universe Infinite
BALLPOINT      
ビジュアルが個性的で美しいシューティング

キャラ、背景、UIまでボールペンで描かれています。

とにかく洒落てる。神々しい。

 

■FEZ
FEZ
謎解き系ドットアドベンチャー&アクション

2Dだけど3D

2次元世界の主人公ゴメスが3次元の存在を知るというお話

ビジュアル美しい&かわいい

PSストアにもあるよ!

 

■NomNom Galaxy

nom
RTS&経営シュミレーション?
未開の惑星に工場を作ってスープを生産して稼ぐ!
ビジュアルかわいい
画面が緩やかな弧になっているのにこだわりを感じる。

PSストアにもあるよ!

 

■Crypt of the NecroDancer
dancer

リズム&不思議のダンジョン
音楽に合わせてしか動けないけど、エエ感じに動くとフィーバータイム発動
この中毒性はプレイしてもらわないと伝わらない
とにかくやってみ!

PSストアにもあるよ!

iOS版もあるよ!

 

■Risk of Rain
risk
ドットアクション
宇宙船が墜落した先でなんかやばい生き物うじゃうじゃいるから戦うとかそんな感じ(あいまい)

拾ったアイテムを取捨選択じゃなくて全部持っていける豪気さ
夏の花火大会のフィナーレのよう。
画面に対して主人公がすごく小さいのだけど、それがまた宇宙での孤独感を感じれて良いのだ。

 

■FTL Faster Than Light
FTL
宇宙が舞台のRTS
一押し!
自機を強化しつつエネルギーをマネジメントしつつ目的地にたどり着くのが目的。
同じような画面が続くのにドラマティックが止まらない
調査に出した船員が死んだとシステマチックな文字が流れていても
貴方の頭の中では映画のようなワンシーンが流れるはず。

iOS版もあるよ!(iPad専用)

 

■This War of Mine
WAR
戦争中に必死に生きる民間人のゲーム
RTS&アクション?になるのかしら?
美しいビジュアル。
生き残る為に罪のない民間人の家に押し入って食べ物を得たけど
それに罪の意識を感じた仲間が速攻鬱になって、なけなしの食べ物持って逃げたという感慨深い思い出・・・悪いことはしちゃいけねぇ・・・。

iOS版もあるよ!

Android版もあるよ!

——————————————

STEAMのセールは本当にこんなに値引いていいの?!と思うぐらい、思いっきり割り引いてくれるので、新しいゲームとの出会いを求める機会にぴったりですよね!
色々なゲームに触れると自分の引き出しを増やせるし
それ以上にたくさんのゲームの中からこれは・・・・っ!!!と思うものを見つける楽しさは格別ですっ!
それを求め今日もウィッシュリストに気になるゲームを放り込む仕事にいそしみます。


2017年6月23日

新社屋周辺を探索

        

年ぶりのご無沙汰でございます。コンドウです。
こないだまでまとまったお休み頂いたお陰でかなりリフレッシュして帰ってきました

今回は社員旅行ネタに走ろうかと思いましたが既に

 

 10周年社員旅行!

 社員旅行3日目と、これまでの振り返り

 

もあるので、大阪の新社屋周辺を探索したリポートでもしようかと思います

ヘキサドライブのHPをご覧頂けますと分かりますが大阪オフィスは最近引越しましてパークスタワーになりました。

 

 

全体像

 

 

入り口

 

 

2階にはコンビニもあります。
このビル30階建てなんですが、うちは28階というほぼほぼ最上階()になりとても見晴らしもいいです。
特に大きなミーティングルームは壁側ガラス張りの為、天下取った気分で会議に挑めます

 

 

さて、お題通り周辺ですが商業施設が多い為全てを紹介するには紙面()が足りません
今回はピンポイントに映画館を紹介します

 

 

まずは誘導の為の看板たち

 

 

そして周辺の飲食店

 

 

スターバックスコーヒー

 

 

そして映画館

 

 

映画館内部

 

 

上記の写真は早朝に撮ったのでが少なく見えますがお昼過ぎるとだんだん増えてきます。

こうして映画館を紹介していますが実はまだ一度もここで映画を観ておりません
そして本日は金曜日
プレミアムフライデーではありませんが本日は早めに仕事を切り上げて映画観ようかと思います

ヘキサドライブに応募しようと考えられている方、これで迷わずご来社頂けますね ではまた


        

お久しぶりです。
台湾で印象的だった食べ物が鳥の頭と鳥の脚、あとは臭豆腐なgood sunこと山口です。

 

さて前回のシリーズから半年ぶりですが、その実全く進歩していないという噂のC++ソース解析第三弾です。

 

今回は純粋にシンプルにVisual Studioのプロジェクトファイル内で使用されている型情報をザックリ拾い上げてみます。

 

このシリーズ、libclangの仕様を十分に理解していない為かそろそろ優しくなくなってきました。

 

思えばこのシリーズを始めてから長い月日がたったので大分C#も馴染みの言語になってきました。 
特筆してReflection(Attributes含む)とLINQとプロパティが素敵です。

 

早速ソースコードを掲載しながらやっていきましょう。

まずはVisual StudioのC++プロジェクトファイルであるvcxprojを読み込みます。
もしかしたら解析してくれるツールがあるのかもしれませんが、 見つけられなかったのでサクッと作ります

C#というか.Netさん素敵です。 目標はビルド対象のc++のピックアップとインクルードディレクトリの取得、プリプロセッサ定義の取得です。

 

ということでXmlTextReaderを利用してこんな感じで書きます

public class BuildInfo
{
	public String ProjPath { get; set; }
	public List SrcFiles { get; set; } = new List();
	public List IncludePathes { get; set; } = new List();
	public List PreprocessorDefs { get; set; } = new List();
}

public class AnalyzeVcxproj
{
	private Regex buildCondition;
	public BuildInfo Result{ get; private set; }
	public void Analyze(string vcxproj, string condition)
	{
		buildCondition = new Regex(condition, RegexOptions.IgnoreCase);
		Result = new BuildInfo();
		var currentElement = new Stack();
		currentElement.Push("");
		Result.ProjPath = Path.GetDirectoryName(vcxproj);
		// ビルド構成チェック
		bool isTargetCondition = false;
		bool bodyReadable = false;

		using (var reader = new XmlTextReader(vcxproj))
		{
			while (reader.Read())
			{
				switch (reader.NodeType)
				{
					case XmlNodeType.Element:
						{
							var lastElement = currentElement.Peek();
							if (!reader.IsEmptyElement)
							{
								currentElement.Push(reader.Name);
							}
							switch (lastElement)
							{
								case "ItemGroup":
									{
										if (currentElement.Peek() == "ClCompile")
										{
											while (reader.MoveToNextAttribute())
											{
												if (reader.Name == "Include")
												{
													Result.SrcFiles.Add(reader.Value);
													break;
												}
											}
										}
									}
									break;
								case "PropertyGroup":
									{
										if (currentElement.Peek() == "IncludePath")
										{
											bodyReadable = isTargetCondition;
										}
									}
									break;
								case "ClCompile":
									{
										if (currentElement.Peek() == "PreprocessorDefinitions")
										{
											bodyReadable = isTargetCondition;
										}
									}
									break;
								default:
									{
										if (currentElement.Peek() == "PropertyGroup")
										{
											if (!reader.IsEmptyElement)
											{
												// Conditionの簡易チェック
												while (reader.MoveToNextAttribute())
												{
													if (reader.Name == "Condition")
													{
														isTargetCondition = buildCondition.IsMatch(reader.Value);
														break;
													}
												}
											}
										}
										else if (currentElement.Peek() == "ItemDefinitionGroup")
										{
											if (!reader.IsEmptyElement)
											{
												// Conditionの簡易チェック
												while (reader.MoveToNextAttribute())
												{
													if (reader.Name == "Condition")
													{
														isTargetCondition = buildCondition.IsMatch(reader.Value);
														break;
													}
												}
											}
										}
									}
									break;
							}
						}
						break;
					case XmlNodeType.Text:
						if (bodyReadable)
						{
							switch (currentElement.Peek())
							{
								case "IncludePath":
									if (Result.IncludePathes.Count == 0)
									{
										Result.IncludePathes = reader.Value.Split(';').Where(x => x[0] != '$').ToList();
									}
									break;
								case "PreprocessorDefinitions":
									if (Result.PreprocessorDefs.Count == 0)
									{
										Result.PreprocessorDefs = reader.Value.Split(';').Where(x => x[0] != '%').ToList();
									}
									break;
							}
							bodyReadable = false;
						}
						break;
					case XmlNodeType.EndElement:
						currentElement.Pop();
						break;
					default:
						break;
				}
			}
		}
	}
}

サクッとvcxprojの中で必要な情報を抜き出しました。
必要な情報を限定するとそこまで複雑では無いですね。
(VS2017を利用したので他のバージョンはダメかもです)

 

問題は型情報の収集です。
一番の苦労ポイントは単純に型のtypedefやnamespaceを解決した名前を取得する事でした。
もしかしたらもっとしっかりした解析方法があるかもしれませんが 今回はgetCanonicalType()を使ってみたところいい感じに取得できました。

なかなか参考ページにたどり着くまで苦労しますね

	public class AnalyzedField
	{
		public String TypeName { get; set; }
		public String VariableName { get; set; }
		public int ArraySize { get; set; }
		public bool IsPtr { get; set; }
	}
	public class AnalyzedClass
	{
		public bool IsTemplate { get; set; }
		public String NSpace{ get; set; }
		public String Name { get; set; }
		public List Member { get; set; } = new List();
		public List Bases { get; set; } = new List();
	}
	public class AnalyzedEnum
	{
		public String NSpace { get; set; }
		public String Name { get; set; }
		public List Member { get; set; } = new List();
	}
	public class SubAnalyzer
	{
		private List nspace = new List();
		public List Classes { get; private set; } = new List();
		public List Enums { get; private set; } = new List();
		private AnalyzedEnum currentEnum;
		private AnalyzedClass currentClass;
		private CX_CXXAccessSpecifier currentAccess = CX_CXXAccessSpecifier.CX_CXXPrivate;
		public SubAnalyzer(CXCursor cursor)
		{
			clang.visitChildren(cursor, new CXCursorVisitor(ScanChild), new CXClientData());
		}
		private String ConnectedNameSpace
		{
			get { return nspace.Count == 0 ? "" : (nspace.Aggregate((x,y)=>x+"::"+y)); }
		}
		private CXChildVisitResult ScanChild(CXCursor cursor, CXCursor parent, IntPtr client_data)
		{
			switch (cursor.kind)
			{
				case CXCursorKind.CXCursor_Namespace:
					pushNamespace(cursor);
					clang.visitChildren(cursor, new CXCursorVisitor(ScanChild), new CXClientData());
					popNamespace();
					break;
				case CXCursorKind.CXCursor_StructDecl:
					if (currentClass == null)
					{
						var prevClass = currentClass;
						currentClass = new AnalyzedClass()
						{
							IsTemplate = false,
							Name = clang.getCursorSpelling(cursor).ToString(),
							NSpace = ConnectedNameSpace,
						};
						clang.visitChildren(cursor, new CXCursorVisitor(ScanChild), new CXClientData());
						Classes.Add(currentClass);
						currentClass = prevClass;
					}
					break;
				case CXCursorKind.CXCursor_ClassDecl:
					// クラスのネストは未対応で...
					if(currentClass == null){
						var prevClass = currentClass;
						currentClass = new AnalyzedClass()
						{
							IsTemplate = false,
							Name = clang.getCursorSpelling(cursor).ToString(),
							NSpace = ConnectedNameSpace,
						};
						clang.visitChildren(cursor, new CXCursorVisitor(ScanChild), new CXClientData());
						Classes.Add(currentClass);
						currentClass = prevClass;
					}
					break;
				case CXCursorKind.CXCursor_CXXBaseSpecifier:
					{
						// 基底クラス情報
						var typ = clang.getCursorType(cursor);
						// typedefとかの解除
						while (typ.kind == CXTypeKind.CXType_Typedef)
						{
							typ = clang.getCanonicalType(typ);
						}
						currentClass.Bases.Add(clang.getTypeSpelling(typ).ToString());
					}
					break;
				case CXCursorKind.CXCursor_EnumDecl:
					{
						// enumを作成してリストに追加する
						currentEnum = new AnalyzedEnum()
						{
							Name = clang.getCursorSpelling(cursor).ToString(),
							NSpace = ConnectedNameSpace,
						};
						clang.visitChildren(cursor, new CXCursorVisitor(ScanEnum), new CXClientData());
						Enums.Add(currentEnum);
						currentEnum = null;
					}
					break;
				case CXCursorKind.CXCursor_CXXAccessSpecifier:
					{
						currentAccess = clang.getCXXAccessSpecifier(cursor);
					}
					break;
				case CXCursorKind.CXCursor_FieldDecl:
					// クラスのメンバのみをスキャンする
					if(currentClass != null)
					{
						var type = clang.getCursorType(cursor);
						var arrCount = clang.getArraySize(type);
						var field = new AnalyzedField();
						field.ArraySize = (int)arrCount;
						CXType vtype;
						if (arrCount <= 0)
						{
							vtype = type;
						}
						else
						{
							vtype = clang.getArrayElementType(type);
						}
						while (vtype.kind == CXTypeKind.CXType_Typedef)
						{
							vtype = clang.getCanonicalType(vtype);
						}
						// ちょっと良く分からない
						if (vtype.kind == CXTypeKind.CXType_Unexposed)
						{
							break;
						}
						if (vtype.kind == CXTypeKind.CXType_Pointer)
						{
							field.IsPtr = true;
							vtype = clang.getPointeeType(vtype);
							while (vtype.kind == CXTypeKind.CXType_Typedef)
							{
								vtype = clang.getCanonicalType(vtype);
							}
						}
						else
						{
							field.IsPtr = false;
						}
						field.TypeName = clang.getTypeSpelling(vtype).ToString();
						field.VariableName = clang.getCursorSpelling(cursor).ToString();
						currentClass.Member.Add(field);
					}
					break;
				case CXCursorKind.CXCursor_ClassTemplate:
					{
						// クラスのネストは未対応で...
						if (currentClass == null)
						{
							var prevClass = currentClass;
							currentClass = new AnalyzedClass()
							{
								IsTemplate = true,
								Name = clang.getCursorSpelling(cursor).ToString(),
								NSpace = ConnectedNameSpace,
							};
							clang.visitChildren(cursor, new CXCursorVisitor(ScanChild), new CXClientData());
							Classes.Add(currentClass);
							currentClass = prevClass;
						}
					}
					break;
				case CXCursorKind.CXCursor_CXXMethod:
					break;
				default:
					break;
			}
			return CXChildVisitResult.CXChildVisit_Continue;
		}
		private CXChildVisitResult ScanEnum(CXCursor cursor, CXCursor parent, IntPtr client_data)
		{
			var itype = clang.getEnumDeclIntegerType(cursor);
			if (itype.kind == CXTypeKind.CXType_UInt)
			{
				currentEnum.Member.Add($"{clang.getCursorSpelling(cursor)},{clang.getEnumConstantDeclUnsignedValue(cursor)}");
			}
			else
			{
				currentEnum.Member.Add($"{clang.getCursorSpelling(cursor)},{clang.getEnumConstantDeclValue(cursor)}");
			}
			return CXChildVisitResult.CXChildVisit_Continue;
		}

		private void pushNamespace(CXCursor cursor)
		{
			var cxName = clang.getCursorSpelling(cursor);
			nspace.Add(cxName.ToString());
		}
		private void popNamespace()
		{
			nspace.RemoveAt(nspace.Count -1);
		}
	}
	public class CppAnalyzer
	{
		public void Analyze(BuildInfo info)
		{
			// インクルードパスオプション
			List cmdOptions = new List();
			cmdOptions.Add("-std=c++11");
			cmdOptions.AddRange(info.IncludePathes.Select(x=>"-I" + (Path.IsPathRooted(x) ? x : Path.Combine(info.ProjPath, x))).ToList());
			cmdOptions.AddRange(info.PreprocessorDefs.Select(x=>"-D" + x).ToList());

			foreach (var src in info.SrcFiles) {
				// ハッシュと依存関係から更新チェックする
				var dummy = new CXUnsavedFile();
				var index = clang.createIndex(0, 0);
				var trans = new CXTranslationUnit();
				// 第二回と違ってバッチあてるの面倒だったので
				var err = clang.parseTranslationUnit2(index, Path.Combine(info.ProjPath, src), cmdOptions.ToArray(), cmdOptions.Count, out dummy, 0, 0, out trans);
				if (err != CXErrorCode.CXError_Success)
				{
					// TODO:エラー出力
					continue;
				}
				// 解析する
				var cursor = clang.getTranslationUnitCursor(trans);
				var kind = clang.getCursorKind(cursor);
				var sub = new SubAnalyzer(cursor);
				// TODO異なる情報のみを収集
			}
		}
	}

と比較的短いコードでVisual Studioのプロジェクト内の型情報がある程度の粒度で集められました。
あとはこの情報を利用して外部からデータを変更するコードを書いたり、 シリアライズ、デシリアライズする仕組みを作ってレベルエディタ等に活用したりですね
今回未完成で申し訳ないですが翻訳単位1個だけピックアップしていて、 複数の翻訳単位でのマージなどは行っていません
同一クラス名を省く形でリストアップすると良いかもしれません。

 

次回まで気力が続くときっとシリアライズとかその辺のコードが書かれて本連載も終了となるハズです。

 

ではまた


2017年6月21日

裏なんば探訪

        

こんにちは、松下です。

 

新オフィスに引っ越してきて、一か月半程経ちました。
新オフィスがあるなんばの周りは、色々な食べ物屋が盛り沢山です。

 

そして会社から近くの「裏なんば」と呼ばれる一帯は、安くて美味いお店が沢山…。
※裏なんばとは、「北は千日前から南はなんさん通り、東は黒門市場から西は高島屋あたりまでの界隈を指す」らしいです。

 

 

いくつかピックアップして紹介します!

 

■鮨きよ原
〒542-0075 大阪府大阪市中央区難波千日前14-17 2F
http://sushikiyohara.on.omisenomikata.jp/
盛り合わせ10カン、1300円!お得すぎる!
地酒も結構おいてあって1合800円。
飲み比べセットとして半分(五勺ずつ)別々のを入れて貰えます!
一人でカウンターでも問題無し。
大将もおかみさんも気さくな感じの方です。

 

■櫛羅 (くじら)
大阪府大阪市中央区難波千日前14-18 千日地蔵尊通り横丁
http://www.chiyoshuzo.co.jp/
酒造直営の立ち飲みのお店。
美味しい地酒が沢山あります。
酒のアテも充実してます。
立ち飲みで良いお酒をさッと飲めるのはいいですねぇ。

 

■フレンチおでんとどて焼の店 七縁
大阪府大阪市中央区難波千日前14-17
30分500円でワイン赤白・生ビール・ハイボールが飲み放題。
ハイボールは、各テーブルに蛇口?がついています。
テーブルに座ったままオカワリとか…。
お酒をたくさん飲む人にはオススメのお店です!

 

■ちゃた
大阪府大阪市中央区日本橋2-6-9
串揚げのお店。
入口がちょっと狭めのカウンターだけのお店です。
お任せ5本とドリンクのセットがお得。
(串揚げのメニューは膨大にある)
様々な具材をその具材にあった食べ方で提供して貰えるので、
飽きずにどんどん食べちゃいます。

 

■日本橋ビアホール
大阪府大阪市中央区日本橋1-20-8 日本橋井川ビル 1F
http://www.tayu2.com/
ビアホールとついているだけあって、色々なビールがあります。
が、目につくのは入口にある「スペアリブ専門店」の看板。
色々な味のスペアリブが置いてあるんです。
ビールとスペアリブ、たまんないですね~。

 

 

オフィスを決めるときには、周りのお店環境は結構重視しているのですが、
まさかここまでとは…という感じです。

 

まだまだ書ききれないほど店があるので、
次回に書きたいと思います。
では~。
(次回書くまでにまた行ったお店が増えて…と無限!?)


        

お久しぶりです。
ナカムラです。

 

昨日のシラッチのブログに引き続き、台湾への社員旅行のお話(自由時間となった3日目の過ごし方)…に加え

今までのヘキサドライブ社員旅行の変遷を少し振り返ってみたいと思います

 

社員旅行3日目の午前中には自由時間が設けられ、

市内観光に出る人

ホテルの施設を満喫する人

前日までの疲れを癒す人

各自思い思いの時間を過ごしました。

私は、同室の人と連れ立って、タクシーでの市内観光に回りました

 

 

20131203_separater

 

 

最初に訪れたのが次のお店。

國家文創禮品館

台湾国営の民芸品店で、比較的良心的な価格設定になっています。

台湾全土のお土産がここで選べると言っても過言ではない品揃え

地下1階から地上3階に及ぶ建物の中に、

ストラップから赤サンゴに至るまでの商品が、所狭しと並べられています。
観光ツアーで巡るお土産屋さんはちょっとお高めだな

という印象を持っている方なら、ここはお買い得だと思います

 

 

続いて向かったのが、パイナップルケーキの専門店
微熱山丘(サニーヒルズ)

20170620_2

台湾土産の定番であるパイナップルケーキの概念を覆したと言われるお店です。

おしゃれな店構えの店内に入るなり、”試食ができます”という日本語でお出迎え。

問答無用でカフェのようなスペースに案内されます

そこで、日本のデパ地下で出てくるような一口大のケーキを試食させてくれるのかと思いきや
なんと商品丸ごと1個がお茶とともに出てきました

20170620_1

商品販売のスペースよりも試食の為のスペースの方が広く取られていて、
”食べてもらえれば、商品の良さを分かって、買ってもらえる”
という自信が表れているサービスぶりが印象的でした

 

ちなみに日本にも支店があるそうですが、日本人向けに味を調整してあって

少し割高になっているとのこと。
台北に来たのなら、ぜひ立ち寄ってみることをお勧めします

 

 

その後、台湾一の高さを誇る展望台を有する台北101に行って参りました。

20170620_3

…が、ビルの最上部が雲の中に隠れるほどの雨模様だったので展望台には上らず仕舞い
晴れていたらおそらく次のような景色が一望できたはず…

20170620_4

その後はフードコートで食事を取った後、周りの店をいくつか巡り、自由時間終了

ヘキサドライブ初の海外社員旅行となった台湾での自由時間を、十分堪能できたと思います

 

 

20131203_separater

 

 

おかげさまで、今年でヘキサドライブ設立10周年となりました。
すべてのアニバーサリーイベントに参加してきた身としては、初の海外となった今回の社員旅行はひときわ感慨深いものとなりました
改めて過去のアニバーサリーイベントを、ブログでいくつか振り返ってみると…

 

周年では屋形船でお祝い

周年では魚を釣れる店でお祝い

周年ではカレー作り対決

周年で初の社員旅行(伊勢志摩)

周年で浜松へ

周年で石川へ

周年で名古屋へ

 

というようなイベントをしてきました(初期の頃は社員旅行ではなかったんですよ)。

今回の台湾旅行も終始雨模様でしたが

1周年記念のお祝いの時も大雨で川の水位が上がってしまい
屋形船が橋の下を潜れずに引き返した思い出が蘇ります

(振り返ってみて、ブログ自体も10年近く続けている事に驚いてます

 

改めましてこれからも、ヘキサドライブ及びヘキサ日記をよろしくお願いします。

 


2017年6月19日

10周年社員旅行!

        

ヘキサドライブ創立10周年の社内行事で3日間、台湾へ行ってきました。

出発前日に楽しみすぎて一睡もできなかったシラッチです。

 

 20170619_01

 

学生時代の修学旅行や卒業式等のイベント事はことごとく雨だった雨男なのですが

台湾台北市に着くと激しい大雨…知ってた。笑

現地のガイドさんによると1週間雨の予報が出ていたそうで…3日間ずっと雨…知ってt(略

 

ヘキサドライブは私以外にも会社説明会等で雨率が高いスタッフが揃っています。

このブログを読まれている雨男、雨女のみなさん、チャンスです(何の

 

東京、大阪のスタッフが集まり、3日間通して交流を深めたり、観光地を回ったり、ショッピングしたり、

混沌としていて活気あふれる街並みに触れたりと非常に充実した時間を過ごせました。

 

スタッフそれぞれ書きたいネタがあるかと思いますので、1発目の私のターンでは

自由行動のところを除いて、ダイジェストでツアーの様子をお伝えしたいと思います。

 

龍山寺 

20170619_02

台北市内最古の寺廟、龍山寺。

願い事が叶うと、再び龍山寺に訪れて神様に感謝するそうです。

願い事…叶うと良いな…笑

 

中正記念堂
20170619_03  

 

20170619_04

台北といえばココ、中正記念堂ですね。

建物もですが、蒋介石さんの像、めちゃくちゃ大きい…偲ばれ具合が凄まじい…

 

忠烈祠故宮博物館
20170619_06

  

20170619_07

忠烈祠で衛兵さんの交代と、故宮博物館で中国歴代皇帝の秘蔵品を見学です。

衛兵さんは1時間で交代するそうで、その間微動だにしないそうです。

腰痛持ちの私には真似出来ないですね…

 

九份

20170619_08

映画『千と千尋の神隠し』のモチーフになった街、九份を散策

急斜面にひしめき合う屋台が印象的でした。

訪れたのはお昼過ぎの時間帯でしたが、夕方になると提灯に明かりが灯って、より幻想的な風景になるそうです。

 

夕食(1日目&2日目)

20170619_05

  

20170619_09
台湾といえば紹興酒というイメージだったのですが(実際、食事処やお土産売り場にありました)、現地では高粱酒というお酒がポピュラーだそうです。

知らずに現地のコンビニで購入したドギツイお酒が高粱酒だったと知ったのは日本に帰ってきてからでした。笑

 

 

???

20170619_10ex

?!?!!

…ゲフンゲフン

 

えー気を取り直して(?)最後は忠列祠で撮影した集合写真です。

20170619_11

 

10周年。
台湾自体を楽しめたという事もありますが、たくさんの仲間が増え、

大きく成長して来ていると、改めて実感した3日間でした。

次の10年に向けてひとつひとつ課題をクリアしながら私自身も成長していきたいと思います。
ではまた~


ヘキサブログ ピックアップ



過去の日記はこちら

2017年6月
« 5月   7月 »
 1234
567891011
12131415161718
19202122232425
2627282930