ブックマーク / tech-blog.optim.co.jp (27)

  • 2024年の今、いかにしてVS2005を捨ててVS2015にする戦いは終わったか、そしてなぜCOMとの苦しい戦いが繰り広げられたか ~再入の悪魔~ - OPTiM TECH BLOG

    概要 Optimal BizのWindows AgentはながらくVisual Studio 2005とVisual Studio 2015を併用してビルドする必要がありました。Visual Studio 2015化対応は2012年のVisual Studio 2012化対応からスタートしていましたが、対応範囲の大きさからモジュールごとにVisual Studio 2015化対応を行ってきました。そして2024年リリースのBiz 9.19.0にてVisual Studio 2015化対応は完了を迎えました。 しかし、埋め込まれたバグの修正にはCOMの理解が不可欠であったため、2020年代に突入した今になって私達はこれまで正面戦争を避けてきたCOMを0から学び直す必要がありました。そしてATLの不思議な挙動やSTAにおける再入との戦いを乗り越え、無事にリリースされました。 はじめに Opti

    2024年の今、いかにしてVS2005を捨ててVS2015にする戦いは終わったか、そしてなぜCOMとの苦しい戦いが繰り広げられたか ~再入の悪魔~ - OPTiM TECH BLOG
  • Rust 1.60を早めに深掘り - OPTiM TECH BLOG

    こんにちは、R&Dチームの齋藤(@aznhe21)です。 新オフィスは広くて快適です。 さて、日4/8(金)にRust 1.60がリリースされました。 この記事ではRust 1.60での変更点を詳しく紹介します。 4/8は釈迦の誕生を祝う花まつりの日 ピックアップ コンパイル時間を計測できるようになった 機能(features)で名前空間付き・弱依存がサポートされた コード網羅率を計測できるようになった [u8]を文字列としてエスケープできるようになった 安定化されたAPIのドキュメント Arc::new_cyclic パニック サンプル Rc::new_cyclic パニック サンプル slice::EscapeAscii <[u8]>::escape_ascii サンプル u8::escape_ascii サンプル Vec::spare_capacity_mut サンプル Maybe

    Rust 1.60を早めに深掘り - OPTiM TECH BLOG
  • Rasa+GiNZAによるお手軽チャットボット作成 - OPTiM TECH BLOG

    R&Dチーム所属の伊藤です。GiNZAについて検索しようとして(地名の)銀座についての結果が出てくると悲しくなります。 今回はチャットボットの作成についてです。前から気になっていたRasaを試してみたので備忘録がてらまとめてみました。 はじめに 準備 ドメインの設定 intents entities slots responses forms actions モデルの設定 language pipeline policies モデルの訓練データ nlu rules stories エンドポイント設定 モデル訓練 チャットボット実行 おわりに はじめに RasaはRasa Technologies GmbHより提供されるオープンソースの対話システム作成フレームワークです。 Pythonで書かれており、自然言語理解のモデル訓練・推論環境や対話管理ツール、データベースやAPIに接続するためのエン

    Rasa+GiNZAによるお手軽チャットボット作成 - OPTiM TECH BLOG
  • Rust 1.51を早めに深掘り - OPTiM TECH BLOG

    こんにちは、R&Dチームの齋藤(@aznhe21)です。書きたい記事がいっぱいあるのに時間が取れません。悲しい。 さて、日、日時間3/26(金)、Rust 1.51がリリースされました。 この記事ではRust 1.51での変更点を詳しく紹介します。 3/26は普通選挙法成立の日 ピックアップ ジェネリクスの引数として定数を使えるようになった 配列要素の所有権を奪いつつイテレート出来るようになった featureの新しい解決機構が使えるようになった 安定化されたAPIのドキュメント Arc::decrement_strong_count 安全性 サンプル Arc::increment_strong_count 安全性 サンプル Once::call_once_force サンプル Peekable::next_if_eq サンプル Peekable::next_if サンプル Seek:

    Rust 1.51を早めに深掘り - OPTiM TECH BLOG
  • Rust 1.50を早めに深掘り - OPTiM TECH BLOG

    こんにちは、R&Dチームの齋藤(@aznhe21)です。 さて、日、日時間2/12(金)、Rust 1.50がリリースされました。 この記事ではRust 1.50での変更点を詳しく紹介します。 2/12はダーウィンの日 *1 *2 ピックアップ Rust財団が誕生 ディレクトリ内容を変更した際のbuild.rsの再実行 boolの値でOptionを返す関数 値域を制限する関数 配列を同じ値で埋める関数 安定化されたAPIのドキュメント bool::then サンプル btree_map::Entry::or_insert_with_key サンプル f32::clamp パニック サンプル f64::clamp パニック サンプル hash_map::Entry::or_insert_with_key サンプル Ord::clamp パニック サンプル RefCell::take パニ

    Rust 1.50を早めに深掘り - OPTiM TECH BLOG
  • OCR前処理としてのOpenCV超解像 - OPTiM TECH BLOG

    R&D チームの徳田(@dakuton)です。 最近は画像とテキストの狭間にいます。 今回記事のまとめ 簡単にまとめると以下のとおりです。 いくつかの超解像(高解像度化)モデルがOpenCV extra modules(opencv_contrib)インストール + コード数行記述で導入可能 超解像に限らず、文字が一定サイズ以上になるような前処理 -> OCR解析 を実施すると、OCR精度改善につながることがある 超解像による見た目の滑らかさに比例して、OCR精度改善につながるわけではない 低計算コストな画像拡大から超解像に変更する恩恵は発生しにくい テスト条件を変えた場合、違った結果になる可能性あり(用いるOCRエンジン、画像の劣化条件、OpenCV未提供の後発モデル利用など) 実験内容 利用するOCRエンジンの実行条件は変えずに、前処理部分のみ変更した場合のOCR精度・速度変化を調べま

    OCR前処理としてのOpenCV超解像 - OPTiM TECH BLOG
  • 【アジャイル系男子】Go Gin Server + OpenAPI Generator 爆速サイクル戦線で生き抜く ⚔⚔ - OPTiM TECH BLOG

    アジャイル系男子の日常 Go Ginとは❔❔ 自動生成手順📚 1. ファイル構成 2.openapi/openapi.yml 3.生成コマンド 4.★うわぁ。できたぁ。★ Go言語に高階関数が見当たらない🔍 Go Generate との出会い 新解体実行手順 ~Go2まで耐え抜く編~ 解らないし高階関数ジェネレーターを適当に作っちゃおう(業務で作ったやつコピペ)🔨🔨 型変換も一行でやりたいよね。作っちゃお(業務で作ったやつコピペ)🔨🔨 1.ファイル構成 2. openapi/model.mustache 3.生成コマンドをもう一度 4. go generate 5.★うわぁ。できたぁ。2★ とりあえず適当なレスポンス返してみる。🌶 main.go go/api_api1.go 実行👼 確認👼👼 Gitで管理する際のテンプレート .gitignore .openapi-g

    【アジャイル系男子】Go Gin Server + OpenAPI Generator 爆速サイクル戦線で生き抜く ⚔⚔ - OPTiM TECH BLOG
  • SwiftUI で Web アプリという可能性 - OPTiM TECH BLOG

    はじめに こんにちは.R&D チームの久保です. 現在 JavaScriptJavaScriptトランスパイルする言語 (TypeScript, 新し目の ECMAScript など) が主流であるフロントエンドの Web アプリケーションフレームワーク界隈ですが,数年前に WebAssembly の実行が主要ブラウザ全てでサポートされて以来,ひそかに他の言語によるフレームワークが増えつつあるのをご存知でしょうか?しかもそれらは,JavaScript でデファクトスタンダードとなりつつある ReactVue.js などと同様,仮想 DOM を実装していたりします. 例としては C# (.NET) の Blazor, Rust の Yew, Go の Vugu, C++asm-dom などがあります.ただ,現時点ではその多くが実験的なプロジェクトであり,今すぐに Jav

    SwiftUI で Web アプリという可能性 - OPTiM TECH BLOG
  • Rust 1.46を早めに深掘り - OPTiM TECH BLOG

    こんにちは、R&Dチームの齋藤(@aznhe21)です。 さて、日、日時間8/28(金)、Rust 1.46がリリースされました。 この記事ではRust 1.46での変更点を詳しく紹介します。 なお、この記事は公式リリースノートをベースに、意訳・編集・追記をしています。 8/28は日テレビが民法で初めてテレビ放映をした日 ピックアップ 定数文脈で一部の制御構文が使えるようになった パニックメッセージに関数呼び出し元の情報を出せるようになった 変更点リスト 言語 コンパイラ ライブラリ 安定化されたAPI Option::zip サンプル vec::Drain::as_slice サンプル Cargo 互換性メモ 関連リンク さいごに ライセンス表記 ピックアップ 個人的に注目する変更点を「ピックアップ」としてまとめました。 全ての変更点を網羅したリストは変更点リストをご覧ください。

    Rust 1.46を早めに深掘り - OPTiM TECH BLOG
  • Production Readyと開発プロセス改善 - OPTiM TECH BLOG

    こんにちは。プラットフォーム技術戦略室SREチームの津田(@grim0h)です。 昨年の6月以来の投稿になります。 今回は、Cloud IoT OSに対して行なっているProduction Ready活動について紹介します。 ( この記事はInfra Study Meetup #3のLTで話した内容を詳細化したものです。LTの資料はこちらになります。) Cloud IoT OS とは Cloud IoT OS について簡単に紹介します。 Cloud IoT OS とは、あらゆる人に直感的なIoTデバイスの制御、データ解析、AI・クラウドサービス連携できるユーザ体験を提供するAI・IoTプラットフォームです。 マイクロサービスアーキテクチャで構成されており、コンテナ化された各サービスをKubernetesで管理しています。 www.optim.cloud Production Ready と

    Production Readyと開発プロセス改善 - OPTiM TECH BLOG
  • RSocket With Spring Boot + Vue.js アプリケーション - OPTiM TECH BLOG

    こんにちは、プラットフォーム事業部 DXユニットの高橋(@yukey1031)です。 先日開催されたOPTiM TECH NIGHT|Webアプリケーション/APIサーバフレームワークを語るLT大会で 「WebFluxでリアクティブなWebAPIのデモ」といった話をさせて頂きましたが、続けてこの記事ではSpring Boot2.2でサポートされたRSocketについてサンプルを交えつつ触れてみたいと思います。 optim.connpass.com マイクロサービスな現場でのAPI開発 以前の記事でも触れているようにオプティムが提供するAI・IoTプラットフォーム Cloud IoT OSは、マイクロサービスアーキテクチャで構成されており、周辺エコシステムの開発においてもマイクロサービスが前提となります。 マイクロサービスの連携には一般的にWebAPIが利用され、RESTful API、Gr

    RSocket With Spring Boot + Vue.js アプリケーション - OPTiM TECH BLOG
  • MQTT Version 3.1.1 をふりかえる - OPTiM TECH BLOG

    ご無沙汰してます。中野です。 相変わらずNATSやNSQやら、AWSやAzureやらと戯れてます。 はじめに IoTの流行りとともに脚光を浴びた通信プロトコルにMQTTと呼ばれるものがあります。 MQTTがIoTのシーンにおいて、HTTPなどの他のプロトコルと比較して、 プロトコル的にどう優れているのか、どう劣っているのか、結局ユースケース次第なのでここでは割愛します。 ただ事実としてあるのは、 Amazon Web Services (AWS) Microsoft Azure Google Cloud Platform (GCP) らが、IoT向けのメッセージブローカーとしてMQTTをサポートした以上、 MQTTというプロトコルの存在を無視はできないということです。 (製品に採用するかどうかは、ユースケース次第なのでまた別の話です。) (MQTTそのものの良し悪しより、それぞれのクラウド

    MQTT Version 3.1.1 をふりかえる - OPTiM TECH BLOG
  • Rustの未来いわゆるFuture - OPTiM TECH BLOG

    Rust 1.36がリリースされ、皆さん待望のFuture関連のAPIが安定化されました。 この記事ではFuture関連APIを巡る過去と未来を紹介します。 Q&A(TL; DR) 長くなってしまったので要約をまとめました。 細かい話は目次以降をご覧ください。 Futureは何のために必要? Futureは非同期処理を抽象化したもので、Rustにおけるあらゆる非同期処理はFutureの上に成り立ちます。 処理をFutureによって隠蔽することで、 ただ非同期に処理するだけでなく処理のパイプライン化、 すなわち単一のスレッドで複数の処理を実行出来るようになります。 futuresクレートではだめなの? async/await構文を入れるために言語コアに取り込まれました。 futures 0.1と合わせて使える? futures 0.3には互換性レイヤーがあり、相互に変換出来るため問題ありませ

    Rustの未来いわゆるFuture - OPTiM TECH BLOG
  • Rust 1.34を早めに深掘り - OPTiM TECH BLOG

    ついにRustの深掘りがシリーズ化してしまいました。R&Dチームの齋藤です。 先週からTwitterを始めてみました(@aznhe21)。 さて、日、日時間4/12(金)にRust 1.34がリリースされました。 この記事ではRust 1.34での変更点を詳しく紹介します。 なお、この記事は公式リリースノートをベースに、意訳・追記をしています。 ピックアップ TryFrom/TryIntoが安定化 iter::from_fn/iter::successorsが追加 usize/isize以外の整数型にもアトミック型が追加 符号付き整数型にもNonZeroが追加 cargoで代替レジストリが使えるようになった 変更点リスト 言語 コンパイラ ライブラリ 安定化されたAPI std & core Any::type_id Error::type_id atomic::Atomic{I8,I

    Rust 1.34を早めに深掘り - OPTiM TECH BLOG
  • Deep Learning等の精度評価において、F値(Dice)とIoU(Jaccard)のどちらを選択するべきか? - OPTiM TECH BLOG

    初めまして、R&Dの加藤です。R&Dでは珍しく中途入社です*1 。業務は農業や医療のプロジェクトでDeep Learningを使った画像解析を主に担当しています*2。 また、終業後は不定期(主に月曜日)に職場の人達と一緒に皇居を走っています。先日開催された多摩川のランニングイベントでは、10kmコースを43分で走れました! 今回の記事では、Deep Learningによらず機械学習や統計の場面でも良く出現するF1 score(F値)とIntersection over Union(IoU)の意味を理解して使い分けることを目標とします*3。 そもそもなぜ精度評価が必要? 用語のおさらい 混同行列について(TP/TN/FP/FN) 評価指標について Precision/Recall/F値(Dice係数)/IoU(Jaccard係数) Precision(適合率) Recall(再現率) F値(

    Deep Learning等の精度評価において、F値(Dice)とIoU(Jaccard)のどちらを選択するべきか? - OPTiM TECH BLOG
  • Deep Learningによる行動認識 - OPTiM TECH BLOG

    はじめまして、OPTiMの久末です。私は現在R&Dチームに所属している新卒1年目のスタッフで、普段は様々な物体の行動を映像から解析する日々を過ごしています。 今回はそんな私が、普段使っている技術に関して、そのバックボーンとなる部分も含めてお話しさせていただければとおもいます。 なお、今回のブログの内容は以前のブログで和田から紹介させていただいた「OPTiM TECH Seminar」で私がお話しさせていただいた内容を元に再構成しています。 そもそもなぜニューラルネットワークが流行ったのか ILSVRC ImageNet 有名な深層学習手法 VGG GoogleNet ResNet 機械学習による行動認識の歴史 行動認識とは 従来の手法 3D-CNN 行動分類データセット 3D-CNNの発展 3D-ResNets 全体的な流れ さいごに そもそもなぜニューラルネットワークが流行ったのか 現在

    Deep Learningによる行動認識 - OPTiM TECH BLOG
  • Rustのカバレッジを極める - OPTiM TECH BLOG

    R&Dチームの齋藤です。最近モニターアームを(個人的に)買ってその便利さに心底満悦しています。 さて、前回はRust言語そのものを紹介しましたが、 今回はRustにおけるユニットテストの書き方とカバレッジの測り方を、 実際に医療機器ソフトウェアの開発の中で体験した内容を使って紹介します。 ユニットテスト テストの書き方 テストを実行する その他 カバレッジを測る カバレッジツールの比較 Tarpaulin cargo-cov cargo-kcov cargo-kcovのインストール カバレッジを計測する コード片を無視する ファイルを無視する カバレッジ結果を標準出力に出す Dockerの中で実行する CIで勝手にカバレッジ さいごに ライセンス表記 ユニットテスト 某宇宙の乗り物が発進するときに設備の故障が無いか、進路上に障害物が無いかをチェックして、 そのあと「システムオールグリーン」

    Rustのカバレッジを極める - OPTiM TECH BLOG
  • 必修言語Rustの他己紹介 - OPTiM TECH BLOG

    あけましておめでとうございます。オプティムの齋藤です。 R&Dに所属している新卒2年目社員で、トマト && 眼底 && SREな仕事の日々を過ごしています。 好きな言語設計者はアンダース・ヘルスバーグです。 昨年末にRust 2018がリリースされ、今年はいよいよRust格的な普及が期待されます。 そこで、リリース当初のRust 1.0から使っている私が、 Rustをよく知らない方向けに良い点、悪い点の双方からRustの紹介をしようと思います。 なお、ここで紹介する内容は執筆時点での最新の言語仕様であるRust 2018を反映しています。 なぜRustなのか? 皆が愛する言語 ネイティブにコンパイルされる マルチプラットフォーム Cとの相互運用 高い安全性 ゼロコスト抽象化 けっこう速い 柔軟な型推論 安全なマクロ ジェネリクス デフォルトで代入がムーブ ドキュメントが豊富である パッ

    必修言語Rustの他己紹介 - OPTiM TECH BLOG
  • API サーバーを Clean Architecture で構築する - OPTiM TECH BLOG

    はじめまして。オプティムのR&Dに所属している新卒2年目の板垣です。 普段は、AI の学習に必要な教師データを作成するためのアノテーションツールの設計・開発・運用を行なっています。 アノテーションツール自体は Web アプリで、クライアント側は ReactTypeScript、サーバー側は Go で実装しています。 さて、先日 Clean Architecture 達人に学ぶソフトウェアの構造と設計 というITエンジニアに読んでほしい!技術書・ビジネス書 大賞2019 の技術書部門ベスト10にノミネートされました。 記事を読もうと思って下さった方の中には、このを読もうと思っている、または、もう読んだという方が結構いらっしゃるのではないでしょうか。 かくいう私も、携わっているソフトウェアのソースコードがひどくて(というより、そのアーキテクチャでは耐えられなくなってきたと言った

    API サーバーを Clean Architecture で構築する - OPTiM TECH BLOG
  • RustのPinチョットワカル - OPTiM TECH BLOG

    こんにちは。 先日、しばらく不動の一位を守ってきたRustVSCodeで使う記事を抜き、 私の書いた非同期プログラミングの記事の記事が一番人気になったと思いきや数日でまた抜き返されて傷心中の、 R&Dチームの齋藤(@aznhe21)です。 さて、Rustの非同期プログラミングで時々Pinを使ったり、コンパイラにUnpinが不足していると怒られたりしませんか? そんな時によく分からずuseしたり別の手段を取ったりしていませんか? 今回、このままではマズいと思ってPinを勉強して完全に理解しましたので、その成果を皆さんと共有したいと思います。 更新履歴 03/10 指摘を受け下記2点を修正しました Unpinを実装しない型もムーブ出来ることへの言及 pin-projectクレートが安全であることによる書き換え 対象読者 この記事は下記全てに当てはまる人を想定して執筆しています。 Rustのト

    RustのPinチョットワカル - OPTiM TECH BLOG