プログラマー

2017年3月28日 (火)業務上での必需品、メモ

おはようございます。
もうすぐ入社して1年になる新人プログラマーのT.Tです。

来月からアクセスゲームズに就職する人もそうでない人も、就職に向けて準備を始めていると思います。
そこで、この1年の中で 業務上で最も活躍した”メモ”についてお話します。bookpencil

就職活動においてメモを沢山とった という人もいると思いますが、就職後も、先輩に質問する時、会議に参加する時、電話を取る時など、メモをとることが多くありました。

会議では机の上で書きやすいノートを使用し、先輩に質問する時は、立っている状態でも書きやすい リングメモを使用しています。

また、電話の近くにはペンとメモを 普段使用しているものとは別に置いておき、いつ重要な電話が来ても困らないようにしています。telephone

このように業務上ではメモが必要不可欠と言える存在になっています。
メモは百貨店や100円ショップで、安価で買えるので、もしまだ買っていなかったり、使っているメモの残りページがあと少ししか無かったりする場合は、このブログを参考に状況に応じて自分にあったメモを探してみてください。
follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-4efe.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年3月27日 (月)姿勢には気を使うべし

ここ数ヶ月続けてほしいゲームが発売されて手が回っていないプログラマのK.Kです。
いつになったら全部消化できるんだろうか....。

さて本日のネタですが、皆さんは姿勢に気を使っていますか?
私は、最近まで姿勢に関して気を使ったことなどなかったのですが、
実はこの間、肩を痛めて人生初の整骨院に行ってきました。
その時医者に、「相当背骨などが曲がっていますね」って言われました。

そして姿勢が悪いせいで上半身の様々な筋肉に常に負担がかかっていて、
限界を迎え痛みになったんだろうと説明されました。
まさか姿勢だけで体のいたるところにこんなに影響が出るとは思いませんでした。

整骨院に行く前は、姿勢が悪かったんですが最近は出来るだけ正しい姿勢でいるのを心がけるようになりました。
姿勢を良くすれば、肩こりなどになりにくくなったり、なんと姿勢が良いと体を大きく動かすことが出来るため、
消費カロリーが増え痩せることが出来るそうです。
色々とメリットが多いですね。

皆さんも気が付いたときは姿勢に気を使って生活してみてはいかがでしょうか?

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-5810.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年3月24日 (金)PCにもプログラムを書かせよう

日中は少しずつ暖かい日が増えてきました。
日本の春は三寒四温を繰り返しながら暖かくなると言いますが、
4日も暖かい日が続いている気がしないですね。
おはようございます、本日のブログ当番M.Iです。

皆さんはプログラムで同じようなコードを書く時、どういう風に書きますか?
例えばC++ならマクロやテンプレートといった技術を使うかもしれません。
これらの技術だとソースは短くなる代わりに、
複雑なマクロを定義するとどんな展開のされ方をするのかがわからなくなりがちです。
VisualStudioでもマクロを展開した後のコードを出す、
ということができるらしいのですが、ここでは置いておきます。

今回紹介するのはT4テンプレートというコード生成機能です。
VisualStudio2010から標準で実装されています。

さっそくコード例を紹介します。
なお、生成するファイルの拡張子を指定するコードなども必要なのですが、
このエントリでは省略しています。
あらかじめご了承ください。

<# for (int i = 0; i < 3; i++){ #>
i = <#=i#>;
<#}#>


このようにすれば

i = 0;
i = 1;
i = 2;

といった文字列を生成することができます。
<#と#>で囲まれた部分はC#のコードとして無視され、
<#=と#>で囲まれた部分を評価した値が出力されます。
<#+と#>で囲まれた個所にクラスやenumが作れます。
囲まれていない部分はそのまま出力されます。

この場合iが0~2なので、iを評価した値が出力されています。
forで似たようなプログラムを連続して出力ができるわけです。
ただ、同じようなコードが出力されるため、冗長なコードになります。

また、色分けやインテリセンスも効かないので、
それらを使用できるようにする拡張機能を導入したほうが捗るかと思います。

https://marketplace.visualstudio.com/items?itemName=tangibleengineeringGmbH.tangibleT4Editor230plusmodelingtoolsforVS2013

現在個人的に使用しているのが上の拡張機能です。

できることはprintfなどでコンソールに吐き出したものをリダイレクトするのと変わりませんが、
こちらだと変更後保存すればすぐに出力先ファイルに反映されます。

実用例として、例えばUE4だとUE4で管理できるクラスや構造体を宣言する場合
クラスならUCLASS、構造体ならFSTRUCTという文言をクラス宣言の前に書くという風に決まっており、
命名もクラスならUHogeHoge、構造体ならFHogeHogeという風にしないといけません。
こういったテンプレートを作っておくとクラスから構造体に変えたいといった時に変更しやすくなります。
どう定義するのか忘れた場合の備忘録、タイプミスで起こる分かりにくいエラーを防ぐこともできます。
タイプ量も節約できます。

<#
  var className = "HogeData";
  var type = UTypes.Class;
  var prefix = type == UTypes.Class ? "U" : "F" ;
  var typeString = type == UTypes.Class ? "UCLASS" : "USTRUCT";
#>
<#= typeString #>(BlueprintType)
<#= Util.LowerAndDeleteHead(typeString) #> GAME_API <#=prefix#><#= className#>
{
  GENERATED_BODY()
  int Hoge = 0;

  bool operator ==(const <#=prefix#><#= className#>& rhs ) const
  {
    return Hoge == rhs.Hoge;
  }

};

<#+
    static class Util
    {
        // 最初の一文字を消し、すべて小文字にして返す
        public static string LowerAndDeleteHead(string input)
        {
            if (String.IsNullOrEmpty(input)) return "";
            return input.Substring(1).ToLower();
        }
    }
    enum UTypes
    {
      Class,
      Struct,
    }
#>

と入れると

UCLASS(BlueprintType)
class GAME_API UHogeData
{
  GENERATED_BODY()
  int Hoge = 0;

  bool operator ==(const UHogeData& rhs ) const
  {
    return Hoge == rhs.Hoge;
  }

};

と出力されます。
var type = UTypes.Class;

var type = UTypes.Struct;
に変えればclass部分がstructになり、名前もFHogeDataになるかと思います。

リフレクションも使えるので、.netアセンブリ内にあるクラスを列挙し、
クラス内のメソッド情報をとり、コードを書く、といったことも可能です。

自動生成で作れるものならこういった技術を使えば生産性を上げていけるかもしれません。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/pc-50c4.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年3月23日 (木)柔軟に

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

来年度からまた新卒が加わるという事で、内心ワクワク、ドキドキしております。
自分は入社してから5年目になりますが、入社した頃の事は、昨日の事のように感じます。

入社した頃は、しっかり仕事ができるのか不安でいっぱいでした。
初めてのプロジェクトに携わった時は、右も左もわからず混乱状態でした。
ですが、任された仕事をキッチリこなしていく事で、仕事に対しての自信をつける事ができました。

仕事をする上で自分なりに意識している事があります。
プロジェクトに携わるタイミングというのは、決まっているわけではありません。
最初から携わることもあれば、途中から携わることも、終盤で携わることもあります。

そんな中で、自分の担当する箇所のみを注視して、その部分の処理のみを把握するだけでは効率は良くならないでしょう。
多少時間がかかるかもしれませんが、プログラム上での全体的なフローをキッチリと把握する事で、処理の影響範囲やゲームの流れを理解する事ができ、作業効率の向上にも繋がります。

どんな作業でも、最短ルートを行くことが最適とは限りません。
多少の回り道をしてでも、全体を把握してキッチリと進む事が最適なルートに繋がることもあると思います。

もし、作業に行き詰ったり、問題が発生した時は、無理やり解決するのではなく、色々な道筋を考慮してみてください。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-dc06.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年3月22日 (水)自分だったら

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

最近のゲームラッシュで増えた積みゲーを消化するために、3連休は朝から晩までゲームばかりして過ごしました。

ざっくり1日で15時間近く、3日間で45時間ゲームをプレイしたと考えるとやってやった感があります。

ゲームをプレイしていると、ゲームの面白い所つまらない所、操作性が良い悪い部分など色々な事を気にしながら遊びます。

が、

プログラマー的に特に気にする事と言えば、自分がこのゲームのこの部分を作るとしたら、どのような考え方でどのような処理で実装するだろうか?
といった内容です。

このブログを読むゲームプログラマーを目指す学生の方は毎日ゲームをプレイするでしょうが、ゲームをプレイしている最中に、自分だったら、このゲームのこの処理はこういった作りにするだろうなー、と想像しながらゲームをプレイするとイイかもしれません。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-6e89.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年3月16日 (木)納期と品質

おはようございます。sun

プログラマーのG.Iです。

3月もそろそろ後半に差し掛かっていますが、まだまだ寒いですね。

今日も、パッチを履いて出勤してます!

さて、今日は納期と品質について話をしたいと思います。

ものづくりにおいて、納期と品質はどちらも大切ですよね。

これはゲーム製作においてもまったく同じです。

もちろん、納期がなければ開発チームはずっと楽しい時間は過ごせるかもしれませんが、
現実問題そんなことはありません。

ユーザーに完成したゲームを届けるのが仕事なので、ちゃんと納期どおりに終わらせて作ったものを発売するというのは当たり前ですね。

ですが、ただ納期だけを守って品質の低いものを届けるというのも絶対だめです。

まあ、色々な事情でどうしようもない場合もありますが、できる限り品質を上げるよう努力して製作を続ける必要があります。

個人的に、これは開発プロジェクトの規模にかかわらず、どのプロジェクトでも同じだと思っています。

なので、その開発予算や期間、開発チームの能力や企画内容によって、どこに時間をかけるべきか、どこを切り捨てるかをプロジェクトの始めに決めて取り組むことが大切です。

時間をかけるところは、スケジュール予備を大幅に取ったり、良くなるまでトライ&エラーを繰り返し、逆に優先度が低い箇所は納期厳守で遅れそうであれば切り捨てるということですね。

もちろん、開発チームはみんないたるところをより良い品質にしたいと思っているのでそういった考えも大切ですが、状況によってはそれがプロジェクトをだめにしてしまう
場合もあります。

チームの中でのスケジュールを握るスタッフにとっては絶対に必要な考え方です。

また、このチームにとってどこに時間をかけるべきかという考え方は個人のスケジュールにも当てはめることができます。

特に経験が浅いスタッフなどは、自分のスケジュールを決める際に新しいことにどんどん挑戦していく必要があります。

つまり、そこは時間に余裕を持って作業をすすめ、すでに経験している作業はさっさと終わらせましょうって事です。

常にこういう考え方で仕事を進めていれば、もしプロジェクトのスケジュールを握る立場になったときに楽ができますよ。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-c46f.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年3月15日 (水)集めた情報で色々やってみよう!

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

昨日のブログで情報収集についてありましたが、日々、新しい情報が舞い込んできており、興味を引くものが大量にあります。
その中で自身のリソースが許す限り手を出すようにすべきだと思います。

理由としては見て聞くのと、実際にやってみるのでは、理解度に大きく差が出るからです。

自分の引き出しを増やすために、好きな事おおっぴらにできるのは良いことです。

以下に、今興味があり、手を出しているものを上げていきます。

・レイマーチ

 64K intro等をちょくちょく触ってましたが、 とある講演に関する社内勉強会がきっかけで再燃しました。
 ボリュームレンダリングの手法の一つで、 今後の制作で実際に使う機会があるかなと感じています。

・T4テンプレート

 同僚発案で勉強会の発表物として検証中です。
 C#で処理を記述できるコードテンプレートで、 同じような記述を簡単に書けるので、業務で楽ができます。

・とあるゲーム①
 最近発売されたゲームでネットの記事を見ていましたが、 同僚が楽しそうに遊んでいるので購入しました。
 今後の制作で、あれみたいにやってと言った指示があるかも?
 また、面白いゲームとは何かを再認識するために。

・とあるゲーム②
 ネットで関連記事から偶々見つけた、 昔から好きなゲームデザイナーの作品。
 同好の士に情報共有済。
 完全に趣味ですが、同じ趣向の人への話題になります。

皆さんも、正当な理由付けの上で好きなことをやっていきましょう!

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-231a.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年3月14日 (火)情報収集

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

少し前の事になりますが、引っ越しすることになり、去年から今年にかけて、いろいろ引っ越し作業をしていました。

部屋探しの時点から既に大変だったのですが、ようやく部屋も決まり、これで一段落するかと思いきや、次のステップとなる家電家具類の選択がさらに大変でした…

今回は実家から引っ越しだったので、持っていくものよりも、新しく購入するもの(例えば、テレビ冷蔵庫洗濯機など)が多かったのです。

優柔不断な性格なので、それらを選ぶのには本当に苦労しましたね。
特に100%理想通りの製品というのはほとんどなく、それぞれに長所短所があったので余計に難しかったです。

購入する決め手になったのは、製品の情報でしょうか。
ネットのレビューを見たり、カタログを集めたり、店頭で実物を確認してみたり…などでようやく製品を絞れたと思います。

今回の件で、何事も事前の情報収集が大事だと思いました。

これは業務でも同じですよね。
ゲームの要素を作り始める前に、関係者と話をしたり、仕様書を確認したりすることはとても大事です。

もちろん作業を始めてから、気付くことも多いのですが、事前情報の有る無しで、作業効率が大きく変わると思います。

さて、悩んで選んだかいもあっていい買い物ができたと思っています。

部屋にも結構、いろんなものが揃ってきたのですが、まだ買えていないものもありますので、引き続き情報収集を頑張ります!happy02

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-3263.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年3月13日 (月)最小限で最大の効果

おはようございます。本日の当番、ゴルファー兼プログラマのJ's.Kです。
寒さに負けず元気にゴルフやってます。golf
少し春めいたと思ったら急に寒の戻り…
体調には注意したいところです。


さて、本日のお題は「最小限で最大の効果」です。


ゴルフは基本的に屋外スポーツ。
冬はオフシーズン!と決めて完全休養に当てる人もいます。
練習にすら行かない人もいます。

が、私にはオフなんてありません!
極寒だろうが灼熱だろうがお構いなし!
年中プレーしますし練習もします。

そこで気をつけていること。

それは…


服装に邪魔されないこと!


です。


ゴルフは体を横に回します。
なので、服装には横の伸縮性が求められます。

特に冬場は防寒のために、モコモコに厚着したくなりがち…

そうなると、体が全く回らなくなります…


そこで、昨年から研究をしました。
冬場でも「如何に薄着で寒くならないようにするか?」を。


結果としては

・ピッチリしないゆとりのある長袖インナー
・内側が薄いフリース生地でできたウィンドブレーカー

の2枚の組み合わせが完璧でした!


氷点下の時もそれほど寒さを感じず…
ゴワゴワせずにスムースにスイングできる…


最小限の服装で最大の効果を得ることができました!


さて、内容は違えど、業務にも同じようなことが多々あります。


まず、作業の最終結果を正しく理解する。
次に、作業を行う前に作業方法をしっかり検討する。
そして、実際に作業を行う。



これが正しい作業手順です。
最終結果は、慎重に確認することで正しく理解できるはず。

重要なのは、作業方法を検討してから作業を行うこと、です。


作業方法が明確でなければ、トライ&エラーが頻発します。
なので、いつまでも完成が見えません。
そして、スケジュールにも影響が出ます。


知識がない場合は、トライ&エラーも仕方がないでしょう。
しかし、その過程を覚えておけば、以降は遠回りせずに最短で作業ができます。

そうすることで、最小限の作業で最大の効果を生み出すことができます。


最大限の作業で最大の効果は、時間をかければ(おそらく)誰でもできます。
如何に最小限の作業にできるか?
そこが開発者として重要な点であり、求められるスキルでしょう。


と、言いつつも、ゴルフでは常にトライ&エラー…
最小限で最大の効果を得たいものです…

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2017/03/post-6426.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年1月23日 (月)バグを事前に防ごう

皆さん、こんにちは。本日当番のプログラマーのR.Hです。

プログラムを書いているとバグはつきものですが、これを事前に防ぐ小ネタをひとつ紹介したいと思います。
結論から先に言いますと、仮想関数オーバーライド時には override キーワードを使用しようというものです。
基底クラスに仮想関数を定義し、継承先でオーバーライドする事があると思いますが、みなさんはこのとき override キーワードを使用しているでしょうか?
おそらく以下のようなコードを書いている人が多いのではないでしょうか。

  class Hoge
  {
  public:
    virtual void Func();
  }

  class Foo : public Hoge
  {
  public:
    virtual void Func();
  }

基底クラス Hoge を継承した Foo クラスで、基底クラスの仮想関数 Func をオーバーライドする。
上記のコードに問題はなく、正しくコンパイルできるはずです。
では、以下のコードはどうでしょうか。

  class Hoge
  {
  public:
    virtual void Func();
  }

  class Foo : public Hoge
  {
  public:
   virtual void Fumc();
  }

間違い探しのようですが、クラス Foo のメンバ関数が Func ではなく Fumc になっています。
単純なスペルミスですね。
しかし、上記のコードにも問題はなく、正しくコンパイルできるはずです。
期待した動作をするかどうかはもうお察しの通りですね。
こういった単純なミスを減らすために、基底クラスの仮想関数をオーバーライドするときは override キーワードを使用することをオススメします。
override キーワードは、派生クラスの該当メンバ関数が「基底クラスの仮想関数をオーバーライドする」と表明するものであり、正しくオーバーライドにならない場合はコンパイルエラーとなります。
override キーワードを使用した場合のコードは以下のようになります。

  class Hoge
  {
  public:
    virtual void Func();
  }

  class Foo : public Hoge
  {
  public:
    virtual void Fumc() override;
  }

上記のコードはコンパイルエラーとなります。
なぜなら基底クラスの仮想関数に Fumc が無いからです。
また、コンパイルエラーなのでプログラム実行以前にバグに気づくことができるという利点もあります。
override キーワードは強制ではないので書かなくても問題はありませんが、バグを事前に防ぐことができるので是非書くことをオススメします。

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

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

より以前の記事一覧