2017/03/10 (金)

MacでNTFSのドライブを書き込み可で接続!

こんにちは。相馬です。

今回は、NTFSの書き込みに苦しむマカーへ向けたTipsです。

同僚(Windowsユーザ):「このUSBメモリにファイル入れてー」

自分(Macユーザ):「おけー」

USBメモリ、グサッと。

あれ、Command+V効かないな、、、
Finderで情報を見る=>フォーマット:NTFS!!

Macあるあるではないでしょうか。

そんな時にはこのアプリ。

Mounty for NTFS
Mounty_for_NTFS

アプリ起動中にNTFSのドライブがマウントされると、書き込み可能なオプションでマウントし直してくれます。
Finderでポップアップ表示してくれる親切さ。しかも無料です。

NTFSどんとこいですね!

続きを読む

2017/03/02 (木)

PyCom mini KUMAMOTO スポンサーになりました

PyCon_mini_Kumamoto_2017

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

突然ですが、PyCon mini Kumamotoのスポンサーになりました!

PyConとは、
PyCon JPは、Pythonユーザが集まり、PythonやPythonを使ったソフトウェアについて情報交換、交流をするためのカンファレンスです。 PyCon JPの開催を通じて、Pythonの使い手が一堂に集まり、Pythonにまつわる様々な分野の知識や情報を交換し、新たな友達やコミュニティとのつながり、仕事やビジネスチャンスを増やせる場所とすることが目標です。
そのPyConが熊本で開催(miniとして)されるということで、スポンサーに応募させていただきました。
PyCon mini Kumamotoを熊本大地震の一年後に開催します。テーマは”未来”です。参加者と共にイベントで”未来”を感じたり考えたりできたらよいなと考えています。
ステキなテーマですね!

弊社エンジニアの矢野も登壇する予定です。みなさんもぜひご参加下さい!

詳細はPyCon mini KumamotoのWebページをご確認下さい。

続きを読む

2017/01/24 (火)

AWS Elastic Beanstalk 初めての構築

こんにちは。

今回の使ってみましたは、AWSでWEBサーバーの構築です!

AWSのElastic Beanstalkというサービスを使ってみました。

既に色んなサイトで構築の仕方はアップされていますが、とりあえずAWSを使うのも初めての私が試行錯誤して構築した手順を載せます。

試行錯誤と書きましたが、Elastic Beanstalkは簡単に構築できます。

まずはAWSのサイトにログインし、AWSマネジメントコンソール画面からElastic Beanstalkを選択

20

選択したらElastic Beanstalkのアプリケーション画面となりますので、まずは新しいアプリケーションの作成をします。名前はプロジェクトの名前にしました。(イホウレンケイってなってますが気にしないで下さい・・・)

1

2

作成したアプリケーションに対して「新しい環境の作成」を選択し環境を作成します。

3

サーバーは「ウェブサーバーの作成」を選択します。

4

環境タイプでは、事前定義の設定にPHPを選択しバージョンは作っているアプリケーションに合わせました。環境タイプは負荷分散にしています。(まだ利用するユーザーは少ないですが、とりあえず。)

5

アプリケーションバージョンでは、「既存のアプリケーションバージョン」を選択し、サンプルアプリケーションを選択します。とりあえず、ちゃっちゃと構築したいのでサンプルを選択します。あとは変えずに次へ。

6

環境名を設定。開発環境で構築するので分かり易くプロジェクトにdevを付加した名前を設定。

7

RDS(データベース)もVPC環境の両方ともチェックを入れ、一緒に構築しちゃいます。

8

構成の詳細が出ますので、利用するアプリの容量などを計算して適宜変えて下さい。

EC2のキーペアに関してですが、キーペアはEC2にリモートログインするために必要となります。SSHなどで接続する場合などは設定しておきましょう。キーペアはEC2のコンソール画面のキーペア項目から新規に作成しておきます。

※キーペア作成時に自動でダウンロードされる.pemファイルは大事に保管して下さい。後でリモートログインする際に必要になります。

9

ヘルスレポートは変更せずにそのまま次へ。

10

環境タグも何もせずに次へ。

11

RDSにはmysqlを選択しました。バージョンやインスタンスクラスなど適宜変更して下さい。

12

VPCの設定では全てにチェックを入れて次へ。

13

アクセス権限はそのまま次へ。

14

確認画面が出ますので、問題なければ起動を押します。

15
16
17

起動ボタン押下後は環境を作成中の画面となります。この処理に数分掛かります。ちゃんと出来るかドキドキです。

18

数分後、できました!!

19

完了後は、実行するアプリケーションをアップロードします。「アップロードとデプロイ」ボタンを押します。

21

ファイルを選択でcakephpのフォルダを圧縮したzipファイルをアップロードします。バージョンラベルは分かり易いように日時等の値を付加して管理します。

22

デプロイに少々時間が掛かりますが、完了後に指定のURLをクリックすると、、、

23

アップロードしたアプリケーションが表示されました!

24

ここまで色々と書きましたが、慣れればアプリケーションを表示するまで30分も掛からずにWEBサーバーを構築できます。

Elastic Beanstalkではバージョン管理も自動で行ってくれるので非常に便利です。

Elastic Beanstalkを構築するだけでEC2やRDSが自動で構築されているので、細かい設定を必要としない場合はあっという間にクラウド環境が構築できます。

もちろんEC2やRDSの設定をいじることも可能ですので、自分のアプリケーションに合ったカスタマイズをすることができます。

なんとなくクラウド環境を構築しようと思っている方がいたら、とりあえず試してみると良いかもしれません。

以上です。

続きを読む

2016/10/22 (土)

3行でインストール!機械学習フレームワーク「Darknet」を試す

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

このブログでもご紹介したとおり、TensorFlowやってみたり、Caffeやってみたりしてきました。
こちらのブログで、もっと簡単に導入できるフレームワークがあると知りましたので、今回はそれを試してみます。

その名も、「Darknet」!!

darknet__open_source_neural_networks_in_c
ウェブサイトもダークな感じです。魔法陣が黒魔術っぽい。

イメージはあれですが、導入は簡単です。
なんと、以下の3行を実行するだけでインストール完了です。

$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet
$ make

インストールしただけでは寂しいので、試してみます。
Darknetは学習済みモデルとアルゴリズムの配布もしています。
これをダウンロードしてくれば、簡単に動かすことができます。

今回は「YOLO」という、物体認識を試してみます。
こちらもコマンドはダウンロードして実行という2行だけです。

$ wget http://pjreddie.com/media/files/yolo.weights
$ ./darknet yolo test cfg/yolo.cfg yolo.weights data/dog.jpg

モデルと一緒に配布されるサンプルですが、ちゃんと物体認識されています。
dog-predictions

他の画像でも試してみます。
7cats

Intel Core i7(3.1Ghz×4)、メモリ8GB、OS:Ubuntu 14.04のマシンで約8秒かかりました。
今回はCPU Onlyで試したのですが、GPUもサポートしていて、Makefileを1行書き換えるだけで使えるそうです。
screenshot

結果はこうなりました。
7cats-predictions
下段真ん中のネコの模様もネコとして認識されちゃってますが、ある意味正解ですね。

Darknetは手軽にインストール、実行まで出来て驚きました。
今後も手軽に使えるフレームワークがどんどん出てきそうですね!

みなさんもお試しあれ!

続きを読む

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を使う際には、インストール先のフォルダ名に注意です!

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

続きを読む

2016/04/04 (月)

VirtualBoxの仮想ディスク容量を圧縮する方法

こんにちは。相馬です。

突然ですが、VirtualBox便利ですね。
弊社でも開発用サーバや社内システムでVirtualBoxを利用しています。

先日、VirtualBoxの仮想マシンを別マシンにクローンしようと思い、操作したところ表示されたのは、「残り時間 4時間」。。。
そんなに容量あるかな?と思いゲストOSでdfコマンド使ってみると、113GB程度しか使っていません。
が、ホストOSで仮想ディスクファイルの容量を確認すると439GB。。。

仮想ディスクを「可変サイズのストレージ」にすると、一度使用した領域は確保されたままとなり、ゲストOSでファイルを削除しても仮想ディスクの容量は減らないようです。。。
このままだとクローンやバックアップ時に効率が悪いので、仮想ディスク容量の圧縮にチャレンジしました。

VirtualBoxで仮想ディスク容量を圧縮するためには、
1.ゲストOSで仮想ディスクの未使用領域にゼロを書き込み
2.ホストOSで仮想ディスクを圧縮
という手順が必要です。

※以下はあくまで、私の環境で行った手順です。ddコマンドは、間違うとデータが上書きされてしまう危険性がありますので、お気をつけ下さい。

環境は以下の通りです。
  • ホストOS:Windows7
  • ゲストOS:Ubuntu14.04

まず、ゲストOSで仮想ディスクの未使用領域にゼロを書き込みます。
ゲストOS(Ubuntu)で、ddコマンドを使います。

$ sudo dd if=/dev/zero of=zero bs=4k; \rm zero

コマンドの細かい解説は省きますが、これで未使用領域にゼロが書き込まれます。
ディスクの容量によって時間がかかります。。。
実行終了後、ゲストOSは一旦シャットダウンしておきます。

続いて、ホストOSで仮想ディスクを圧縮します。
まず、対象の仮想ディスクのuuidを調べます。
ホストOS(Windows7)で、VirtualBoxインストール先に移動して以下のコマンドを実行します。

VBoxManage.exe list hdds

表示される中から、対象の仮想ディスクのuuidを控えておきます。
調べたuuidでディスクを指定して、圧縮します。

VBoxManage.exe modifyhd [仮想ディスクのuuid] --compact

こちらも、ディスクの容量によって時間がかかります。。。

実行終了後、ホストOSで仮想ディスクの容量を確認すると、、、「119GB」!!
無事圧縮出来ました!

続きを読む