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で生成されたものです。


では。




2017年1月16日月曜日

Google Mapユーザーコントロールが使えない!?

業務アプリケーションの中で位置情報を判りやすく表示するツールとしてGoogle Mapを使用している方も多いと思います。GeneXusでもユーザーコントロールとして提供されているため、比較的簡単に実装できます。

ところが、そのGoogle Mapが突然表示されなくなる。という事態が昨年起こりました。

アプリケーション内でGoogle Mapを表示するとエラーとなってしまう。
デバッガで見てみると「NoApiKeys」というエラーメッセージが表示されている

これはGoogle側の利用規約が変更されたためで、Google Mapを利用するにはAPIキーの指定が必須となりました。

https://maps-apis.googleblog.com/2016/06/building-for-scale-updates-to-google.html
We no longer support keyless access (any request that doesn't include an API key). Future product updates are only available for requests made with an API key. API keys allow us to contact developers when required and help us identify misbehaving implementations.


GeneXusとしてはEvolution3 Upgrade9からAPIキーのサポートがされました。
https://www.genexus.com/developers/websac?en,,,39706;;

SAC #39706: ApiKey support in Web control Map

Abstract
Version 8.2 of the control made it possible to enter an ApiKey at design time. This is required as from June 22, 2016, due to a change in the licensing policy of the Google Map API. If a key is not provided, the error ApiKeyNotFound occurs at runtime and the map is not displayed.
しかし、それ以前のGeneXusを使用している場合はどうしたらよいでしょうか? 探してみたところ、GeneXusマーケットプレースに新しいバージョンのMAPユーサーコントロールがアップされていました。
https://marketplace.genexus.com/product.aspx?mapcontrol,en
こちらからユーザーコントロールをダウンロードし、GeneXusにインストールして下さい。

ユーザーコントールのプロパティに「Google Api Key」が追加されている

Google API KEYの取得はこちらから。
https://console.developers.google.com/flows/enableapi?apiid=maps_backend,geocoding_backend,directions_backend,distance_matrix_backend,elevation_backend,places_backend&reusekey=true

API KEYを取得するにはGoogleアカウントが必要です。また、API KEYを取得する際にリファラーやIPでキーの制限を指定する事ができます。






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

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