投稿

誤差が許されない小数点を扱う方法

イメージ
坂田です。 インプラスの主力製品"PROKAN"シリーズでは、"生産管理"のコンピューターシステム化を提供します。 その中には当然、あるものを生産するのに必要な原価とか、対価などの"金額"を扱う場面が多く存在します。 その"金額"というものは、計算結果に1円のズレもあってはなりません。 そこで、この記事では"金額"などの誤差が許されない小数点を扱う方法を紹介します。 コンピューターは"0.1"を正確に表現できない! 実は、通常コンピューターが小数を扱う方法では"0.1"という数値を正確に表現できません。 コンピューターは2進数であらゆるデータを表現するということは知ってのとおりであると思いますが、小数も例外ではありません。 "0.1"という数値は、2進数だと無限小数になってしまいます。 では、どうしようもないのか? コンピューターがこのように小数を扱う限り、10進数の有限小数でも正確に表現できない…… しかし、小数を表現できないのでは金額計算ができない……どうしようもないのか? 否、そんなことはありません。 一部の言語では、まさに"金額"のような小数を正確に表現するための型を提供します。 ①Currency型(VB6)など、小数点以下の桁数を決め打ちする型 コンピューターは整数であれば、数値を必ず正確に表現することができます。 この性質を利用し、ある桁数より下の値は小数点以下の値として扱うことで、小数を正確に表現する方法があります。 これを、"固定小数点型"といいます。 ②Decimal型(VB.NET、C#など) こちらは①を拡張したような概念で、小数点以下の桁数に応じて小数点より上、つまり整数部の桁数を減らしていく方法を使います。 こちらも内部的には整数ですから、小数点以下の値を正確に表現することができます。 あとがき コンピューターで正確に表現できない10進数の有限小数がある……という問題はいつも"金額"を扱うアプリの開発者を悩ませてきました。 近年はそれを解決する方法が多く出てきましたが、それでもまだこの"小数がうまく扱えない...

JavaScript豆知識2 window.loadイベントとDOM

イメージ
JavaScriptは読み込まれた時点で上から順に関数を実行していきますが、ページのロードが完了してから実行させたい、という場合は多いかと思います。 特にデザインを調整する関数などは、ページの描写が完了してから実行しないとうまく動かないことも多いです。 そこでよく使われるのが、以下の書き方です。このイベントはDOM、画像、スタイルシートなどのすべての依存するリソースを含めて読み込まれた時に発生します。 window.addEventListener('load',function); 書いてある通りなのですが、これを初めて見た時、僕は「DOM?ジェットストリームアタックをかけるアレか?」と思ってしまいました。DOMの詳細な説明は他を見て頂くとして、この「DOM」について初心者にも分かりやすく解説してみようと思います。 これがエディタで見る「htmlドキュメント」。ブラウザで解釈しなければただの文字列の塊です。 <div class='impClass' onclick='impFunction' style='display: block;'> テキスト </div> そして、DOM要素というのは地の文で表示されているテキスト...「htmlドキュメント」をブラウザが解釈して、人間が読みやすいように整えたオブジェクトです。JavaScriptで言うと、下のコードで取得してくるオブジェクトです。 document.getElementById('impHtmlElement'); つまり、このイベントは、ブラウザがhtmlコードを解釈して、DOMを生成して、他のコンテンツのロードも終わって、デザインを構成し終えた時に発生するのです。なので、html要素の座標や文字色などの情報をJavaScriptで正しく取得することができるのです。 window.addEventListener('load',function);

Pythonを勉強中です(Google Colaboratoryの利用)

イメージ
前回 、「Pythonの開発環境としてWSLを使用している」という話を書いたのですが、現状、WSL環境ではGeForce等のGPUパワーを扱うことができません。 これでは機械学習の速度が上がりませんし、プログラムによってはそもそも動作しない、ということがあります。 (WSL2では可能なようですが、導入がそれほど簡単ではありません) そこで、Googleが提供している「Google Colaboratory」を使うことが考えられます。 「定期的に環境がリセットされてしまう」「データベースが用意されていない」等、使いにくい点もありますが、「ブラウザ上で開発が可能である」という手軽さ、「手軽にGoogleの『強い』マシンを利用できる」点など、利点も多いです。 ある程度形になるまで自前のPC上でプログラムを書き、GPUの処理速度が必要な時にColaboratoryを使用するなど使い分けによって、より効率的な学習ができるのではないかと思います。

"ジャンプスケア"的ダイアログの考察

イメージ
坂田です。 インプラスの一部のプロジェクトでは、データに重大な変更をしそうな時の確認に"ジャンプスケア"的なダイアログを出して本当にその変更をしてもよいのかというダイアログを出します。 この記事では、この"ジャンプスケア"的なダイアログのメリット・デメリットについて考察してみようと思います。 "ジャンプスケア"とは? 主に映画やゲームなどのエンターテイメントにおいて、いきなり驚かすような演出のことを指します。 例示すると、相手の死角に隠れて通りそうな時にいきなり出てくる。これも"ジャンプスケア"の一種と言えます。 一部のプロジェクトでは、このようなダイアログで重大な変更をしようとしていることを知らせます: メリット アプリを初めて使う人は当然どこをどう触ればいいのかわからないものです。 そうなれば、知らないうちに重大な変更をしてしまう可能性もなきにしもあらずです。 重大な変更をしてしまいそうになった時、この"ジャンプスケア"的なダイアログを出すことで、その人はその変更が重大な変更であることを知ります。 それは、重大な変更をする前に慎重にその変更が必要かどうかを考えさせるようになることにつながります。 デメリット いくら重大な変更をするのであっても"ジャンプスケア"ですから、当然アプリを使う人にとっては恐怖を煽るものになります。 そのような恐怖に"耐性"を持つ人であれば問題ないのかもしれませんが、それでも初見だったり、また恐怖に"耐性"を持たない人にとっては最悪の場合、その"ジャンプスケア"をトラウマにアプリ自体を使うことを忌避してしまう可能性があります。 一方、恐怖に"耐性"のある人は重大な変更をする前に"ジャンプスケア"で驚きませんから、軽い気持ちで重大な変更をされてしまう可能性があります。 どういう時に有効か? 重大な変更を主にしている人が恐怖に"耐性"があり、重大な変更をあまりしてほしくない人が恐怖に"耐性"がない時にこの"ジャンプスケア"的なダイアログが有効といえます。 あとがき 私...

四日市でもやっています。

イメージ
 こんにちは。 四日市サテライトの野村です。 私たちは、地域清掃を定期的に行っていますが、四日市サテライトオフィスでもやっています。 やたらと際限なくはできないので、オフィスのある地域に限定してゴミを拾っています。 自分たちのいる場所がゴミだらけより良いと思うし、気分もすっきりしますね。

第199回 良くする会

イメージ
今日の良くする会はオンライン会議です。 2020年の仕事を1つずつを振り返り、成功、失敗要因を洗い出しました。 要因を洗出し分析をするのは、成功を活かし、失敗から改善点を学ぶため! まだまだより良くできる材料はあり、実践できることは沢山ありそうです^^)b

今週のクレド

イメージ
 インプラスには、行動指針のクレドがあります。 そして、強化して意識する内容を2週間毎にローテーションして実践しています。 今週は、「私たちは、誰よりも仕事を楽しみます。」になります。 開発や導入に資料作成など、人それぞれ楽しみは異なりますが、日々の仕事を誰よりも楽しむことを意識して実践してまいります。