プログラマー

2017年12月15日 (金)事前準備について

皆さんおはようございます。
最近劇的に寒くなって朝、布団から出るのが辛い、本日のブログ当番プログラマーのK.Kです。

さて今回お話しするネタのテーマは「事前準備」です。

事前準備と聞くと、何かをする前に行う準備というイメージが強いですが、私は最近、事前準備は大きく分けてこの二つではないかと思っています。
実際に作業する前に行う事前準備」「実際に作業している時に行う事前準備」それぞれの事前準備については下記のような感じです。

■実際に作業する前に行う事前準備■
例えば、何かを作る際は事前に関係するアートの方に「○○日から作業するのでリソースなどを準備してください。」とすり合わせをしておかなければいけません。
この事前準備を行っていないと、実際に作り始めた時にまだリソースが準備できていないなどの問題が発生してしまい、作業が進められず止まってしまうことになってしまいます。

■実際に作業している時に行う事前準備■
実際に作業している時に行う事前準備ってなに?ってなる方もいるかと思います。
これは私が最近、過去の自分のソースコードを読んでいる際にコメントが書かれていなかったり、コメントと実際にやっていることが違ったりしていて、数か月後とかに機能を追加したりする際や、他の人に作業を引き継ぐ際に一からソースを読み直さなければならなくなってしまったことがありました。
こういうことが起こらないように数か月後の自分や作業の引継ぎをする事前準備として、作業している時にしっかりとコメントを残して、自分や他の人が見た際にわかりやすいようにしておく事が実際に作業をしている時に行う事前準備だと思っています。

さて、ここで少しUnrealEngine4でゲームなどを作っている、これから作るというプログラマーの方にぜひ使ってほしい機能を紹介します。

■UMETA(DisplayName)■
UnrealEngine4を使ってゲームを作っている際は、外部にパラメータを出すときにUMETA(DisplayName)を使って、そのパラメータが何なのか、わかりやすいように日本語で書くようにしています。
こうすることで、そのパラメータを触るアートの方やゲームデザイナーが見た際に一目でパラメータの意味が分かるため、パラメータの説明をする際にスムーズにやり取りを進めることが出来ます。


最後にまとめると、「作業をする前に、必ず事前の準備をする」「実際に作業をしている時は、数か月後の自分や引継ぎを行うことを考えて事前にコメントなどをしっかり残しておく」この二つです。
こんなことを書いている私自身このことを怠ったせいで、大変な目にあったりしています。
今後は自分も気を付けていこうと思いますので、皆さんもちゃんと事前の準備は怠らないように気を付けましょう!

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/12/post-32c8.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年10月27日 (金)PCにも作業してもらおう

雨続きで外に出るのが億劫になりますrain

晴耕雨読とは田園で世間の煩わしさから離れて心穏やかに暮らすことだそうですが、雨の日はコードを読んで過ごすのも悪くないかもしれません。
おはようございます、本日のブログ当番M.Iですhappy01

先日CEDECに行ってきましたが、自動化についてのセッションが増え、効率化がゲーム開発に求められるように感じてきました。
効率化の考え方の一種、GUIでの自動化について話します。

CUIのプログラムなら自動的に走らせるのは難しくないことが多いです。
例えばpowershellなら
ls -r | Select-String "error"
とすればカレントディレクトリを再帰的に回り、ファイルを読みとり何行目にerrorという文字列があるかを出力してくれます。
これをjenkinsにさせれば指定した時間に自動的にログを調べ、errorの文字を検索するというような動作ができます。

しかし、最近のゲームエンジンはUnity然り、UE4然りGUIで操作します。
パッケージ作成等はCUIでも操作できるので自動化が楽ですが、自動配置というようなことをしたい場合は自動化が難しいかと思います。
プラグインで実装ということもできますが、APIの構造など、内部をよく知っておかないと実装ができないです。

そこで画像認識とマウス自動操作を実装し、自動化を実現してみます。
コンピュータに画像にある物体を認識させるのは、コンピュータビジョンという研究分野なのですが、うれしいことに人類の研究の成果がOpenCVというライブラリに還元されていて、手軽に利用できます。
CVはComputer Visionの略なのでコンピュータビジョン専門のライブラリです。
映っている物体を学習して分類する機能もあり、機械学習といった分野とも関係するので、サポートベクターマシン等の幅広いアルゴリズムも備えています。

コンピュータビジョンで実装する利点として、ソフトのAPIに依存しないプログラムが書けることが挙げられます。
反面似たような画像が画面上に現れることで、フローがおかしくなったり、誤って別の箇所をクリックするといった事故が起こることもありえます。
プラグインにも言えることですが、最悪アセットが削除されたり、変な状態で上書き保存されることも考えられます。
どちらにしても、こまめにバージョン管理しておけば大体の場合リカバリできます。

前置きが長くなりましたが実装していきます。
C++から利用すれば最新の手法が試用できるのですが、古典的なテンプレートマッチングという手法で実装するので、C#版の方で実装します。
テンプレートマッチングとは探したい物体の映った画像を作り、その画像と一致するところを探すという手法です。
違う物体を目的のものと認識してしまうことがほとんどないのですが、画像の向きがちょっとでも変わったり、少しでも形が違うと認識されなくなってしまいます。
3D空間に浮いていたり、回転するUIを認識させたいわけではないのならこの手法で充分です。
[ LINK ] https://github.com/shimat/opencvsharp
からソースをビルドすることもできますし、nugetから自分のプロジェクトに組み込んでもいいです。

まずは雰囲気をつかむため、画像からテンプレート画像を検出してみます。
コード中の<>は半角に直してください。

string srcPath = "src.png";
string templatePath = "template.png";
// 画像を指定パスからグレースケールに変換してロードを行う
Mat src = new Mat( srcPath , ImreadModes.GrayScale);
// 検出させたい物体が映ったテンプレート画像をグレースケールに変換してロードを行う
Mat template = new Mat(templatePath , ImreadModes.GrayScale);
// 4バイトの結果格納用の配列を作成 
Mat result = new Mat(src.Rows - template.Rows + 1, src.Cols - template.Cols + 1, MatType.CV_32FC1);
// テンプレートマッチングし、結果をresultに入れる。テンプレート画像と似ているほど1に近付く。
Cv2.MatchTemplate(src, template, result, TemplateMatchModes.CCoeffNormed);
// 配列の閾値以下の要素を0にする つまり0.95未満の類似度の個所を類似度0にする
Cv2.Threshold(result, result, 0.95, 1.0, ThresholdTypes.Tozero);
List < Point > detectedLocations = new List < Point > ();

for (int x = 0; x < result.Rows; x++)
{
	for (int y = 0; y < result.Cols; y++)
	{
		// 配列から類似度0以上の時の座標のみ追加
		if (result.At < float > (x, y) > 0)
		{
			detectedLocations.Add( new Point(x,y) );
		}

	}
}

テンプレートマッチングはテンプレート画像を画像の上で縦横にずらし、一致するピクセル数を数えるイメージです。
画像からはみ出た個所を検出しても意味がないので、resultはテンプレート画像分引いたサイズになっています。

認識はこれで試せました。
PCの画面をキャプチャし、OpenCVに渡す必要があります。
OpenCVにカメラ出力をもらう関数があります。
SCFH DSFという画面キャプチャソフトの出力をとれるのでそれを利用します。

Mat template = new Mat(templatePath, ImreadModes.GrayScale);
// カメラからキャプチャ
VideoCapture capture = new VideoCapture(0);
// キャプチャ画像を出力
Mat srcColor = capture.RetrieveMat();
Mat src = new Mat();
// カメラ画像をグレースケールに変換
Cv2.CvtColor(srcColor, src, ColorConversionCodes.RGB2GRAY);
Mat result = new Mat(src.Rows - template.Rows + 1, src.Cols - template.Cols + 1, MatType.CV_32FC1);
// 後はテンプレートマッチングと同じ

最後にマウス入力を行います。
[ LINK ] http://whoopsidaisies.hatenablog.com/entry/2013/03/22/142031
[1]
を参考にWindowsAPIを使用し、指定個所をクリックさせるようにします。

class WinAPI
{
	[DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
	static extern void SetCursorPos(int X, int Y);

	[DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
	static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
	private const int MOUSEEVENTF_LEFTDOWN = 0x2;
	private const int MOUSEEVENTF_LEFTUP = 0x4;
	public static void Click(int x, int y)
	{
		SetCursorPos(x, y);
		mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
		mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
	}
}

テンプレートマッチング後、detectedLocationsに見つかった個所が入っているので、そこでWinAPI.Clickを呼んでやればクリックしてくれます。
これで画面から物体を認識し、クリックまで実装できました。

jenkinsのworkspaceフォルダにテンプレート画像とビルドした実行ファイルを入れておけば、「Windowsバッチコマンドの実行」の機能で自動操作に組み込めます。

マウスクリック以外にもキーボード入力といった任意の操作が自動化できるので、アイデア次第で様々な仕事ができるようになるかもしれません。

参考文献
[1] C#で指定した位置をクリックする , whoopsidaisies ,
[ LINK ] http://whoopsidaisies.hatenablog.com/entry/2013/03/22/142031 (参照 2017/10/26)

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/10/pc-8047.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年8月31日 (木)仕事効率とスケジュール

おはようございます。sun
新人プログラマーのT.Tです。

学校などで課題が複数同時に出たときに、どんな方法で作業を進めていますか?

単純に考えると、同時進行させるほうが効率はいいのですが、
無理にいろんな作業を同時進行させようとすると、
それぞれの作業のことで気が散って、作業が進まなかったり、
思わぬミスを犯すことがあります。

課題は焦らず、1つの課題に集中して取り組むことで、
ミスを犯しにくく、効率よく作業することが出来ます。

効率よく課題を進めるには あらかじめスケジュールを組んでおくのがお勧めです。
例えば、「1日から3日まで○○をやる」、「4日から7日まで△△をやる」、
といった感じでスケジュールを組むことで、
1日から3日の3日間、△△の作業を考えず、○○の作業に集中することが出来ます。

また、期限に間に合うように、余裕を持ったスケジュールを組むことで、
不測の事態が起きた時に対応しやすくなります。

仕事においては、必ずスケジュールを組んでから作業を行います。

どんな仕事にも必ず期限があります。
ただし、プログラマーの場合は不具合が出ている状態で提出すると、
他の人に大きな迷惑をかけてしまう為、
正確かつ、期日に遅れないように作業する必要があります。

なので、仕事はスケジュールを組んでから作業するほうが、
効率良く進めることが出来ます。

みなさんも課題などをする前には、ぜひスケジュールを組んでみてください。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/08/post-6aed.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年7月14日 (金)遊技(パチンコ、パチスロ)で使えるマクロ

おはようございます。
プログラマーのY.Nです。

夏の暑さも絶好調な今日この頃ですが、本日は、
遊技(パチンコ、パチスロ)開発で頻繁に使用する
マクロ機能の紹介です。

まず、マクロって何かと言うと

#define DEBUG_PRINT_NUM(value) printf( "%d\n", (value) );
int main(void)
{
	int num = 10;

	DEBUG_PRINT_NUM(num)

	return 0;
}

と記入したコードが、コンパイル時に

int main(void)
{
	int num = 10;

	printf( "%d\n", num );

	return 0;
}

と置き換わる機能になります。

なんで頻繁に使用するかと言うと、遊技開発の場合、
案件などで、実装する基盤が変わる場合が多く、システム周りを
実装する場合、ミドルウェアを簡単に切り離せるように、
ある程度の機能単位でマクロにして使用する事により、
基盤に依存しないコードを書くことができるんです。

また、遊技では、メモリの節約などでビット管理を行う事が
多いため、以下のようなマクロを使用したりします。

// 指定ビットの値を取得する
#define BIT_VALUE(var, i) (var & 1 << i ) >> i;

// 指定ビットOn
#define BIT_ON(var, i) var |= 1 << i;

// 指定ビットOFF
#define BIT_OFF(var, i) var &= ~( 1 << i );

// 指定ビットを反転
#define BIT_RV(var, i) var ^= ( 1 << i );

「#define」って定数定義などでしか使用しない人も多いかと思いますが、
マクロなども活用する事でコード量の節約や工数軽減にもなりますので、
興味が湧いた方はいろいろ試して見てください。

本日はこの辺で!!

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/07/post-d26b.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年7月 6日 (木)体を労わる事も仕事の内

おはようございます。sun
元高校球児baseball で自称AG随一の球技マスターを名乗るプログラマーのS.Mです。

今でも日課で、100回以上バットで素振りをしています。

今回は自分の健康維持についてお話します。

実は、約半年以上前から、
朝起きてすぐに歩いたり、
野球等で体を動かした後しばらくしてから、
足に激痛が走る症状が起こるようになっていました。
すぐに直るだろうと高を括って放置していたのですが、
どんどん悪化してしまいました。

通院した所、「足底腱膜炎」と診断され、
発症する原因として、肥満傾向の人はなりやすいと聞きました。
確かに、自分は肥満傾向と言われても仕方ない体型なので、
改めてダイエットを決意しました。

こういった病気や怪我などはしっかり対策をしていれば
予防できるはずです。(自分の場合は、やせていれば発症しなかったはず。)
仕事をする上で、どこか痛んだり、体調が優れなかったりする状態で、
作業をする事は、とてもつらいです。

野球で例えるなら、道具の手入れやアップなどをしっかりと行う事で、
怪我を予防する事が出来ます。

もちろん、きっちり休んで体調を整えることも重要ですが、
回復にとても時間がかかる病気や怪我などもある為、難しいこともあります。
そのような事態にならない為にも、日頃の生活から自分の体を労わるべきです。

自分の場合は、最近、会社から50分ぐらい遠い駅まで徒歩で移動したりしています。
特に、この職種はデスクワークがメインですので、
身体能力はどんどん低下していき、
それに伴い病気や怪我などになりやすくなります。
長年、体を動かしていない人などは、少し意識する必要があるかもしれませんね。

まあ、病気や怪我と無縁の生活を送るというのはほぼ不可能なのですが、
しっかり自己管理して予防をするというのも大事な仕事です。
これを機に自身の生活を見直してみるというのも良いかもしれません。

健康第一!!

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/07/post-82c0.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月12日 (月)がんばれagrobo君

おはようございます。sun
本日のブログ当番プログラマーのM.Iです。

大阪は梅雨で雨の日が多くなってきました。
傘を持っていないと不安になりますね。

最近知ったのですが、slackというチャットサービスがあります。
skype等と同じようにチャットができるサービスですが、AIを会話に参加させることができます。

よくbotといわれるものです。
ここで動くbotを作ってみました。

いくつかbotを作成するライブラリは公開されているのですが、筆者は.net好きなので.netで動くnoobotを使用します。

20170609_01

https://github.com/noobot/noobot

からgitなりでcloneしてきてください。

https://github.com/noobot/noobot/wiki/Getting-Started-With-Noobot#get-noobot-up-and-running-quickly

を参考に、botをslackに登録して、指示されたapiTokenをconfig.jsonに書き込み、cloneしてきたソースを実行するとbotがslackでオンライン表示になります。

aboutと発言するとbotが作者の情報を返信してくれます。

さてこのままでは味気ないので話しかけると反応してくれるように実装してみましょう。
helloと発言すると現在の時間に合わせて挨拶してくれるようにします。

noobotではMiddleWareBaseを継承したクラスを作るとチャットに反応するようにできるみたいです。
GreetingMiddleWareクラスを作ります。

using System;
using System.Collections.Generic;
using Noobot.Core.MessagingPipeline.Request;
using Noobot.Core.MessagingPipeline.Response;

namespace Noobot.Core.MessagingPipeline.Middleware
{
class GreetingMiddleWare : MiddlewareBase
{
INoobotCore myCore;
public GreetingMiddleWare( IMiddleware next , INoobotCore core)
: base( next )
{
myCore = core;
HandlerMappings = new[]
{

new HandlerMapping
{
ValidHandles = new []{ "Hello" },
Description = "挨拶するミドルウェア",
EvaluatorFunc = GreetingHandler
}
};
}

private IEnumerable

GreetingHandler( IncomingMessage message , string matched )
{
string greeting =
  DateTime.Now.Hour <  9 ? "おはようございます"
: DateTime.Now.Hour < 17 ? "こんにちは"
: "こんばんは";
yield return message.ReplyDirectlyToUser( greeting );
}
}
}

ValidHandlesに入っている文字列(大文字小文字は無視されます)がチャットに発言されると反応します。
この場合hello や hello worldに反応します。
EvaluatorFuncに登録した関数が呼び出されます。
messageに話しかけてきた人や所属しているチャンネル情報、話しかけられたメッセージ全文といった情報がきます。

話しかけられた後今の時間に応じて返信文字列を作ってやれば完成です。
上の例なら
0~8時なら「おはようございます」
9~16 時なら「こんにちは」
17~23時までなら「こんばんは」
と返信してくれるようになります。

クラスを実装しても実行されないと意味がありません。
noobotのライブラリのContainerFactory.csの

private void SetupMiddlewarePipeline(Registry registry)

メソッドの最終行に以下のように追加するとbotの初期化時に実装したクラスのコンストラクタが実行されます。

registry.For

().DecorateAllWith

();

上の例なら特定の文字が来た場合のみ返事を返す、ということができます。

再度実行してhelloと発言すれば

20170609_02

余談ですが、

myCore.SendMessage( ResponseMessage.DirectUserMessage( message.UserId , "hello" );

という風にすれば能動的に返信できます。

Taskクラスとasync,awaitを利用すれば1秒ごとに実行する処理を記述できます。

		private IEnumerable

GreetingHandler( IncomingMessage message , string matched )
{
Task.Run( async ( ) => {
for ( ;;)
{
await Task.Delay( 1000 );
await myCore.SendMessage( ResponseMessage.DirectUserMessage( message.UserId , "1秒経過" ) );
}
} );
}

メッセージが着た後1秒ごとに1秒が経過したことを返信してくれるbotになります。
これで1秒ごとに情報を持ってこれるようになったので、誕生日に祝うbot等も作れます。

世の中には数式を投げると計算結果を返信してくれるといった仕事の手伝いをするbotもあるようです。

以前このブログでも紹介されましたが
http://www.accessgames-blog.com/blog/2016/12/post-4eff.html
chatopsと呼ばれるそうです。

機械でもできそうな仕事を見つけて、作業を振ってみてもいいかもしれません。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/agrobo-4d0b.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 9日 (金)AIとすごす怠惰な世界

おはようございます。sun
本日の当番、プログラマーのT.Fです。

まだ6月ですが暑すぎる日が連日のように続きますね!coldsweats01
通勤時間を経て会社に到着するだけで、その日の体力を使いきった感があります。

暑いと外に出たくないので、家でゴロゴロしている間にゲームを作ってくれる人工知能の開発が待たれます。
まあ、東大に合格する人工知能が作られないかぎり自分の代わりにプログラムを組んでくれるAIは登場しないでしょうが・・・。

ここ数年でAIが人間の仕事を奪う!みたいなノリの記事をみたりするたびに、自分の代わりに仕様書どうりのゲームをバグなくつくってくれよぉぉぉぉ!
と思っているのですがどうもAIの研究は芳しくない様子。

AIに意味を理解させる研究はあまり進んでおらず、いま使われている主流のものは入力に対してパターン解析をおこなって動作しているそうです。
極端な言い方をすれば、山と言えば川。みたいに入力に対して決まった出力を行うだけの物です。

ゲーム中に使用しているAIも、AIとは名ばかりの代物です。

攻撃可能な位置に敵がいる

攻撃!

みたいなパターンをプログラムで組んでいきます。
様々な状況判断をする判定文と、判定がTrueならアクションを実行!みたいなプログラムをひたすら用意しています。
なのでゲームのAIは自分で考えている風に動く開発者の血と汗の結晶なのです。confident

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/ai-83f9.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 8日 (木)プログラマー三大美徳

Perlを開発したLarryWall様が素晴らしいことを謳っています。
プログラマーは以下3つを美徳にすべしと。

怠惰(Laziness)
短気(Impatience)
傲慢(Hubris)

うーむ言葉だけとると劣悪ですね。
「怠惰で短気で傲慢なプログラマー」…って書くとすっげぇクズ感ある。

ググるといくらでも解説が出て来ますが、
本日の当番、プログラマのT.Tの言葉で説明していきたいと思います。

怠惰(Laziness)
めんどくせぇなぁ… って思うこと。

転じて、自動化と再利用の活用。

面倒なことはPCに任せよう。
面倒な質問は先にマニュアルに残しとこう。

同じことやるのは2回目まではゆるす。3回目からはころす。

短気(Impatience)
おっせぇなぁ…キレそう…とか、
気が利かねぇなぁ…キレそう…って思うこと。

転じて、
処理速度を追求したり気の効くものを作ろう。
心地よく作業できるものを作ろう。

最低でも自分の作ったものに自分でキレないようにな!

傲慢(Hubris)
はぁ…何言ってんだ…俺のプログラムは完璧だろうが… って思うこと。

転じて、プライドを持って誰からも文句が出ない素晴らしいコードを書くこと。
ヒュ~カッチョいい~。

これで大体理解できたかと思います。

怠惰と短気は簡単ですね。今日から持ちましょう。
傲慢は経験がないと難しいかもしれません。
まぁでも持つだけならできるでしょう今日から行こう。

よし!怠惰で短気で傲慢に生きよう!(すっげぇクズ)

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-c321.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 7日 (水)経験値というかなんというか

おはようございます。本日の当番、プログラマのT.Hです。sun

メガネの度が少し合わなくなってきたなとかなり前から思っていたものの、特に支障もないので新しいメガネを買わなかったのですが、今週末に行われる某ライブに参加するにあたって遠くでもちゃんと見たいなと思い、数年ぶりに新しいメガネを買いに行くことにしました。eyeglass

メガネそのものには特に問題なかったため、以前と同じ店で買おうと思いましたが、そもそもこのメガネどこで買ったっけ…?と全く思い出せませんでした。

メガネを見ても店名らしきものは書いておらず、メガネを買った時にもらったメガネケースは以前北海道に行ったときに旅館に忘れてしまった上、保証書等も見当たらなかったので、もはや確認する手だてはありません。think

仕方ないので近くのメガネ屋を調べてそこに買いに行きました。
新しいメガネや店に不満があるわけではないのですが、どこで買ったか覚えていれば調べる手間もなく、もう少し楽だったかなーという出来事でした。

日常生活ではさほど問題ありませんが、業務、特にプログラムに関しては、過去にした作業や作ったプログラムを覚えている、もしくはすぐに思い出すことができるというのは割と重要だと思っています。

作業時間の短縮だけでなく、過去のプログラムを自分で覚えていれば、今やればこの部分をもっとよくできるな、ここはよくなかったな、といった一人反省会的なこともでき、自分の成長を実感しやすいため、どのプロジェクトでどんな作業をしたか確認できるようにしています。
うまくいったプログラムは割と忘れにくいかもしれませんが、やらかしたプログラムも覚えておき、同じことをしないようにする、というのも大事ですね。catface

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-ffa9.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

2017年6月 6日 (火)小目標

おはようございます。
プログラマーのG.Iです。

6月に入り、夏も近づいたのか晴れの日はすごく暑いですね。coldsweats01
毎年、このまま梅雨に入らずに夏になれば良いのにと思っている今日この頃です。

4月から入社した新社会人の皆さんは、もう十分会社にはなれたでしょうか?
まだ、不安がいっぱいという人もいるとは思いますが、始めはみんなそんな感じなので気にせず業務に励みましょう。

実際にプロジェクトに入ってみると、ゲーム製作がすごく細かい作業分担によって作られているというのがわかってくると思います。

私も学生のころは、企画デザインプログラムサウンドくらいしか分かれていないと思っていましたが、特に大きなプロジェクトでは、それぞれのセクションの中でもさらに細かく分業を行っているということが分かってきました。
なので、入社してからしばらくは自分の作業にどういった意味があるのか、この部分がどうなるのか、が分かりにくいとは思います。
特にプログラマーは、ツールのバグ修正だったり、一部のアルゴリズムのテストだったりと非常に分かりにくいです。

先輩や上司はきちんと説明してくれるとは思いますが、始めはなかなか想像できずに、つらい気持ちになることもありますよね。

あくまで個人の見解ですが、そんなときは、その作業に自分自身の目標を決め進めることをお勧めします。
例えば、プログラムの場合、余計な判定はしないとか、制限されたサイクルでコードを記述するとか、自分で決めた時間内に作業を終わらせるとか、、何でも良いです。

もちろん、その作業がプロジェクトにおいてどういった意味を知るのかは大切ですが、新人のうちは、まずはしっかりと仕事を早く正確に業務をこなすことの方が重要です。
あと、口で説明されても分からないものはおそらく自分で経験しないと分かりません
与えられる仕事が大きくなったときに初めて、その前の仕事の本来の意味を知るということは、経験上よくあることです。

話を戻しますが、、作業の中での小目標を持つと、それに集中できるため、先ほど書いたような、いらぬ流れを気にしなくてすみます。
また、その目標を達成するために他の人よりも工夫をしなくてはいけないので、結果的に色々な仕事がこなせるようになります。

以前にもブログで同じようなことは書いたことがありますが、流れ作業にならず自分自身で考えて業務をこなす人は、成長がとても早いです。
さらに、もし、その中で自分だけの楽しみを見つけることができたならおそらく、その時のその作業が、皆さんの得意分野になるはずです。

仕事をする上で、自分の得意分野が出来るというのは非常に良いことです。
とりあえず、皆さんはまずはそこまで目指しましょう。
そこからの話は、また今度にしますね。

では、がんばってください。happy01

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/06/post-b33f.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

より以前の記事一覧