プログラマー

2012年1月25日 (水)

ポジティブシンキング♪

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

皆様、すでにご存じかと思いますが
おかげさまでshine創立10周年shineを迎えることができました!
パチパチパチ♪

そんなアクセスゲームズ社員一同がこれからも
無病息災でお仕事が続けられるよう
お正月に地元の神社へ参拝してまいりました。


地元は周りがなにもない、田舎町なんですが
昔の建物も多く古風な町並みなので
神社だけはやたらめったら見つかります。

ご利益も神社ごとに違っていて
あっちの神社では「安全祈願」、こっちの神社では「商売繁盛」
そっちの神社では「災難除け、などなど
よりどりみどりなわけです。

なので、いろんなご利益パワーにあやかりたいから
今年はいつもより余分に回ってやりましたよ!


そんな縁起を担いできた今年のスタートになりましたが
縁起を担ぐことは自分の気分が上がる良い手段だなと思います。


おみくじで「あなたの勝負運は大吉。今年は何をしても成功します」
なんて出たらそれをポジティブに捉え、物事が上手くいくように
自分に暗示をかけることで実力が発揮しやすくなります。
気分も乗って良いことばかり?!

なので、今年はどんな事象が起こってもマイナスな方向には考えず
ポジティブに捉えて前向きに毎日生きてやろうかと思います。

そうすれば、お仕事も上手く回ってより良い結果に繋がっていければ幸いです。



余談ですが、神社のおみくじで「凶coldsweats02を引き当てた人がいました。
その神社、おみくじで「凶」なんてめったに出ないので
嬉しそうに自慢してました。

中身が悪くても珍しければ良いみたいです。
これは見習わないと…!

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

2011年12月19日 (月)

Simple is best

おはようございます。本日の当番、新人プログラマーのT.Mです。
よろしくお願いします。

時が過ぎるのも早いもので入社して2カ月半が経ちました。
入社と同時に一人暮らしを始めたのですが
実家では家事をほとんどしたことがなかったので最初の頃は毎日がアドベンチャーでした。
そんな私も環境に慣れて最近では料理が楽しく感じます。

最近ピーマンの肉詰めの作り方を覚えてよく作ります。
作っている時に思うのが”調理するスペースがない”ということです。
材料や調味料、フライパン等を出すと台所が物で溢れ、
調理を始めると野菜のヘタや発泡皿などゴミが出てさらに
調理スペースが狭くなってしまいます。
対策としては調理する際に”一つの工程に必要な道具だけを出す”ことが大事です。

これはプログラミングにも言えることで
処理を行う際には”一つの処理に必要な要素だけを出す”ことが大事なんです。
そうすればデータ量も減り処理内部が綺麗になりますし、
何をやっているか分り易くなります。

料理もプログラムもシンプルにまとめて、効率良く進めていきたいです。
以上、昔、フライパンから火柱を上げたT.Mでした。

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

2011年12月16日 (金)

残り半月!

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


2011年も残すところ、残りあと半月となりました。

普通なら、これから楽しみにしている予定がある!と語ったりするのでしょうが、
残念ながら、12月らしいイベントの予定がないので、

「あー、たしか、12月16日はアーサー・C・クラークや、フィリップ・K・ディックの誕生日だったなー」

といった具合に、SF小説を読まない人にとっては、

「誰の話だ?」

と思うような事を考えながら、2011年も残り半月を迎えた今日を過ごしています。


まあ、そんなどーでも良いような事を日々考えて生きている自分も、
年末が近づいてきたとあれば、

「そろそろ部屋の片付けをしよう。」

と思ったりもするわけで、というか、思うまでは良いのですが、

いざ部屋を片付けようとすると、至る所に、読んでそのまま放置した本が部屋の中に転がっていて、どう片付けて良いか分からず、げんなりします。

そして、プログラムにおいても同じような思いをする事があります。

プログラムを作って、そのままソースを放置しておくと、あとからソースを確認する時に、どこに見るべき処理が書かれているのかが、パッと見で分からなくなります。

だからソースを整理しようと思うのですが、いざ整理しようと思ったときにも、どこにどう整理してやれば良いのか分からなくなったり、物量が多すぎてヤル気がうせてしまいます。


部屋の掃除も、プログラムも、日頃から時間を見つけては、少しずつ片付けろって話ですね。

あくせくジェ~ムズ読者の皆さんは、こんな風にならないよう、日頃から整理整頓を心がけてください。

プログラムに絡めて話がまとまったので、また次回! (^_^)/~

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

2011年12月15日 (木)

もしもの時の為に

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

ブログは研修旅行について書こうと思っていたのですが、
後日アップされるWEBレポートでの内容に被ってしまいそうなので、
毎度お馴染み(?)のプログラムの小ネタでも書こうかと思います。


今回の小ネタはDoxygen(というよりコメント)についてのお話です。

・Doxygenとは
プログラムのコメントからドキュメントを自動生成する便利ツール
※HTMLやPDF等の形式で出力が可能

基本的にプログラムにコメントを記載する目的は、
可読性を保守する為のコードの説明や意図の記述等がありますが、
Doxygenではドキュメントの生成にも使用する事が出来ます。

Doxygenの使用方法を簡単に説明すると以下の手順になります。
1.ソースコードの記述
2.ソースコードのディレクトリをDoxygenのINPUTディレクトリに設定
3.ドキュメントの出力


簡単に説明するとたったこれだけでドキュメントが作れてしまいます。

但し、ドキュメントを生成するに際に手順1で注意事項があります。
それはコメントをDoxygenの形式に合わせて記述する必要がある事です。

という訳で、Doxygenを使ったコメントの記述方法を簡単に紹介したいと思います。
Doxygenの記述の方法については複数の方法がありますので、
今回は僕が普段使用している記述で説明したいと思います。

・基本的な記述
『//! @***』と記述する事で出力したい内容を指定します。
***の部分が内容の指定部分になります。
例えば『//! @author S.K』と指定すると作成者がS.Kとして出力されます。
又、『//! ***』と指定する事で関数や変数等の説明を記述する事が出来ます。
例外等もありますが、基本はこの形式にしています。

・ソースファイルの説明(ソースの先頭に記述)
//! @file ファイル名
//! @brief 要約説明
//! @author 作成者

・関数の説明(関数の前に記述)
//! 関数説明
//! @param 引数名 [out] 引数説明
//! @param 引数名 [in] 引数説明
//! @return 戻り値説明

・クラス、変数、enum、namespace等々(それぞれの前に記述)
//! 説明文

他にも色々とありますが、基本的には上記のもので対応出来ます。

・上記を使った簡単な例
※sub.hに記述した場合
//! @file sub.h
//! @brief 減算定義
//! @author S.K

//! 減算
//! @param a [in] 減算される値
//! @param b [in] 減算する値
//! @return 減算結果
int sub(int a, int b)
{
  return a - b;
}

とこんな感じに記述していきます。
普段は必要ないかもしれませんが、こういった記述を心がけておく事で、
引き継ぎ等があった際のドキュメント作成が楽に行えるかもしれません。

C、C++以外にも色々と対応しているので、
気になった方はDoxygenで調べてみて下さい。

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

2011年12月14日 (水)

OpenCVと某カメラを使う

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

最近はプログラマにも関わらず、
プライベートではほとんどプログラマらしい事をしていなかったので、
ちょっとプログラマらしいメモ日記でいこうかと思います。

発売して以来、いろいろなプログラマやクリエイターの
遊び道具になっている、某カメラのインターフェイス。

世間では、OpenNIとOpenCV使って使ってる人が多いのですが、
敢えて、販売元から公式に公開されているプレビュー版で触ってみました。

商用利用は出来ないので商売は無理といった制限があるのですが、
簡単なインストーラーでドライバの組み込みまで自動でやってくれる便利さが
個人で軽く嗜む程度には便利かと。

これでカメラユニットから得られる映像のストリームをOpenCVに突っ込んで
遊んでみようと思います。


ここからは、とりあえずベースとして
Windowが表示出来てDirect3Dテクスチャが扱える物がある前提で。。

ということで、以下軽く嗜む為のサンプル


#include "MSR_NuiApi.h"
#include "opencv/cv.h"
#include "opencv/highgui.h"


HANDLE   m_hNextSkeletonEvent
HANDLE   m_hNextVideoFrameEvent
HANDLE   m_pVideoStreamHandle
HANDLE   m_hNextDepthFrameEvent
HANDLE   m_pDepthStreamHandle
NUI_SKELETON_FRAME   m_SkeletonFrame;

CvHaarClassifierCascade*   cascade = 0;
CvMemStorage*           storage = 0;

IplImage* g_pInputImage;
IplImage* g_pOutputImage;
IplImage* g_pGrayImage;


void main()
{
   // 他システム部分の初期化

   // 某カメラの初期化

   {
      HRESULT result;

      result = NuiInitialize(
         NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX | NUI_INITIALIZE_FLAG_USES_SKELETON | NUI_INITIALIZE_FLAG_USES_COLOR);
      if( FAILED( result ) )
      {
         return;
      }


      result = NuiSkeletonTrackingEnable( m_hNextSkeletonEvent, 0 );
      if( FAILED( result ) )
      {
         //エラー処理
      }

      result = NuiImageStreamOpen(
         NUI_IMAGE_TYPE_COLOR,
         NUI_IMAGE_RESOLUTION_640x480,
         0,
         2,
         m_hNextVideoFrameEvent,
         &m_pVideoStreamHandle );
      if( FAILED( result ) )
      {
         //エラー処理
      }

      result = NuiImageStreamOpen(
         NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX,
         NUI_IMAGE_RESOLUTION_320x240,
         0,
         2,
         m_hNextDepthFrameEvent,
         &m_pDepthStreamHandle );
      if( FAILED( result ) )
      {
         //エラー処理
      }
   }

   // OpenCV
   {
      // openCV用イメージ作成
      g_pInputImage = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 3 );
      g_pGrayImage = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );
      g_pOutputImage = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );


      // 顔認識用データ
      {
         cascade = (CvHaarClassifierCascade *) cvLoad (cascade_name, 0, 0, 0);
         storage = cvCreateMemStorage (0);
         cvClearMemStorage (storage);

      }

   }

   // ウインドウ作成
   cvNamedWindow ("GrayImage", CV_WINDOW_AUTOSIZE);


   // メインループ
   while(1)
   {
      // 省略
      // ここまで他処理


      HRESULT result;
      const NUI_IMAGE_FRAME * pImageFrame = NULL;
      const NUI_IMAGE_FRAME * pDepthFrame = NULL;

      // カラーイメージを取得
      result = NuiImageStreamGetNextFrame(
         m_pVideoStreamHandle,
         0,
         &pImageFrame );

      // 深度イメージを取得
      result = NuiImageStreamGetNextFrame(
         m_pDepthStreamHandle,
         0,
         &pDepthFrame );

      // 骨格情報を取得
      result = NuiSkeletonGetNextFrame( 0, &m_SkeletonFrame );
      NuiTransformSmooth(&m_SkeletonFrame, NULL);


      if( pImageFrame )
      {
         KINECT_LOCKED_RECT srcLockedRect;
         pImageFrame->pFrameTexture->LockRect( 0, &srcLockedRect, NULL, NULL );
         for( int y=0; y<480; y++ )
         {
            unsigned char* pSrcLine = reinterpret_cast

(srcLockedRect.pBits);
            pSrcLine = (pSrcLine + (srcLockedRect.Pitch * y));

            for( int x=0; x<640; x++ )
            {
               g_pInputImage->imageData[((y * 640 + x) * 3)+0] = pSrcLine[(x * 4)+0];
               g_pInputImage->imageData[((y * 640 + x) * 3)+1] = pSrcLine[(x * 4)+1];
               g_pInputImage->imageData[((y * 640 + x) * 3)+2] = pSrcLine[(x * 4)+2];
            }
         }

         pImageFrame->pFrameTexture->UnlockRect( 0 );
         NuiImageStreamReleaseFrame( m_pVideoStreamHandle, pImageFrame );


         // グレイスケール化
         cvCvtColor( g_pInputImage, g_pGrayImage, CV_BGR2GRAY );

         // 顔認識用のデータを使って検出器にかける
         {
            CvSeq *faces;
            faces = cvHaarDetectObjects (g_pGrayImage, cascade, storage, 1.11, 4, 0, cvSize (40, 40));
            CvScalar col = {255,255,255};
            // 検出された全ての顔位置に,円を描画する
            for (int i = 0; i < (faces ? faces->total : 0); i++)
            {
               CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
               CvPoint center;
               int radius;
               center.x = cvRound (r->x + r->width * 0.5);
               center.y = cvRound (r->y + r->height * 0.5);
               radius = cvRound ((r->width + r->height) * 0.25);
               cvCircle (g_pGrayImage, center, radius, col, 3, 8, 0);
            }
         }


         // 結果を表示
         cvShowImage ("GrayImage", g_pGrayImage);
      }
      
      if( pDepthFrame )
      {
         NuiImageStreamReleaseFrame( m_pDepthStreamHandle, pDepthFrame );
      }

   }
}




使用した各SDKバージョンは、某カメラがv1.0-beta2の64ビット版
OpenCVが2.3.0を使用しました。

DirectXのテクスチャが扱えるようにと言っておきながら、
結果確認用にはOpenCVのHighGUI使って手抜きだったりですが・・・
あくまで軽く嗜むサンプルということで!!


深度情報は全く使ってないので正直普通のwebカメラでも出来る事だけど、
深度データも基本は似たようなもんなんで、
上のサンプルを参考に深度情報からも何か使ったりと遊んでみてはいかが?


参考までに、深度情報を使う際は16ビットのグレースケールデータのうち
下位3ビットはプレイヤー認識用のIDが振られているので、通常のグレースケール画像として扱う際には、
3ビットシフトしてやる必要があります。



まずは、検出用のデータを自前で作ってみてもよし、
グレースケール化した画像を今度はエッジ抽出してみてもよし。

ちなみに私は、まだ自前で検出用のデータを作る所で彷徨ってます。
適当にググった情報を頼りに作ってると、妙に大きなデータが出来て突っ込むと激重(0.01fpsくらい?)
だったり、変換途中でコンバータが落ちたり。。。。


とりあえず後は任せた!!

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

2011年12月13日 (火)

代替プラン

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

実はブログのネタを全く考えておりませんでした。

しかし、普段ならネタがないと焦っているところですが、今日は違います。
社内や世間のイベントごとは立派なネタになるのですよ。

ということで、連日の旅行ネタで続きすぎと制限がかかってしまう前に書いてしまいます。

とは言いつつも、主な内容は後日WEBレポートが公開されるはずなのでそちらをご覧ください。

さて、ラスベガスをしっかり楽しみ、後は日本へ帰るだけとなったのですが、ここでアクシデントに遭遇しました。
旅行にアクシデントはつきものですね。
実は、乗るはずだった飛行機が悪天候など諸々の事情で欠航となってしまったのです。

でも、そこはさすが旅行のプロというべきか、
旅行代理店の方が急きょ代わりの帰国プランを考えて下さって無事、帰ってくるくことができました。

目的を果たすための手段をいかに達成するかということで、この代わりの手段ってのが大事なんですよね。
この場合は日本に帰らないといけないっていう目的に対して、代わりの帰国プランが用意されたわけです。

ゲーム開発では一つの処理を作っても、思ったより処理負荷やメモリ使用量が多かったり、いくら調整してもなかなかいい動きが作れないといったことがあります。

結構、ちまちまと触って時間を食ってしまうということもあるかとおもいます。

そんな時は、いっそ代わりの手段を用意して作り直してしまいましょう。

開発末期になってしまったり、大きなシステム部分だったりすると
作り直すというのはなかなかできませんが、かなり有効だとおもいますよ。

でも、何時間もかけて作った処理を壊すのってやっぱり勇気いりますよね。

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

2011年12月12日 (月)

デフォる

トゥデイのナンバー、プログラマーのT.Tです。
おっとベガス語が出てしまいました。ベガ語が。dollardollardollar


忙しい時期も過ぎ去り、
以前のプロジェクトの反省点を個人的にまとめています。

その中の一つ、
「デフォルト引数多すぎワロタ」
をなんとかしていきます。

「敵作ってー」「了解です」
CreateEnemy(int iId);

「あのへんに作りたいんやけど」「はーい」
CreateEnemy(int iId, Vec3* pPos = NULL);

「あーこっち向かせて」「なるほど」
CreateEnemy(int iId, Vec3* pPos = NULL, Vec3* pRot = NULL);

「出てきたやつのHP半分にできへん?」「ヨユーっす」
CreateEnemy(int iId, Vec3* pPos = NULL, Vec3* pRot = NULL, float fHp = 1.0f);

「イベント起こしながら出したいんですが・・・」「まかせろ!」
CreateEnemy(int iId, Vec3* pPos = NULL, Vec3* pRot = NULL, float fHp = 1.0f, int iEventId = -1);

と、ちょっと極端ですが上記の感じで少しずつ増えていきました。

そろそろ呼び出している箇所を確認する際に、
関数のコメントと睨めっこしないと書けなくなってきますね。

こういうのを解消するには、
汎用的な作成関数は残したまま、
拡張部分を含めた構造体を引数に持つ作成関数をもう一つ作ると・・・

CreateEnemy(int iId, Vec3 Pos);
CreateEnemyEx(SCreateEnemyOption* pOption);


ルックもビューティフォー!ユーズもエクセレント!goodshineあぁまたベガ語が。
見た目も美しく、呼び出す側は楽チンですね。

と長々と書いたんですが、
こういうのってみんなわかってるんです。

ただ、修正しようすると、呼び出している箇所を全て書き換えないといけないし、
きちんと動作しているかチェックするのが大変です。
バグチェックしている終盤は特にこうなりがちです。

しかし使いにくいことには変わりないので、
後のプロジェクトで再利用する際には直しておきたいですね。

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

2011年12月 9日 (金)

やる気は思ったほど簡単に出せるもんじゃない

おはようございます。本日の当番、プログラマのY.Tです。
めっきり寒くなり、朝、布団から出にくくなっている今日この頃、
皆様はいかがお過ごしでしょうか。

昨日の記事でもありますように、先日海外研修を終えて帰国した直後となりますが、
皆すでに意識を切り替えて制作業務を行っております。
心配していた時差ボケもほぼありません。よかったよかった。happy01

気付けば年末も近くなり、
テレビtvをつけるとCMでクリスマスソングxmasが流れる時期になってしまいました。
今年のクリスマスは三連休だそうで、
もう・・・本当・・・なんかやる気出ない・・・w

という訳で、今回は「気力(やる気)」をテーマにしようかなと。

気力モチベーションにつながる大切な要素です。
ことクリエイタには必要な物ではないでしょうか。

疲れている時、目的が定まらない時、あるいは目的に届かない時、
どうしても気力は低下しがちで、回復しにくくなります。
以前、どうやったら常に気力フルでいられるのか調べた事がありましたが、
そもそも「常に気力フルでいられる」と考える事自体が間違いだそうです。

気力は、脳が作り出すドーパミンやノルアドレナリン等の神経伝達物質が源になります。
脳は本能に忠実であり、その本能とは「生物個体として生きる」事になります。
上記の伝達物質は作られた後、タンクに溜められ、必要に応じて引き出される事になりますが、空になると、うつ病や慢性疲労等のリスクを負う事になり、
生きる事に対する障害となる為、もともと出し惜しみするものだそうです。

さらに、脳は伝達物質を作る為に、それに見合う報酬を要求します。
その報酬が「快感」だそうです。

快感を得る → 伝達物質を作り貯蔵する → 引出に応じて気力に転換する → 気力をもとに行動する → 新しい快感を得る
これをループさせ続けると、ある程度の気力を常時保てる様になる、
といったところでしょうか。

逆に、上記のループのどこかが途切れてしまった場合、
脳は前例から判断し、受け渡しを拒否する様になっていきます。
のループですね。

ここで一番途切れやすい箇所は
「気力をもとに行動する → 新しい快感を得る」になるかと思います。
行動の結果が必ず快感につながる訳ではありませんので。
なので、「どうやって行動を快感に繋げていくか」が、
やる気を保つ要点になってくると思います。

こればっかりは個人の感じ方なので、確実な事は言えません・・・。
なので、個人的な例の話になりますが、
私の場合は「小さな目標を多数達成する」様に心がける事で、
うまく繋げられている様に感じます。

大きな快感を得るためには、それだけ大きな行動をしなくてはならず、
もちろん時間もかかるので、大体の場合、
気力が先に無くなって、ループは途切れてしまっている様です

仕事の場合、得られる快感は殆どが「達成感」になるかと思いますが、
小さな達成感を得る為に、
・大きな一つの目標を、かなり小さな多数の目標に分ける
・一つ一つの目標と予定を明確にする
・出来るだけ一つずつクリアしていく

等を行う様にしています。

それに加えて、達成感の妨げになるかもしれない物を、
予め消す様にもしています。
・宙に浮いている業務がある場合は、先にその予定を確定させる
・やるべきかどうか解らない予定は、いっその事捨ててしまう
・出来るだけやりたくない事はやらない(少し問題かも知れませんが)

等々。

人それぞれやる気を保ち続けるやり方は変わってくるとは思いますので、
一度、自分に合ったやる気の出し方を考えてみてはいかかがでしょう。

少なくとも「やる気なんていつでもどこでも無限に湧いている」
という考え方をされている方は、
少し考えを改めて頂いた方がいいと思います。

とまぁここまで偉そうに語ってきましたが、結構うろ覚えです。
もっと細かく色々と要素があった筈なんですが・・・w
気になった方は調べてみてください。

では。

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

2011年12月 8日 (木)

聞くより見るよりやるが良い

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

さて、今回は先日研修旅行に行ってまいりましたので簡単に報告します。
詳細は後日AGWEBレポートが上がると思いますのでそちらを確認してください。
今回、私は国立公園の散策、ショー観覧、射撃、乗馬をしてきました。
全部初体験のため、どきどきしながら楽しんできました。

まず国立公園の散策は、気候や土地の隆起、植生等日本と違い、興味深いものでした。
砂漠で雨季と言う事もあり、ところどころ丈の短い緑があるといった所から、
川の付近に行けば周囲の岸壁を見上げなければぱっと見は日本と同じような印象がある場所。
そして、杉と同じ場所にサボテンがある場所等、不思議な印象を受けました。

ショーはと高さを使った空間的でアクロバティックな物でした。shine
演出者がその時その時に何を注目させたいか、
また、場面場面をスムーズにするためにどうしていたか、
そういった演出や構成。また、演者はメインだけではなく、
スポットライトの当たらない人も、全力で演技をし、
全体での調和と一人一人の力を感じさせられました。

射撃はインストラクターの説明を注意深く聞き、
最初はおっかなびっくりと撃っていました。
デザートイーグルは自分で撃った際は手への衝撃impactが他と比較にならず、
衝撃で銃口が上がりますが、的へは普通に当たり、
マシンガンはフルオートで撃つと照準がぶれ、
着弾位置がぶれてしまいましたが、弾数でフォローでき、
思っていたより的に当たりました。
他にも拳銃を数種、ライフルを1種撃ちましたが、どれも的によく当たり、
武器として誰もが使える物は優秀と言うことを実感しました。

乗馬horseもガイドの人の説明をよく聞き、カウボーイが乗る馬を決め、
馬に乗り、鐙を調整してもらったら特に練習もなく、早速一列で渓谷を回る事になりました。
基本並足で前の馬についていく感じです。
たまに前と距離が離れたり、曲がったり、草を食べたりするので、
その時は手綱を引いたり、お腹を蹴ったりしますが、
馬が賢く、さらにカウボーイの方がフォローしてくれたため、
大きな問題もありませんでした。
今回は、馬に乗せてもらってありがとうと言う感じでした。

さて、今回の旅行は初体験だらけでしたが、やってよかったと思います。
受けた刺激をゲーム作りに反映していき、
やりたいと言わせるゲームを作っていくパワーにします。

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

2011年12月 2日 (金)

切り替え

おはようございます。本日の当番、ゴルファー兼プログラマのJ's.Kです。

先日、11月末でありながらポカポカ陽気の中、半袖でゴルフ!golf
81の好スコアを出しましたが、パターの下手さに頭を抱え中です。
でも、ハンデキャップが9になったので、晴れてシングルさんです。


さて、本日のお題は、「切り替え」です。


私は、帰宅する時、会社の事はスポーンっと忘れるようにしています。
というか、会社から一歩出て、帰って何をするか?を考え出すと自然に忘れます。

自分では、この行為が、精神的な切り替えに非常に有効であると思っています。

若かりし頃は、家に帰っても仕事の事を考えて、自宅のPCで処理を作成してみたり
動作の確認をしてみたり、とあらゆる時間を仕事に費やしていました。

それはそれで、非常に良い時間だったのですが、遂に寝言でも仕事の事を言う始末。
しかも、休日の時間まで作業に当てていたために、様々な弊害が…

外出しなくなった…
友人と遊ばなくなった…
部屋にこもりきりになった…
運動しなくなった…
箸より重いものを持たなくなった…
etc...

自然とPCが友達!になるわけで…sweat02

これはイカン!ということで、なるべく家には仕事を持ち帰らないようにしました。

と言っても、何もかもスポーンっと忘れるわけにもいきません。

明日やることを整理して、メモとして置いておきます。
そしてスポーンっと忘れます。
次の日にメモを確認して作業開始。

という流れを作っておきます。

これで、精神的には毎日リラックス。

では、身体的にはどうすれば?

私の場合は、週に1回必ずゴルフ練習場へ行きます。
ゴルフの練習なんて、体力要るのかよ?とか聞こえてきそうですが…
その辺のヘッポコとは違いますよ!

ビュアァァァン!!!と豪快に空気を裂くスイング!
バキャキャーン!!!と豪快な打球音!
ドビシュゥゥン!!!と飛んでいくボール!


濃密練習であれば10球で体から湯気が出てきます。
大体これを100球ほど。

それ以外にも通勤の往復では、移動は早歩き、階段は一段飛ばしを心がけています。
あまり効果はないように思われますが、継続は力なり。
パワーアップ効果は微妙ですが、体力の減退を食い止める効果は十二分にあります。

しかし、プロジェクト終了直前にもなると、疲労困憊
精神的な切り替えはできても、身体的には…ムリです…

なので、プロジェクト終了後の休暇を利用して、元の体に戻すべく運動します。
脳ミソが筋肉になるくらい、普段の就業中とは切り替えて運動します。

もちろん、この休暇中は、精神的な切り替えもします。
旅行に行ったり、一日中寝たり…

今回の休暇で、精神的にも身体的にもうまく切り替えができて、リフレッシュ!
良かった、良かった。

そう、実は私、この文章を書いている前日まで休暇中でした。
いや~最高の休暇でした。

よく働き、よくリフレッシュ。

これに限りますね。


さて、研修旅行で身にまとった「脱げない肉ジャンバー」を削ぎ落としますかね。


あとはパターが上手くなればなぁ…

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

より以前の記事一覧