fc2ブログ

M

Screenshot_20190412-224759.jpg
スポンサーサイト



2D環境の検証機としてなでしこって最適ね。

  • 2014.05.29 04:00
  • Cat:PC

多頂点内の当たり判定を丸パクリした。
元ネタはこちら
http://www.hiramine.com/programming/graphics/2d_ispointinpolygon.html


実際の適用先は3次元なんだけど、事前にy値で撥ねればy値を無視した計算で対応出来る事も多い。
それに、クォータニオンがちゃんと扱えればベクトルを平べったくすることで3次元空間中の任意ベクトル方向に対して2時限的な当たり判定も取れる。
クォータニオンって便利ですね。

まぁ折角なでしこで検証するために落としたので、公開しておきます。
久しぶりになでしこ書いたので、結構怪しいコードにはなってるけど、動いたのでまぁいいや。



!"GAMERSLIB.nako"を取り込む
!SIZE = 3
!RANGE = 100
!CENTER = 300

母艦のCW=600
母艦のCH=600

mouseをPOINTとして作成

母艦をマウス移動した時は
mouse→x = 母艦のマウスX
mouse→y = 母艦のマウスY


GraphLib_Init( 10, 600 , 600 )

pointsとは配列

●初期化
iで0からSIZE-1まで繰り返す
points[i]をPOINTとして作成
points[i]→x = RANGE*COS(DEG2RAD(i * 360 / SIZE)) + CENTER
points[i]→y = RANGE*SIN(DEG2RAD(i * 360 / SIZE)) + CENTER
ここまで

●DrawPolygon()
iで0からSIZE-1まで繰り返す
もし、回数 > 1ならば、
DrawLine(points[i]→x, points[i]→y, points[i-1]→x, points[i-1]→y, $0, 1)
ここまで
ここまで

DrawLine(points[SIZE-1]→x, points[SIZE-1]→y, points[0]→x, points[0]→y, $0, 1)

初期化
1間
ClearAllScreen()

DrawPolygon()

DrawCircle(mouse→x-2,mouse→y-2,mouse→x+2,mouse→y+2,$ff0000,$ff0000,1)


もし、(isPointInPolygon(mouse,SIZE, points))ならば、
DrawString(10,550,"入ってる",12,$0)
ここまで


ScreenFlip()

FIXFPS(60)
ここまで





●isPointInPolygon(target,size, points)
crossing = 0;
ui = 1
bFlag0x = (target→x <= points[(ui-1)%size]→x);
bFlag0y = (target→y <= points[(ui-1)%size]→y);

// レイの方向は、Xプラス方向
uiで1からsizeまで繰り返す
bFlag1x = (target→x <= points[ui%size]→x);
bFlag1y = (target→y <= points[ui%size]→y);
もし、( bFlag0y != bFlag1y )ならば、
// 線分はレイを横切る可能性あり。
もし、( bFlag0x == bFlag1x )ならば、
// 線分の2端点は対象点に対して両方右か両方左にある
もし、( bFlag0x )ならば、
// 完全に右。⇒線分はレイを横切る
もし、(bFlag0y)ならば、
crossing = crossing - 1
違えば、
crossing = crossing + 1
ここまで
// 上から下にレイを横切るときには、交差回数を1引く、下から上は1足す。
ここまで
違えば、
// レイと交差するかどうか、対象点と同じ高さで、対象点の右で交差するか、左で交差するかを求める。
もし、( target→x <= ( points[(ui-1)%size]→x + (points[ui%size]→x - points[(ui-1)%size]→x) * (target→y - points[(ui-1)%size]→y ) / (points[ui%size]→y - points[(ui-1)%size]→y) ) )ならば、

もし、(bFlag0y)ならば、
crossing = crossing - 1
違えば、
crossing = crossing + 1
ここまで
ここまで
ここまで

ここまで
// 次の判定のために、
bFlag0x = bFlag1x;
bFlag0y = bFlag1y;
ここまで

// クロスカウントがゼロのとき外、ゼロ以外のとき内。
(0 != crossing)で戻る

ベンチャーエンジニアリング

  • 2014.04.10 00:40
  • Cat:PC
最近ふざけすぎたのでたまにはクソ真面目な投稿。
内容は超個人的どうでもいい情報。
ある意味、最もリアル。


しがない社会不適合学生がとあるベンチャー企業でデータベースエンジニアリングをしているというつまらない話をいまからするのでこの文章を読んだ段階で何言ってんだこいつってなった人は今すぐCtrl+QもしくはCommand+Qして一緒に色々なもの消して読まなかったことをなんとなく後悔しながら便利なショートカットに気付いて下さい。


はじまるます。(長くなりそうな予感。)





とあるベンチャーのお話



勝手に引用

前略

自走でPDCA回す(物事を改善する)ことが出来てようやく社会人としての最低ラインに立てるのでは?ということ。
なので皆さんも、まずはこれを目指してみるのが良いかも知れませんね。

中略

もうちょっと具体的に書くと、
 plan    今度〇〇を△△に変えてみようと思うんですよね。
 do    △△を実行
 check   〇〇だったころより△△の方がx%良くなった/悪くなった!
 action  では次は□□にしてみよう!
ということです。

これが出来ると何が良いって、2014年4月1日に
 A君:1ヶ月で100の成果が出せます!
 B君:1ヶ月で100の成果が出せます!PDCA回すことが出来るので、効率が週10%改善できます!
という2人がいたら、1年後の2015年4月1日では、
 A君:1ヶ月で100の成果が出せます!
 B君:1ヶ月で13,000の成果が出せます!
になりますよね。

中略

まずは、何でも良いので現状と行動を変えてみるのが大事ですね。
変えてみたら必ずプラスかマイナスに振れるので、それを検証して、次どうするか考えてとやればPDCAが1回転するのでとても簡単です。

後略



弊社代表の有難いお言葉。
これは嫌味でもなんでもなく、彼は目標にひた走るためにはいい意味で手段を選ばないから。

それはさて置き、はて、エンジニアのPDCAとはなんだろうか?


一般的にエンジニアといえば、

プログラム等の理工学的な技術を駆使して、目的に対して迅速な結果を提供する人材


とでもとりあえず定義しておきます。

企業のエンジニアは常に新しい技術を学び、常に効率を求め、常に成長する事が建前上は必要とされてます。

ここはよろしい。


さて、ここでベンチャー企業となると話はちょっと変わる。

ベンチャー企業において専業なんて言葉はあんまりない。
これはエンジニアとして採用されていても例外ではなく、流石に営業やテレアポはしないにしても、
複数いるエンジニアの誰が欠けても、「じゃあ今日からこれやってもらう」と仕事が回ってくるのは至極普通のこと。

勿論、ベンチャーであるから事業規模にしても、クリティカル性にしてもそこまで高くない。

100万人を超えるユーザーの決済トランザクションのコードをメンテすることも、
300万UU/dayのページを支えるロードバランサとDBの管理をすることもないし、
事業拡大と称して突然南アフリカへのローカライズ版を作らされることも、まぁ無い。


問題は成長しているべき分野がエンジニアリングの外にも在るということだ。

つまり、事業立案や方針決定、改善策や実際に自分が打つ施策まで。

これらを自分自身で打ちたて、上に予定の報告と簡単な議論を交えて、その後即実行。
実行に対して5日以内に何らかの成果物がない場合は、その旨と詳細な原因を究明して報告する。


まあ、ベンチャーなら普通っちゃ普通。





あれ?普通?





言葉で言うのは優しいが、実際は

実践ハイパフォーマンスMySQL 第3版実践ハイパフォーマンスMySQL 第3版
(2013/11/25)
Baron Schwartz、Peter Zaitsev 他

商品詳細を見る


将来的に事業を支えるために、こんな分厚い本を読み干さないといけなかったり、

事業によっては統計学や機械学習についてもある程度の理解が無いといけない。

その上、作業効率化のために導入している共同リポジトリのメンテナンスや
仕様変更に関わるテストコードの実行や(特にうちではまだスタート前の事業でJenkinsを導入してなかったり)
そもそも自分の作業を行う箇所の、現在の10倍の高速化や100倍の負荷処理を実現しないといけない。

負荷に関してもうちょっと突っ込んでしまうと、
サーバー1機で1万人は流石に捌けないので、ロードバランシングを行う。
そのロードバランシングだってチームに専門の人間が居ない限り、最初に言い出した奴がやるルール。
(そして専門の人間などいるはずもない。)

ロードバランシングにはネットワークの知識やデプロイに関するシステム構築、
その他サポートを行うためのツールに関する知識や、トラブル時の復帰処理、
さらに平常時からのステータスチェックに至るまで、様々な知識が必要。
しかも知識だけじゃなくて、実際にアウトプットして実際に動くまでやるから時間はいくらあっても足りない。

しかもC言語規約ようにはプログラマーは神様じゃないので、当然バグも出るし、予期せぬトラブルも起きる。
(ついこないだリリース前のサービスでテスト段階でDBがまとめて全部倒れて無言で真顔になったり。)

学校で教わらなかった(というか大学いってない)
とかいう言い訳に何の効力も無い。(し、そもそも大学ってそういう場所じゃねーから)




正直言って、PDCAとか言ってる暇はない。(甘え?)





ここ1年で身につけた技術は山ほどある。

先月より自分が担当した箇所の処理スピードは250%上がった。

それも去年から比べると1000%にはなってる。

MySQLチューニングも覚えたし、より効率的なクエリーによって600分が10分にもなった。

負荷は分散されるようにもなったり、ルーティングも覚えた。

排他制御も導入されたし、リポジトリ内のツール達には互換性維持のための仕組みも作った。

Rubyは遥かに詳しくなったし、C++の勉強だって怠った覚えはない。

Pythonは使えなくなったけど、JavaScriptもjQueryもある程度は使える。

自分が同時に扱うサーバーの台数も5倍に増えた。

統計学もちょっとだけ触った。



とにかく技術面ではこの1年で山ほど出来るようになった事はある。



なのに何故だろう、PDCAという言葉を使われた瞬間に、自分が行ってきたことの無力感。

自分は人として成長したか?

他人が実感しているほどの成長は自分にはあったか?


出来る事は増えた。
確かに増えた。

でも、必要だったから身につけただけ。
ひたすら時間を掛けたから出来るようになっただけ。
ただそれだけの、当たり前で何の変哲もない自然の摂理。

それは自身の成長でもなんでもなく、

ただ何かが扱えるようになっただけ。

ただ何かがちょっとだけ分かるようになっただけ。

でも、全部ネットに書いてあるし、本読めば誰だってできるよね。





『 竜巻は事業主に成る。
 御社で経験を積みたいので雇え下さい。』


たつまきがこの会社に入った際に、社長に言った言葉を
・10倍改善して
・90%の無駄を省いて
・3倍ほどカッコよくして
表現するとこんな感じ。


たつまきは事業主になりたい。

いや、最近はCTOでも良いかなとは思うけど、とにかくサービスと技術を切り離して考えたくはない。

名前は流石に出せないけど、うちではその思想に間違いは無いと思うし、それは尊い精神だと思う。
そして何よりも社名が物語っている、言えないけど。



たつまきは事業主になりたい。

サービスという観点でPDCAを回せるようになった実感はない。

加えて、意識して技術を身につけたというより、欲しいがままに身につけただけである。

結果として、技術面のPDCA能力は伸びたとは個人的には思うが。



逆に、

事象を分析して、
改善して、
結果を検証して、
次の策を打ち立てる

のはエンジニアリングの基本。
これをPDCAとは言わないほうがいいだろう。



たつまきは事業主になりたい。
勿論目的がその先にあるから。


閑話休題。


ベンチャーのエンジニアは言うほど容易くない。
自分のポジションに対して忠実に責務を果たそうとすれば、はっきり言って大変だ。
勿論それが好きでやってるのだが、エンジニアで始まり、エンジニアに終わらない者にとって、
ベンチャーのエンジニアと言うのは一種の停滞にも近い現象が訪れる。

それは技術面を伸ばす代わりの、サービス周辺に関するサイクルの停滞。


技術に関する成長をしようとする時、精神は別次元に置いて行かれる。
そこから戻ってくる事も、また入っていくのも大変だ。
(だから時々自分が書いたコードがわからなくなる。)



だから、そう。


つまり、クソ簡単な話、逆にこの壁を乗り越えれば次のステップに進める ということだ。



初心を省みさせてくれるうちの社長を心から敬愛している。

そして彼を最も近くで見ている以上は、必ず彼を超えなければならない。

少なくとも、ベンチャーの人間とはそうあるべきだ。



取り留めが無くなったところで、とりあえず終わりにしよう。

今年は事業主になって、来年の今頃には去年の彼に追いつく年度にする。






だって収入なしじゃアパートも借りれないもの。

いま話題のDOGMAをわかりやすく説明した記事【今回もやるやる詐欺】

  • 2014.03.12 19:00
  • Cat:PC
DOGMAってなんだろうか。

DOGMAってミドルウェアだ。

DOGMAってなんだろうか。

DOGMAってライブラリだ。

DOGMAってなんだろうか。

DOGMAってDXライブラリのラッパーだ。

DOGMAってなんだろうか。

DOGMAってオブジェクト指向だ。

DOGMAってなんだろうか。

DOGMAって竜巻の依怙だ。

DOGMAってなんだろうか。

DOGMAだ。







君はJavaを知っているかい?

そうそう、あの

30億のデバイスでバグを生み出す言語のこと。

Exception?そんな子知らないなぁ

あ、でも

確かによく見かけるけど

いっぱいいるから誰が誰だかわからないよ。

え、オブジェクト指向?

なになに、Minecraftのこと?

あ、違う?

DXライブラリ?

闇の言語?

Pythonista?

あー、もう

よくわからないや!




    DOGMAってこんな子 / その1


  • DXライブラリに依存するとかしないとか(DirectX 9なのが悲しい。)

  • ミドルウェア(君が作りたいそれをサポート()するよ)

  • オブジェクト指向(Minecraftみたいな設計思想)

  • MicsoroftのC++11ベース(マイクソロフトのエゴ)




きみきみ、

がっこうでCやったでしょ?

がっこうでJavaもやったでしょ?

きみ、りょうほうかけるよね?

え?どっちがどっちだったかもうわすれた?

じゃあDOGMAかけるよ!




    DOGMAってこんな子 / その2


  • C / C++に影響をうけた(というかそのもの)

  • Javaに影響をうけた(その結果Javaは嫌いになった)

  • Python/ Rubyに影響を受けた(どっちもCで書かれてるね。)

  • 諸君、竜巻はMinecraftが大好きだ。(よろしい、ならば開発だ)




DOGMAってなに語でかかれてるの?

なんだろう、隠語?

はずかしいの?

はずかしいね



    DOGMAってこんな子 / その3


  • 最新のC++11♡で書かれてる

  • オブジェクト指向はJavaMinecraftから

  • 設計思想はRuby(DRY! DRY! 2度も言うなよDRY!)

  • 闇っぽいこと嫌い、いやだ髪が汚れちゃう

  • ラムダかわいいよラムダ




( ^o^) DOGMAのおかげでC/C++がかけるようになりました!

( ^o^) DOGMAのおかげでJavaがかけるようになりました!

( ^o^) DOGMAのおかげでRubyがかけるようになりました!

( ^o^) DOGMAのおかげで彼女ができました!

( ˘⊖˘) 。o(待てよ、なんでDOGMAで彼女できたんだ? )

|たつまきざっき| ┗(☋` )┓三

( ◠‿◠ )☛ 気がついてしまったか、彼女は君のコードの中にいる

▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ




DOGMAが扱える = 3Dゲーム作れる
DOGMAが扱える = C++が書ける
DOGMAが扱える = Javaが書ける
DOGMAが扱える = Rubyが分かる
DOGMAが扱える = 彼女ができる


彼女がいないなら、DOGMAを書けばいいじゃない!(マリー・ナントカネット)

Tatumaki &tatumaki = *DLB.GetNewObject<Tatumaki>("たつまき",ASYNC);
extern 彼女 DOGMA;

if (!tatumaki.has_forgot() && (!tatumaki.has_girl_friend() || true)) {
  ScreenManager::draw(DX_SCREEN_FRONT,[](){
    DxLib::DrawFormatString(0,0,0xffffff,"彼女は竜巻時間の%d月%d日頃に手に入ります。",4,28 );
  });
}

exit(0);

例えば、広告を消すためにブログを書くだとか

  • 2014.03.11 12:00
  • Cat:Other
例えば、ブログの存在を思い出して見るだとか。

例えば、ブログのCSSをテンプレートから自分が書きたくなったりだとか。

例えば、いっそブログは自分で作ったほうが思い通りなんじゃないかだとか。

例えば、Railsで組めば一日でブログもどきは作れるんじゃないかだとか。

例えば、そしたら広告なんてものは表示されないとか考えてみるだとか。

例えば、それをサービスにすればよそよりもっと良いものが作れそうだとか。

例えば、もしかしたら一発あてる機会があるかもしれないだとか。

例えば、同じようなサービスを考えてみるとか。

例えば、Tumblerとか実はそうなんじゃないかだとか。

例えば、いっそTumblerに逃げてみるだとか。

例えば、そうなったとしてもTumblerじゃ技術記事は書けないなだとか。

例えば、技術はあっても時間が無かったりだとか。

例えば、時間は無いわけじゃないだとか。

例えば、無いのは気力だったりだとか。

例えば、気力があった日だとか。

例えば、仕事をしてるだとか。

例えば。


例えば暇な時間があったとして

例えば自由な時間があったとして

例えば気力もあったとして

例えば実行してみれば、

それはそれは素晴らしい物ができるかもしれない

かもしれない。



でも残念、全部例え話。



だって世界はたった1%の実行力で成り立っているから。




いつだって世の中は無い物ねだり。

裏を返せば、無いものに価値はある。

裏を返せば、有るものに価値はない。

99%の不実行力に価値はない。

1%の実行力に価値はある。






明日は1%だけ実行してみよう。

たった世の中の1%だけ。

たった1%だけ。

1%だけ。

だけ。