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でキーの制限を指定する事ができます。






2017年1月10日火曜日

iPhone誕生 10周年

今年(2017年)はiPhoneが誕生して10周年だそうです。全然気が付かなかったな。スマートフォンがすっかり定着しましたが、当時はiPod付き携帯だとか、ワンセグやFelicaも着いていないとか、さんざんな言われようでしたね。

振り返ってみたら、私もブログで記事を書いていました。「ついに発表されたiPhone

当時のスティーブ・ジョブズのプレゼンが懐かしいなと探していたらユーチューブにありました。


当時はまだMacworld Expoでしたね。今見てもスティーブ・ジェブズのプレゼンは秀逸です。「これがiPhoneだ」といって見せたのがiPodにアナログ電話のダイアルが着いた写真とか、ハードウェアキーボードを否定した(Blackberryとかをdisってからの)タッチスクリーンUIの紹介とか、掴みから入って次々に紹介される内容に今でもわくわくしながら見てしまいました。

この時、指で弾くように画面をスクロールさせる姿がとても印象的で、「これは、今までのデバイスとは全く違うものではないか!?」とiPhoneの発売が楽しみでした。

しかし、当初日本ではiPhoneは発売されませんでした。しかたがなくiPod touchを速攻で購入しましたが、最初はやたら重かったり、バグも多く、まともに使える状態ではありませんでした。なにより、インターネットに常時接続でないデバイスはその本領を発揮できません。それでも今までに無い操作方法に近未来感を感じながら我慢して(笑)使ってました。それが、徐々にソフトウェアアップデートでまともに使えるようになり、利用者も増えていき・・と、全く新しいコンピューティングの黎明期を体験できたのは貴重な経験でした。

さて、スティーブ・ジェブズが亡くなって5年が経ちました。Appleの業績は低迷。プレゼンを見てもやたらとハードスペック自慢やカラバリ展開など、かつてのわくわくするプレゼンテーションはすっかり影を潜めています。又、Appleに限りませんが、眼鏡や腕時計などのウェアラブルコンピュータも今ひとつブレイクせず。革新的なコンピューティングは今後出てくるのか? とガジェット好きとしてはもやもやする日々が続いています。




2017年1月4日水曜日

2017 - 新年のご挨拶

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

昨年後半はほとんどブログを更新出来ず、申し訳ありませんでした。本業であるイノベーティブ・ソリューションズの経営に時間を費やし、なかなか情報発信が出来ておりませんでした。

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


昨年、イノベーティブ・ソリューションズではビジネスの新たなコンセプトとして「標準業務プロセス」の重要姓を打ち出しました。日本は既に人口減少社会に突入しています。一般的にはまだ実感が湧かないかもしれませんが、社会の端々ではそれを原因とする問題が徐々にではありますが表面化してきています。

人口が減ってくるとビジネス面ではどうなるか? というと「お金を出しても働き手を雇うことが出来ない(人を集められない)」という事態になります。限られた人手で今まで通り(今まで以上)の成果を出すためには各個人の生産性向上を図る以外に道はありません。特に物流業界はそれが顕著です。イノベーティブ・ソリューションズではお客様の生産性向上のためのソリューションを提供していきます。

こう書くと「GeneXusと全然関係ないじゃないの?」と思われるかもしれませんが、「生産性向上」という観点ではソフトウェア業界も同様ですよね。というか、ソフトウェア業界こそ生産性向上を実現しないといけない業界です。この業界では工数という見積もり方法が根強く、生産性を上げれば上げるほど売上が下がってしまい生産性向上のモチベーションが発生しづらいです。これはビジネスモデルに起因するものなので、変えることは一筋縄ではいきません。しかし、いまだに炎上案件とかデスマーチとかいった話が後を絶たない状況では、なんとしても変えていかないといけない事だと思います。



さて、今年の活動目標です。

1.業務プロセス標準化コンサルティング
先にも述べたとおり、企業の生産性向上を実現するためには標準業務プロセスの定義が必要です。ただ、これは最初に定義すればそれで終わりではなく、日々の業務をこなしながら問題点を見つけ、業務改善を行い、それを繰り返し継続していくことが重要です。

ユーザー企業が自立的に業務改善サイクルを身につけて頂く為に、iGrafxという業務プロセス可視化ツールを採用しました。昨年は2回セミナーを開催しましたが、実際にお客様に採用頂いて、現在導入も行っています。今年はそれらをフィードバックし、ブラッシュアップしたサービスの提供・セミナーの開催を行っていきたいと思います。

2.スマホアプリ
GeneXusではスマホアプリの開発案件が多くなってきました。特にワンナレッジでiOSアプリ、Androidアプリの両方がジェネレートできるのは他のツールには無い強みだと感じています。

又、スマホアプリの場合はUX(ユーザー・エクスペリエンス)が非常に大切になってきますが、これは従来のウォーターフォール(つまり、設計書として紙に画面遷移やレイアウトを記述し、レビュー・仕様確定する方法)だと、使い勝手の良いアプリにはなりません。
これもGeneXusの強みであるプロトタイピングを繰り返す事で早いタイミングからユーザー自身にアプリの出来上がりを実感してもらい、よりよいUXとはどんなものかを一緒に検討していくことができます。

イノベーティブ・ソリューションズとしては、スマホ単体だけではなく、レーザースキャナーやウェアラブルデバイスなどと組み合わせたアプリケーションの開発に取り組んでおり、物流倉庫などの現場業務にもスマホ+アプリのソリューションを提供していきます。

3.海外ビジネスの展開
昨年はバングラデシュでのオフショア開発をスタートしました。こちらはGeneXusではなくスクラッチ開発ですが、向こうの技術レベルもだいぶ判ってきましたし、バングラデシュ側の事情も見えてきました。単純にオフショア開発の拠点とするだけではなく、今後は現地ビジネスの展開もしていきたいと考えています。



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