2016/10/11 (火)

Prottを使ってみた

今回は便利ツールのご紹介です。

現在開発を進めているプロジェクトで、画面設計を行った際にProttというプロトタイプを作成できるツールを使ってみました。

https://prottapp.com/ja/

インターネット上で利用できるツールで、手書きで書いたものやExcelで描画したものを画像として取り込み、ボタンを押した際などの画面遷移を作成します。

簡単に手書きしたものを元に例を示します。
まず手書きしたものがこちらです。

img_17811

ログインして一覧を表示し、新規追加をする流れです。

この4つの画面を1画面ずつ写真に撮り、prottに画像として追加します。

prott1

追加した画像にそれぞれアクションを設定します。

ログインボタン付近をマウスで選択して、ボタンを押した際の遷移先を指定します。

prott2

すごく簡単に遷移の設定ができます。

また、遷移する際の効果を選択できたり、オーバーレイ表示も可能です。

prott3

全ての画面に設定をし、プレビューをしてみます。

prott8 prott9

何もないところをクリックするとアクションを設定した部分が青く光ります。

なのでどこを押すといいかが一目で分かります。

prott10

こんな感じで画面の流れを簡単に確認することが出来ました。

お客様への確認は、このprottで作成したものを見せることで、出来上がりのイメージが明確になると思います。

イメージが明確になることで要望も明らかになり、より完成度の高いものを作ることが出来ます。

社内の開発においても、各メンバー間の意識の擦り合わせに利用できますし、このプロトタイプをそのまま詳細設計の仕様書として利用することも出来そうです。

世の中便利なツールがありますので、開発の負担軽減のためにも色々と使ってみてご紹介していきたいと思います。

今回はプロトタイプを作成するprottを紹介しました。

ちなみに料金は無料(プロジェクト1つのみ)からありますし、30日間のトライアルもありますので、とりあえず使ってみる価値ありです。

続きを読む

2016/09/07 (水)

【AI】Kerasで「吾輩は猫である」調の文章を自動生成してみる

こんにちは。やのです。

最近はGoogleのライブラリTensorflowでディープラーニングの検討を行っています。
Tensorflowの上位ラッパーライブラリとしてKerasというものがあり、 そのKerasのサンプルコードが豊富なので1つご紹介します。

Keras Documentation

今回テストしたサンプルは、文章の自動生成を行うものです。
利用したコードはこちらです。

このサンプルは、まずあらかじめ何らかの文章(10万文字~100万文字程度の文章が好ましい)の文字の並びをディープニューラルネットワークで学習しておきます。そして、学習したディープニューラルネットワークに十数文字の文字列を与え、その文字列に続く文字を1文字ずつ逐次的に生成していき、自動で長い文章を生成してみる、というものです。

このサンプルは、もともとはニーチェの文章が付属されており、英語なのですが、今回は日本語の文章を学習させてみました。

日本語を利用する注意点としては2点
(1)日本語のテキストファイルのエンコーディング設定はutf-8としておく
(2)python上で日本語が利用できるように1行目に # -*- coding: utf-8 -*- を追記しておく
以上のようにすると日本語でも問題なく学習できました。

今回は「吾輩は猫である」の全文を学習データとして与え(32万文字程度)、全文を学習後、ディープニューラルネットワークに「吾輩は猫である。名前は」という文字列を与えた後にそれに続く800文字を自動生成してみる、ということを試しました。

それでは、実験結果です。

まず、繰り返し学習1回目のディープニューラルネットワークで文章を自動生成したものです。
 吾輩は猫である。名前はないがであな遝をているにでしていかの刿にしてしたいまないったすいしたいしたも君の逍にするのしてしたかでもって吠ににめたったしていいいすないいいいあいかないっていていていているないえ、こであるないしてあるないいであからこんにに囮鉍でそないにだるないしたないいして蹚ったいまいたあっていかあって形っていたってあって出に君がいしていていていていていかであるないいかを慥ていたこでそうであかかすってかかいはするしど壝の吋札に君していたのそのはそと一人だの事は循って遣たしていかこで徳ったたあかね、吾ななとうったもだいましていたがますいしとはた
まだ学習がすすんでおらず、ランダムな文字の並びという印象を受けます。

次に、繰り返し学習50回目の結果です。学習するのに数時間かかりました。
 吾輩は猫である。名前はこれでは大変形姻の時に妙な人には見ている。この癖にビールを平生の名前である。それだから、そうして来たなと思う。この光当体誔を知らないのから仕方がない。そうしているのではない、悪るいものだが、そうなる。いかに這入ってると云って、この時つではないのである。 「ただてい事は今日はこの後のごとく、そうでございます。この度の方が十入の方ですね」「そうですね。その通りと先へ取りている。その大譂のは本任者はとこの眼もない。その冗談だと云う大従の邒を挨ひ見ているのだから飛んだのだから、実読だのかく大変だ。これも主人は起かい物の上にいいな、あの全
大分日本語のような文字の並びになってきましたが、やはり中身が変です。

最後に、繰り返し学習185回目の結果です。学習するのに丸一日かかりました。
 吾輩は猫である。名前はこれですか。それでは細君である。それでおったので、その寝えばならない。聞いてやめはあると云うのさ。君も、どうしてはないと思って買っていると同じくらしい出来ないもので、そんな事をするやしない。少しはないか」 「バルですよ」と先生とはあまり今していたのである。それである。そんなものでもいい。またはどうだ。そいこの御寄を、主人のようにその希鼩の困りにいるのが、これは黙ましたから、その時じゃさぐ行って見える。この女は返事を取られて、主人をひると、天下の意を調みない。だっては大地能を知れて、その嫌さんの具倅の大具聞があると、僕のところへ引
まだ変ですが、どうでしょう、繰り返し50回よりもなんとなく日本語に近くなっている気がしませんか?文の間の意味的なつながりは自動生成できていませんが、日本語の文章の文字の並びという意味では大分学習できていると思います。さらに、生成される日本語は、吾輩は猫である調の特徴を含んでいるといえます。何かに応用できれば面白いですよね。

続きを読む

2016/07/14 (木)

サーバ室の温度異常を検知して電話をかける

こんにちは。そうまです。

先日、弊社サーバ室のエアコンが故障してしまい、危機一髪で熱暴走を回避した。という事件がありました。
この時、始めの警報メールを朝4時に受信していたのですが、寝ていて全く気づきませんでした。
偶然5時半に起きて気づいたからよかったものの、もし1時くらいに発生して起きるまで数時間気づかなかったらと思うとゾッとします。
電話がかかってくればいいのになーと思って調べたところ、以下の記事を見つけました。


この3つの記事の内容を組み合わせると、図のような流れで実現出来そうです。

プレゼンテーション1 早速やってみました。

メール宛先ドメインのMXレコードをSendGridに向けなければいけなかったので、Route53でドメイン取得しました。AWSなんでも揃ってるなー。
詳しいコードはほぼ参照した記事のままなので、割愛します。

特定のアドレスにメールを送信すると、
メールの画面

電話がかかってきました。
P1210046

これで寝ている間にサーバ室の温度が上がっても安心ですね!
そんなことが起こらないことを祈ります(真剣)

※後日談
IFTTTにPhoneCallチャンネルありますね。。。
まだアメリカの電話番号だけみたいですが、日本の電話番号にも対応したらIFTTTだけでできちゃいそうです。

続きを読む

2016/05/27 (金)

DelphiのFireDACでのSQLiteを高速化

こんにちは。
システムを開発する場合において、高速化は永遠のテーマと私は考えます。
レスポンスは少しでも良い方が気持ち良いです。
今回はそんな高速化の手法をひとつ。

大量のデータを扱うSQLではこのレスポンスが遅くなりがちですよね。
古くから、SQLの高速化については色んな手法、セオリーが存在します。
今回はちょっと違った角度からアプローチです。
しかもDelphiFireDACSQLiteを高速化しようという、かなり限定的な情報です。
しかし!
ニッチな情報だからこそ待ち望んでいる方もいらっしゃると思い紹介させていただきます。

さて本題。
DelphiにはFireDACという強力なデータアクセスコンポーネントがあります。
FireDACを使えばSQLiteも簡単に使えます。
FireDACは高速ですしSQLiteも軽いデータベースで、この組み合わせだけでもかなり高速です。
さらにSQLやテーブル構成も見直した。でももっと高速化したい。
そんな時には最新のSQLiteライブラリを動的リンクしてあげると、高速化がのぞめます。

FireDACに静的リンクされているネイティブのSQLiteは
 ・Delphi XE5 バージョン3.7.17
 ・Delphi XE10 Seattle バージョン3.8.7.4
 ・Delphi XE10.1 Berlin  バージョン3.9.2
これに対し、2016年5月27日時点でのSQLite最新版はバージョン3.13.0です。
SQLiteはバージョンが上がるごとに機能追加やバグフィックスに加え、高速化も行われますので、最新版に変更すれば高速化する場合があるのです。

それでは、具体的にFireDACで最新のsqlite3.dllを動的リンクで使う方法を説明します。
<1.リンクモードを変更するため、FireDAC.incファイルを修正>

場所はコチラ(XE10の場合) C:\Program Files (x86)\Embarcadero\RAD Studio\17.0\source\data\firedac
※Delphiのエディションがエンタープライズ以上しかFireDACのソースがなく、対応できません

{——————————————————————————}
{ SQLite driver }
{——————————————————————————}
{$IF DEFINED(MSWINDOWS) and not (DEFINED(BCB) and DEFINED(CPUX64))}
{$DEFINE FireDAC_SQLITE_STATIC} // Use SQLite3 static linking library
{$ENDIF}
{.$UNDEF FireDAC_SQLITE_STATIC} // remove ‘.’ to enable dynamic linking
ここの「.」を削除すると動的にsqlite3.dllを読み込めるようになります。

<2.最新のSQLite3.dllを取得>
SQLiteホームページより最新のSQLite3.dllを取得、アプリケーションexeと同じフォルダか、パスが通った場所に格納します。

<3.バージョンの確認>
SQLiteのバージョンは、select sqlite_version()といったSQLで取得可能ですので、こんな感じで確認できます。

procedure TForm1.Button1Click(Sender: TObject);
var
  sVersion: string;
begin

  FDQuery1.Open(‘select sqlite_version() vrsn’);
  if FDQuery1.Eof = False then
  begin
    sVersion := FDQuery1.FieldByName(‘vrsn’).AsString;
  end
  else
  begin
    sVersion := ‘不明’;
  end;
  FDQuery1.Close;

  ShowMessage(sVersion);

end;

XE5で静的と動的な最新SQLiteで比較した際、25%程の高速化が確認できました。

さて、最新の機能の利用や高速化が期待できる動的リンクですが、暗号化のサポートがされないという弊害もあります。
機能や動作速度と、セキュリティ条件等を比較考慮して最適な方法を選択すべきでしょうね。
ではでは。

続きを読む

2016/04/12 (火)

bitnami Redmineをインストールする際に気をつけるただ1つのこと

こんにちは。相馬です。

みなさん、プロジェクト管理してますか?

弊社でもプロジェクト管理ツールを使ってみよう!ということでRedmineを使い始めました。
そのインストール時にひとハマりあったので、そのお話を。

弊社は複数拠点あることと、協力会社さんも使えるようにしたい。でも費用は抑えたいので、
サーバはさくらのVPSを使うことにしました。

さっそく、Redmineをインストールするわけですが、Redmineを使うためにはWebサーバ入れて、DB入れて、設定して、と結構めんどくさそう。。。
ちょっと調べてみると、bitnami Redmineというオールインワンパッケージがあり、これを使うことでインストールの手間が省けそうなので使ってみました。

基本的には、インストーラをダウンロードして起動するだけです。あとはウィザードに従うだけでインストールが完了します。
こちらの記事を参考にさせていただきました。

OSSでLinuxサーバ構築 – Bitnami Redmine 3.2.1をさくらのVPS(CentOS 6.7)にインストール

記事では、インストール後にファイアウォールにHTTPでの接続許可を追加されていますが、私の環境では最初から許可されていました。

インストール作業が終わり、Webブラウザから「http://[さくらのVPSの標準ホスト名]」にしてみると、
Bitnami_Redmine_Stack

出ました!
インストール成功!と思って、「Access Redmine」をクリックするも「Internal Error」の表示。
サービスの状態を調べたり、ポートの状態を調べたり、アクセス権を調べたりするものの問題なさそう。。。
調べていくうちにこちらの記事にあたりました。

26歳からの文系プログラマーの備忘録 – redmineインストール
小一時間悩んだ挙句、インストール時のフォルダを
デフォルトの「C:\BitNami\redmine-2.4.2-0」から「C:\BitNami\redmine」に
変更したら無事アクセスできた。

記事にならって、bitnamiインストールウィザードでインストール先のフォルダを「/opt/redmine-3.2.1-0」から「/opt/redmine」に変更したところ、アクセスできるようになりました!!
ドットかハイフンを含んでたのが良くなかったようです。

bitnami Redmineを使う際には、インストール先のフォルダ名に注意です!

※この記事は投稿日時点の情報に基づいて書かれています。

続きを読む