JimdoCafe 福島に参加してきました。

Jimdo』(ジンドゥー)というホームページ(webサイト)をめちゃくちゃ簡単に作成・公開できるツールがあります。

Jimdoの特長として、「無料で使える」「簡単に使える」というところがあげられるのですが、私は『JimdoCafe』(ジンドゥーカフェ)というJimdo/webのエキスパートから直接Jimdoやwebの使いこなし・相談を受けられる拠点が全国各地に存在している「ユーザの支援体制の手厚さ」が一番の特長なのではないかと思います。

今回は、その福島版『JimdoCafe 福島』にお邪魔してきました。

実のところ、Jimdoの存在は知っていたもののアカウントは未登録。
つまり、ユーザではない状態での参加。

そして、今回のお題は「脱!シロウトっぽさシリーズ 第2回 『Jimdoのレイアウトで流行のウェブサイトを作るコツ』

開催案内には、「どなたでも参加いただけます。ホームページを持っていない方でもご参加いただけます」と書いてありましたが、やっぱり現場に行くと「私… 第1回受けていません… というかJimdoのユーザでもないし… 大丈夫かな…」と不安マックスになるんですよね…。
そんな状態で臨んだのですが、講師の株式会社Gazi工房赤井さんの話し出すと一瞬で場が和み、まったりとした雰囲気で勉強会がはじまりました。
私の個人的な意見なのですが、セミナーや勉強会で「まったりとした雰囲気」ってとても大事だと思っています。
講師の方が話している内容が素晴らしくても場が緊張感漂う状態だと、まったく頭に入ってこないんですよね…(^-^;
JimdoCafe 福島では、講師の赤井さんの人柄が会場いっぱいにあふれ出ていて、とてもリラックスして話に集中できました。

さて、勉強会はスライドをもとに話を進めていきます。
このスライドがとても丁寧にわかりやすく作られていて、Jimdoがわからなくてもwebのつくり方を知らなくても、「ああ、なるほど。ああ、そういうの見たことあるある」とスコンと頭に入ってくる構成になっています。
随所にちりばめられた「あるある感」のおかげで自分の経験と照らし合わせながら話を聞くことができ、わかりやすいスライドとあいまって、あたかも以前からJimdoのユーザであったかのように、スムーズにJimdoで「できること」がわかりました。

すごいですねー、Jimdo!
無料で使えるのにクールなデザインが「テンプレート(ひな形)」として用意されているんですよ!
しかも、たくさん!!

そして、このテンプレートに載せたい写真を当て込み、必要な文章を入れ込んでいくだけで、webサイトが完成してしまいます!
webコンテンツ制作のための高価な専用ソフトのインストールも不要ですし、難解な呪文のようなHTMLやCSSなんて一切でてきません!!

勉強会では、テンプレートを構成する各パーツを使う場面などの説明があり、自分が表現したい内容にあわせて、パーツを配置することで簡単に今風の───
いや、「今、まさに流行っているデザイン」のwebサイトができることがわかりました。
用意されたテンプレートをそのまま使っても十二分にスタイリッシュな完成度のwebサイトになりますが、「スタイル」という色や文字サイズなどの細かい設定を調整する機能を使えば、さらに自分流のアレンジもできてしまうという…( ゚Д゚)

伝えたいことさえ決まっていれば…
専門知識ゼロでもまったくいけてしまう、そうJimdoならね!
と、思いました。

さらにJimdoCafe 福島では、Jimdoの効果的な使い方、Jimdoが得意なことだけでなく、苦手なこと、つくるときに「コツ」がいるところ、それを回避するための方法など、いろいろなノウハウも伝授してもらえ、「信用できるサービスだなー」と実感できました。
自分の仕事柄もあるのですが、なんでも「できます、できます」とうたうサービスは、ちょっと信用できないところが…(^-^;
Jimdoでは、「ユーザの声を取り込み、Jimdoのサービス開発者が機能を改善していくので積極的にリクエストをあげてほしい」と説明があったので、このあたりが導入数が増えているポイントなんだろうと納得しました。

繰り返しになってしまうのですが…
以前、Jimdoを見て「こんなものができたら、ウチの商売あがったりだ!!」と怒ったweb制作者の方がいるとかいないとか噂では聞いておりました。
今回、実際にJimdoのサービスを見て、Jimdoを使って作られたwebサイトの完成例を知ると、「こりゃぁ、危機感を持つweb制作者も多いだろうなー」と、納得しました。
だって、かっこいいテンプレートが用意されていて、コードを書くこともなく、画面上でパーツをポチっと選んで、マウスを使ってずるずるっと配置するだけで、webサイトが完成してしまうんですよ?
技術革新の恐ろしさを感じてしまいます。

Jimdoは、無料サービスの『JimdoFree』でもかなりのことができますが、上位有償サービスの『JimdoPro』や『JimdoBusiness』ではさらにその範囲が広げることができるのが良いですね!
また、自分で一通り作ったあと、「あとちょっとなんとかならないかなー」と思ったときに、プロのweb制作者に制作の依頼ができる体制が準備されていることがイイですね(自分がつくったwebサイトをプロが手直しするサービスに『Jimdoリメイク』と銘打っていることに優しさを感じます。)

ひと頃、「会いに行けるアイドル」というのが流行りましたが、JimdoCafeは、さながら「会いに行けるweb制作者」。
今回、JimdoCafeに参加してみて、「会って学んで一緒にwebサイトをつくっていきましょう!」というのが伝わってくるように感じました。

興奮冷めやらぬ状態で勢いだけで書いているので、くどい繰り返しもありますが、そこが自分が「おっ!」と思った部分です(^-^;

「自分のwebサイトを作ってみたいんだけれど…」「webサイトをもうちょっとカッコよくしたいんだけれど…」などなど、webの解説や改善でお悩みでしたら、ぜひお近くのJimdoCafeに足を運んでみてください。
福島・山形の方は、株式会社Gazi工房さんが開催されている『JimdoCafe 福島』『JimdoCafe 山形』を超絶おススメいたします!!

株式会社Gazi工房の原社長、赤井さん大変お世話になり、ありがとうございました。
帰宅後、速攻でJimdoのアカウントを作りました!

カテゴリー: 日々 | タグ: , | コメントする

オープンソースの在庫管理を公開しました

FileMakerを使ったシンプルな在庫管理を作成しました。
できることは3つ、「なにが・いつ・どこからはいったか」「なにが・いつ・どこへでていったか」「なにが・いまいくつあるか」だけです。

ライセンスは、NYSL(http://www.kmonos.net/nysl/)です。もちろん無料
NYSLでの配布となりますので、見た目の改良や機能の修正・追加などのカスタマイズはご自由に、再配布などもご自由にどうぞ。
(NYSLでの著作権表示がわからなかったのでメニュー画面にCopyright表示をしていますが、この部分もご自由に削除・修正いただけます)

追記: 2016/12/04 23:30 Windows版を追加しました。

在庫管理メニュー

ライセンス
NYSL(http://www.kmonos.net/nysl/)
配布物
  • zaikokanri.fmp12 (修正も可能なFileMakerファイル。FileMakerがあればMac/Windowsのどちらでも動きます。 900KB)
  • zaikokanri_runtime_mac.zip (Mac用ランタイム。FileMakerなしでも動きます。FileMaker Pro 15 Advancedで作成。64MB)
  • zaikokanri_runtime_windows.zip (Windows用ランタイム。FileMakerなしでも動きます。FileMaker Pro 14 Advancedで作成。58MB)

FileMaker Pro 15 Advancedで作成。
カスタマイズをおこなう場合は、FileMaker Pro 12以降のバージョンであれば開くことができると思います。

使い方
  • 取引先マスタ、品目カテゴリマスタ、品目マスタに必要なデータを登録します。
  • 在庫一覧画面から、入庫・出庫が発生した品目を選び、在庫詳細画面を表示します。
    在庫詳細画面から入庫または出庫の登録を行います。
    在庫一覧画面
    在庫詳細画面
  • 在庫一覧画面から在庫一覧表をプリンタまたはExcelに出力します。

RIALAB.では、より高機能の在庫管理システムの開発も承っております。
お問い合わせはフォームからお願いいたします。

カテゴリー: Mac, Windows, ソフトウェア, 技術的なメモ, 製品/サービス | タグ: , , , | コメントする

知らなかった!! FileMakerで表示単位を切り替える方法

FileMaker』を使うようになり画面やレポートのレイアウト機能を使っていると、表示単位が「cm」であることに違和感を覚えていました。

というのも、業務用のシステムを構築するときに『Microsoft Access』などWindows上の開発ツールを用いることが多いのですが、それらのツールでは表示単位が「ピクセル」「ドット」「twip」などの概念・呼び名があれど整数で表現され、「1ドット右に」「4ピクセルごとに表示」という感じで私にとってはわかりやすく扱いやすい表現でした。
対して、FileMakerでは小数で表されていて、私にとってはこれが直感的にはわかりにくく扱いづらい表現で、Trial and Error、下手な鉄砲も数打ちゃ当たる方式で調整をしていました。(紙帳票をベースに定規で測りながらレイアウトをするときはとてもやりやすいのだと思います。)
「面倒ならそのくらい調べろよ!」と自分にツッコミを入れたいいところですが、そこ無精者のなので…(^^;)

そして、今日の今日まで「そういうものだろう…」と、慣れるほうを選んできたのですが、今日、気づいてしまいました。

インスペクタの『位置』『サイズ』で単位が表示されている場所ををクリックすると、クリックするたびに表示単位が「cm」「pt」「in」と切り替わります。

スクリーンショット 2016 11 29 0 44 12

また、メニューバーの『表示』メニューから『定規』(ルーラー)にチェックを入れ、定規を表示した状態で定規の縦軸と横軸が交わる場所(画面の左上)に表示されている「cm」などの単位をクリックしても同じように切り替わります。

スクリーンショット 2016 11 29 0 46 34

スクリーンショット 2016 11 29 0 44 24

 

Windows上でAccessやVisual Studioを使って開発をしているいる人にはお馴染みの「グリッド」とその表示単位───グリッドサイズの設定は、FileMakerのインスペクタで『グリッド』を表示し、グリッド間隔とグリッドステップに適当な数値を設定すると格子の大きさが変わります。

スクリーンショット 2016 11 29 1 23 33

このことをFileMakerのオンラインマニュアルを調べてみると『定規とグリッドの使い方』( https://www.filemaker.com/help/15/fmp/ja/index.html#page/FMP_Help/rulers-and-grid.html ) にしっかり書いてありました。
どうやら、とんでもなく無駄な作業をしていたようです。

 

この設定をしてもFileMakerの『グリッドに沿わせる』『ガイドに沿わせる』などの吸着系機能をONにいると、部品の配置に『慣れ』が必要っぽいです。
とはいえ、表示単位を切り替えてポイントで操作を行えるようにすれば整数倍が使えるようになるので、インスペクタの『位置』『サイズ』へ直接値を設定すればWindowsチックに”それっぽい”レイアウトができそうです。

カテゴリー: システム開発, 技術的なメモ | タグ: , , | コメントする

バックアップのこと

緊急地震速報が発表されるような地震が続いています。
大きめの地震が続くと、東日本大震災が起きたときの大失敗を思い出してしまいます。

Screenshot_20161124-062424

東日本大震災が発生したときは、15時少し前だったので普通に仕事をしていてパソコンも電源が入っている状態でした。
その状態で地震の衝撃をくらってしまったので、データを保管していたハードディスクが故障し、仕事で使っている一部データを喪失してしまいました。

もちろんバックアップを取っていたのですが、その取り方が主に「物理的なハードディスクの故障」に備えるための取り方───「2つのハードディスクが同時に壊れる可能性は低い。故障した場合は、正常に動いている方からデータを取り出せばよい」───で、災害のような事態に適しておらず、結果としてデータの喪失を招いてしまいました。

「地震を乗り切った!」と思ったハードディスクも、1週間ぐらい経ってから壊れ始める…
これが痛かったなぁ(;´д`)トホホ

貴重なデータを失う前に、バックアップを取ることをおすすめします!!

バックアップを取る時のヒントをいくつかご紹介。

  • 物理的に離れた場所に取る

全部のバックアップを一つの場所に置いてしまうと、地震や火災、水害といった災害が発生したとき、すべてのバックアップを失ってしまいます。
クラウドストレージ(Microsoftの『OneDrive』、Googleの『Google Drive』、Amazonの『Amazon Drive』、『Dropbox』など )を活用し、メインの保管場所と物理的に離れた場所にバックアップを置くようにすると、同時にデータを喪失することが防げます。

  • メディアの種類を複数にする

ハードディスクは安価に大容量を保管できますが、衝撃や温度湿度に弱いといった弱点もあります。
この弱点を補いあえる、SSD(Solid State Drive。半導体メモリを使った記憶装置)やほかのメディア(SDカードやUSBメモリ、DVDなどの光学メディア、磁気テープなど)を組み合わせてバックアップを取り、データの安全性を高めます。
たとえば、メインのバックアップにハードディスク、予備のバックアップとしてUSBメモリと組み合わせると、震災のようなハードディスクが壊れやすい事態に対しても、衝撃に強いUSBメモリからデータを取り出すことができる可能性が高まります。

  • 複数個のバックアップを取る

管理とメディアの費用を考えなければ、バックアップの本数は多ければ多いほど安全です。
ただ、予算・置き場所にも限界があるので、通常のデータは3つ程度、最重要データはそれ以上の本数のバックアップといった感じで準備すればよいと思います。
バックアップの取り方を少し工夫し、1日前、2日前、3日前…というように『世代管理』を行うようにすると、データを戻せるタイミングが増え、いざその時がきた時にどの時点までさかのぼるか選ぶことができるのでお勧めです(必要な費用も増えます)。

バックアップを取るときは、紛失や盗難に備えて『暗号化』などの対策を施しておくことも必要になります。

バックアップは、通常であれば使うことのないデータなのでそれを取る作業は非常に面倒に思えるのですが、一連の作業を自動で行ってくれるソフトウェアなどもあります。それらを用いて仕組みを作ってしまうと、自動化や習慣化を図ることができ、それほど手間に思わずバックアップを取ることができます。

災害だけでなく気温の低い冬期は、ハードディスクに負荷がかかり、寿命を縮めたり、故障を招いたりしやすくなる傾向があります。(低温時の動作、暖房による温度変化、温度変化にともなう結露が危ないようです。)

データの重要度や種類、量に応じて、必要なバックアップを取りましょう!

壊れたハードディスクからデータを救い出すことも不可能ではないのですが、完全な復旧復元は難しく、できたとしてもかなり高額な費用がかかります。
子供や家族の写真など二度と撮ることができないデータは、バックアップと紙に印刷することをおすすめします。

とりあえず、今回の地震をうけて、プログラマの私にとって最重要データであるソースコード一式のバックアップを、2つのハードディスク、1つのSSD、USBメモリ/SDカード(緊急時の持ち出し用)、そしてクラウドに取りました。
このデータを使うことがないといいなぁー

カテゴリー: 地震関連, 技術的なメモ, 日々 | タグ: , , | コメントする

地震が起きたときの通知

朝方、大きめの地震が起きました。
ガラケーからスマホに変えるとき、「緊急地震速報はどうなるんだろう?」と疑問に思っていたのですが、今回の地震発生時に端末ごとに違いがわかったのでまとめました。

  • Xperia Z5 Compact (Android 6.0 / NTT DoCoMo)の場合

Screenshot_20161122-064410

さすがドコモ!
ガラケーのときと同じように通知がされてきました。

通知領域に見慣れないアイコンがあったので、チェックしてみると…
『緊急省電力モード』への移行を促す画面が表示されました。

Screenshot_20161122-064504

『緊急省電力モード』へ移行する(有効にする)と、再起動がはじまります。

再起動後は、メニュー画面などが電力を消費しにくいシンプルな表示となり、使えるアプリも制約されるようです。

Screenshot_20161122-080328

東日本大震災のときは広範囲で停電が発生し、先がどうなるかわからないなか、バッテリーの節約をしていた記憶があります。
自動的に移行を促す通知がされるのは便利ですね。
(Xperia Z5 Compactの前に使っていたXperia ZL2にもこの機能が備わっていました。)

『緊急省電力モード』は、電源ボタンの長押しで表示されるメニュー、設定画面の「バッテリー」(Android 6.0)から切り替えることができます。

Screenshot_20161122-080541

「緊急省電力モード」をタップすると、モードを有効化をするためのダイアログが表示されます。

詳しくはソニーモバイルのwebサイト「災害などの緊急時にバッテリーを長持ちさせるには?』( http://www.sonymobile.co.jp/myxperia/howtoxperia/basic/function27.html )に詳しく書かれています。

製品のマニュアルもDoCoMoのwebサイトからダウンロードできます。

MVNO回線では緊急地震速報が通知されるのか?

  • iPhone SE (iOS 10.1.1 / UQ Mobile)の場合

緊急速報として通知がきました。
Yahoo!の防災速報のほうが早かったのはご愛敬ということで(^-^;

IMG_1459

  • KATANA 02 (Windows 10 Mobile / FREETEL)の場合

なにも通知がきていないようです。

wp_ss_20161122_0001

通知がこない!?Σ(゚д゚lll)

マイクロソフトのwebサイトで調べてみると『緊急通知』( https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn757560(v=vs.85).aspx )に記述がありました。

日本で販売されるデバイスでは、パートナーは、通信事業者のネットワークでサポートされている場合、Earthquake & Tsunami Warning System (ETWS) を有効にすることができます。

OSとして機能は実装されているけれど、端末と契約しているキャリア(通信事業者)が対応していないとダメなようです。

では、「キャリアでは通知サービスがあるのか?」とFREETELのwebサイト(『緊急地震速報に対応している端末はありますか。』)を調べてみると…

Q: 緊急地震速報に対応している端末はありますか。

A: 対応している端末はございません。
ご自身で緊急地震速報通知アプリなどをインストールしていただきご利用ください。

と書いてありました。

工エエェェ(´д`)ェェエエ工

Windows 10 Mobileユーザ、FREETLユーザの方は、いざというときに備えて、なんらかの対策を講じておいた方がよさそうです。

カテゴリー: 地震関連, 技術的なメモ, 日々 | タグ: , , , , | コメントする

ヤマト運輸 送り状発行ソフトB2 (Ver. 6)の引っ越し

パソコンの入れ替えにともない、ヤマト運輸の送り状発行ソフト『B2』 (Ver. 6.xx)を引っ越しした際のメモです。

B2は移行手順がややこしく、すぐにサポートセンターに連絡しろ的なメッセージが表示されてしまうB2ですが、手元にB2を使える環境(通常、現在使用中のパソコン)があれば以下の手順を踏むことでサポートセンターへの連絡なしに移行作業を行えます。
作業を開始する前に、ヤマト運輸の送り状発行ソフトを利用するためのユーザIDとパスワードを確認しておいた方がスムーズに作業を進められます。

古いパソコン(現在使用中のパソコン)での作業

  1. B2を起動します。
  2. メインメニューの「システム管理」ボタンを押します。
  3. システム管理メニューの「データバックアップ/リロード」ボタンを押します。
  4. 「バックアップ」ボタンを押します。
  5. バックアップのフォルダ指定ダイアログが表示されたら、バックアップファイルを保存する場所を指定します。
    (通常、USBメモリや外付けのハードディスクなどを指定します)
  6. フォルダ指定ダイアログのOKボタンを押すと、バックアップが開始されます。
    そのまま完了を待ちます。
  7. バックアップが完了したら、メインメニューまで戻ります。
  8. メインメニューの「再ダウンロード許可設定」を押します。
  9. 現在ログインしているユーザの情報や警告が表示されます。
  10. 「再ダウンロード」を押します。
  11. メインメニューに戻り、B2を終了します。

※データのバックアップについては、ヤマト運輸が提供するオンラインマニュアル「パソコンが壊れた時の為にデータをバックアップしたい」が参考になります。

新しいパソコンでの作業

  1. ヤマト運輸のB2のダウンロードサイト ( http://b2start.jp/b2pro/service?_T=aa01 )にアクセスします。
  2. 規約内容を読み、「規約に同意する」ボタンを押します。
  3. ユーザIDとパスワードを入力し、「確認」ボタンを押します。
  4. 「ダウンロード」ボタンを押すと、B2インストーラのダウンロードがはじまります。
  5. B2のインストーラを起動し、B2をインストールします。
    ※新しいパソコンがWindows 10の場合は、「ヤマト運輸 送り状発行ソフトB2 (Ver. 6)をWindows 10にインストールする方法」をご覧ください。
  6. B2を起動し、初回起動時に実行される「初期設定ウィザード」で必要な情報を設定します。
    「1日あたりの予定出荷個数」は利用状況に応じて、「プリンタ設定」は新しいパソコンのプリンタ環境に応じて設定します。
    「データ移行」については、「データ移行しない」グループの「新規インストール」をチェックします。
    「動作モード」と「データ保持期間」については、利用状況利用ポリシーにもとづいて設定します。
    ※ヤマト運輸が提供するオンラインマニュアル「初回起動時の設定について」が参考になります。
  7. B2が起動しメインメニューが表示されるのを待ちます。
    (B2の自動更新が実行される場合があります)
  8. メインメニューの「システム管理」ボタンを押します。
  9. システム管理メニューの「データバックアップ/リロード」ボタンを押します。
  10. 「リロード」ボタンを押します。
  11. リロード元のファイル指定ダイアログが表示されたら、古いパソコンでバックアップしたファイルを指定します。
  12. ファイル指定ダイアログの「開く」ボタンを押すと、確認ダイアログが表示され「はい」ボタンを押すと、リロードが開始されます。
    そのまま完了を待ちます。
  13. リロードが完了したら、B2を終了し、B2を再度立ち上げます。

※バックアップのリロードについては、ヤマト運輸が提供するオンラインマニュアル「バックアップしたデータをリロード(復元)したい」が参考になります。

何度かユーザIDがロックされた状態に遭遇し、今日もまたロック状態に突入…!?というところでB2のサポートセンターに電話をしたのですが、その際「いますぐ解除するか、それとも別のタイミングで作業を行いたいか?」と尋ねられ、別のタイミングで…と答えた結果、自分で移行をするための手順を教えてもらいました。

「古い環境でB2のロック状態を解除し新しい環境でB2にログインすると、古い環境のB2は使えなくなる」とされていますが、今日試した範囲だと、データの移行に失敗している箇所があった(外付けのHDDのファイルシステムに問題が起きた)ので古い環境に戻ったら、古い環境のB2でもログインできてしまったんですよね。
気のせいということにします(^-^;

カテゴリー: Windows, 技術的なメモ, 日々 | 1件のコメント

ヤマト運輸 送り状発行ソフトB2 (Ver. 6)をWindows 10にインストールする方法

ヤマト運輸の送り状発行ソフト『B2』 (Ver. 6.xx)をWindows 10にインストールした際のメモです。

※B2環境の移行を行いたい場合は、「ヤマト運輸 送り状発行ソフトB2 (Ver. 6)の引っ越し」をご覧ください。(サポートセンターに連絡することなく移行するための手順をまとめました。)

ヤマト運輸のwebサイトからダウンロードしたインストーラをWindows 10で実行すると、次のようなダイアログが表示され、その先の手順に進むことができません。
(B2 Ver. 7の場合、Windows 10を含むWindows 8/8.1以降のWindowsにインストールできるようです。)

image

以下の設定を行うことで、Windows 10にインストールすることができるようになります。

  1. ダウンロードしたB2のインストーラ(B2Setup.exe)を右クリックする。
  2. 右クリックメニューより「プロパティ」を選択し、ダイアログを開く。
  3. ダイアログの「互換性」タブを開く。
  4. 「互換モードでこのプログラムを実行する」をチェックする。image
  5. ドロップダウンリストより「Windows 7」を選択する。
  6. OKボタンを押し、ダイアログを閉じる。
  7. B2のインストーラをダブルクリックし、インストール実行。

途中、Windowsの互換性に関する警告が表示されますが、そのまま続行するとインストール自体は完了します。(B2に含まれるSQL Server 2005などが導入される時点で表示されるようです。)

インストール完了後、B2を起動すると、初回起動時の設定ウィザードが始まります。

カテゴリー: Windows, 技術的なメモ, 日々 | 1件のコメント

SONY SmartBand 2 SWR12で集めた心拍数データをJava APIで取得する

SONYのSmartBand 2 SWR12で収集した心拍数データを、APIを使って自分のプログラムに取り込む方法を実装してみました。

まず、SONYはウェアラブルデバイスで収集した情報をLifelogというアプリで簡単に見ることができるようになっています。
最近のSONYは仕様をオープンにする傾向があり、LifelogもLifelog APIというAPI経由で蓄積したデータに簡単にアクセスできるようになっています。

しかし、ここから先、「どうしてここまでやっているのに、これができないんだ!?」というソニー仕様の残念なところが顔を出してきます。

Lifelog APIから扱えるデータの種類は限定されます。
スマホのLifelogアプリで見えているデータのうち、ごくごく一部のデータしかLifelog APIでは扱うことができません。
極端に言えば、Lifelog APIから取れるデータは、「寝てるか起きているか程度しか取れない」と言っても差支えがないと思います。

残りはどこから持ってくれば良いのかというと、Google Fitを使えということらしいです。
Use SmartBand 2 sensor data for innovative Android and iOS applications』あたりを見ると、投げやり感が半端ないです。

Google Fitを使えばよいことはわかったのですが、SWR12で集めたデータをGoogle Fitから具体的にどのように持ってくれば良いのか、SonyにもGoogleにも十分な資料がないのですよね…。
ネット上の情報を検索しても、見つかるサンプルがAndroid専用のものだったり、端折って書かれているクラスのFQCNがわからなかったりと、一筋縄ではいかないようです。

実行前に準備するもの

  • SONY SmartBand2 SWR12
  • スマホ (今回はAndroid、Xperia Z5 Compactを使用)
  • スマホアプリ Lifelog / SmartBand2 (Android)
  • スマホアプリ Google Fit (Android)
  • Googleのアカウント
  • SWR12とスマホをペアリングし、Lifelogアプリからデータが閲覧できる状態まで設定します。

    Lifelogアプリから見られるようになっても、Google Fitにデータは送られていません。
    Google Fitでもデータが見られるようにするためには、SmartBand 2アプリの設定を行う必要があります。

    Screenshot_20161113-132549

    アプリの設定を開き、「Google Fit」をタップします。

    Screenshot_20161113-132556

    設定画面のスイッチをONに設定します。

    これで、Google Fitにもデータが送られるようになります。
    と言いたいところですが、実際にはバックグラウンドで勝手に送信されることなく、Google Fitのアプリを起動したタイミングでデータが送信されているっぽいです。

    この設定作業が、心拍数データを自前のプログラムで扱うための最大のキーポイントです!!

    Googleの設定

  • OAuth 2.0のクライアントID
  • Google Fit APIの有効化
  • Googleのサービスを使うための認証情報が必要になります。
    認証情報は、GoogleのAPI Consoleから作成でき、「OAuth クライアントID」形式で作成します。
    認証情報の作成に成功したら、クライアントIDとクライアントシークレットをJSON形式でダウンロードします。

    API ConsoleからAPIの有効化を行います。
    API Console左側から「ライブラリ」を選択するとAPI/サービスの一覧が表示されるので、「Fitness API」を選択(見つからない場合は検索すればOKです)。
    「▶有効にする」をクリックすれば、APIが有効化されます。

    プログラムの準備

    必要なライブラリは、以下の2つです。

  • API Client Library for Java (https://github.com/google/google-api-java-client)
  • Fitness Client Library for Java ( https://developers.google.com/api-client-library/java/apis/fitness/v1 )
  • ライブラリに同梱されている説明に基づきJava SEで実行するために必要なJARファイルのみを抽出して使用しています。

    実行環境は、Java SE 8u111/Windows 10 Pro 1607の組み合わせです。
    特に変わったこともしていないので、Java SE 8よりも前のバージョン、Windows以外のプラットフォームでも問題なく動くと思います。

    GoogleのAPI Consoleより取得しダウンロードしたJSON形式の認証情報をJavaのクラスパスから参照できる場所に配置し実行をします。
    ブラウザが起動しGoogleの認証が実行がはじまります。(一度許可を与えると認証情報がファイルに保存され、有効期間内は認証画面の表示なく実行されます)
    認証画面の「許可」ボタンを押すと、最近24時間分くらいの心拍数データの取得を試み、成功すると標準出力(コンソール)に値が一覧表示されます。

    必要なもの:

    Java SE Development Kit 8 あればEclipseなどのIDE環境

    ダウンロード:

    GoogleFitAPITest.zip

    ライセンス:

    NYSL

    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.security.GeneralSecurityException;
    import java.time.OffsetDateTime;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.client.util.DateTime;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.fitness.Fitness;
    import com.google.api.services.fitness.Fitness.Users;
    import com.google.api.services.fitness.Fitness.Users.DataSources;
    import com.google.api.services.fitness.Fitness.Users.DataSources.Datasets;
    import com.google.api.services.fitness.FitnessScopes;
    import com.google.api.services.fitness.model.DataPoint;
    import com.google.api.services.fitness.model.DataSource;
    import com.google.api.services.fitness.model.ListDataSourcesResponse;
    import com.google.api.services.fitness.model.Value;
    
    /**
     * 	Google Fit APIで心拍データを取得するサンプルプログラム<br>
     * 
     *	<ul>
     * 		<li>SONY SmartBand 2 SWR12を用いて心拍データの取得を行うとする場合、
     * 		SmartBand 2アプリの設定でGoogleFitをONに設定すること。</li>
     * 
     * 		<li>Google API Consoleで認証情報(OAuth 2.0 クライアントID)の取得を行うこと。<br>
     * 			また、認証情報はJSON形式でダウンロードし、Javaの実行環境から見える適当な位置に配置すること。</li>
     * 
     * 		<li>Google API Manager/API ConsoleでFitness APIを有効化しておくこと。</li>
     *	</ul>
     * 
     * 	<dl>
     * 		<dt>必要なライブラリ:</dt>
     * 		<dd>API Client Library for Java	( https://github.com/google/google-api-java-client )</dd>
     * 		<dd>Fitness Client Library for Java ( https://developers.google.com/api-client-library/java/apis/fitness/v1 )</dd>
     *	</dl>
     *
     *	<br>
     * 	<dl>
     * 		<dt>Lisense:</dt>
     * 		<dd>This software is distributed under the license of NYSL.<br>
     * 			( http://www.kmonos.net/nysl/ )</dd>
     * 	</dl>
     * 
     * @author makoto
     *
     */
    public class GoogleFitAPITest {
    
    	/**
    	 * テストの実行
    	 * 
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		try {
    			
    			GoogleFitAPITest test = new GoogleFitAPITest();
    			Credential credential = test.authorize();
    			test.build(credential);
    			
    			List<DataSource>sourceList = test.getDataSources();
    			List<DataSource>heartRateSourceList = test.filter(sourceList, HEART_RATE_BPM); 
    			
    			for (DataSource source:heartRateSourceList) {
    				
    				OffsetDateTime end = OffsetDateTime.now();
    				OffsetDateTime start = end.minusDays(1);
    				
    				test.showData(source.getDataStreamId(), start, end);
    			}
    			
    		} catch (IOException | GeneralSecurityException e) {
    			e.printStackTrace();
    		}
    
    	}
        
    	/**
    	 * Google Fitのパブリックデータタイプで定義された心拍数
    	 */
    	private static final String HEART_RATE_BPM = "com.google.heart_rate.bpm";
    	
    	/**
    	 * Google FitのユーザID
    	 */
    	private static final String USER_ID = "me";
    	
    	/**
    	 * スレッドセーフなHTTPトランスポート
    	 */
    	private HttpTransport httpTransport;
    	/**
    	 * JSONを扱うためのファクトリ
    	 */
    	private JsonFactory jsonFactory;
    	
    	/**
    	 * Google Fitサービスのインスタンス 
    	 */
    	private Fitness fitness;
    	
    	/**
    	 *	GoogleのOAuth 2.0認証情報の格納先<br>
    	 *	《メモ》
    	 *		OSユーザのホームディレクトリ直下にディレクトリ「sony_sbr12_auth」が作成される
    	 */
    	private File AUTH_STORE_PATH = new File(System.getProperty("user.home"), "sony_sbr12_auth");
    	
    	
    	
    	/**
    	 * コンストラクタ
    	 * 
    	 * @throws IOException
    	 * @throws GeneralSecurityException
    	 */
    	private GoogleFitAPITest() throws IOException, GeneralSecurityException {
    		
    		httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    		jsonFactory = JacksonFactory.getDefaultInstance();
    	}
    	
    	/**
    	 * OAuth 2.0認証の実行<br>
    	 * 
    	 * @return
    	 * @throws IOException
    	 * @throws GeneralSecurityException
    	 */
    	private Credential authorize() throws IOException, GeneralSecurityException {
    		
    		// Google API Consoleから取得したClient ID/Client Secretを読み込む
    		InputStream in = GoogleFitAPITest.class.getResourceAsStream("/client_id.json");
    		GoogleClientSecrets secrets = GoogleClientSecrets.load(jsonFactory, new InputStreamReader(in));
    		
    		// GoogleのOAuth 2.0認証用のFlowを生成
    		// 認証する権限は、Google Fitのすべての項目
    		// 認証した結果はファイルに保存
    		GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, jsonFactory, secrets,
    				FitnessScopes.all())
    				.setDataStoreFactory(new FileDataStoreFactory(AUTH_STORE_PATH))
    				.build();
    		
    		// 認証を行っていない、または無効な場合、ブラウザが立ち上がり認証を求められる
    		//	《メモ》
    		//	非GUI環境では実行できないようだ
    		Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
    		
    		return credential; 
    	}
    	
    	/**
    	 * Google Fitサービスのインスタンス生成
    	 * 
    	 * @param credential	OAuth 2.0認証情報
    	 * @throws IOException
    	 */
    	private void build(Credential credential) throws IOException {
    		
    		// 《メモ》
    		// 最低限のパラメータでもアクセスが可能
    		// 読み込みしか行っていないためか、Application Nameも不要だった
    		fitness = new Fitness.Builder(httpTransport, jsonFactory, credential)
    				.build();
    	}
    
    	/**
    	 * Google Fitに登録されているデータソースの取得
    	 * 
    	 * @return	
    	 * @throws IOException
    	 */
    	private List<DataSource> getDataSources() throws IOException {
    		
    		DataSources sources = fitness.users().dataSources();
    		Users.DataSources.List l = sources.list(USER_ID);
    		ListDataSourcesResponse list = l.execute();
    		
    		return list.getDataSource();
    		
    	}
    	
    	/**
    	 * データソースのコレクションから指定したデータタイプに一致するリストの抽出
    	 * 
    	 * @param sourceList	Google Fitから取得したデータソース
    	 * @param dataType	データタイプ名(例: com.google.heart_rate.bpm)
    	 * @return
    	 */
    	private List<DataSource>filter(List<DataSource>sourceList, String dataType) {
    		
    		List<DataSource>l = new ArrayList<>();
    		
    		for (DataSource source:sourceList) {
    			if (source.getDataType().getName().equals(dataType)) {
    				l.add(source);
    			}
    		}
    		
    		return l;
    	}
    	
    	/**
    	 * 	指定データソース・指定期間のデータを取得し、標準出力に表示する
    	 * 
    	 * @param dataSourceId	データソースID
    	 * @param start	開始日時
    	 * @param end	終了日時
    	 * @throws IOException
    	 */
    	private void showData(String dataSourceId, OffsetDateTime start, OffsetDateTime end) throws IOException {
    		
    		// 開始日時・終了日時をナノ秒表記に変換
    		String startText = String.valueOf(toNanos(start));
    		String endText = String.valueOf(toNanos(end));
    		// 開始日時・終了日時を組み合わせたものをデータセットIDとする
    		String datasetId = startText + "-" + endText;
    
    		System.out.println("<BOD:\t data-source-id[" + dataSourceId + "], dataset-id[" + datasetId + "]>");
    		
    		// Google Fitに問い合わせ
    		Datasets.Get cmd = fitness.users().dataSources().datasets().get(USER_ID, dataSourceId, datasetId);
    		com.google.api.services.fitness.model.Dataset dataset = cmd.execute();
    		
    		// 取得したデータを一覧表示
    		for (DataPoint dp:dataset.getPoint()) {
    			// ナノ秒をミリ秒に変換
    			DateTime dt = new DateTime(toMilliseconds(dp.getStartTimeNanos()));
    			// 有効なデータが存在しな場合は、ダミーデータを生成
    			Value v = (dp.getValue().size() == 0) ? new Value() : dp.getValue().get(0);
    			
    			System.out.println(dt + "=>" + v.getFpVal());
    		}
    		
    		System.out.println("<EOD:\t data-source-id[" + dataSourceId + "], dataset-id[" + datasetId + "]>");
    	}
    	
    	/**
    	 * 	OffsetDateTimeをナノ秒表現に変換
    	 * 
    	 * @param time
    	 * @return
    	 */
    	private static long toNanos(OffsetDateTime time) {
    		return (time.toEpochSecond() * 1000000000L) + time.getNano();
    	}
    	
    	/**
    	 * 	ナノ秒をミリ秒に変換
    	 * 
    	 * @param nanos
    	 * @return
    	 */
    	private static long toMilliseconds(long nanos) {
    		return nanos / 1000000L;
    	}
    }
    
    

    プログラムの実行結果

    image

    今回、心拍数データが取れるところまではできましたが、Lifelogアプリにはストレス状態などの情報も表示されています。
    アプリからみると過去分に遡及して見ることが可能なので、どこかにこれらのデータが格納されていることは間違いないと思います。
    次は、これらのデータをどうにかして取られないか試してみようと思います。

    2017/05/25追記

    client_id.jsonの配置場所について問い合わせをいただきました。
    client_id.jsonは、下図のようにソースフォルダの直下に配置しています。

    hr_eclipse

    カテゴリー: Java, コードスニペット, 技術的なメモ | タグ: , , , , , , , | コメントする

    Excelのアクティブプリンタをプログラムで設定する方法

    Excelのアクティブプリンタをプログラムで設定できるようにしようとしたときのメモです。

    最初は、どの環境でも「Microsoft XPS Document Writer」をアクティブプリンタに切り替えて処理を行えるようにしたかっただけなのですが、なにやら面倒なことになってしまい、途中で「INIファイルで設定をできるようにすればよかったかなー」と思ったものの、いちおう最後まで仕上げることができました。


    Windows 8/8.1以降のOSで、WMIを使いプリンタのポート名を取得しようとすると「PORTPROMPT:」と返ってきて、実際のポート名がわからないことがあります。

    WMI経由でプリンタ情報を表示するプログラム:

    ' This software is distributed under the license of NYSL.
    ' ( http://www.kmonos.net/nysl/ )
    
        Public Sub PrintPrinterInfo()
    
            ' WMIにプリンタ情報(Win32_Printer)を問い合わせる
            Dim mos = New System.Management.ManagementObjectSearcher("select * from Win32_Printer")
    
            ' 取得した結果を一覧表示する
            For Each mo As Management.ManagementObject In mos.Get
                Debug.Print(mo.Item("Name") & "=>" & mo.Item("PortName"))
            Next
    
            mos.Dispose()
    
        End Sub
    
    

    上記プログラムの実行結果:

    Send To OneNote 2013=>nul:
    Microsoft XPS Document Writer=>PORTPROMPT:
    Microsoft Print to PDF=>PORTPROMPT:
    Fax=>SHRFAX:
    

    「Microsoft XPS Document Writer」「Microsoft Print to PDF」のポート名が、「PORTPROMPT:」になっています。

    この情報をもとに「《プリンタ名》 on 《ポート名》」という形式を組み立て、たとえばExcel VBAのApplication.ActivePrinterプロパティに設定しようとすると、設定が反映されなかったり、エラーが発生したりして期待通りに動かないことがあります。
    (資料によってはポート名が省略できる旨が記載されているものもありますが、プリンタによってはポート名まで指定しないと設定が完了しないようです。)
    どうやら、Application.ActivePrinterプロパティでは、実際のポート名を設定しないとダメみたいです。

    そこで、実際のポート名を取得するルーチンを作ってみました。

    このルーチンを呼び出すと、プリンタ名とポート名をレジストリから取得しTupleに格納、Listに詰めて返します。

    レジストリからでプリンタ・ポート情報を取得するプログラム:

    ' This software is distributed under the license of NYSL
    ' ( http://www.kmonos.net/nysl/ )
    
        ''' 
        ''' 登録されているプリンタとポートの一覧を取得する
        ''' 
        ''' 最初の要素にプリンタの名前、2番目の要素にポートの名前を格納したTupleのリスト
        Public Function GetPrinterAndPortList() As List(Of Tuple(Of String, String))
    
            Dim l As New List(Of Tuple(Of String, String))
    
            ' HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devicesからプリンタとポートの一覧を取得
            Dim rkDevices As Microsoft.Win32.RegistryKey =
                Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices", False)
    
            ' サブキーが見つからない場合、空のListを返し終了
            If rkDevices Is Nothing Then
                Return l
            End If
    
            ' 取得したサブキーから名前(プリンタ名)を順に走査し、レジストリ値を取得する
            For Each name In rkDevices.GetValueNames
                Dim value As String = rkDevices.GetValue(name)
                ' レジストリ値を区切り文字(",")で分割、2番目の要素がポート名
                Dim tokens = value.Split(",")
                ' タプルを作成し、リストに詰める
                l.Add(New Tuple(Of String, String)(name, tokens(1)))
            Next
    
            Return l
    
        End Function
    

    取得した情報から適当なプリンタ名とポート番号を組み合わせて、「《プリンタ名》 on 《ポート名》」形式に整形し、Application.ActivePrinterプロパティに設定したところ、期待した通りの動作をするようになりました。

    カテゴリー: Windows, コードスニペット, 技術的なメモ | タグ: , , , | コメントする

    コンピュータシステムの暦のこと

    天皇陛下の生前退位について議論がはじまりました。

    政府、平成30年譲位を視野…特例法を軸に検討(読売新聞) – Yahoo!ニュース

    政府は、現在の天皇陛下に限って退位を可能にするため、皇室典範の特例法制定を軸に検 – Yahoo!ニュース(読売新聞)

    出典: http://headlines.yahoo.co.jp/hl?a=20161017-00050157-yom-pol

    政府の方針は特例法での譲位を検討しているようですが、報道されている内容を見る限りでは「平成30年」に今上陛下が退位し皇太子殿下が即位する流れになりそうです。

    システム開発的には、皇太子殿下が即位をした日をもって発生すると見込まれる改元。─── 現在の『平成』という元号から新しい元号に変わることが、システムに影響を与える可能性がありそうだと危惧しています。

    日本のコンピュータシステムにおいて日付の扱いは少し特異で「西暦」と「和暦」の2つの暦を扱います。
    たとえば、データの入力や表記(印字)は「和暦」で、データの保管は「西暦」で、処理では必要に応じて「西暦で入力されたデータを和暦で表示する場合…」「和暦で入力されたデータを西暦で保管する場合…」といった変換処理を行っています。
    この処理を「和暦・西暦変換」や「和暦変換」(主に表記の変換)、「元号変換」(主に”年”の変換)と呼びます。

    改元が発生した場合、この変換処理が正しく行われるか確認を行う必要があります。
    また、不具合を発見した場合システムの修正作業を行う必要も生じます。

    和暦・西暦変換処理は、大きくわけて3つのパターンで実装されています。

    1. 元号マスタで変換をしている
      システムの中に「元号マスタ」と呼ばれる「この元号は何年何月何日から何年何月何日までである」といった定義を行っているシステムがあります。
      (「マスタ」 とは、「台帳」と呼ばれることもある、大元のデータを記したファイルまたはデータベースのことです。)

      たとえば、下表のような感じです。

      元号 開始日 終了日
      昭和 1926/12/25 1989/01/07
      平成 1989/01/08

      システムがこの方法で元号変換を行っている場合、改元の日が確定した段階で、現在の「平成」の終了日を設定し、元号マスタに新しいデータ(レコード)を追加するだけで改元対応が完了します。

      システムの機能として設定画面が用意されているか、あるいは技術者を呼んで設定を行う必要があるのかを確認しましょう。

    2. ライブラリで変換をしている
      プログラミング言語や開発環境が提供しているライブラリ(便利なプログラムの集合体)に含まれる変換ルーチンを利用し、処理を行っているシステムがあります。
      一般的に、そのライブラリを供給しているソフトウェアベンダ(開発・販売元)が、新しい元号に対応した修正版プログラムが提供されることが見込まれます。

      ただし、下記のような場合は注意が必要です。

      • ソフトウェアのサポート期間(契約)が終了している
      • ソフトウェアを開発したベンダ(メーカー)が倒産や合併などで存在しない

      古いWindows、あるいはAccessやExcelといったOfficeを、基盤またはシステムの一部として組み込んでいる場合、修正版のプログラムが提供される可能性はほとんどないと思われます。
      また、修正版プログラムが提供される場合でも、修正版の提供時期によっては自社のシステム・業務に影響が出る可能性があります。
      提供された修正版が自社のシステムに適合するか事前に確認を行っておく必要もあります。

      自社のシステムを構築した業者に、対応予定を確認をしましょう。

    3. 独自の変換ルーチン(プログラム)で変換をしている
      元号マスタやライブラリに依存せず、すべてを自前のプログラムで処理しているケースもあります。
      日付は、8桁の数値として見ることもできる(例: “2016/10/18” → 20161018)ので、単純な条件判定文の集合体で処理をすることも可能です。
      ライブラリが充実していなかった比較的古い時期に実装されたプログラムでは、 このような実装を行っているケースがあります。

      if (YYYYMMDD >= 19261225 && YYYYMMDD <= 19890107) {
      // 昭和の処理
      } else if (YYYYMMDD >= 19890108) {
      // 平成の処理
      } else {
      // 未知の元号なのでエラー処理
      }
      
      // 処理前提: 昭和より前のデータは入ってこない。入ってきたら破綻。
      if (YYYYMMDD <= 19890107) {
      // 昭和の処理
      } else {
      // 平成の処理
      }
      

      この場合、人によってプログラムの書き方がまちまちで、「元号ごとに日付の範囲をきちんと書く人」や「昭和とそれ以外で分けてしまう人」などがシステムの中でごちゃごちゃになって使われていることがよく見られます。
      また、システムの中でどのくらい独自の変換ルーチンを使用・依存している箇所が存在するのか、修正した場合どのような影響が発生するのか、すべて調査を行った上で修正を行う必要があります。

      「比較的古い時期に実装されたプログラム」と前述しましたが…
      実はコレ、割と最近書かれたJavaScriptでもときどき見かけます。「うちは去年作ったシステムだから関係ないな」とせず、一度確認されることをおすすめします。

      自社のシステムを構築した業者に、対応を相談しましょう。

    4. その他
      比較的最近構築されたシステムでは、入力・表記は和暦。データの格納は西暦というパターンがほとんどだと思います。
      しかし、まれに昭和期に構築されたシステムで、「昭和nn年」といった昭和形式でデータの格納をしているシステムがあります。
      このようなシステムの場合、既に平成対応(「nn-63」で昭和を平成に変換)が施されている可能性が高く、新しい元号にどのような修正を施せばよいのか、過去に蓄積されたデータ変換を行う必要があるのか、十分な調査と対策の検討を行う必要があります。
      平成30年に見込まれる改元を平成対応と同様の対応で乗り切った場合、「昭和100年問題」と呼ばれる問題をはらんでいる可能性が非常に高く、2025年時点でシステム上でデータの取り扱いができなくなる可能性があります。

      システムの再構築を含めた対応計画を立てる必要があります。

    いずれのパターンでも、事前に「改元が発生したときにどのような問題が起きるのか」調査を行い、必要な対策を講じておく必要があります。
    コンピュータのプログラムは自然治癒的に治る可能性はありませんし、環境の変化に合わせて自動的にプログラムが適合をしていく機能も備わっていないので、技術者が介入した対応は不可欠です。

    また、システムの修正作業は、簡単に短時間で終わるものではなく、調査・調査・調査・調査・修正・確認・確認・確認・確認・確認・確認…と、非常に時間がかかる作業です。
    2000年問題のときも同様の現象が起きましたが、これから先、改元の時期が確定していくにつれ、調査・対応作業の需要が急増し、技術者の確保が難しくなることが予想されます。
    パターン3とパターン4については、調査・修正量が多くなること、そのプログラム・技術を理解し修正できる技術者の確保が不可欠であることの2点から、特に対策に時間を要します。

    2000年問題のように「コンピュータシステムがある日突然まったく動かなくなる(可能性がある)」といった致命的な問題は起きにくいと思いますが、なんらかの影響・問題が起きてからの対応では遅いことも…。
    できるだけ早い時期から調査と対応の計画をおすすめします。

    RIALAB.では、「プログラマと連絡が取れなくなった」「開発した会社がなくなってしまった」システムの改造・改修なども承っております。詳しくは、サービス・製品をご覧ください。

    カテゴリー: RIALAB., システム開発, 日々, 製品/サービス | タグ: , , , | コメントする