iPhone のカメラで複数の QR を同時スキャン、結果を AR 表示するアプリのサンプル

本投稿は TECOTEC Advent Calendar 2021 の5日目の記事です。

こんにちは。テコテックVPoEの八木です。 プログラミングが好きで夜な夜な色々と作ってますが、今回はその中から "iPhone のカメラで複数の QR を同時スキャン、結果を AR 表示するアプリのサンプル" をご紹介します。

まずは動画を。

f:id:teco_yagi:20211204153445g:plain

これ、海外の有料系SDKの一部がまあまあ以前から機能を有していたりするのですが、今回はピュアな Apple のフレームワークのみで実現しようという趣旨です。 その場合でも、AVFoundation のみで実現する方法と、高度なコンピュータービジョンアルゴリズムを備える Vision Framework を組み合わせる方法がありますが、今回は基本の AVFoundation のみで実現する方法をご紹介します。 (Vision についても色々と試しているので、機会があればまた)

さて、早速中身の解説です。

続きを読む

Hello Vim Script World !!

本投稿は TECOTEC Advent Calendar 2021 の4日目の記事です。

こんにちは!CISOの木村です。 😀

気がつけばテコテックで5年目のアドベントカレンダー🎄ですが
毎年この時期になると「HelloWorldでもアドベントカレンダーを書いてみてね🖊」と言っているので今回はやろうと後回しだった VimScript でやってみようと思います。

まだ書いたことがないよ😟という方も
この機会に「そういえば・・・あれ気になってたな💡」を進めてもらえたら最高です👍!!

さてエディタですが

エディタって色々ありますが 私はVimを使ってます。
最近 Version up された秀丸も愛用してましたがWindows限定なのと、気が付いたら秀丸上で:wqを入れまくってたのでVim中心になってます。

もちろん
それ以外は認めない😡!!

ではなくVSCode とか IDE も、もちろん使いますがだいたいは Vim を使ってます。

まれにメモ帳を使ってる人も見かけますが

  • 矩形選択

  • 正規表現での検索、置換

  • grep

とかできるのが便利で好きなのと

🍭フォントとか・・・
🍫色合いとか・・・
となると沼の始まりです・・・🎃

というわけでVimで使えるVimScriptですが

正直、あまりカスタマイズして使ってないので自作する必要はほぼないっちゃないのですが
やったことあるやったことないじゃ大きく違うので
今回は✨定型文をコマンドで出す!✨を目標にやってみようと思います。

使わない命令文もたくさんありますが「動かせる🏃」って大事な一歩なので
Vimから :Hello で Hello Vim Script World と出るようにしてみたいと思います。
とりあえず、ささっと調べて🦍書いてみたプログラミングがこちら

let mess = "Hello Vim Script World"  
echo mess  

保存(:w hello.vim)して実行します。
vimから

:source hello.vim  

で、すぐできたわ😆!
実行😉!!

・・・と思ったら
Vimのコンソール?に表示されてました。。。

んー・・・。。。    😥

画面に入力させたかったので思ったのと違い再チャレンジ!💨

次はこちら

let mess = "Hello Vim Script World"  
call setline('.', mess);  

勢い良く実行したら見事エラーに・・・
セミコロンがいらない文法でした。。。(リアルタイムをお届けしております)

落ち着いてセミコロンをxで消して無事修正完了
無事にエディタ(バッファ)に出力されました!

めでたし!めでたし!🎉

しかし! これで終わらないのがアドベントカレンダー!!🎀
次は・・・

コマンドで動くようにする

:source hello.vim   

と毎回やるのは面倒なのと、普段使うときはファイルパスも変わるので

:hello  

でいけるようにしたい!

まぁ エイリアスでもできそうだけど・・・
プラグインとして設置してみる! 📦

プラグインの置き場所を探す

vimで

:source &packpath  

のコマンドで出てくるフォルダの扱いやすいところに配置します。
今回はこちら(~/.vim)へ配置しますがだいたいの人はホームディレクトリの.vimやvimfilesとかでよさそうです。

説明はちょっと割愛して動くこと優先でフォルダを作ります。

プラグインの置き場所を作る

mkdir -p ~/.vim/pack/plugins/start/hello.vim/autoload    
mkdir -p ~/.vim/pack/plugins/start/hello.vim/plugin  

autload フォルダの中

先程の実装を関数(hello#execute)にして保存します。

function! hello#execute(start, end) abort  
  let mess = 'Hello Vim Script World'  
  call setline('.', mess)  
endfunction  

plugin フォルダの中

書く内容は知らないコマンドが多いと思いますが今回はおまじないだと思って気にせずこのように記載して保存します。

let s:save_cpo = &cpo  
set cpo&vim  
  
scriptencoding utf-8  
  
if exists('g:loaded_hello')  
finish  
endif  
  
let g:loaded_hello = 1  
  
" ここの3つ目のHelloの最初の1文字のhは大文字にする  
command! -range Hello call hello#execute(<line1>, <line2>)  
  
let &cpo = s:save_cpo  
unlet s:save_cpo  

そして難しいことは考えずにvimを再起動するか新しくvimを起動して

:Hello  

を実行すると無事成功しました。 😊

ここまで動かすことができれば拡張したり、この設定はなんなんだろう? とかその先へ進んでいけると思います!

また、初めてだけど興味あるよという方は
🦍ゴリラさんのvim解説がとても分かりやすいので
是非、検索(ゴリラ vim)してみてご覧ください!!
(今回の:helloでも、通常利用でも参考にさせてもらっています)

それでは!👋😃

↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓

テコテックはリモートしている社員や中途入社の方も多いのでvimの普及率は調べられていませんが是覧HPも御覧ください。

↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓👨‍💻↓👩‍💻↓

www.tecotec.co.jp

LightGBMの機械学習モデル予測シミュレーンアプリをFlaskで構築し爆速でHerokuに公開する

本投稿は TECOTEC Advent Calendar 2021 の2日目の記事です。

お世話になっております。テコテックCTOの川人でございます。本ブログには二回目の登場(一回目はこちら)となります。
業務ではめっきりコードを書かなくなりました(= 優秀な皆様にお任せしております)ので、プライベートで開発したものについて記事を書こうと思います。

作ったもの

今回は、機械学習を用いてCOVIDのリスクを予測できるシミュレータを開発しました。実際に公開されており、URLは下記となります。

https://risk-model.herokuapp.com/covid

きっかけは、研究者の知人から論文に引用するためにシミュレータを作りたい、と相談を受けたことで、論文自体も公開されていますので、興味がおありの方はご一読ください。

Prediction of in-hospital mortality with machine learning for COVID-19 patients treated with steroid and remdesivir

続きを読む

LINE Blockchain Developers APIをつかってみた

本投稿は TECOTEC Advent Calendar 2021 の1日目の記事です。

どうも、次世代デジタル基盤開発事業部(旧ブロックチェーン事業部)の土田です。

アドベントカレンダー1日目はLINE Blockchainについてのハンズオン的な記事にしてみます。お手柔らかに。

概要

ローカルPC上にLINE Blockchain Developers SDKを利用したAPIを作り、LINE Blockchain Developers APIの使い方を学びつつ、ブラウザ上でLINE BITMAX WALLETにアクセスして操作したNFTを確認していきます。

続きを読む

日本のNFT事例20選【第二弾】

f:id:teco_roppongi:20211018112446p:plain こんにちは。どうも。次世代デジタル基盤開発事業部の六本木です。

2021年はNFT元年といっても過言ではないほど様々なNFTニュースがありました。

前回はNFTまとめシリーズ第一弾としてNFTマーケットプレイス18選をご紹介しました。

tec.tecotec.co.jp

今回はNFTまとめシリーズ第二弾として、「国内NFT事例20選」と題してお送りいたします。

続きを読む

TruffleSuiteで始めるDapps開発3

どうも、次世代デジタル基盤開発事業部(旧ブロックチェーン事業部)の土田です。

前回、GanacheのGUIアプリ上でコントラクトやイベントログが確認出来ませんでした。今回はこちらの対応を行っていきます。

tec.tecotec.co.jp

今回のゴール

GanacheのGUIアプリからコントラクトやイベントログを確認します。

現状の確認

ここまで手順を追っていただいた方はGUIからCONTRACTSタブとEVENTSタブを確認しても、何も表示されていないはずです。 f:id:teco_tsuchida:20210930091906p:plain f:id:teco_tsuchida:20210930091937p:plain

こちらを表示させたいと思います。

Truffle Projectsの追加

設定を開きます。 f:id:teco_tsuchida:20210930091957p:plain

WORKSPACEタブのTRUFFLE PROJECTSからtruffle-config.jsを指定します。本来はこれで完了です。 f:id:teco_tsuchida:20210930092010p:plain (wslには\\wsl$\{ディストリビューション}でファイルへアクセスできます。)

しかし、このまま再起動したらロード画面が延々と続くはずです。もしそのような状態になった場合は、一度GUIを落として再度設定を開き、REMOVE PROJECTで指定したファイルを削除して下さい。

なぜ上手く行かないのか?

原因はNode側の問題だと言われていますが、続報が無いのでなんともし難いですね・・・。

github.com

解決策

ビルドされたコントラクトが分かれば問題ないので、それらを指定するようにします。

ビルドされたコントラクトですが、truffle-config.jscontracts_build_directoryの指定先にあるはずです。

const path = require("path");

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  contracts_build_directory: path.join(__dirname, "client/src/contracts"),
  networks: {
    development: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*"
    }
  }
};

これらをローカルにコピーします。パスはご自身の環境に合わせて読み替えて下さい。

f:id:teco_tsuchida:20210930092310p:plain

次に、truffle-config.jsをコピーします。networks等の設定は残っていても問題ないとは思いますが、気になる方はcontracts_build_directoryのみの設定ファイルを別途作成すると良いと思います。

f:id:teco_tsuchida:20210930092333p:plain

準備ができたら、GUIから再度ADD PROJECTをします。

f:id:teco_tsuchida:20210930092344p:plain

あとは再起動すれば完了です。

確認

すでにコントラクトをデプロイや実行していれば、そのままそれらが確認出来るはずです。

まずはCONTRACTSタブを確認しましょう。前回コンパイル&デプロイしたコントラクトが並んでいるはずです。 f:id:teco_tsuchida:20210930092418p:plain

EVENTSタブでは、前回実行したイベントログが確認できます。 f:id:teco_tsuchida:20210930092426p:plain

一覧のイベントログをクリックすると、より詳細なログが確認できます。今回は前回生成したゾンビが確認できると思います。 f:id:teco_tsuchida:20210930092439p:plain

終わり

今回はここまでとなります。

これでGUI上でかんたんにコントラクトやイベントが確認できるようになりました!作業効率UP間違いなしですね!
(本当はwsl2上のプロジェクトを直接指定できれば良いのですが・・・。)

次回はコントラクト開発やフロントエンド開発を進めていきたいと思います。
ここまでご覧いただき、ありがとうございました。

www.tecotec.co.jp

その他参考

github.com

www.trufflesuite.com