「デジタコでは2次請け3次請けの管理が難しかった」 ~ ハマキョウレックス様の事例を追加しました 

ODIN 動態管理に新しい事例が追加されました。

株式会社ハマキョウレックス様

https://doutaikanri.com/customer_feedback/2022/03/04/hamakyo_rex/

ハマキョウレックスさんって、一般の方はあまり知らないかもしれませんが、業界ではとっても有名な大きい会社さんなのです。

どのようにご利用いただいているかは、上記のリンクを見て頂けると詳しく書かれていますが、端的に言いますと、

「下請けの会社さんの配送管理にODIN 動態管理がちょうどよかった」

ということです。

運送業界って結構下請け、2次受け、3次受けというのがあります。

確かにそういう場合にデジタコと呼ばれるトラックに取り付ける機械だったり、ガチガチのシステムだったりは、導入がそもそも難しいという問題があるんですよね。

そこで、ODINのようなスマホアプリで管理するものだと、導入がすぐできるというわけです。

 

最近思うんですけど、昔は「スマホGPSで位置を管理する動態管理」というの自体が新しかったんですが、最近は、スマホで位置情報を取るというのは

「もうやってるよ。」

という会社さんが多いですね。

その上で、

・さらに便利に使いたいので今使っているものよりニーズに合ったものを探す(先日紹介したニットクさんなど)

・ハマキョウレックスさんのように2次受け、3次受けさんにも使ってもらいたいというように違う使い方が出てくる

などお客さんのお話が進化していて、2周目に入ったんだな~ と体感しております。

もう、スマホのGPSをトラッキングするだけの時代は終わったということです。

今後は、それをどのように使っていくかというのが各社オリジナリティを出していかないといけないところだと思います、

弊社は、

「スマホGPSを利用して、急な行先の追加や急な配送計画の変更に対応できる配送システム」

を目指しています。

「は?意味がわからん」

とお思いかもしれませんので、どんな例があるのかハマキョウレックスさんの事例にもありますので、抜粋させていただきます。┌o ペコッ


業務中にドライバーから管理者へ連絡するのは難しいので、ODINを活用してドライバーが今どこにいるのかをリアルタイムに把握しています。

そうすることで、「30分で作業が終わるはずの現場にドライバーが1時間ほど滞在している」等の状況を把握して、こちらからアプローチできるようになりました。

あるときにドライバーが納品のために待機していたらそのまま寝てしまったようで、何も連絡がないということがありました。
ODINでドライバーの現在位置を確認して配送先付近にいることがわかり、電話をして納品作業をするように指示を出すことで大事にならずに済みました。


いや、この例を読むだけで大変なお仕事だな、って思いますね…。

物流の仕事にかかわる皆様、深夜・早朝もありますし、運転や納品って相当大変なお仕事ですからね。

改めて、今私たちが便利に暮らしているのも運送・配送のお仕事をされている皆様のおかげだなと感謝します。

上記のような2次受け、3次受けの配送管理をしたい、というニーズがありましたら、こちらからぜひご相談ください。

 

ハマキョウレックス様 ロゴ

運送トラック イメージ

※写真はイメージです。

2021年度はシステムダウンが一度もありませんでした!

弊社の配送業さん向けのシステム、「ODIN リアルタイム配送システム」ですが、なんとなんと…。

2021年度はシステムダウンが一度もありませんでした!!!!

 

(⑉>ᴗ<ノノ゙✩:+✧︎⋆パチパチパチパチパチパチパチパチパチパチパチパチ

いやー、これすごいことなんですよ!

稼働率が100%。

システム関係のお仕事ではない方にとっては

「はぁ?システム稼働率100%って当たり前じゃないの?」

と思われるかもしれませんが、システムっていろいろな問題で、むしろ止まるのが当たり前なんです。

 

…とはいえ、使う皆さんにとっては、止まってしまったらとっても不便ですよね。

弊社のシステムは B to Bで、

「ODINが止まってしまうと仕事にならない」

という方も多くいらっしゃいます。

2年前から弊社は何とか

「システムダウンがあったとしても、数時間以内に抑える」

という点に腐心してきまして、システムの冗長化、死活監視、テスト体制、監視体制の強化に力を入れてきました。

インフラ課というのが弊社にありまして、その皆さんのおかげであります。

ありがとう!

今年度もがんばります。(`・ω・´)

 

全プログラミングキッズ待望のゲームができた!コードで戦うゲーム

時々、思ったことはありませんか?

アニメとかゲームとかの設定でよくある、すごいプログラマーがいて、そのプログラミング力で敵を倒すやつ。やってみたいと…!

ガンダムSEEDみたいにモビルスーツのOSをチャチャッと書き換えて、敵に勝つやつですよ。

「男と生まれたからには誰でも一生のうち一度は夢見る「地上最強の男」」

ってよく聞きますよね(笑)。

まー私は女ですが、強さを決めるってなんかワクワクしますよね。( ˊᵕˋ )

競技プログラミングとかもありますが、

「なんかこう燃えないな~」

と思っていませんでしたか?

なんかもっと、直接バトルっぽいApexっぽいのがやりたいな~ とか!

(·:゚д゚:·)ハァハァ
すみません、中二病全開が過ぎましたね。

それがなんと、そんなゲームができたらしい。

JavaScriptを打ってキャラを操作する対戦ゲーム、Steamで配信 Rustなど計13以上の言語にも対応

https://www.itmedia.co.jp/news/articles/2204/08/news140.html

 

というわけで、早速やってみます。

最初につまづいたのが、

オール英語。

そっか。そりゃそうか。

なので操作方法とか、そもそもどうすればいいのかがわかんなかったところも多くありました。

APIのドキュメントも字が小さい(笑)

しかし、チュートリアルもついているのが優しい!これありがたかった~

自分のチームの部隊をどうやって動作させるか、などはチュートリアルにサンプルコードがあるので、それで大体わかります。

というわけで、早速作ってみました。

私が作ったコードは結局2時間ぐらい取り組んでチュートリアルをつぎはぎしたにすぎません…。

でも、対戦してそこそこ勝てた(笑)

下記の動画で、白いのが私のコマで、違う色が敵さんです。この動画では、2戦して、2戦とも勝てました v( ̄Д ̄)v イエイ (最初の敵さんはピクリとも動かなかったのと、2回目の敵さんは辛勝でしたね(笑))

 

 

これ、動作させている途中にコードを書き換えることはできません。

この動画で動作させているコードはこちら。javascript です。

import {getObjectsByPrototype} from '/game/utils';
import {findInRange} from '/game/utils';
import {Creep} from '/game/prototypes';
import {Flag} from '/arena/prototypes';
import { getTicks } from '/game/utils';
import { ERR_NOT_IN_RANGE, ATTACK, RANGED_ATTACK, HEAL, OK } from '/game/constants';

export function loop() {
    var enemyFlag = getObjectsByPrototype(Flag).find(object => !object.my);
    var myCreeps = getObjectsByPrototype(Creep).filter(object => object.my);
    for(var creep of myCreeps) {

        
        let targets = getObjectsByPrototype(Creep).filter(c => !c.my);

      if(creep.body.some(bodyPart => bodyPart.type == ATTACK)) {
         attack(creep, targets)
      }

      if(creep.body.some(bodyPart => bodyPart.type == RANGED_ATTACK)) {
         rangedAttack(creep, targets)
      }

      if(creep.body.some(bodyPart => bodyPart.type == HEAL)) {
         heal(myCreeps, creep)
      }

      creep.moveTo(enemyFlag);

    }
    console.log('Current tick:', getTicks());
}

function rangedAttack(creep, targets){
   let targetsInRange = findInRange(creep, targets, 3);
   let result
   if (targetsInRange.length >= 3) {
      result = creep.rangedMassAttack();
      console.log('遠隔全体攻撃 結果')
      console.log(result)
   } else if (targetsInRange.length > 0) {
      let result = creep.rangedAttack(targetsInRange[0]);
      console.log('遠隔攻撃 結果')
      console.log(result)
   }
}

function attack(creep, targets){
   let target = creep.findClosestByRange(targets);
   if (target){
      creep.move(target);
      const result = creep.attack(target);
      console.log('攻撃 結果')
      console.log(result)
   }
}

function heal(myCreeps, creep){
   var myDamagedCreeps = myCreeps.filter(i => i.hits < i.hitsMax);
   if(myDamagedCreeps.length > 0) {
      const heal_result = creep.heal(myDamagedCreeps[0])
      if(heal_result == ERR_NOT_IN_RANGE) {
         console.log('遠くてHealできないので近づきます')
         creep.moveTo(myDamagedCreeps[0]);
      }else if(heal_result == OK){
         console.log('Healした')
      }
   }
}

コードの説明を軽くすると、これを、PC内の所定のディレクトリにおいておけば、このゲームが勝手にサーバーにアップロードしてくれて動作するという仕組みみたいです。
なので、勝敗はもうPlayボタンを押したときに決まっているわけですね。

動作させるとタイムフレームが1個ずつ進み、loopという関数の中が実行されます。
console.logが使えて、出力内容は盤面の下に表示されます。

自分の部隊、敵さんの部隊はcreep というオブジェクトで、これの中にまたBody Partというものがあって、それにattack とかranged attack とかなどの属性があるようです。

ちょっとしょぼいコードではありますが、とりあえずやってみたい人の参考になればと思い、載せておきます!

やりこみ要素はもっとあって、例えば陣地の中にある塔からビームを出したり、その塔にエネルギーをチャージしたり(?)などもできるみたいです!

(すみません、時間の都合でチュートリアルの半分しかやってない)

 

Steamで配信中で、2000円ぐらいです。⊂(^-^)⊃

 

いや、でもこれ作った人達すごいわ。

感謝ですね!

 

余談ですが、今日は日曜日なんですけど、PHPerkaigiというPHPのオンラインの勉強会があったり、このゲームやったり、プログラミング三昧です。

それが楽しいんでいいんですけどね!⊂(^-^)⊃