2018年1月3日水曜日

2018 - 新年のご挨拶

あけましておめでとうございます。
旧年中は大変お世話になりました。今年もよろしくお願いいたします。

毎年後半になるとブログの更新が滞っている状況が続いています。なんとか今年は続けようと思っていますが、既に年内の予定が詰まっていまして今年も多忙な一年となりそうです。

それでは、新年にあたってのご挨拶をさせて頂きます。


イノベーティブ・ソリューションズは4期目を迎えていますが、昨年後半にようやく今まで蒔いてきた種が芽を出し始めました。特に業務プロセス標準化コンサルティングに関しては、メーカー、物流会社を中心にご用命を頂きました。そして実際にコンサルティングを進める中で、我々の想定していたコンセプト「人口減少化社会における業務生産性を如何にして向上させるか?」と「標準化業務プロセスの重要性」が間違っていなかったことを実感しました。

昨今、IT業界では「AI」「IoT」「ロボティクス」等、新たな技術(あるいはバズワード)が飛び交っています。しかし、ただ単にこれらの技術を業務に組み込んだだけでは効果が出せるものでは無いと我々は考えます。

例えて言うと「交通」があげられます。交通の中でも特に自動車に関しては「AI」「IoT」「ロボティクス」の進出が激しい分野です。自動ブレーキや自動パーキング、そして自動運転が可能な車まで発売されています。(自動運転にはいくつかのレベルがありますが・・)
しかし、これらの自動化を可能にする大事な前提条件があるのですが判りますか?

それは「交通ルール」です。例えば、車は左側通行。信号は赤が止まれ、青が進んでよい。曲がるときにはその方向へウインカーを出す。その他諸々・・運転免許を持っている人であれば当たり前の事ですが、実際に免許を取るには自動車学校に数ヶ月通わないといけない事を考えると、そのルールの量たるや大変なものです。

誰もがそのルールに従って行動するからこそ事故を防ぎスムーズな交通が実現できますが、ルールを無視する形で自動運転の車を導入したとしても、(その車自身はスムーズに走れるかもしれませんが)交通としては成り立ちませんよね。この年末年始にTVCMとして良く目にしたのが「高速道路は逆走禁止です」というものでした。これはもちろん人(運転手)に向けたものですが、自動運転にも当てはまる事です。

同様に企業の業務に自動化ツールを導入する場合でも、業務プロセスが標準化されていない(属人的な、個人々が勝手に仕事をしている)状態では、部分最適ばかりで全体最適がされず企業としてのパフォーマンスが上がりません。

実はこの話は「AI」「IoT」「ロボティクス」に限った話では無く、「ソフトウェア開発」においても「業務に自動化ツールを導入する」という意味では、全く同じであると我々は考えています。「ソフトウェア開発」それも「業務システム開発」を生業としてる方々はどれだけの人が「業務プロセスを標準化した上でのシステム開発」をしていますでしょうか?「 ユーザーが出してきた要件をそのまま忠実に実現するのかSIerの責任です」なんて思ってはいないでしょうか?

我々はコンサルティングも事業の柱であるという事からも、ただ単に要求されたものを作るのでは無く、本当にユーザーにとって役立つものを作るためには何をしていかなければいけないか? を常に考えています。


閑話休題・・久しぶりにブログを書くと普段考えている事が次から次へと出てきて話がまとまりませんね。


さて、今年の活動目標です。
1.業務プロセス標準化ソリューション
「業務プロセス標準化コンサルティング」が事業として芽が出てきましたので、これを更に一歩進め、「業務プロセス標準化ソリューション」のラインナップを計り業務プロセス標準化自体をPDCAサイクルとして定着させる事を取り組んでいきます。

2.スマートデバイスアプリ+IoTデバイスのインテグレーション
GeneXusを使ってスムーズにスマートデバイスアプリを開発できる事が我々の強みです。昨年は外付けのレーザースキャナーを接続し、ハンディーターミナルのように倉庫業務で通用するレベルのアプリケーションを開発したり、OCRライブラリを組み込んでスマホ用OCRアプリを開発したりと、他のGeneXusベンダーとは一線を画す取り組みをしてきましたが、今年は更にIoTデバイスと連携するスマホアプリの開発を進めます。

先ほども言いましたが、単純にIoTデバイスを業務に組み込むだけでは意味がありませんが、我々には業務プロセスを標準化するコンサルティング力があります。その標準化された業務プロセスに対して適切にIoTデバイスを組み込む事で全体最適された自動化を狙っていきます。

3.ウルグアイでのプレゼンテーション
活動目標として掲げることは止めていたのですが、昨年は業務の忙しさからネタを仕込むことが出来ずプレゼンテーションはキャンセルしてしまいました。結果的に6年ぶりにノープレッシャーでイベントを満喫する事ができたのでこれはこれで良かったのですが、振り返ってみると「やっぱり無理してでもプレゼンしたほうが良かったな〜」と若干の後悔が残りましたので、今年は何が何でもプレゼンを行います。


本年もどうぞよろしくお願い致します。












2017年9月19日火曜日

フォルランがキーノートスピーカーに!! - GeneXusインターナショナルミーティング GX27

開催まであと2週間となりましたGeneXusインターナショナルミーティングですが、昨日公開されたスピーカーリストを見てびっくり! あのディエゴ・フォルランがキーノートスピーカーとしてエントリーされているではありませんか!! スゲーーー!! さすがGeneXus社、ITのカンファレンスなのにウルグアイの国民的ヒーローをゲストスピーカーに呼べるとは。

・・・ちょっと取り乱しました。でも、これで俄然盛り上がってきました。

ちなみに、私はここ6年(2011年〜2016年)イベントでプレゼンを発表してきましたが、今回はお休みします。本業が忙しくてプレゼンネタを仕込んでいる暇が無かったというのが正直な所ですが、毎年プレゼン準備で飛行機の中でも、現地のホテルでも、ずっと一人リハーサル状態でしたので、たまにはリラックスモードで参加するのもいいかと思っています。





2017年8月22日火曜日

GeneXus インターナショナルミーティング GX27が開催されます

7月の猛暑から一転、8月に入ってから不安定な天候が続いていますね。ジメジメとした日が続くとたまにはカラッとした晴天が恋しくなります。

さて、今年もこの季節がやってきました。来る10月2日から3日間、ウルグアイにてGeneXusインターナショナルミーティングが開催されます。昨日、ティーザー動画が公開されました。




今年のテーマは「Shape your Future(あなたの未来を形創る)」です。日本ではGeneXus15が発売されたばかりですが、ワールドワイドでは発売されて既に1年以上が経過しています。(現在のUpgradeは5)

そろそろ次のバージョンに関する情報が出て来てもいい頃だと思います。あと一月ちょっと、楽しみです。



2017年5月18日木曜日

【NEWS】GeneXus 15 リリースセミナーが開催されます

いよいよGeneXusの新バージョン「GeneXus15」が日本でリリースされます。

来る6月30日(金)、品川シーズンテラスカンファレンスにて「GeneXus 15 リリースセミナー」が開催されます。



以下、ジェネクサス・ジャパン社からのプレスリリースです。

GeneXus 15 は、GeneXus を使ってアプリケーションを開発する「開発者」にとっても、GeneXus で開発されたアプリケーションを使用する「ユーザー」にとってもさまざまなメリットをもちます。
開発元のキーマンを招き、GeneXus 15 や今年リリースされた新製品の魅力を存分にお伝えします。

新製品のご紹介のほかにも、GeneXus での開発をされたユーザー様より成功事例をご発表いただきます。
GeneXus の最新情報が凝縮されたセミナーです。お申し込みの上、ご来場ください!

【開催概要】
ジェネクサス・ジャパン創立15周年記念
GeneXus 15 リリースセミナー
~新バージョン GeneXus 15 &新製品の魅力~

日時: 2017年6月30日(金)14:00 ~ 17:40
場所: 品川シーズンテラスカンファレンス (JR 品川駅 港南口より徒歩 6 分)
主催: ジェネクサス・ジャパン株式会社
・ 入場無料


イベントの詳細・お申し込みはこちらから


2017年4月21日金曜日

.NET WEBアプリケーションで実行ボタンを押すとアプリケーションエラーになる

.NET WEBアプリケーションにて、トランザクションの実行ボタンを押した後にアプリケーションエラーになる。又、それ以降はメニューのボタンを押しただけでもアプリケーションエラーになる。という事象がありました。

エラーの内容は以下の通りです。



スタックトレースの内容は以下の通りです。

[InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2727926
System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +61
System.Web.HttpRequest.FillInFormCollection() +148

[HttpException (0x80004005): URL にエンコードされたフォーム データが有効ではありません。]
System.Web.HttpRequest.FillInFormCollection() +206
System.Web.HttpRequest.get_Form() +68
GeneXus.Http.HttpAjaxContext.LoadFormVars(HttpContext localHttpContext) +107
GeneXus.Http.GXHttpHandler.InitPrivates() +153
GeneXus.Http.GXHttpHandler.ProcessRequest(HttpContext httpContext) +157
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

色々調べた所、Microsoft セキュリティ更新プログラム MS11-100が原因でした。これは、ASP.NETに対するサービス拒否攻撃に関する脆弱性対処だそうです。
簡単に言ってしまうと、サーバーにPOSTするデータの数が1000までに制限されています。今回のケースではトランザクションのWebFormに配置してある項目属性の数が多かったためでした。(1000=項目数ではありません。GeneXusが裏側で制御に使っているデータ等も含めての数だと思われます)

対処としては

  1. 画面上の項目数を減らす
  2. Web.configに下記の設定を追加し、制限数を増やす


<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>

但し、(2)に関しては、そもそもの発端が脆弱性に関する対処ですので、制限数を増やしてしまってはセキュリティレベルが下がります。

Webアプリケーションが外部に公開しているものであれば、選択肢は(1)になります。
逆に、社内で利用しているクローズドネットワーク上に配置しているのであれば、(2)もありだと思います。
(それでも社内クライアントが何らかのウイルスに感染して社内サーバーを攻撃し始めた時は防御出来ませんので、そのあたりのセキュリティポリシーを確認の上、対処を決めて下さい。)





2017年4月14日金曜日

デプロイメント方法 - .net webアプリケーション版

以前(といっても8年前になりますが・・時が経つのは早い・・)、.net webアプリケーションのデプロイメント方法の記事をアップしていましたが、リンク切れしていたり、情報が古くなっていましたので、改めてアップします。


.netジェネレーターの場合、デプロイメントツールは標準でインストールされていません。エクステンションモジュールとして追加インストールする必要があります。

1. デプロイメントツールのダウンロード

GeneXusマーケットプレースで公開されています。ダウンロードするためにはGXTechnicalアカウントにてログインが必要です。


CSharp XCopy Deploymentという名前で公開されています。(これはGeneXus社ではなくSimplifica社のArmando作です) Donloadボタンをクリックすると、それぞれのバージョンのモジュールがダウンロード可能です。ダウンロードしたzipファイルを任意のフォルダに解凍します。




2. デプロイメントツールのインストール

2-1.「ツール」→「エクステンションマネージャー」を開く

2-2.「追加」ボタンをクリック

2-3.「ローカル」タブにて、ファイルの選択ボタンをクリックし、解凍したCSharpXCopyDeployment.dllファイルを選択し、「OK」ボタンをクリックします。

2-4. dllの取込みが成功すると、エクステンションマネージャーにて「CSharpXCopyDeployment」が表示されるので、チェックボックスをONにし「変更の適用」をクリックします。適用後にGeneXusを再起動します。  


3. デプロイ

3-1.事前準備
【環境】
GeneXusでは、基本的な考え方としてジェネレート・デプロイするターゲットごとに「環境(Environment)」を作成・設定します。
例えば、「開発サーバー」「本番サーバー」と2系統ジェネレート・デプロイ先があるのであれば、環境も二つ作成し、それぞれ「Dev」「Release」といった判りやすい名前をつけましょう。
手順は以下の通りです。
①ナレッジベースナビゲータにて、「設定」→「環境」を右クリックし、新規環境を選択
②ビルドをする時に、対象となる環境を右クリックし、「アクティブにする」を選択


※本番環境(DB)がGeneXusから直接接続できないケースでは、LAN内のDBを仮の本番DBに見立てて、データベース再編成を実行します。
 この場合、DB再編成プログラムをエクスポートした後、DB接続情報を本番環境の情報に変更します。

※環境についての解説は、GeneXus教育コースでも取扱いがありませんが、開発プロジェクト・運用を考えると非常に大切な機能です。この点については別途エントリーを書くことにします。


4. データベース再編成のエクスポート

4-1.「ツール」→「CSharp Generator」→「Deployment Tools」をクリックし、デプロイメントツールを起動します。

4-2.「Export Reorganization」タブをクリック(ディフォルト表示)

4-3.「Destination folder」に出力先のディレクトリがディフォルト表示されています。
ディレクトリ名は「reorgYYYYMD」(YYYYMDはシステム日付)となっています。
一日に複数回実行する場合は、名前を変更して上書きされないように注意してください。

4-4.「Confirm」ボタンをクリックすると、指定したディレクトリにモジュールがエクスポートされます。



4-5.データベース接続情報の変更
データベース再編成プログラムをエクスポート後にデータベース接続情報を変更したい場合は「GxConfig.exe」というツールを使います。
「GxConfig.exe」はナレッジベースディレクトリ\ターゲットディレクトリ\web\binに出力されています。
標準的な環境では「C:\Models\ナレッジベース名\CSharpModel\web\bin」になります。

4-5-1.「GxConfig.exe」をデータベース再編成がエクスポートされたディレクトリにコピーします。「client.exe.config」ファイルを「web.config」へリネームします。

4-5-2.「GxConfig.exe」を起動すると以下の画面が表示されます。データベース接続情報として、「サーバー名(Server/DS)」「データベース名(Database)」「ユーザー(Name)」「パスワード(Password)」を設定し、保存します。SQLServerへ信頼関係接続(Windows認証)を使う場合は、ユーザーとパスワードを設定する必要はありません。

4-5-3.「web.config」ファイル名を「client.exe.config」へリネームします。
編集が終わったら「GxConfig.exe」は削除しても構いません。(データベース再編成処理の実行には影響ありません)
SQLServerへの認証方法を変更する場合は(SQLServer認証←→Windows認証)、web.configの内容を直接編集します。「Connection-Default-Opts」の設定値を「Integrated Security=yes」または「Integrated Security=no」に変更します。



4-6.データベース再編成の実行
4-6-1.エクスポートしたファイルを全てデプロイ先のデータベースサーバーもしくはデータベースサーバーにネットワーク的に接続可能なサーバー/PCにコピーします。

4-6-2.「Reor.exe」を実行します。
「実行」ボタンをクリックすると、対象データベースに対して、再編成処理が実行されます。

※注意1 データベース再編成処理はDDL(Data Define Language)を実行します。つまり、通常のSQL文(DML)の様にロールバックが効きません。従って、何らかの理由で再編成の途中でエラーが発生した場合は、実行前の状態には自動で戻りません。再編成を行う場合は事前に必ずデータベースのバックアップを行ってください。(GeneXusの制約事項ではなく、DBMSの仕様です)


5. Webアプリケーションのエクスポート

5-1.「ツール」→「CSharp Generator」→「Deployment Tools」をクリックし、デプロイメントツールを起動し、「Web Deployment」タブをクリックします。


5-2.「Destination folder」に出力先のディレクトリがディフォルト表示されています。
ディレクトリ名は「webYYYYMD」(YYYYMDはシステム日付)となっています。
一日に複数回実行する場合は、名前を変更して上書きされないように注意してください。
「Confirm」ボタンをクリックすると指定したディレクトリにモジュールがエクスポートされます。
設定 項目説明
Virtual Directoryデプロイ先でのIISの仮想ディレクトリ名を指定します。
OrverWriteチェックON既に同じ名前で仮想ディレクトリが存在した場合、設定を上書きします。
チェックOFF既に同じ名前で仮想ディレクトリが存在した場合、設定を上書きしません。


5-3.データベース接続情報の変更
データベース再編成と同様に、Webアプリケーションのデータベース接続情報を変更したい場合は「GxConfig.exe」を使います。
WebDeploymentにおける「GxConfig.exe」の実行に関しては、データベース再編成とフォルダ・ファイル構成が違うため、以下の2つの方法があります。
 ① 「web.config」ファイルをbinフォルダ(GxConfig.exeがあるフォルダ)にコピー(移動)し、GxConfig.exeを起動します。(データベース再編成と同様)
   この場合、web.configを修正・保存後にbinフォルダからwebフォルダへ再度コピー(移動)す
る必要があります。

 ②コマンドプロンプトから「GxConfig.exe」を実行する方法
  コマンドプロンプトを開き、WebDeploymentの出力先ディレクトリに移動します。
  「GxConfig.exe」を相対パスで実行します。
※②の方法の場合、「web.config」ファイルをコピー(移動)する必要がありません。

5-4.Webアプリケーションのデプロイ
エクスポートしたファイルをディレクトリごとコピーし、デプロイ先のサーバー/PCへ配置します。
デプロイフォルダにある「createVirtualDirectory.bat」を実行します。


エクスポート時に指定したVirtusl Directory名で仮想ディレクトリが作成されます。
又、仮想ディレクトリ作成後、ブラウザが自動的に起動し開発者メニューが表示されます。




2017年1月30日月曜日

Google翻訳アプリの衝撃

※最後の写真(OCRアプリ)の説明で「翻訳結果」とありますが「OCR変換結果」の誤植でした。

先日、Google翻訳アプリのアップデートがありました。その内容にSNSでもちょっとしたお祭り状態になっていますが、皆さんはもう体験しましたか?

今回のアップデートの目玉は「リアルタイム カメラ 翻訳」でした。私もたまたまニュースサイトでその内容を知って早速試してみましたが、これが衝撃の機能でした。


アプリを立ち上げるといつものGoogle翻訳画面なのですが、カメラボタンが追加されました。これをタップするとカメラが起動します。あとは、翻訳したいものにカメラをかざすだけです。すると、こんな英文が




こんな感じに翻訳表示されます。



ほぼリアルタイムで、同時平行的に英文が日本語に翻訳され、カメラ画像の中で差し替え表示されています。

一般的に画像の中から文字認識(いわゆるOCR)させる場合、背景色とコントラストがついていないと認識しづらいとか、背景に色が付いていると認識しづらいとか、色々と制約条件があったりするのですが、このGoogle翻訳アプリの場合、こんなものも



こんな感じに翻訳されます。デザインされたロゴマークを認識するは驚きです。かつ、翻訳された日本語をロゴの中にうまく埋め込んでいます。



逆に日本語→英語も試してみると


すごいですね、見事です。フォントもそれらしくなっています。



この見事な翻訳具合、且つ、文字のフォントサイズや色まで元とのものに合わせる形で表示されるのです。又、誤訳も含めてその愉快な翻訳状態がまるで大喜利の様にSNS上に翻訳写真がアップされています。。



実は、最近、うちの会社でもスマホアプリの開発が多く、且つ、GeneXus標準機能だけではなく、様々なデバイス機能を付加する形での開発が増えてきました。その中の一つがOCR機能でした。有償無償を含め既存のOCRライブラリをGeneXusに外部オブジェクトとして追加する事で、標準にはない機能を実現しようというものです。

OCR機能に取り組んでみて感じたのが、OCR変換させる対象文字列の認識率を上げる事の大変さでした。フォント種類や文字の間隔から始まって、背景色・背景画像など文字とのコントラストの調整が非常に難しいものです。

それがGoogle翻訳アプリときたら文書のみならず、カラフルなパッケージから風景までいとも簡単に認識するではないですか。しかも、リアルタイムで・・・
これは脱帽ですね。仕事柄、様々な世にあるアプリやサービスなどを調べることがあり、その裏側がどうなっているか推測するのですが、このGoogle翻訳アプリはそれをどうやって実現しているのか、さっぱり判りませんでした。さすがGoogle、開発にかけるお金と人材はとてつもないものなんでしょうね。

とはいえ、我々も色々とニーズがあって開発を行っていますので、これにめげずにアプリを実現して世に出していきたいと思います。

研究開発中のOCRライブラリをGeneXusに組み込んだデモアプリ


ディスプレイを撮影しているので反射などで認識にはちょっと不利ですが、
こんな感じで翻訳OCR変換結果が出てきます。この画面はGeneXusで生成されたものです。


では。




2018 - 新年のご挨拶

あけましておめでとうございます。 旧年中は大変お世話になりました。今年もよろしくお願いいたします。 毎年後半になるとブログの更新が滞っている状況が続いています。なんとか今年は続けようと思っていますが、既に年内の予定が詰まっていまして今年も多忙な一年となりそうです。 それ...