2021年9月9日  new

ナンプレ(数独)の問題生成ツールをVBAで作成!

初めまして、新入社員のR.Sです。
前職はサービス業で、ITとは無縁の世界にいました。
PCに特に詳しいということもなく、「プログラミング」という言葉はどこか遠い世界の言葉のような気がしていました。
そんな知識ゼロ・経験ゼロの私がたった1か月の研修で、以下のような作品を作ることができました!!!

今回はExcelVBAを使用し、ナンプレ(数独)の問題生成ツールを作成しました。

ご存じの方も多いかとは思いますが、簡単にナンプレのルールを説明すると、
「縦・横・9×9のボックス内に同じ数字が被らないように数字を入れていく」というものです。
今回は、3段階から難易度が選択でき、難易度によって空白マスの数が変わる仕組みです。
(本来、問題の難易度を上げる要素は空白マスの数のみではないのですが、今回はそれ以外の要素は度外視して作成しました。)

問題生成の流れは以下のような流れです。
 1.左上のボックスから順に81マス全てにランダムに数字を入れていく

 2.そこから選択された難易度に応じてランダムで各ボックスから数字を消し、空白マスを作る

細かい仕組みを説明するともう少しあるのですが、ここでは割愛します。
全てのマスを埋めた後、[Answer]ボタンで解答のチェックをすることもできます。
ナンプレは複数通りの解答が存在する可能性があり、それらも許容できる仕様にしました。

簡単な内容ではありますが、ロジックを考えてそれを形にしていくことの楽しさを知り、今後も勉強して複雑なものも作成したいと考えています。

それではまた。



2021年8月12日

Python機械学習で人物判定をやってみた

初めまして、新入社員の Y.T です。
最近、「AI / 機械学習」を重点的に勉強していまして、
「AI / 機械学習を使った画像の人物判定」を作ってみたので、これについてのお話をさせて頂きたいと思います。

GitHub → https://github.com/nazuna2371/public.git
「person_judgment_ver1.0.ipynb」を開いてご確認ください。

以下は上記「person_judgment_ver1.0.ipynb」の中身に関しての簡単な説明です。

今回使用した画像は以下7枚です。(当社ホームページ内で使用されている画像です。)
尚、全体的に画像の内容が読み取り辛いかもしれません。ご容赦ください。


これらの画像の中で、この方

が「いるかいないかをプログラムに判定させよう」というものが趣旨です。
実際のソースコード等については「person_judgment_ver1.0.ipynb」をご確認ください。

早速ですが、中身の話に入ります。
まず手法のお話ですが、数値では無く画像の取り扱いなので、所謂「教師あり学習の分類」になります。
そして学習アルゴリズムですが、種類自体はいくつもありますが
今回使用したのは「グリッドサーチ」、「ランダムフォレスト」、「サポートベクタマシン」、「K近傍法」です。
(最後の方で何となくついでに教師なし学習のクラスタリング(KMeans)もやってみました。案の定の結果でしたが。。。)
使用したパッケージ等については、jupyter notebook、numpy、matplotlib、pandas、scikit-learn、SciPy、OpenCV、Pillowです。

次にプログラムの流れをざっくりと説明します。
今回は「7枚の画像」を使用しています。分類を行うにはとても心細い数ですので、
「NumPy Data Augmentation」によって7枚 * 12枚 = 84枚に増やしています。
まず1枚の元の画像を、素の画像とグレースケール化させたものの2種類にしました。
そしてその2枚それぞれを上下左右に反転させたり、角度を変えたりして増やし、精度向上に繋げようとしています。

↓ 84枚の画像(見切れがあります。) ↓

そして増やしたこれらの画像データを「学習用データ」等として使用しますが、
そのまま各ピクセル毎の数値を「特徴量」として使用すると
ちょっと違う画像になると「同じ人物」でも「全く別の人物」として認識されてしまうので、
多少映っている位置や姿勢、表情等が変わっても正確に人物判定が出来る様に
一旦「ヒストグラム」として変換し、それを「特徴量」として使用しています。
要するにヒストグラム化する事によって、「その人の特徴、パターン」を数値の配列にしています。

↓ ヒストグラム グラフ表示(見切れがあります。) ↓

次に、実際に学習 → 予測をさせて行きます。
84枚分の画像をヒストグラム化させた配列と、「教師データ」である.csvファイルを渡し、
「学習用データ」と「テストデータ」に分けています。
(厳密にはこの場合は変数は4つです。そして今見たらtrain_test_split関数の比率の引数を忘れてましたね。。。)

↓ 学習、予測部分のソース ↓

↓ 教師データ.csv ↓

今回は「ランダムフォレスト」と「グリッドサーチ」で回しています。
まずは「学習用データ」を読み込ませて学習させ、
次に「テストデータ」の分を読み込ませ、「この人物は誰か?」を判断させたものが「予測結果」です。0、1です。
ランダムフォレストとグリッドサーチとは~。。。
長くなるので割愛します。気になる方は調べてみてください。

例とし、「person1さん(唯一、一人で映っている写真がある方です。)」の結果がこれです。

↓ 結果 ↓

「画像id: ~」がテストデータです。
ほとんど正解率1.0なのでちょっと胡散臭い感じですね。。。
person8さんの分が、0.9523809523809523なので微妙に間違っています。
精度高いのは嬉しい事ですが、今回は逆に全部1.0じゃなくて良かった。

↓ 不正解 ↓

画像を増やしまくったおかげか、予想よりも正解率が高い結果となりました。
K近傍法もけっこういい感じでしたが、今回の分はランダムフォレストに軍配が上がりました。

全員分の正解率の一覧です。

↓ 正解率一覧 ↓

最後に、無理やり「教師なし学習のクラスタリング」をやってみた結果です。

↓ 無理やりクラスタリングしてみた結果 ↓

今回は7枚の画像のみに対応したプログラムを書きましたが、
そのうち改めて新たな画像が何枚追加されても判定出来る様に作り直してみたいと思います。
全体的に言える事ですが、ハイパーパラメータの設定とかでもっと改良する事は可能のはずですね。
(本来はモデル評価しながらやるものですからね。。。)

また、回帰、クラスタリング、次元削減もそうですが
深層学習、強化学習、深層強化学習等にも挑戦したいと思います。

今回のお話については以上となります。
いずれまた何か面白そうな記事を書けたらいいなと思っています。
ありがとうございました。



2021年7月26日  new

将棋ゲーム<VBA>

始めまして、新入社員のK.Sです。
今回は、オセロゲームの発展課題として作成した、将棋ゲームについて紹介したいと思います!
まず将棋は、2人で行う定番なボードゲームであり、皆さんもご存知かと思います。お互いに自分の駒を動かしていき、相手の駒を取ったら勝ちというシンプルなゲームです。しかし、駒の種類によって動かせる範囲が違うことや、成り、2歩など、様々な難しいルールが存在します。将棋を作成するとなったら、そういった様々なルールをVBAで表現していかなくてはなりません。
そこで大事になってくるのが設計です。これから、おおまかな設計をしてみたいと思います。

実装するもの
・ボタンを押すと、盤面や駒がセットされる
・それぞれの駒の動き
・駒を移動させる
・成り
・王手の告知
・終了判定

これらを実装していけば簡単に将棋をつくることが出来ちゃいます!大まかな説明となりますが、1つ1つみていきたいと思います!

まず、ボタンを押すと、盤面や駒がセットされるようにしていきます。For文でループを回して値を出力していけば、簡単にセット出来ます。
何もない盤面から、


 




こんな感じで駒がセットされました!ついでに「対局開始」も表示させました。

次にそれぞれの駒の動きですが、これはその文字の駒をクリックしたら処理が行われるという条件を付ければ簡単です。クリックした駒が移動できる範囲を黄色にします。

次は、駒を移動させます!これは、駒を黄色にした事を活かして、黄色のセルをクリックしたら処理が行われるようにします。1つ前の工程で、クリックした駒の情報を保存しておき、黄色のセルとクリックした駒を入れ替える処理を行います。

持ち駒については、取った駒を持ち駒置き場に保存する処理をしておき、持ち駒を置く処理は先述した駒を置く処理を使用します。


 



続いて成りについてですが、もし自分の駒が、1番上の列から3列以内に駒が置かれれば「成りますか?」というメッセージを表示し、「はい」なら成り、「いいえ」ならそのままにする処理を行います。


 



「はい」を選択したので成りました!

そして王手の告知ですが、これは駒の動きの処理を作り変えれば出来ます。駒の動きの工程では駒の置ける位置を黄色くしましたが、王手の告知では黄色くせずに、もし駒の置ける位置に王があったならば「王手」というメッセージを出す処理を行います。

最後に、終了判定です。これは駒を移動させる処理に、もし移動先が王なら「p1の勝ち」というメッセージを表示させるだけです!

以上で将棋を作成する工程が終わりました!説明がだいぶ大まかになってしまい、もっと細かく説明したかったのですが、みなさんが作る時の答えになってしまうのでやめときます。もう少し実装しなければならない細かい機能などがありますが、おおまかには完成です。今回は、人vs人で作ったものですが、目指すところは人vs CPUなので、これからも改善していきたいと思います。
この将棋ゲームは、人vs人であればVBAの基礎を活かして簡単に作成できるものです!ぜひ作ってみてください。ありがとうございました。



2021年7月16日  new

ソートアルゴリズム

始めまして、新入社員のSTです。
今回は、ExcelVBAの研修の一環として行う、ソートアルゴリズムの発展として作った
VBAをご紹介したいと思います。

ソートアルゴリズムに関しては、過去の活動報告の記事にもなっておりますとおり、
私も課題としてソートアルゴリズムを実装しました。
アルゴリズムの実装は、プログラミングをする際に重要となる、論理的思考力を鍛えるのに非常に適したモノだと感じました。
アルゴリズムを調べるにつれ、数字を並び替える、それ一点の機能でありながらそれぞれのアプローチの違い、速度などの性能、ー今回は言及しませんが、要素による得手不得手など、非常に奥深いものでした。

そして今回作成しましたのは、それぞれのアルゴリズムのアプローチの違いを感じられるよう、グラフに数字がソートされていく様子をプロットするものとなります。
Wikipediaやアルゴリズムの解説動画などによくあるアレですね。

//バブルソートを実行している様子

//クイックソートを実行している様子

こちらは視覚的な分かりやすさを念頭に置いたもので、速度的には正しくはありませんが、
アルゴリズムにおけるアプローチの違いが感じられる面白いものが出来たと思います。
VBAはグラフが簡単に描画出来て良いですね。

こちらは速度の比較用として作ったものです。

指定した要素数のランダムな数字(重複なし)を配列にセットし、それぞれソートをかけるといったものです。
セルへの入出力や描画がない分、計算量オーダーに則ってある程度正しく計測できているはずです。
フォームの綺麗さはあまり考えずに作ったため、見苦しいものがありますが、
とりあえずシンプルに作ろうとした結果です。

圧倒的な速さを誇るクイックソートですが、当初は思ったようなパフォーマンスが出ず、シェルソートやコムソートより3倍近く遅れをとっている始末でした。
そこで再帰関数として実装していたものから、配列を使ったスタックを実装し、そこにソート範囲を渡すようにすることで、現在の圧倒的なパフォーマンスを誇るクイックソートを実装することが出来ました。
私は男の子なので、はやいものがとてもすきです。

ソートアルゴリズムの話をしておきながら、更にはコムソートなんてマイナーなものを実装しておきながら、マージソートを実装していないのは手落ち感があるのですが、時間の都合で実装に至らなかったと言い訳を残しておきます。

今回は全てVBAで作ったものとなりますが、やはりセルへの入出力やグラフへの描画が非常に負荷の高いものとなり、諦めた実装もいくつかあります。

視覚的に動きのあるものを作るのは楽しく、見る側も楽しんでもらえると思うのですが、
こと描画に関してはVBAでも便利な点はありつつも、限界を感じられた事も多くあり、後に作ろうとしたVBAでのピンポンゲームでもやはりパフォーマンスの悪さに挫折せざるを得ませんでした。

現在はC++にて簡単なゲーム作りに挑戦しており、また機会があればご紹介できればと思っております。
それでは、ありがとうございました。



2021年3月16日

読み物 「ITで”遊びに行こう”」

【ご挨拶】
こんにちは!
初めて活動報告を書かせていただくことになりました!
入社2年目の新人です。
2021年4月より新たに仲間が増えるとのことで、改めてスキル研鑽に励むぞ、と気を引き締めているところです!

【今回のテーマ:ITで”遊びに行こう”】
今回は、IT技術者として一歩を踏み出したばかりの私が個人的なちょっとしたエピソードを通して、
ITで”遊びにいく”面白さを伝えてみたいと思います。
スマホアプリは、1日一度、何かしらのアプリを開くのではないかというほど日常生活に欠かせない存在ですよね。
電車の乗り換え案内、Todoリスト、メモ帳、動画、SNS、スマホゲーム…etc
そしてそれを作る人になれたらいいなぁと思いプログラミングを学ぶきっかけになる人も多いのではないでしょうか。
私もIT業界に入る前はぼんやり上記のような憧れの気持ちを持っていました。
ちょっとしたエピソードでは、上に書いたようなアプリのどれでもないけどあって良かったと思ったアプリも紹介します。

【仕事の状況と、合間の散策】
先日、東京都内を走る副都心線エリアを友人と散策していました。
桜の名所と言われている川沿いもこの頃はまだ芽ひとつなく少し寂し気でもありましたが、
空気は澄んで散歩には気持ちの良い天気でした。
川で鴨が泳いでいるのを眺めているだけでも楽しかったですね。

この散策の時期は仕事がとても忙しく、終電で帰ることも多々ありました。
インフラ担当としてサーバ構築や運用を始めて1年程のため覚えることも調べて対応することも多く、
日々目まぐるしくて一息つく間もないといったところでした。
ただしその分実務でコマンドを打つことから始まり、サーバを構築してテストして…と大きなシステムの基盤を作る一員になっていることにもやりがいもあり達成感もありました。

ちょっと多忙による疲れとやりがいを感じる中で、久しぶりに外の空気を吸おうということでの散策です。

【ITで遊んだ瞬間】
さて、目的もなく道なりに歩いているのですが三叉路に当たりました。
この辺りは住宅地ですが少し歩けば大通りが近そうです。
どっちに進む?となったところでなんとなく、
「木の枝転がして倒れた方に行くっていうのはどう?」
と適当に言ってみました。本当に適当に言ってました。
適当だけどちゃんと辺りを見回し枝を探してみたのです。
狭い空き地のような芝生っぽいところがありましたが、残念ながら整備されているようで長い枝は落ちていませんでした。
そんな時、友人がこれならあるよと言って見せてくれたのが「ルーレットができるアプリ」でした。

円グラフのように3色分かれており、真ん中には針があります。
選択肢を自由に設定し、スタートボタンを押すと円がくるくる回るシンプルなアプリです。
今は三叉路なので「右」「まっすぐ」「左」と入力して、いざスタート。

面白かったのが音です。
スタートするとドラムのスネア音で盛り上げてくれます。
ドゥルドゥルドゥルドゥル…
ジャーン!
円が止まると丁寧にシンバルで締めてくれました。

その後も進路はアプリで決めましたが適当に進んだ割に不思議と新宿駅まで辿りつけました。

【どこで誰が何を必要としているか、実は分からない】
この記事の途中で私は「大きなシステムの基盤を作る一員になっている」と書きました。
それはもちろんとてもやり甲斐があり、作ったシェルがしっかり動いてくれると都度安心します。
そしてそれは生み出されたシステム・アプリケーションすべて同じで、
必要とする人が一人でもいればちゃんと運用・維持していくことになるんですよね。

プログラムを作ってテストして……を繰り返し、OKなら世の中にリリースする。
リリースしたら顧客の要望によって新機能を追加したり改善し、不具合や障害が発生したら原因調査して解決するための対応を行う。
その工程はシステムや現場(個人開発も)によって異なると思いますが大体は同じなのかなと思っています。

何か大きなシステムを作ることだけがITの仕事ではないんだと散策で気がつきました。
当時めちゃくちゃ疲弊していて視野が狭くなっていましたが、思いがけないところで面白いアプリを使えて製作者の方にも見つけてくれた友人にも感謝です。
(友人もSEなのでこういったアンテナ張っているところにも尊敬)

誰がどこで必要とするか分からないけど、自分が作ってみたいと思ったものに挑戦してみることはスキル向上にも繋がり実務で役に立つかもしれない。
作りたいものが分からなかったら歩いてみると発見があるかもなぁという話でした。

以上初めての活動報告でした。
書き方が粗い部分もあるかと思いますが、文章力も磨きながらまた何か読み物をお届けできたらと思います!
今後ともよろしくお願いいたします!


2021年2月6日

題3回 仮想環境のすすめ

今回は、実際の構築をイメージするために仮想マシン・ソフトウェア『VMware Workstation 16 Player』を用いて行きたいと思います。

実際に設計書を作成する際には通常、製品マニュアル等を見ながら具体的な設定値を確認していきますが、いくら説明や方法を読んでも理解が難しい事があります。

そんなとき、仮想マシンというのはとても便利なもので、自身のパソコン上で別のOS領域を構築して実際に検証することが可能になります。

また、仮想マシンを動かすときに必要な対象OS・ソフトウェアのisoイメージファイルは、各社の公式サイトより無償で提供されているものが多く存在し、これらは評価版、試用版という名称で呼ばれますが、これらを有効活用しない手はございません。
但し、利用日数の制限や利用範囲等を定められている場合などがございますので、利用規約はきちんと読みましょうね。

システムの導入検討や評価を行う際に、実際に設定・確認しながら進められるのでお勧めです。

今回は、
・VMware Workstation 16 Player
・評価版WindowsServer2016
・評価版Windows10

を用いて進めようと思います。

尚、本コラムは手順を細かく説明するものではないので、ダウンロードサイトの紹介や、正確な手順は致しません。あくまでポイントのみを追って解説します。悪しからず。なので、実際に自身のPCへ導入する際は色々とWebを検索してみてくださいね。

では続きます。
まずはMS公式サイトから取得したisoファイルを用いてVMwareに『WindowsServer2016』と『Windows10』を追加してみます。

 

このように仮想ソフトウェア領域に検証したいOSイメージを追加して検証を進めてまいります。

今回はパワー切れのため、OSインストール自体は割愛します。次回はOSインストール後のドメイン構築からポイントを解説します。

では、よい週末を。

2021年1月25日

題2回 どのようにActiveDirectoryサーバ環境を構築していくか

前回のコラムでは、ADサーバを触ってみるというところで終了致しました。

では実際に触る前に、基本的な構成を考えてみようと思います(やはりここは順を追って行く方が理解しやすいかと)。

通常、WindowsServerを構築する場合、ADそれのみで構築することはほとんどなく、他にも様々な要素を盛り込む事が多いです。

今回は前回とは変わり急にディープな話しを織り交ぜますがある程度必要な情報であるため、ご容赦くださいませ。

例えば、今回はこのような構成で考えてみます。

ドメインコントローラとなるサーバに、『DNSサーバ』、『NTPサーバ』、『DHCPサーバ』の役割を兼務させます。

DNSサーバは、ドメイン内のサーバ、PCを名前解決するために追加します。通常、名前解決は前方参照、逆引き参照がありますが、

標準のインストールでは前方参照(DNSホスト名からIPアドレスを導き出すもの)が組み込まれており、必要に応じて逆引き参照を別途設定します。

NTPサーバは、ドメイン内のサーバ、PCへ現在時刻の情報を配信するために設定します。これは結構重要で、ドメイン内に複数のドメインコントローラを配置する場合、
ドメインコントローラ同士は、一定時間以上ずれていると同期に失敗したりする原因となることも。

通常は、ドメイン内の頂点のドメインコントローラが外部の時刻配信サーバを参照し、ドメイン内の他サーバは外部NTPサーバと同期するドメインコントローラを参照し、各PCは最寄りのドメインコントローラを参照するイメージです。

最後にDHCPサーバですが、DHCPとは各コンピュータへ自動で空きIPアドレスを割り振るサービスの事を指します。

ドメイン内のサーバを動的IPアドレスで割り当てる事はまずありませんが、ドメイン内のクライアントPCのIPアドレスは動的に取得する事は多々あります。

そのような場合、ADサーバのDHCP機能を利用すると何かと便利です。

各ネットワークセグメント毎に、スコープを設定し、拠点毎に割り当てるIPアドレスの範囲を設定する事ができます。

クライアントPCはログイン時にDHCPサーバより割り当てられたIPアドレスを取得し、DHCPサーバ側では割り当てたIPアドレスをリースした情報を記録することで、PCへ割り当てたIPアドレス情報を管理することができます。

ADのシステム構築では、その他にもWindows Update を一元管理するためにWSUSサーバを設けたり、内部イントラネットを利用するためにIISを活用したりすることもありますが、あまり盛り込むと本コラムは別の方向に進んでしまうため、この辺りにしようと思います。

そしてこの辺りの設計要素が固まったら、ADサーバの構成も考えていきます。

小規模のクライアントが利用するシステムではADサーバ1台構成というものもありますが、拠点毎にADサーバを立て、2~3台構成とするケースが多いです。

その場合、最初に構築したドメインコントローラをフォレスト内のルートドメインコントローラとし、2台目、3台目に構築したドメインコントローラと同期します。

クライアントPCから見た場合、それぞれ優位性があるかというと、ドメイン内のドメインコントローラは『マルチマスタ構成』といい、どのドメインコントローラが失われてもクライアントPCへ提供するサービスが変わらない構成を取ります。

AD1号機が壊れたら、その機能をAD2号機、3号機が補うイメージです。

ただし、全くドメインコントローラが同じかというと、少し違います。

基本的に、フォレストルートのドメインコントローラはFSMO機能(重要な5つの役割)を持ちます。

FSMO機能を保持するドメインコントローラが壊れた場合、自動でその機能を移管できないため、手動で対応する必要があります。

ここまでまとまりなく書きましたが、今回のコラムでは単にADサーバの構築といっても、システムとして構築する場合にどのような機能を持たせることができるのか少しでもイメージが沸けば幸いです。

次回はいよいよVMwareという仮想ソフトを使いADサーバを構築してみたいと思います。

 


2021年1月10日

題1回 ActiveDirectoryとは

ActiveDirectoryとは通称ADとかDCとか呼ばれることがあります。

正確にはWindowsServerに備わっている機能のことを指し、企業内のユーザ管理やディレクトリ管理などを容易にするために使用されます。

ではADとはどのようなものか身近で考えてみます。

学校や会社で共有PCや、自分用に貸与されたPCがある場合、まずWindowsへログインすると思います。

ただ、ログインするときに自分のプライベート用のPCと違うところがありますね。

そう、ドメインです。ログイン画面の下の方にサインイン先としてドメイン名が記載されていると思います。

これは、使用するPCとユーザがドメインという枠組みの中で管理されている事になります。

自身でローカルにアカウントを作成してないのに、同一ドメイン内のPCであればどのPCにも自分用に作成された同一のユーザでログインできる仕組み、これはActiveDirectoryで構築する事ができます。

では実際にログインすると、自動でデスクトップに業務に必要なアプリケーションのショートカットアイコンが配置されていたり、スタートメニュー内の特定の項目が非表示になっていたり、右クリックからのコンテキストメニューが効かなくなっていたり。

このような制御はドメインコントローラーであるWindowsServerのActiveDirectoryの機能によって提供する事ができます。

次回は実際にADを触ってみる方法をコラムしたいと思います。

 


2020年12月6日

このごろ!

久々の更新です。

この情勢下では月に1度の帰社日もままならず、どの企業も社内のコミュニケーションに苦心しているのではないかと存じます。

活動方向へUPする題材に悶々と悩んでおりましたが、耐え忍ぶこの時期だからこそできる事をしていきたいと思います。

そんな事で、まずはこれからSEを目指す方や、念願のSEになり今後のスキルマップ展望を考えている方へ向けて何かコラムを考えます。

次回はActiveDirectoryについて連載しようと思います。

 


2020年1月4日

テトリスゲーム!

以前、オセロゲームを紹介しましたが今回はテトリスです。

言語は前回に引き続きExcelVBA。弊社新人が研修の一環として作成してくれました!
ブロックの落下や回転はゲーム機で遊ぶ側からすれば当たり前の機能。
でも、これを実装するのはとても大変。
各ブロックのパターン毎の座標を保持し、指定時間単位でY座標を変更し、回転時はX座標をああしてこうして、、、
また、繰り返し処理はうまくロジックを組まないと画面描写が追いつかずフリーズしてしまう。
こんなゲームをVBAで作成出来たときの達成感は半端ないそうですね(作成者より)。

主な機能は以下の通りです。

~機能~
・ネクストエリアへのブロック表示
・左右へのブロック移動
・ctrlキーでのブロック回転

 


2019年11月8日
アルゴリズム(続き)!

先日ご紹介したソートアルゴリズムですが、今回はバケットソートについて書こうと思います。

まず、ソートで最初に思いつくのは「バブルソート」。
これは上から順に上下の大小を比較する処理を、並べ替えが全て終了するまで繰り返すやり方。
あまり難しい考え方を必要としない為、簡単な並べ替えならこれで十分かもしれません。
しかし、データの量により処理回数が膨れ上がる為、要素数の多い場合には適しません。

そこで前回、記録12回としたやり方です。
こちらは「バブルソート」の応用で、一度の比較を上中下と3要素毎に行い、カウントアップも
3づつ行う事で比較回数を減らしたものとなります。

しかし今回は「バケットソート」。
どのようなアルゴリズムかと言いますと、データの最大値分の箱を先に用意し、その要素番号と
一致するデータを順番に格納していくだけとなります(正確にはもっとややこしいみたいですが)。
出力する時は、値の入った要素のみ順番に取り出すだけ。

少し裏ワザみたいな感じで、ん?と思うかもしれませんが、データ最大値分のLoopを行えば
一度に整列データが出来上がるこの手法、処理データの最大値によってはとても有効な手段です。

これは思いつかなかった、、

他にも色々なソートアルゴリズムがあるので、順次研修にも取り入れて行きたいと思います。

2019年9月4日

BBQ!

先日、社内イベントとしてBBQ企画@稲毛海岸公園を実施しました。

昔に比べ今ではすっかり人数も増え、大所帯です♪

幹事メンバー改めて企画・準備ありがとう。
また参加者の皆様、炎天下の中お疲れさまでした!









2019年8月20日

アルゴリズム!

近頃の研修では、ロジカルシンキングを鍛える為にもアルゴリズム問題など取り扱ってます。

if文、for文あたりをマスターし始めた頃合いを見計らい、例えばこんなソートアルゴリズムだったりします。



ただ数の小さい順に並べ替えるだけなのに何気に奥が深い。。
ロジックの組み方次第で並べ替えに要する繰り返し処理回数がだいぶ変わってきます。

今のところ上記10個のデータ並べ替えでは、記録12回。

処理の組み立ては単純に暗記では養えないので、ちょうどよい頭の体操ですね!

 

2019年8月8日

オセロゲーム!

今回は当社の新人が研修中に作成したゲームの紹介です。

ExcelVBA。
開発言語として軽視されがちな言語ですが、実際はどの現場でも必ず役立つ立派な開発言語です。
当社の研修では、まずこのExcelVBAを履修してもらい、他の開発言語への礎となるよう基礎から訓練します。
研修テキストは自社制作したものなので、市販テキストや講座で学ぶものとは違います。
内容量は最小限に。そして現場で役立つ機能やアルゴリズムを中心に、最短に。
また、研修を通して研修テキストに不足等があれば、随時更新してどんどんブラッシュアップします。
これが内製テキストの良いところですね。

さて、本題となりますが、今回のタイトルにある「オセロゲーム」。
たかがオセロ、されどオセロ。
機能紹介致します。

~主な機能~
・人対人、人対COM、COM対COM 対応
・配石可能領域の表示機能(on/off)
・COM思考アルゴリズム強化
└ 配石優先度設定(重み付け)
└ 1手先読み機能(反転枚数評価)
└ COM強さ3段階設定

こんな画面です。


一番強いCOM3レベル、恥ずかしながら私は勝てなかったです。。
今後、将棋ゲームやチェスゲームも面白いかも知れませんね。

 

2019年8月7日

新人教育について

本日は当社の研修担当者目線での新人教育について記事にしようと思います。

今でこそ事務所を構え、新入社員の教育計画もブラッシュアップし、それなりの内容になってきたと自負してますが、研修担当者としては日々試行錯誤の連続でございます。

其の中でも特に大切にしているのが「復習」です。
復習は基本中の基本ですが、なかなかそれは出来ないものです。
今日やった事はその場でわかったつもりでも、少し時間が経つとすぐ忘れます。
復習が出来ずに知識の定着が図られないまま新たな項目を次から次へと学ぶとどうなるか。
分からない部分は置き去りに、体裁だけは研修完了ステータスに。
これではいけない。と思います。

考えた結果、当社では各分野の反復用の課題を用意し、出勤後まずは数時間それを実施する時間を設けてます。
知識の定着&新規項目の学習。
研修が進めば進むほど反復課題は増えていきますが、この方針で成果が出て来てると実感できるシーンに遭遇すると、とても嬉しく思います。

次回は研修中に新人が作成した「オセロゲーム」について紹介したいと思います。

2019年8月6日

活動報告ページ作成!

6月にサイトリニューアル後、幾つもの改良を加えつつやっと活動報告ページを追加しました!
今後は会社の活動内容や教育風景など不定期に発信し、これから新たに東洋の社員となられる方、当社へ興味のある方に対して実際の雰囲気をご報告できればと思います。



まずは初回掲載という事で、当社の研修風景を数枚。