プログラマー

2018年10月18日 (木)健康的にプログラミングを続けるためのちょっとした習慣

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

日々元気にゲームプログラム開発に勤しんでいるのですが、以前、この仕事をあきらめることを本気で考える程の体の不調を抱えていた時期がありました。

ある日 頭を触っても後頭部の感覚が無く、怖くなり脳神経外科に駆け込みました。

血液検査とCTスキャンの結果、その原因は脳内の血管や脳神経の問題ではなく、何と肩凝りとのことでした(あくまで私の場合は、ですから同様の症状がある方はまず病院へ)。

相当ひどいレベルの緊張性頭痛による首や肩の痛み、神経の圧迫が原因だったそうで、マッサージやストレッチ程度では駄目で、少々激しい有酸素運動を習慣にしなさいとアドバイスを貰い、週2、3日ほど走る様になりました。

もう10年ほどこの習慣は続いており、今は走れなかった週などは調子が悪く感じる位になりました。

最初の頃は家に帰ってから着替えて走りに出掛けていましたが、今は重いリュックを背負ったままでも1~2時間は走り続けられる様になったので、会社から家まで片道15kmの帰宅ランという形に切り替え、続けることが出来ています。

帰宅ラン途中の橋からは大阪の夜景も一望出来ます。
Img_201811018_1_2

季節によって街の姿が変わるのも楽しみの一つです。
Img_201811018_2

こんな形で体の不調からやむなく始めたランニングですが、実は仕事上のメリットもあり、バグで悩んでいる時に走ると、その解決法が突然浮んで来たりすることもあったりします。
キーボードから離れて無心で走ることで自分と対話する時間にもなっている様です。

他のメリットとしては、
・眠れないということが無くなった
・必然的に夜更かし出来無くなり、結果 朝型の生活サイクルになった
・帰宅時に走るので電車の混雑を避けられる
・大通りだけでなく一方通行の道路や裏道に詳しくなり、車の運転の役に立った
など。
後半は健康もプログラムも関係無くなってますが、私にとっては良いことづくめの習慣となりました。

健康を気にする人だけでなく、ひどい肩凝りに悩んでいるみなさんも、交通量や水分補給、体調、ペースには気をつけて、走って帰ってみるのも良いかも知れませんね。

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

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

2018年8月31日 (金)AIのおしごと

おはようございます。
本日のブログ当番、プログラマーのK.Aです。
昨今、メディアなどでAIが話題に上がることが多くなっている印象ですので、AIの話を少し書いてみようと思います。
私が特に最近よく耳にするのが、AIが人の仕事を奪うという話ですが、これは大昔から言われていますが、それはどちらかというと荒唐無稽な類で言われていました。
最近のAIが人の仕事を奪うという話には現実的なプロセスがあって、内容は割愛しますが、十分に実現できる気がします。
しかしまだ少々先の話であり、そのターゲットは、ひとまず導入能力があり人件費が厳しい足かせになっている金融業界のようです。
こんな夢のない話をしても、たとえそれが人ごとであるとしても、悲しくなりそうなので話題の方向性を変えますね。
AIの進化にはまだ多くの壁が残されてあり、人に取って代わるにはまだまだ多くの困難があるそうです。
コンピュータが登場してから人の代わりに計算をサポートするようになりました。
そして今日では、ソフトウェアが至る所で複雑で莫大な作業をサポートするようになりました。
コンピュータが今まで人をサポートしてきたように、AIもその延長線でサポートに専念する時代が現実味を帯びてきてるように思います。
何から何までできる人のようなAIは、今でも荒唐無稽な話かもしれませんが、特定問題を取り扱うアルゴリズムとしてどうやら実現できそうなところにあるようです。
今までのソフトウェアを構成するプログラムがあらかじめ決められた手続きに従って作業を行ってきたのとは違い、私の認識にあるAIは、それに推論と学習という機能を持ち込みます。
AIにとっての重要な要素は、推論と学習だと考えます。
「推論」を「知識をもとに、新しい結論を得ること」だとするなら、「学習」を「情報から将来使えそうな知識を見つけること」だと捉えることによって、情報から将来使えそうな知識を得て、その知識をもとに新しい結論を得ることがAIの目的であると分かります。
何やら恐ろしく捉えることもできそうですが、今は少し想像力を抑えて考えてみますと、重要なのは、推論から確証に近い結果を得ることだと考えられそうです。
たとえば、非常にコストを下げた上で無駄のない企画立案を創造性の面で直接サポートするようなツールなどが期待できるかもしれません。
この記事を書いた日の朝のニュースでは、自動運転のタクシー試験車がお客さんを乗せて目的地にたどり着いたという話が流れていました。
乗った人は、人のタクシー運転手が運転しているのと変わらない印象だと語っていました。
これもAIならではの運転サポートですね。必要な情報を整備してもきりがないので、学習させた上で臨機応変に自分で判断してもらう訳です。
乗客がこのAIと会話を楽しむところまで必ずしもカバーする必要はないですね。
ところで、私は、AI制御のテーブル作成の手間をある程度サポートできないかと格闘ゲームにパーセプトロンによる簡単なフィードバックシステムを取り入れようとした過去があります。
結局、この時はパーセプトロンのノード数や検証などの問題で行動パターンの学習が困難なことや、プレイヤーがうまくなっても、AIがそれをすぐに超えてしまう可能性など企画的に解決できないといった色々な問題が起こったので、その時は導入を進められなかったですね。
学習という意味では、格闘ゲームにおける入力の意図は、その意味を比較的に理解しやすいものだと思いますので、本格的に取り組む面白みはありそうな気がします。
推論を行う上での根拠となる情報は、意味を理解されたものである必要がありますが、これがそもそもの難題になりますからね。
もっとも、何だかんだ言い募っても、そもそもとして、この目的がAIの強みを生かせるものなのか謎でもありますけども。

近頃は、仮想世界でAIの学習を研究するという目的で、ゲームAIの研究開発という取り組みなどが行われてあると聞きます。 私のしょぼい話の後でなんですが、この場合、AIの研究目的はゲームを良くするためではないのですが、そこからゲームにつながる技術が生まれるかもしれませんね。 ともあれ、ぼっちプレイが寂しくて、いつだって色々な意味でも楽しいお供になれるAIを考えながら人生を過ごしてきた私としては、応援するしかありません。 さすがにこれがゲーム業界から人の仕事を奪うとは考えたくないですね。むしろ、もしかしたら、ぼっちプレイヤーの夢を広げるサポーターになりそうですよねぇ。

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

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

2018年6月 8日 (金)自分を知ってもらう

はじめまして。社会人2年目のプログラマー、Y.Mです。
昨年度はブログを書く機会がなかったので、今回が初ブログとなります。
よろしくお願い致します。

さて、私が入社して1年が経って少しずつ周りの方がどんな人かがわかってきました。
普段は気さくだけど仕事になるとまじめになる人。
仕事や趣味に対する熱意があふれている人。

その方がどんな人かがわかってくると、「この話は楽しく出来そうだ」とかこのニュースはあの方と共有しようと考えるようになってきました。

そういった普段の会話もあって、新人特有の緊張感もある程度無くなり、少しずつ場に馴染めてきたのかなと思っています。

こういった場に馴染む方法として、どのような工夫が考えられるでしょうか?
私は上記の様に話の内容にも工夫していますが、私が一番気にしているのは「相手に自分のことを知ってもらう」ことです。

「私って○○なところあるんですよね」という何気ない会話や普段から口癖の様に自分の性格や趣味について話す。
また、行動で示すなど様々な伝え方があります。

周りの方に自分をどういう人か伝われば、「この方はこういう人だから」と無意識にでも考えてくれるので、よりスムーズな会話が成立します。

お互いを知っていくことでコミュニケーションが気軽になれば話す機会が増えていき、ゲーム開発にも活かせて一石二鳥ですね!

こういったことに少しでも気をかけることによって、普段の会話もまた違った観点から見ることが出来るのでぜひ試してみてください!
私としても今後もいろいろな方とコミュニケーションをとっていきたいですね!

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

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

2018年4月19日 (木)リフレッシュの仕方

おはようございます。本日のブログ担当、プログラマーのY.Nです。

桜が咲いたと思ったらあっという間に、もうじきゴールデンウィーク!!
みなさん、どのように過ごす予定でしょうか?

私は、今年も、車中泊やキャンプをしながらぶらり旅を計画してます。
でも、計画といっても、どこに向かって走るかぐらいでそれ以外は全くの無計画!!

去年は福島まで行こうとしたけど、道中で気になった場所を寄り道しながら走っていると、結局、4日かかってやっと新潟に到着。
到底 福島まではたどり着けず、あえなく、長野経由でのんびり帰ってきました。
でもそのおかげで、とてもきれいな池を発見。
近くにいた人に聞いてみると、雪解けの時にだけ現れる池だそうです。

20180418_04

そんなこんなの旅行でしたが、いろいろ楽しめてよかったです。
今年は九州を一周したいと考えてますが、はたしてどうなることやら・・・

仕事では、時間に追われることもありますので、休みの日は時間に囚われず、のんびり過ごすのもいいと思いますよ。

「仕事も一生懸命!遊ぶ時も一生懸命!それが一番大切です」

ということで、去年に行ったのんびり旅行の一幕をどうぞ。

料理中!!
20180418_01

片づけ中
20180418_02

たそがれ中
20180418_03

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

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

2018年4月16日 (月)質問

おはようございます。
本日のブログ当番の、プログラマーのT.Tです。
新入社員が新しく入ってくる季節となりました。
後輩が新しく入社してくるので、遅れを取らないように心機一転、頑張ります。

さて、私は仕事する上で分からないところは「質問する」ことを大切だと思っています。

会社の仕事というのは 自分の働きが周りを助け、自分のミスが周りに迷惑がかかる、いわゆる共同作業が殆どで、学校以上に責任を持ってとりかかる必要があります。
しかしそれは、協力しあう仲間が増えるという事とも言えます。

作業中に分からないことがあれば、友達 や 同じ作業をする仲間 に 聞くと思いますが、それは入社してからも変わりません。

会社でも分からないことがあれば、一緒に仕事をしている仲間に聞くようにしてください。
上司や先輩には「迷惑かもしれない」と思い、話しづらいかもしれませんが、仕事仲間である以上、遠慮はいらないし、むしろ質問しなかった為にミスをするとそれこそ迷惑をかけてしまいます。

同様に何か問題が発生した際に、すぐに報告するようにすれば、最善策を一緒に考えてくれる筈です。

なので、分からないところは質問するようにすれば、自分にとっても周りにとっても大きな助けになると考えています。

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

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

2018年2月23日 (金)誕生日会

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

アクセスゲームズには、昨年から社長の浦澤が主催で行っているイベントがあります。

「誕生日会」と言うのですが、浦澤の誕生日を祝うわけではなく、浦澤が我々スタッフの誕生日を祝ってくれるイベントです。

社長主催というと話が大きくなりそうですが、いわば、集まったスタッフみんなが主役になれるイベントということですw

今回の会場はこんな感じです。
20180219_01
仕事終わりのスタッフがワイワイ賑わっています。

サムギョプサルでスタミナ回復中~
20180219_02
ロースや豚トロもたくさん頂きましたd(^_-)

そして、、、全員にバースデーケーキが配られました!!
20180219_03

因みに今回の催しでは一人一人に誕生日占いの結果が配られ、潜在的な性格や相性なんかを見せ合い楽みました☆

アクセスゲームズではこういったイベントを定期的に行っており、春には「大阪城の花見」冬には「忘年会」など、仲間との絆や親睦を深めあっています!

次は「花見」か!楽しみだ!

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

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

2018年2月15日 (木)自分のことを記録しよう

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

今回は自分の失敗についてとその対策の話をさせていただきます。

先日、1年以上前に購入した某ゲームの攻略ガイドブックを読み返したいと思い、本棚を探してみたのですが、その本がみつからないということがありました。
最終的には本棚ではなく、別の棚の中にあり、みつけることはできましたが、何故、そしていつ本をその場所に置いたのかを最後まで思い出せず、その件について心残りができてしまいました。

この時に、メモ帳などで自分のしたことを記録するようにするべきだと考えました。
そうすることによって、例えば1年前に自分が借りたものをどこに置いたかをわざわざ覚える必要が無くなり、記録を見ればすぐに思い出すことができます。
今回の場合だと何故そこに置いたかまでの詳細も記録しておけば、あとでそこに置いた理由を思い出せずに心残りができるなんてこともありません。

現在では、会社なら自分の作業内容などで覚えておいたほうが良いことをパソコンのデスクトップの付箋にメモしておいたりしています。

プログラム業務でもコメントを用いるなどで自分のしたことを記録するべきだと考えています。
僕の場合だと例えば半年くらい前に作成したプログラムのことを、突然聞かれたとしてもすぐに全てを答えることはできずに、自分の作成した半年前のソースを見て思い出しながら説明していくと思います。

この時に半年前のソースに、コメントでどういう意図で処理を作ったかの記録が残っていれば、自分がどんな処理を書いたかの解読も速く済み、説明までの時間を短縮できます。
もっと言えば、他のプログラマーの方が理解できるようなわかりやすいコメントとソースを書いていたなら、他人でもソースを見るだけで処理内容を理解でき、自分から説明する時間も必要なくなります。

「未来の自分はソース内容を全て忘れている」というくらいの考えで、未来の自分がソースの内容を思い出せるようにコメントで記録しておくことで、未来の自分だけでなく自分以外のプログラマーにも理解できるようになり、ソースを思い出して説明するというような余計な作業の発生を減らすことができます。

話をまとめると「未来の自分のために今の自分のことを記録しよう」ということです。
どんなことを記録するべきなのかがわからなくても、自分が必要だなと思うことを記録していけばそれが未来の自分を救うことになることもありますし、もし記録していないことが原因で失敗すれば「次からはこれも記録しよう」と記録するべきことがわかっていき、これも自分を救うことにつながります。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2018/02/post-f6ea.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年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)

より以前の記事一覧