業務連絡 スーファミを福利厚生に追加

朝ジョギングを始めようと起きるも、やっぱ明日からにしようともう一度オフトンに戻る朝を楽しんでいるマエダです。
 
弊社に新たな福利厚生を導入しました。
『スーファミやり放題』
 
正確にいうと
『ニンテンドークラシックミニスーパーファミコンやり放題』
 
以前ゲームボーイを福利厚生に取り入れてみたところ、すっかりキャビネットの肥やしになっているのに無謀にも追加してしまいました。

ゲームボーイを福利厚生に取り入れてみた結果

こちらも誰もやらなくなったファミコン(ニンテンドークラシックミニ ファミリーコンピュータ)と記念撮影しました。
 
誰か僕とエフゼロやってください。
https://www.nintendo.co.jp/clv/
https://www.nintendo.co.jp/clvs/
 
 
 
\\よくわからない福利厚生を受け入れてくれる仲間を募集中です!!//
よくわからない福利厚生を暖かく受け入れてくれるそこのあなた。
弊社はそんな優しさでできています。
募集要項はこちらから。


とび出し注意だぜ!

こんにちわ。
リエです。
 
もうすぐハロウィン。
どんな仮装をしようかワクワクしながら考えている毎日です。
候補は決まったのですが、どれにするか悩ましいところです。
今年はどんな仮装が流行るのでしょうね〜🎃
 
わたしのデスクの上は、事務用具が多いのですが、(筆記用具、ファイル、製本テープ、電卓、測りなどなど・・・)
その中には会社の住所などを書いたメモを挟んでいるメモホルダーがあって、それがとび太くんなんですね。

〜とび太くんとは?〜
滋賀県のゆるキャラ。
地域の子どもを守り続ける「飛び出し人形」
詳しくはこちら→
 
おそらく誰もが1度は目にしたことがあるキャラクターのとび太くん。
 
こちらいただいたものなんですが、社内の誰にもツッコまれずで。。。
自分が使うものなのでいいのですが、なんか誰にも気づかれないってかわいそうだなぁと思っていました。
ちなみにわたしは非常に気に入っております。
メモホルダー便利ですしね!
 
ですが、先日弊社にお客様がいらしたときに、なんと!とび太くんの存在に気づかれてとてもびっくり。
 
そのお客様のお姉様がとび太くんが好きだそうで。
いや〜、とび太くんよかったね(*´∀`*)♡
 
なんか全く中身のない&オチがないブログになってしまいゴメンナサイ。
ちなみにとび太くんの回し者ではありません。
(とび太くんと連呼しまくっているので、このブログで何回名前出てきたんだろうと数えたら8回でした)
 
そしてこのブログのタイトル。
最近何かに「だぜ」とつけるのがマイブームです。
ジョジョの奇妙な物語の映画を見てから完全に影響されています。
社内共有ドキュメントにこっそり「グレートだぜ」と入れてみましたが、誰にも気づかれなかったのでしかたなく自分からネタばらししました。


社内の空気をカイゼンする(物理的に)

先月の暑い盛りのこと、社内で異臭騒ぎが発生しました。
正確には会社の入っているビルで、です。

そのときに、臭いは記録できないからその場に居なかった人にひどさを伝えるのは難しいねという話をしたのですが、調べてみると臭いを測定できるセンサーというものがお手頃な値段で売っていることが分かったので使ってみました。
 

MQ-135

入手したのはMQ-135というガスセンサー。
臭いセンサーというより、特定の気体(アンモニア,二酸化炭素,NOxなど)による空気の汚れ具合を測定するもののようです。
この手のセンサーはそのままだと取扱いが意外と難しいらしいので、モジュール化されたものをAmazonで購入しました。およそ200円。中国から発送されて、届くまで2週間ほど掛かりました。

モジュールの端子は4つ。電源とGNDとデジタルアウトとアナログアウトです。
デジタルアウトは汚染レベルをざっくりと示すだけのようなので、今回はアナログアウトの方を使います。
これを Raspberry Pi に読ませるために、ADコンバーターが必要です。
以前買った実験キットにMCP3002というADコンバーターが含まれていたのでこれを使うことにします。

配線

SPIのお約束通りの配線ですね。
Raspberry Pi2 と MCP3002
* CE0とCS/SHDN
* SCLKとCLK
* MISOとDout
* MOSIとDin

MQ135とMCP3002
* AoutとCH0

raspi-config で SPI を有効にしておきます。

読み取りプログラム

WiringPi2-Python を使って読み取りプログラムを書きます。

#!/usr/bin/env python

import wiringpi2 as wp2
from datetime import datetime

SPI_CH = 0
PIN_BASE=64

wp2.mcp3002Setup(PIN_BASE, SPI_CH)
val = wp2.analogRead(PIN_BASE)
print datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "\t" + str(val)

かなり高レベルなAPIを用意してくれてるので簡単です。注意点は以下の通り。
* CE0 に接続したので、SPI_CH は 0 を指定
* PIN_BASE は 64 以上ならなんでもいい。(63以下だと実行時に怒られる)

測定

身の回りで適当に測定したところ以下のような数値が得られました。
* 普段: 60
* コーヒー: 78
* 息を吐きかける: 159
* コーヒー後の息: 230
* 会社のトイレ: 70

この数値自体にあんまり意味はない(ちゃんと校正してなんらかの変換すれば意味のある数値になるのかもしれませんが)ので、普段の数値60との比較で考えるのが良さそうです。30%以上上昇したら換気を促すメッセージをSlackに投稿するとか。

およそ一日測定した結果をグラフにしてみました。

やはり人が居なくなると数値が下がり、出勤して人が増えてくると上がってくる感じです。0時過ぎの謎の上昇は何が原因でしょうね。

まとめ

それにしてもやっぱり人の吐く息って匂うんですね。
社員一人ずつ測定して大会を開くと面白そうですが、問題も大きそうなので思っただけにしておきました。


ゲーム開発 – 地形生成 アルゴリズム

こんにちは。開発担当のマットです。
 
以前の記事でも言ったことはありますが、ゲームが大好きです。
いろんなのゲームの中でも、とくに街づくりゲームが好きです。
 
街づくりゲームは沢山ありますが、内容はほとんどが似ていて何らかのマップの上で街を作っていきます。
しかし、一度成功すると二度目が面白くないので、毎回違う場所で街づくりをすることがポイントです。
 
そのため、ほとんどの街づくりゲームには、ランダム地形生成の機能が付いています。
なお、街づくりだけではなく、近年は多くのアクション・アドベンチャーゲームにも付くようになりました。
 

おそらく、Minecraftの影響ではないかと思います

 
このランダム地形生成機能に興味を持って調べたので、今回の記事では3つのアルゴリズムを紹介したいと思います。
 
今回紹介します3つのアルゴリズムを使えば、ランダムマップを生成するゲームをより簡単に作ることができると思います。

私のようにゲーム作成に興味をお持ちの方は、ぜひ読んでみてください。

1:フラクタル・アルゴリズム

個人的な意見ですが、フラクタルアルゴリズムは島や海岸の生成に向いているアルゴリズムだと思うので、島を作っていきます。
 
まずはグリッドを想像します。
5×5を使いますが、思いのままに作っても問題ありません。


 
次は、島の大体の形を決めます。
私は、ちょっと丸目の島が欲しいので角のセル(A1,E1,E5,A5)を削ります。


 
各セルの中のランダムな箇所に点(ポイント)を置いて、繋げていきます。


 
少し島の形に近づきましたが、まだ直線が多すぎて不自然です。
次は、各ポイントの間の位置を計算します。(以下で緑の点で表します)

 
それぞれの新しいポイントをランダムに左右上下にずらして、繋げ直すと島がよりギザギザになります。


 
先ほどよりも島の形が見えてきました。
 
このステップを何度か繰り返せば、本当に海岸のような線が出来上がります。
実際に作ったものはこちらです。

2:ダイヤモンド・スクエア・アルゴリズム

ダイヤモンド・スクエア・アルゴリズムはとても簡単で、上記のフラクタル・アルゴリズムのような島づくりには適していると思います。
また、フラクタル・アルゴリズムと違って地形の高度を獲得することができます。
 
前回と同じようにグリッドを作ります。
サイズは 2+1 × 2ⁿ+1 にするのが1番無難なので、このサイズをおススメします。
(つまり、5×5(2²+1 × 2²+1),9×9(2³+1 × 2³+1),1025×1025(2¹⁰+1 × 2¹⁰+1)など)
 
グリッドが出来上がったら、縁のセルの値を全部0にして真ん中のセルの値を1にします。
簡単な5×5のグリッドを例に説明したいと思います。


 
次は真ん中のセルと縁のセルの間のセルの値を計算します。
上記の例では、「真ん中のセルと縁のセルの間のセル」はB3,C2,D3,C4に当てはまります。

もちろん「間」と言ったら、「横縦の間」もありますし、「斜めの間」もあります。
この例では、「縦横の間」を使っていますが、実際に実装するときは両手段を併用するといいと思います。
ちなみに、このアルゴリズムの名前(ダイヤモンド・スクエア)はこの斜め、横縦を因んでいます。

間のセル(B3,C2,D3,C4)に、周囲のセルの数値の中間のランダム数値(もしくは平均値に近いランダム数値)を入れます。
C1が0で、C3が1となっているので、C2は0と1の間のランダム数値となります。

 
そのステップを繰り返し、全てのセルに値が入るまで続けます。
今、B3,C2,D3,C4の値を入れたので、次はB3,C2,D3,C4と縁の間のセルを埋めていきます。(つまりB2,D2,B4,D4)

やり方は色々あります。
例えばB2ですが、C2とA2の間のランダム数値を取ることもできますし、B3とB1の間のランダム数値を取ることもできます。
A2,B1,C2,B3の平均値に近い数値を取ることもできますし、A1,C1,B3,A3の平均値に近い数値を取ることもできます。
実装方法はプログラマーのお好み次第です。


 
最後に、全てのセルが埋まったら、高度の定義を行います。
例えば、0.2以下は海、0.7以上は山、その間は草、など。

 
上記の例はあまり綺麗ではないですが、ちゃんと実装すると以下のような島をランダムで生成できます。

高度値を使って、森林や川も生成することは可能です。

先ほど言った通り、島に適しているアルゴリズムだと思いますが、縁や真ん中の値を0,1ではなくて、ランダムな数値で始めると、山と谷のような結果になります。

3:パーリン・ノイズ・アルゴリズム

ゲームの地形生成では、パーリン・ノイズ・アルゴリズムは1番使用されているかもしれません。

パーリン・ノイズの詳細を説明することは本記事の範囲外となりますが(詳しくはWikipedia)、簡単に説明すると、波の生成アルゴリズムです。

多くのプラットフォームにライブラリーが存在し、使うことによって、ランダム波のノイズを生成することができます。


 
ダイヤモンド・スクエア・アルゴリズムと同じように、海や山の閾値を設定することによって、地形を作成することができます。
以下の地図は上のパーリンノイズをベースにして作成しました。

複数のパーリンノイズマップを重ねると、森林(深緑のエリア)なども生成できます。

まとめ

ゲームを作成するとき、リプレイアビリティ(繰り返し遊べること)は重視すべき要素だと思います。

この記事は街づくりのゲームの前提でアルゴリズムを紹介しましたが、これらのアルゴリズムを使えばRPG用の洞窟や宇宙ゲームの小惑星帯など、多くのエリアを自然に生成することができます。

毎回遊ぶとき、エリアが同じだとリプレイアビリティがなくなりユーザさんは遊ばなくなってしまうので、そうならないように、ぜひ上記の地形アルゴリズムを使って頑張って開発してみてください!


スプラウトへ入社してくれてありがとう

こんにちわ。
リエです。
 
新しいメンバーが増えてはや半年。

平成29年度入社式を執り行いました


入社半年祝ということで、社内のメンバーがみな持っているSHIZQ鶴コップをプレゼントしました。
※SHIZQ鶴コップについて、以前ブログでご紹介したことがありますので、こちらもぜひお読みください(*´∀`*)

神山しずくプロジェクト – SHIZQ


 
このSHIZQ鶴コップは、徳島県神山町の山や水を守る「神山しずくプロジェクト」から生まれたもの。
天然の木目が美しいこのコップは杉で出来ています。
杉なのでとても軽く口当たりのいい飲みくち。

 
サプライズでプレゼントしたのですが、とても驚いていました。
でも喜んでもらえたので、こちらも嬉しい気持ちに(ノ´∀`*)♡
これでみんなおそろいです♪
 
写真に写っているすだちはご厚意でいただいたものです。
ありがたくメンバーといただきました。
本当にありがとうございます。
 
お料理はもちろん(すだちうどん最高)炭酸に入れたりお酒に入れたり調味料に使ったりとなんにでも合うのですが、なにより美味しい♡
匂いもとてもいいので、絞ってる間もとても幸せな気持ちになります。
最近はすだちポン酢を作りました。
3ヶ月寝かせるので、できあがりはちょうどお鍋が美味しい季節に。
3ヶ月後が楽しみです。
 
杉の新たな価値として生まれたこのコップ。
今後も愛用していきたいと思います。
 
神山しずくプロジェクト
http://shizq.jp/
オフィシャルストア
https://shizq.stores.jp/