ヘキサ日記 Blog

 

  • 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月13日

    UnityのLibraryフォルダ

               

    こんにちは平尾です
    新卒採用応募でお送りいただく作品の中には、Unityで作られた作品も届きます。

     

    Unity作品を見ていく上で気になったのは、
    Libraryフォルダの容量やファイル数が多くて取り回しが大変なことです
    ディスクに書き込む時間もそれなりにかかるんじゃないでしょうか。

     

    実はLibraryフォルダは提出物から外せる設定があります。
    やり方については以下のリンクを参照して下さい。

     

    「Unity で外部のバージョン管理システムを使用」

     

    正確には、Unity 4.2 以前に作成されたプロジェクトだと .meta ファイルが無い可能性があるそうなので、

    バージョンに限らず念のためこの設定は見ておいた方が良さそうです。
    これで提出時やバックアップ時、バージョン管理時にLibraryフォルダを削除しても大丈夫になります。
    少し楽になると思いますので、ぜひお試しください
    (間違えて復帰できない状態にならないようにご注意

     

     

    ついでに次の設定もやっておくと複数人で触る時に便利になりそうです

     

    [Unity] プロジェクトを git や svn で管理するまえにやっておくこと

     

    ***

     

    最後に今週のブログのお知らせです
    明日から社員旅行のため、今週のブログは本日までとなります。
    社員旅行の様子は週明けのブログ更新をお待ちいただければと思います
    お楽しみに~


  •            

    皆様、すごくお久しぶりです。
    大阪開発3Dグラフィックデザイナーの降旗です。

     

    もうお忘れかと思います(僕も忘れかけてました)が、
    前回のブログ大阪からしまなみ街道を通って愛媛までの自転車旅行を始めており、
    倉敷に到着したところで【後編】を予告して終わっておりました。

     

    というわけで、予告通り、
    「大阪~愛媛自転車旅行~しまなみ街道を渡って~【後編】」
    をお送り致します。

     

    ①倉敷→尾道
    20170612_00_01
    20170612_01_01

    倉敷を後にして、瀬戸内海沿いをひたすら西へ。

     

    尾道はしまなみ海道への玄関口という事もありますが、
    もう一つ楽しみにしていた事が。
    そう、「尾道ラーメン」です!
    ラーメンをおいしく食べるために、
    自転車ツーリングでは禁忌に近い空腹状態で尾道に到着。

     

    20170612_01_02

    20170612_01_03 20170612_01_04

    …なるほど。

     

    尾道ラーメン御三家全滅。

     

     人気ラーメン店に夕方に行ってやっている筈もありませんでした…

    明日食べよう…

     

    20170612_01_05

    20170612_01_06

    傷心のまま本日の宿にチェックイン。
    尾道でお世話になるのは「天然温泉 尾道みなと館」さんです。
    あれほどオシャレな宿はダメだ言っているのに…
    ※実際にはすごくキレイで落ち着ける宿です!
     尾道にお越しの際にはお勧めです!

     

    20170612_01_07
    一方で自転車の街尾道ならではの心配りが非常にありがたい。

     

    20170612_01_08
    室内にはこれまたオシャレな二段ベッドがあって、とても爽やかな印象。
    友達や恋人と一緒に泊まったら楽しそうですね!

     

    僕は一人で両方のベッドを行ったり来たりして楽しみました。

     

    20170612_01_09
    あ、猫がかわいい。

     

    20170612_01_10 20170612_01_11
    ラーメンを食べ損ねたため持て余している胃液をどうにかするため、
    もう一つの名物「尾道焼き」を食べに夜の尾道に繰り出します。
    お店は「お好み焼き すみチャン」さん。

     

    何か懐かしい感じのする店内。
    鉄板が期待感を煽りますね。
    「尾道焼き」と「ふるさとレモン(レモネード)」を注文しました。

     

    20170612_01_12 20170612_01_13
    来ましたー!
    ラーメンを入れるために空けておいた胃のスペースを
    十分に満たしてくれるであろうこのボリューム!
    尾道焼きの特徴は「イカ天」「砂肝」「蒸し麺」が入っている事らしいです。

     

    レモン生産日本一の広島県産レモネードも美味しかったです。
    落ち着いた感じのお店なので、尾道を訪れた際は是非!

     

    20170612_01_14
    RGBにライティングされた港のクレーン達を眺めながら、
    夜が更けていきました…

     

    ②尾道(休息日)

    翌日です。
    今回の旅では一つ今までにない制度を導入しております。

     

    その名も…「休息日システム」!

     よく考えたら、

    「絶対に毎日移動し続けなければならない」と誰が決めたんだ?
    という素朴な疑問に端を発し、この度正式な制度として制定されました。

     

    というわけで、本日は尾道観光に出かけます。

    尾道は映画「時をかける少女(1983年)」のロケ地という事もあり、
    全然世代じゃないんですけどロケ地めぐりをしてみました。

     

    ラーメンも忘れずに食べます!

     

    僕の純粋な観光など誰も興味がないと思いますので、
    この日はダイジェストでお送りいたします。

     

    20170612_02_01

    20170612_02_02
    中華そば つたふじ」さんで念願の尾道ラーメンでお腹を満たした後、

     

    20170612_02_03 20170612_02_04 20170612_02_05
    主人公の和子タイムリープして訪れた神社「艮(うしとら)神社」にお参り、

     

    20170612_02_06
    時をかけるシーンで和子が駆け下りた路地を通り、

     

    20170612_02_07
    あ、猫がかわいい。

     

    20170612_02_08
    タイムリープ時に時計の針がグルグル回った「梶山時計店」を通り過ぎて、

     

    20170612_02_09 20170612_02_10 20170612_02_11

     

    主人公の通った高校に使われた「長江小学校」に至る階段を全力で駆け上がるも、

    タイムリープは出来ず

     

    20170612_02_12
    老朽化の著しい和子の家「旧小浜邸」に時の流れを感じながら、

     

    20170612_02_13

    20170612_02_14
    何気なく坂を下っている際に後輪をブレーキロックしてしまいタイヤがバースト

     

    20170612_02_15

    20170612_02_16
    近くのプロショップで修理に、

     

    20170612_02_17 20170612_02_18
    その後「朱華園」さんで夕食に再びラーメンを入れ、

     

    20170612_02_19
    前日と同じ「天然温泉 尾道みなと館」さんでゆったりとお風呂に浸かって
    一日を終えました。

     

    こういうゆとりのある旅をずっと望んでいたんだなぁ…

     

    ③尾道→今治

    20170612_00_02

    前日に移動していたわけでもないのにパンクする、
    という珍事の記憶を振り払って、
    今日からはいよいよしまなみ海道を通って移動を開始します。

     

    20170612_03_98

    20170612_03_99
    まずは、昨日行けなかった「尾道ラーメン 壱番館」さんでラーメンを入れます。
    これで御三家を制覇しました!

     

    20170612_03_01

    しまなみ海道を渡るにあたって、
    本来ならば「向島渡船」で行くのが一般的なのですが、
    どうせなら出来るだけ自力での上陸を果たしたいと考え、
    「向島大橋」を自転車で渡る事にしました。

     

    20170612_03_02
    結論から申しますと、お勧めできません…
    とにかく道幅が狭く、危険な道でした。
    車道を通っていたので、
    自動車のドライバーの方々にはご迷惑をお掛けしてしまったと思います。
    申し訳ありません。

     

    20170612_03_03
    非正規な方法で「向島」に上陸し、
    しまなみ街道に突入しました。
    ここからは島→橋→島→…という工程を繰り返して進んでいきます。

     

    20170612_03_04
    一つ目の橋、「因島(いんのしま)大橋」が見えてきました

     

    20170612_03_05
    車道の下に歩行者・自転車専用の道がありますので、
    それを使って「因島」へ渡ります。

     

    20170612_03_0620170612_03_07
    二つ目の橋、「生口(いくち)大橋」を渡って、「生口島」へ。

     

    20170612_03_08
    ちなみに、しまなみ海道はサイクリストのために、
    尾道から今治まで、サイクリングの道しるべである「ブルーライン」という線が引かれています。
    これを辿って行けば、初心者でも迷わずに目的地まで辿り着けるようになっているんですね。
    景色を楽しみたいのに大半の時間地図を見て過ごした、
    というような事もなくなりますので、とても助かります。

     

    20170612_03_09
    昼下がり、そろそろ小腹が空いてきたな…
    という絶妙なタイミングで現れるのが知人にお勧めされていたジェラート専門店
    ドルチェ瀬戸田本店」さんです。

     

    20170612_03_10

    20170612_03_11

    名物「塩ジェラート」「瀬戸田のはるか(ナツミカンの一種)」をダブルで注文。
    はるかはサッパリとした爽快感を、塩は甘さとしょっぱさのハーモニーを提供してくれます。
    美味しい!

     

    しまなみ界隈は、愛媛にある伯方塩業さん(伯方の塩で有名)の工場があるために、
    塩に因んだ名物が多くあり、このジェラートもその一つです。
    サイクリストは常に塩分を大量に消費しながら移動していますので、
    補給という意味でもお勧めです!

     

    20170612_03_12 20170612_03_13
    しばらく海沿いの道が続きます。
    気持ちいいですね!

     

    20170612_03_14

    20170612_03_15
    「多々羅(たたら)大橋」を渡って「大三(おおみ)島」へ上陸します。

     

    20170612_03_16
    渡り切ると何やらぶっといブルーラインが…

     

    20170612_03_17 20170612_03_18
    あ~、ここにあったんだ~。
    まさか聖地がこんな所にあるとは。

     

    台湾のサイクリングロードとの姉妹協定と、
    国際サイクリング大会「サイクリングしまなみ」の開催を記念して建立されたものだそうです。

     

    20170612_03_19
    大三島はしまなみ海道上で最も大きな島ですが、
    脇をかすめるようにすぐ「大三島橋」を渡って、「伯方島」へ。

     

    20170612_03_20 20170612_03_21
    伯方島もあっという間に通り過ぎて「伯方橋」で
    しまなみ海道最後の島である「大島」に上陸します。

     

    20170612_03_22
    もう一息で愛媛です。
    徐々に日も落ちてきましたよ。

     

    20170612_03_23

    20170612_03_24
    いつもながら計画性がないため、完全に日が暮れてしまいました…

     

     20170612_03_25 20170612_03_26
    あ、でも結果的にキレイ…
    最後にして最も規模の大きな橋、「来島(くるしま)海峡大橋」を渡ります。

     

    20170612_03_27

    20170612_03_28
    遂に四国、愛媛県に上陸しました!
    今夜の宿、「今治国際ホテル」さんです。
    予想を超えるハイグレード!
    それでいてリーズナブル!

     

    20170612_03_29
    なんという豪華さ。
    僕自身が飛翔してしまいそうです。

     

    20170612_03_30 20170612_03_31

    20170612_03_32
    お部屋も広々、キングサイズベッドです!
    しまなみ街道を制覇したことで夜景も王様気分で堪能できました。

     

    ④今治→松山→松山空港
    20170612_00_03 20170612_00_04
    20170612_04_01

    主目的のしまなみ街道を渡り切りましたので、
    ここからはダイジェストでお送りいたします。

     

    20170612_04_02
    姫路城の臣下として「今治城」を城攻めした後、

     

    20170612_04_03 20170612_04_04s_20170612_04_98
    愛媛県の突端、大角鼻(おおすみのはな)で一人たたずみ

     

    20170612_04_05 20170612_04_06 20170612_04_07 20170612_04_08 20170612_04_09 20170612_04_10
    戦の傷を癒すため、
    道後温泉本館」にてしばしの休息を取り、

     

    20170612_04_11
    あ、猫がかわいい。

     

    20170612_04_97

    20170612_04_13

    長すぎる石段を全力で駆け上がるも、

    やはりタイムリープは出来ず

     

    20170612_04_15 20170612_04_16
    再び姫路城の臣下として、今度は豪雨の「松山城」を城攻めし、

     

    20170612_04_17
    戦場で、敵味方を越えた友情を育みつつ、

     

    20170612_04_18

     

    20170612_04_19 20170612_04_20 20170612_04_21 20170612_04_22 20170612_04_23

    「松山空港」にて自転車をトランスフォーム

     

    20170612_04_24 20170612_04_25 20170612_04_26
    そのまま機上の人となりました。

     

    さて、長々とお付き合いいただきましたが、
    「大阪~愛媛自転車旅行~しまなみ街道を渡って~【後編】」これにて終了です。
    最後までお付き合いいただいてありがとうございました。

     

    では、例によってこの旅から何かしらの教訓を導き出していきましょう。

     

    今回は簡潔に行きます。

     

    教訓その1 猫がかわいい。

    教訓その2 全力で駆け上がってもタイムリープは出来ない。

    教訓その3 人生にブルーラインはない。

     

    なんか恥ずかしい感じになりましたけど、以上です。

     

    今回の旅は終わりましたが、
    僕の「日本縦断の旅」という野望はまだまだ続きますし、
    ゲーム開発者としての旅路も未だ果てが見えません…

     

    僕の尊敬する哲学者の言葉にこうあります。

     

    「道」
    この道を行けばどうなるものか、
    危ぶむなかれ。
    危ぶめば道はなし。

     

    踏み出せばその一足が道となり、
    その一足が道となる。

     

    迷わず行けよ。
    行けばわかるさ。

     

    ありがとう!

     

    20170612_04_99

    このペダルの一踏みがブルーラインになると信じて、
    次の旅に行ってきます!


  •            

    はじめまして。

    東京開発プランナーのJ4です。

    このブログに書かせていただくのは、今回が初めてとなります。

    特にテーマは決めておらず、その時その時の面白いことを書いて行きたいと思いますので、何卒よろしくお願い致します。

     

    今回はある動画をご紹介させていただきたいと思います。

    動画自体は、今年の1月にYouTubeに公開されたものですが、動画の元ネタとなった映画「ラ・ラ・ランド」の日本公開は2月だったため、当時見た方の中ではいまいちピンと来ないと感じた方もいらっしゃるのではと思います。

    というわけで、動画はこちら。

     

     

     

     

    この動画は、今年の1月に行わられた第74回ゴールデングローブ授賞式のオープニング映像です。

    ラ・ラ・ランドのオープニングをパロディしていて、授賞式の司会を務めたジミー・ファロン氏をはじめ、式に参席した多くの役者さんが出演しています。

    私もあまり多くの俳優を知っているわけではありませんが、登場した人の中で、知っている役者さんに関して簡単に書いてみようと思います。

     

    まず、40秒辺りで登場しているのは、二コール・キッドマン。

    まぁ、超有名な女優さんなので、別途説明は要りませんね。

    「LION/ライオン 〜25年目のただいま〜」がノミネートされていました。

     

    次に、55秒の黒いドレスの女優さんは、「アメリカン・ホラー・ストーリー」に出演したサラ・ポールソン。

    ただ、今年は、ホラーの方ではなく、「アメリカン・クライム・ストーリー」という作品でのノミネートでした。

    この作品は、「アメリカン・ホラー・ストーリー」のスピンオフシリーズで、スタッフや出演者が一部同じだったりします。

     

    1分辺りから登場するジョン・トラボルタは、ポーズですぐにわかった方が多いと思います。

    サラ・ポールソン同様、「アメリカン・クライム・ストーリー」に出演しています。

     

    1分18秒、車で寝ていた男性は、「ゲーム・オブ・スローンズ」の「何も知らない」ジョン・スノウを演じるキット・ハリントン。

    シーズン6の印象的なシーンをセルフパロディしています。

    私もそうですが、来月から放送されるシーズン7を楽しみにしている方は多いのではないでしょうか。

    どうなるんでしょうね、ジョン・スノウ・・・

     

    1分26秒からは、80年代に少年時代を過ごした人にはたまらない作品、「ストレンジャー・シングズ」の超能力少女イレブンと3人の子供たちが登場します。

    他の3人はともかく、イレブンはキャラ違い過ぎですね。

    続いて、同作でバーバラを演じたシャノン・パーサーも登場しています。

     

    子供たちのラップの歌詞がちょっとネタばれっぽくなっていますが、本当か嘘かは、シーズン2が実際出てみないと、わかりませんね。

     

    そして、ジミー・ファロンがピアノを弾いているシーンで、ピアノの上に乗っているのは、元ネタとなった「ラ・ラ・ランド」の主人公ライアン・ゴズリング・・・かと思えば、「デッドプール」のライアン・レイノルズでした。

    実は、二人ともカナダ出身で、名前も顔も似ているということから、良く間違われるとか。

    本人たちもこれをネタに冗談を言ってたりします。

     

    最後に登場したのは、「トロールズ」のジャスティン・ティンバーレイクです。

    この人は、正直、あまり言うことはありませんね・・・(笑)

     

    ざっとこんなところでしょうか。

    みなさんは、何人くらいわかりましたか?

     

    現実的に色々と超えなければならない課題は多いと思いますが、ゲームでもこんなことができれば面白いかも知れませんね。

     

    以上、J4でした。


  • 2017年6月8日

    東京アクア部員!

               

    こんにちは!東京開発デザイナーのスギウラです。

     

    今回は東京開発アクアリウム部員としてのご報告を簡単にできれば!と思います。

    入部の経緯は、カワウソ部長の勧誘、

    (過去記事 http://hexadrive.jp/hexablog/%E9%83%A8%E6%B4%BB/16370/)

    ですね!

     

    初心者ですので機材一式の準備からはじまり、最近ようやく日々の変化を楽しめる所まで来られたと思います。

    それでは恐れ多いですが、水槽立ち上げから現在までの記録をご覧くださいませ。

     

    ■2017年3月上旬■

    立ち上げ直後です。水草も植えたて、注水時の気泡が多いですね、魚もおりませんです。

    レイアウトの構図を検討している余裕は無かったです(笑)

    20170608_aqu1.jpg

    ■2017年3月下旬■

    魚を投入。それに伴って壁面に茶色い苔が・・・(それでも放置!)。

    バクテリアによる、水質や環境に変化が起こったようです。

    20170608_aqu2.jpg

    ■2017年5月末~現在■

    ・・・草ぼうぼう。

    レイアウトに空白が無い!、水面に水草届いているよ!、トリミングしなさい!、 前景がしょぼい!という声が聞こえてきますが、あまり手を加えず(めんどくさい)。

    水槽水のろ過サイクルが出来上がったのか、水質が安定して茶色い苔もほぼ発生しません。

    20170608_aqu3.jpg

    と、このような感じでのんびり活動しております。

    直接手を加える事は、毎日の餌やり(1分)、 週一回の水換え(10分)、週一回の伸びすぎた水草トリミング(15分)位です。

    照明の電源管理はタイマー制御、水温管理は専用クーラーや専用ヒーター、外泊時の餌は自動給餌機と、日々の管理を自動化して、とにかくお手軽を目指しています。

     

    お仕事でも一緒ですね、自動効率化を図れる所はツールにお任せする、・・・お任せしたい!

     

    また進展があった際はご報告させていただきますね。

    それでは~。


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



過去の日記はこちら

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