2015年4月27日月曜日

ドローンが首相官邸に落下 - 日本におけるドローンの可能性と規制を考える 後編 -

前編の続きの記事になります。

アメリカ以外のドローン状況

アメリカ以外でドローンに力を入れている国の筆頭は中国です。
ドローンの世界ナンバー1企業といえばDJIです。 DJIは中国の深圳に本社があります。
ここで作成されたドローンがアメリカをはじめとする国々に売り出され、中国に様々なノウハウを蓄積しています。

中国は国をあげて、ドローンの政策に力を入れています。
中国がこれだけドローンに力を入れているのは、産業目的だけでなく軍事目的もあるでしょう。
目的はともあれ、ドローンはより洗練されたテクノロジーとなり、自然と人々の生活に溶け込んでいくことは確実です。

規制は必要?

さて、ドローンの高い将来性と、社会の浸透性は理解できたと思います。
しかし当然ですが、ユーザーが増えればそれなりのルールが必要となってきます。規制はイノベーションを阻害するという意見もありますが、最低限のルールがないと、効率的な運用は不可能ですし、制限から生まれるイノベーションもあります。

イノベーションを阻害する規制を策定してしまうと国力が削がれてしまいますが、効率的な運用を促すルールを作ることで産業力だけでなく、国力をも高めることができます。
法の作成は非常に重要なのです。

感情でなく事実と現実からルールから作る

アメリカのホワイトハウスへのドローンの墜落、日本の首相官邸への落下。これらのインパクトの高い事件だけでドローンの規制案を作成してはいけません。

日本では、ドローンを購入するときに、名前と住所を記入してもらうようにするという案が上がっているようです。
ですが、この規制方法にどういった意味があるかを考えてみなければいけません。
ドローンの自作はみなさんが思っているよりずっと簡単です。ミニ四駆よりちょっと難易度が高いくらいです。
道具さえ集めて(購入して)しまえば、ネットで情報を見ながらドローンは作れてしまいます。車やバイク等の乗り物とは、環境が大きく異なります。

「免許制にするべき」という声も多いようですがこれも同じことが言えます。
ドローンは簡単に自作できるだけでなく、狭いアパートでも練習できてしまうサイズです。車やバイク等のように練習にスペースを必要としません。
マニュアルの操作の難度は高いですが、誰にもばれずに猛練習を積むことができます。

なので、既存のテクノロジーの考えの延長線上で法を策定しても無意味です。だから、アメリカも苦労しているのです。

空の世界の法はじっくりとつくる

ドローンは危ないからすぐに規制しないといけないという国の意見にはあまり賛成できません。
車両の進化が、陸の法律を少しずつ理に叶った形にしてきたように、空の法もこれからテクノロジーの進化と共に整備されていくものです。
ドローンはまだまだ未熟なテクノロジーで、これから大きく変わっていくはずです。

インターネットが広がったことにより、国民みんなの意見があっというまに広がるようになっています。政治家への票は国民の感情によって支配される以上、法の作成にまったく感情面を取り入れるなとはいいません。
ただ、長い目で見た時に、あの規制が日本のイノベーションの機会を奪ったとなるようなことは避けて欲しいのです。
ソフトウェア業界でマイクロソフト、amazon, google, appleという会社が誕生し、アメリカの一人勝ちを許してしまったように、空のビジネスまでアメリカ、もしくは中国に独占されるのは、日本として大きくマイナスになってしまいます。

なので国には、規制でなく、イノベーションを起こせるような法の整備を期待したいと思います。

ピンチはチャンス。
この事件があったからこそ、優れた空の法が生まれ、日本復活の原動力になった。後にそう言われるような対応を国には期待したいと思います。

空のビジネスには無限の可能性があるのですから。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

技術的負債の返却 その1 rails4のバージョンアップ

機能のリリースが落ち着いたので、技術的負債の返却の時間を取りました。

railsを4.1.2から4.2.1にバージョンアップしたので、やり方をメモしておきます。

環境

  • rails4.1.2
  • vagrant

Gemfile変更

最新のrailsをGemfileに記載します。


#gem 'rails', '4.1.2'
gem 'rails', '4.2.1'

Gemfile.lock を更新してgemを更新


// Gemfile.lock を更新
bundle update
bundle install

設定ファイル等を更新する


bundle exec rake rails:update

config/boot.rbのみ変更しました。

テストを実行

テストを実行します。デグレが起きていないことを確認します。


bundle exec rspec spec

私の場合は、シンプルなアプリということもあり、全ての試験が問題なく通りました。
ただし、以下の警告メッセージが出力されました。


DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to clarify its role (it merely enables serving everything in the `public` folder and is unrelated to the asset pipeline). The `serve_static_assets` alias will be removed in Rails 5.0. Please migrate your configuration files accordingly.

rails5にバージョンアップする時に、config.serve_static_assetsの設定を削除しないといけないみたいです。来るべきrails5に備えて、忘れないようにメモを残しておきましょう。
config.serve_static_assetsが記載されているファイルは『config/environments/』配下にあります。
*4/30追記しました。以下のように修正しました。


config.serve_static_assets = true

↓

config.serve_static_files = true

変更を本番に反映するには、capistranoを実行するだけでOKです。

railsのバージョンを確認


bundle exec rails --version

Rails 4.2.1

反映後はrailsのバージョンを確認しておきましょう。
以上。

PS: 4.1.2から4.2.1にバージョンアップは、1時間もかかりませんでした。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月24日金曜日

rails4 unicorn Address already in use

開発環境でAddress already in useが時々発生するので、その対処方法。

環境

  • rails4.1.2 & centos6.5
  • vagrant
  • unicorn

エラーの原因

このエラーは、動作中のunicornを終了しないでそのままvagrantを終了してしまうと、次回のvagrant起動時にunicornを起動する時に発生する。

対応方法

要するにportが既に使われている状態なので、portを調査してやればよい。私の場合、開発ではunicornを8083で動かしているので、


lsof -i:8083

とすれば良い。
次に、上記のコマンドで表示されたPIDをkill -9 {表示されたPID}で削除すると良い。殺せるプロセスが存在しているはずである。

unicornを起動


bundle exec unicorn_rails -c config/unicorn.rb -E development -D

上記の対応で起動するはずである。
また、boxによってはlsofがinstallされていない可能性もある。その場合は


sudo yum install lsof

でlsofをinstallしてやればよい。

以上。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月22日水曜日

ドローンが首相官邸に落下 - 日本におけるドローンの可能性と規制を考える 前編 -

2015年04月22日午前10時半ごろ、東京都千代田区の首相官邸の屋上に小型無人飛行機「ドローン」が落ちているのが発見されました。

僕らドローンユーザーにとって、最も恐れていた事件がついに起きてしまったといってよいでしょう。

この事件で、ドローンの法の整備に関する議題があがってくると思います。
とはいえ、そう簡単に法整備が難しいのが今のドローンを取り巻く状況にはあります。

ドローン後進国の日本がこの新しいテクノロジーとどう向き合っていくのかを、アメリカや中国と比較し、考えてみたいと思います。

アメリカのドローン状況

アメリカは言わずとしれたドローン先進国です。
クリス・アンダーソンの『MAKERS―21世紀の産業革命が始まる』は、日本でもベストセラーとなったので読んだ人は多いのではないでしょうか。

この本により『Maker』という言葉が登場し、「日本でもDIYの時代がやってくる!」 と思った技術好きな人は多かったのではないでしょうか。

でも結果はご覧の通り、今のところ日本の社会にDIYは根付いていません。今後も可能性は低そうです。arduinoなんかはエンジニアなら真っ先に飛びつきそうなアイテムなのですが、日本語の情報すらほとんどない状態です。(僕の周りでも持っている人は一人しかいません…。英語が 苦手な人が多いからでしょうか?)

クリス・アンダーソンは「DIY Drones」というラジコン飛行機製作のコミュニティサイトを運営していましたが、最終的にはUS版『WIRED』編集長を辞任して、3D Roboticsという企業を立ちあげてます。

彼は『WIRED』編集長の座に未練はないのかという問いに対し、

「メディア産業とロボット産業、どちらのマーケットに未来があると思う?」

と答えました。アメリカという国が常にイノベーションを生み出し続け、No.1でいられることがこの答えから理解できます。

しかし、このイノベーション大国のアメリカでも、ドローンの規制は大きな社会問題となっています。

最近では、2015年の1月27日にホワイトハウスにドローンが墜落した事件が記憶に新しいところです。


画像参照: http://www.nytimes.com/

アメリカでの世論調査では、70%以上の人が「規制が必要」と答えていて、アメリカ政府も規制策定を急いでいます。
しかしながら、どのように法を策定するかは色々な問題が絡み合っていて、うまく進んでいないのが現状です。

ドローンは今後10年で、アメリカだけでも最大1000億ドル近くの市場を作りだすと予想されています。

この数字が大げさでないことは、実際にドローンを扱ったことがある人ならわかるはずです。
このまま進化を続ければ、ドローンはパソコンと同様、いやそれ以上に大勢の人々の生活を変えていくでしょう。
なくなってしまう職業もあるでしょうが、新たな職業も数多く生み出されるはずです。
社会の新陳代謝は促進され、より便利で住みやすい社会に進化すると思います。

もちろんそこに辿り着くまでには、色々な社会問題も発生するでしょうし、様々な試行錯誤が繰り返されるはずです。
でも、ドローンはその価値があるプロダクトだと思います。

では、次に他の国のドローンの状況はどうなのでしょうかを見てみましょう。

後編に続きます。

参考

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

世界に広がるドローン - その可能性について -

世界中でドローンが普及してきているようです。
僕もようやく先日、ドローンを購入しました。

初心者用のドローンですが、ミニ四駆を思わせるシンプルな作りでありながら、安定した飛行能力は驚きの一言です。
WEBやスマホと連携させることでも、様々な分野での活躍が期待できると思います。

マウンテンチャンネル

僕は今、個人サービスとして、

マウンテンチャンネル

というサービスを立ち上げているのですが、このサービスで利用してる山の画像や動画を、これからはドローンで撮影してアップしていこうと考えています。 まだ商業用としてはほとんど利用されていないドローンですが、このサービスでは大活躍してくれる気がしています。

まだリリースしたばかりであまり育っていないサービスなのですが、気長に続けていこうと考えているのでよろしくお願いします。

無限の可能性

人が行けない場所へドローンを侵入させることで様々な可能性が広がってくると思います。
作りもシンプルなので、電子工作が得意な人ならカスタマイズも簡単にできます。
WEB、スマホ開発でそれなりに腕のあるエンジニアなら、ドローンを連携させることも出来ます。本当にわくわくします。最高です。

医療分野にも進出

現在、体内に進入するドローンも開発されているそうです。(2015/04/21現在)
確かにカプセルで薬が届くまでの時間をコントロールするより、ドローンで患部まで移動すれば、確実に部位に薬を運ぶことが出来ます。
今後もこういった応用例が色々生まれてくるはずです。

今後の期待

世界中で多くの人が楽しんでいるドローンですが、日本ではその姿を外で見かけることはほとんどありません。
このままだとインターネットと同じように、海外のコピーを後追いしていく形になるでしょう。
とはいえ、ビジネスになるのはまだ先のことでしょうから、これからの爆発的な普及に期待したいですね。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月21日火曜日

MT.CHANNEL WEBサービスリリース

昨日、MT.CHANNEL(マウンテン・チャンネル、マウントチャンネル)のWEBサービスをリリースしました。

このサービスは、androidアプリ『MT.CHANNEL』のWEBサービス版です。

アプリ版のように投稿機能はありませんが、ログインなしで山の情報を閲覧することができるようになっています。

まだアルファ版の出来栄えなのですが、山登りに良い季節になったので急遽公開しました。
これからどんどん機能を追加していきたいと思いますので、どうかよろしくお願いします。

世界中の山を管理するサービスMT.CHANNELは

こちら

から

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

docker - 立ち上げたコンテナに入る -

環境

  • mac
  • boot2docker(Docker version 1.5.0)

dockerで立ち上げたコンテナに入って操作をしたいというケースはよくあると思います。
その方法を記載します。

コンテナの名前を確認


docker ps -a
CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS                      PORTS                    NAMES
8fe21e9de33d        app_solr_sever001:latest   "/bin/bash -c 'cd /o   9 seconds ago       Up 9 seconds                0.0.0.0:8081->8983/tcp   hopeful_curie  

Dockerfileを記述


docker exec -it hopeful_curie bash

[root@8fe21e9de33d /]# 

docker execコマンドを利用することで「指定したコンテナの中でプロセスを実行する」ことが可能になります。
bash以外の処理実行も当然できます。
また、環境変数が正しく設定された状態でコマンドも実行可能です。


docker exec -it hopeful_curie env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8fe21e9de33d
JETTY_HOME=/opt/jetty
HOME=/root

この機能は1.3から利用可能になっています。

以上

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

dockerで動かしたtomcatをブラウザからアクセスして確認する

前回、apacheをdockerで動かしたので今度はtomcatを起動させます。

環境

  • mac
  • boot2docker(Docker version 1.5.0)

tomcatをdockerで起動させる最も簡単な方法は公式サイトのDockerfileを利用することです。
しかしながら、新規の案件ではなく既存の案件を扱うとなると、javaのバージョンとtomcatのバージョンは既存環境に合わせないといけません。

というわけでここでは、javaとtomcatのバージョンを指定したDockerfileを作成したいと思います。

boot2dockerを起動


boot2docker up

Dockerfileを記述


# Pull base image.
FROM centos:6.6
MAINTAINER Edy

# yum update
# http://blog.engineer.adways.net/archives/rails-on-docker
RUN rpm -Uhv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN yum -y update
RUN yum install -y vim git sudo passwd wget make gcc tar readline-devel
RUN yum install -y openssl-devel openssh openssh-server openssh-clients
RUN yum install -y install libxml2 libxml2-devel libxslt libxslt-devel


# install java(1.6.0.35)
RUN yum install -y java-1.6.0-openjdk.x86_64
RUN yum install -y java-1.6.0-openjdk-devel.x86_64

# tomcat
ENV CATALINA_HOME /usr/local/tomcat
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

# setting env variable
ENV JAVA_HOME /usr/lib/jvm/jre-1.6.0-openjdk.x86_64
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/common/lib
ENV TOMCAT_HOME /usr/local/tomcat
RUN export JAVA_HOME PATH CLASSPATH CATALINA_HOME TOMCAT_HOME

ENV TOMCAT_MAJOR 7
ENV TOMCAT_VERSION 7.0.29
ENV TOMCAT_TGZ_URL http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.29/bin/apache-tomcat-7.0.29.tar.gz

# 
RUN curl -SL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \
  && tar -xvf tomcat.tar.gz --strip-components=1 \
  && rm bin/*.bat \
  && rm tomcat.tar.gz*

EXPOSE 8080
CMD ["catalina.sh", "run"]

見ての通り、OFFICIAL REPOにあるtomcatのDockerfileを参照にし、利用したい環境に合わせて変更しました。
主な変更点は以下になります

  • TOMCAT_TGZ_URLをhttpsでなく、httpから取得するようにした。
  • yumでjavaをinstallした。そのため、JAVA_HOMEにreadlink $(readlink $(which java))のパスを設定した。
  • JAVA_HOME PATH CLASSPATH CATALINA_HOME TOMCAT_HOMEをexportで設定した。

Dockerfileファイルをビルド


docker build -t appsever001 .

ホストの 8081 ポートとコンテナの 8080 ポートを対応付けて起動


docker run -p 8081:8080 -d appsever001

// プロセスを確認
docker ps -a
5a43f3d8a898        websever001:latest   "/usr/sbin/httpd -D    12 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp     pensive_curie
1d54773ccbe8        appsever001:latest   "catalina.sh run"      15 minutes ago      Up 15 minutes       0.0.0.0:8081->8080/tcp   condescending_mclean

dockerのIPを調査


boot2docker ip

192.168.xx.xxx

ブラウザからアクセス

ポート8081に関連づけているのでポート8081を指定する


http://192.168.xx.xxx:8081/

tomcat on docker

以上

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月19日日曜日

スマホで撮影する三脚を購入

ドローンを購入して一週間が経ちました。ドローンで色々と遊んでいるうちに飛んでいるドローンを撮影したいなと思って、スマホ用の三脚を購入しました。

スマホで撮影する三脚

最初は秋葉原に行って探していたのですが、結構値段がする品ばかりで適当な製品がありませんでした。
そもそも、自撮り棒ばかりで三脚はほとんど数がない状態です(秋葉原なのに...)。仕方ないので、ダイソーにある三脚を購入しました。

価格は108円!!

価格分の価値は十二分にあると思います。この三脚を利用して撮影したのが以下のドローン動画です。

これからはドローンとarduinoのネタも扱っていきたいので、動画もどんどんアップしていきたいと思います。
というわけでこれからは動画も扱いながら技術blogを続けていくので、よろしくお願いします。

PS: amazonで200円ほどで、そこそこよさそうな三脚が販売しているようです。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月18日土曜日

ドローンを動かしてみた - ドローンを購入してわかったこと -

ドローンを購入して一週間が経ちました。ですが、操縦に苦戦しています。
ある程度予想はしていましたが、車両系のラジコンと異なり、空を飛ぶドローンは操作が難しいです。

とはいえ、遊んでいるうちに色々とわかってきたことも多いです。
今回はドローン購入の流れから、操作で学んだことまでを記載します。

購入した機種

今回購入したのが上記のドローン『X4 Cam』です。ネットではなく秋葉原の実店舗で購入しました。

店員さんからのアドバイス

実際にドローンの購入をする場合の選択肢としては、実店舗購入か、amazonや楽天で購入することになると思います。

私の場合は、秋葉原のスーパーラジコンで購入しました。
実店舗まで出向いたのは、店員さんから有用なアドバイスが聞けるかもしれないと考えたからです。
また、自宅から秋葉原までは20分弱くらいの距離ということも理由の一つです。

店員さんに初めて購入するのはどのドローンがオススメか尋ねたところ、初心者は操作を覚えられないので、一番安いのを買うべきだとアドバイスされました。
多くの話題を集めているドローンですが、かなり多くの人が、操作を覚えるまでに挫折してしまうらしいです。
確かに今の子供はラジコンとかやらないかもしれませんね。実際、外でラジコンで遊ぶ光景をあまり見ません。

店員さんのアドバイスはかなり役立ちました。めちゃくちゃに機体をぶつけまくっています。

操作は頭と体で覚える

最初は操作は体で覚えようと思ったのですが、全然上達しませんでした。
なので、説明書を読み、用語を覚え、体系化して、以下の通りに知識と操作を身につけていきました。

覚えた操作手順

  • 離陸
  • 着地
  • ホバリング

練習動画

購入から1時間くらい練習した後の撮影動画です。一回の限界フライト時間が7分程度なので、練習時間としては短くて結構つらいです。バッテリーの充電は40分程かかります。
僕は結局一週間後に予備バッテリーとローターを購入しました。

ドローンを使う場合の注意点

コントローラーをもったまま機体に触れてはいけません

間違ってコントローラーのスロットルに触れて、機体のローターが回ると怪我をしてしまいます。
僕も最初のうちは何度かこのミスをやってしまい傷をつくってしましました。
経験の中で学んでいくとは思いますが、十分注意してください。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

dockerで動かしたapacheをブラウザからアクセスして確認する

フロント画面側をhtml,css,jsだけで作成するプロジェクトがあったので、開発環境をdockerで作成しました。
apacheだけの利用でvagrantを使うのはちょっと大袈裟です。
以下、構築メモです。

環境

  • boot2docker(Docker version 1.5.0)

Dockerfileの用意

まずはDockerfileを用意します。


        // プロジェクトフォルダに移動
        cd {projectfolder}/appserver
        // Dockerfileを作成
        touch Dockerfile

Dockerfilew記述


# Pull base image.
FROM centos:6.6
MAINTAINER Edy

# yum update
RUN rpm -Uhv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN yum -y update
RUN yum install -y vim git sudo passwd wget make gcc tar readline-devel
RUN yum install -y openssl-devel openssh openssh-server openssh-clients
RUN yum install -y install libxml2 libxml2-devel libxslt libxslt-devel

# install apache
RUN yum install -y httpd

EXPOSE 80

ENTRYPOINT ["/usr/sbin/httpd"]
CMD ["-D", "FOREGROUND"]

パッケージは必要に応じてインストールします。sudo, wget, gccくらいはいれておくと後々便利です。

Dockerfileファイルをビルド


docker build -t websever001 .

ホストの 8080 ポートとコンテナの 80 ポートを対応付けて起動


docker run -p 8080:80 -d websever001

// プロセスを確認
docker ps -a
c6779da3b96f        websever001:latest   "/usr/sbin/httpd -D    24 minutes ago      Up 24 minutes                 0.0.0.0:8080->80/tcp   high_torvalds

dockerのIPを調査


boot2docker ip

192.168.xx.xxx

ブラウザからアクセス

ポート8080に関連づけているのでポート8080を指定する


http://192.168.xx.xxx:8080/

以上

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 - カスタムエラーページの作成 -

rails4を使用したカスタムエラーページの作成方法です。public配下のデフォルトエラーページでも動作に問題はありませんが、エラーページを作成したほうがSEO的には良いので、作成することをお薦めします。

環境

  • rails4.1.2
  • Foundation5

はじめに

今回の対応で有効なrailsのバージョンはrails4.1以上です。railsのバージョンが4.1より低い場合は、バージョンをあげるか、他のやり方を選択する必要があります。

コントローラーの作成

エラーをハンドリングするコントローラーを作成します


bundle exec rails generate controller errors not_found_error internal_server_error

routes.rb

エラー画面は本番(production)環境にだけに適用します。
開発時は、開発(development)環境でカスタムエラー画面を確認するときだけコメントアウトします。でないとエラーが画面に表示されなくなって、開発効率が落ちます。
もちろん、コミットするときはコメントアウトを外します。


  #if Rails.env.production?
    get '404', :to => 'errors#page_not_found'
    get '422', :to => 'errors#server_error'
    get '500', :to => 'errors#server_error'
  #end

ErrorsControllerの実装

layoutやtemplateは作成しているWEBアプリに応じて自分で用意します


# coding: utf-8
class ErrorsController < ApplicationController

  def page_not_found
    respond_to do |format|
      format.html { render template: 'errors/not_found_error', layout: 'layouts/web/application', status: 404 }
      format.all  { render nothing: true, status: 404 }
    end
  end

  def server_error
    respond_to do |format|
      format.html { render template: 'errors/internal_server_error', layout: 'layouts/web/application', status: 500 }
      format.all  { render nothing: true, status: 500}
    end
  end

end

config/application.rb


config.exceptions_app = self.route

config/production.rb, config/development.rb


config.consider_all_requests_local = false

カスタムエラー画面がdevelopment環境で確認できたら、上記のdevelopment.rbはtrueに変更します。でないと、開発環境でもカスタムエラー画面に遷移するので、デバッグ開発がやりずらくなってしまいます。

全ての設定が完了したら、サーバーを再起動して、routesに設定されていないurlに遷移してみてください。カスタムしたエラーページが表示されるはずです。

以上

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 - kaminariとFoundation -

WEBアプリにkaminariとFoundationを導入したので、やり方と記録を記述します。

環境

  • rails4.1.2
  • Foundation5

kaminari導入

Gemfile

kaminariのgemを追加します


# paging
gem 'kaminari'

kaminari install


bundle install

Installing kaminari 0.16.3

kaminari Foundation install

ページングに利用するFoundation用のviewを作成します


bundle exec rails g kaminari:views foundation

      downloading app/views/kaminari/_first_page.html.erb from kaminari_themes...
      create  app/views/kaminari/_first_page.html.erb
      downloading app/views/kaminari/_gap.html.erb from kaminari_themes...
      create  app/views/kaminari/_gap.html.erb
      downloading app/views/kaminari/_last_page.html.erb from kaminari_themes...
      create  app/views/kaminari/_last_page.html.erb
      downloading app/views/kaminari/_next_page.html.erb from kaminari_themes...
      create  app/views/kaminari/_next_page.html.erb
      downloading app/views/kaminari/_page.html.erb from kaminari_themes...
      create  app/views/kaminari/_page.html.erb
      downloading app/views/kaminari/_paginator.html.erb from kaminari_themes...
      create  app/views/kaminari/_paginator.html.erb
      downloading app/views/kaminari/_prev_page.html.erb from kaminari_themes...
      create  app/views/kaminari/_prev_page.html.erb

Controllerでkaminariを利用する


// before
@tests = Test.where(sub_id: params[:sub_id], deleted_at: nil)

↓

// after
@tests = Test.where(sub_id: params[:sub_id], deleted_at: nil).page(params[:page])

viewにページングのレイアウトを追加


<%= paginate @tests %>

下記のように表示されます

設定ファイルを作成


bundle exec rails g kaminari:config

create  config/initializers/kaminari_config.rb

デフォルト設定で利用する場合は作成する必要ありません。

find_by_sqlを使った場合のkaminari利用方法


@data = find_by_sql([sql, params[:sub_id])
@tests = Kaminari.paginate_array(@data).page(params[:page]).per(10)

上記のコードを見てもらえばわかると思いますが、paginate_arrayメソッドはArrayオブジェクトをpaginatable Arrayオブジェクトに変換するだけです。変換する理由は、便利なpage methodをviewで利用するためです。
なのでパフォーマンスには十分注意してください。(そもそもfind_by_sqlを使う実装やテーブル設計に問題がある可能性が高いです。リファクタリングをしましょう。)

以上

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月15日水曜日

RabbitMQ - 基本を学ぶ -

前回RabbitMQのインストールをしたので、RabbitMQの基本を学習していきます。
私自身がRabbitMQの初心者なので用語から学習していきます。言語はrubyを使います。

  • mac
  • vagrant1.7.2(cent os)

環境はcentosを利用します。ただ、今後はUbuntuに変更しようか迷っています。こういったデータもありますので…。
とりあえず今回のプロジェクトはcentosなので、centosを利用します。

git2.3.2をインストール

centos6.5のgitのバージョンは1.7.1です。せっかくなので2.3.1に変更します。


// yumをintsall 
sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
// source install
wget wget https://www.kernel.org/pub/software/scm/git/git-2.3.2.tar.gz
// 解凍
tar -zxf git-2.3.2.tar.gz

cd git-2.3.2
make prefix=/usr/local all
sudo make prefix=/usr/local install

// git version check
git --version
git version 2.3.2

ruby2.2.2をインストール


git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv --version
rbenv 0.4.0-146-g7ad01b2
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install --list

  2.2.0
  2.2.1
  2.2.2
  2.3.0-dev

rbenv install 2.2.2
rbenv global 2.2.2
ruby -v

Hello worldの実装

まずはHello worldを実装して基本的な動きを理解します。

用語

  • producer : 送り手
  • consumer : 受け手

The Bunny client libraryをインストール

RabbitMQをrubyで動かすためのライブラリを導入します。


gem install bunny --version ">= 1.6.0"

上記ではグルーバルなgemを利用してますが、railsアプリ等を利用している人はBundlerを使いましょう。

送信

producer(send.rb)を作成


#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new
conn.start

ch   = conn.create_channel
q    = ch.queue("hello")

ch.default_exchange.publish("Hello World!", :routing_key => q.name)
puts " [x] Sent 'Hello World!'"

conn.close         

メソッド名が非常に分かりやすく実装されています。

重要なポイントは"ch.default_exchange.publish("Hello World!", :routing_key => q.name)"の部分です。

exchangeはAMQPプロトコルのExchangeのことです。Exchangeは、生成されたMessageを受け取る役割を持ちます。
Routing keyはメッセージプロパティの一つです。デフォルトのExchangeはひとつのキューのメッセージへの道筋となります。

producer(send.rb)を実行


ruby send.rb
 [x] Sent 'Hello World!'

上記の処理ではExchangeから、"hello"というrouting_keyを指定して、キューに"Hello World!"というメッセージを設定しています。

受信

Consumer(receive.rb)を作成


#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch   = conn.create_channel
q    = ch.queue("hello")

begin
  puts " [*] Waiting for messages. To exit press CTRL+C"
  q.subscribe(:block => true) do |delivery_info, properties, body|
    puts " [x] Received #{body}"
  end
rescue Interrupt => _
  conn.close

  exit(0)
end      

consumer(receive.rb)を実行


ruby receive.rb
 [*] Waiting for messages. To exit press CTRL+C
 [x] Received Hello World!

上記のプログラムは、CTRL+Cを押すまで動き続けます。
もう一つターミナルを開いてsend.rbを実行してみてください。Consumer側のターミナルでsend.rbで送信したメッセージが表示されるはずです。

動作が確認できたら、これでHello worldは終了です。CTRL+Cでプログラムを止めましょう。

以上。(多分)まだ続きます。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

rails4 - Asset filtered out and will not be servedの罠と回避方法 -

環境

  • rails4.1.2

事象と調査

rails4.1.2でwebアプリを作成していると、"Asset filtered out and will not be served"が発生しました。

このエラーをググって調査したところ、

config/environments/development.rbを

config.assets.raise_runtime_errors = false

に変更すればよいという情報を発見しました。

残念ながら、この修正方法はNGです。
確かにこれなら開発を続けることは可能ですが、この修正方法には致命的な弱点があります。

それは、本番環境でアセットパイプラインを利用している場合、cssやjsが読み込めないエラーが発生する可能性が高いことです。

rails公式サイトのアセットパイプラインの説明には以下のように記載されています。


config.assets.raise_runtime_errors = true

このオプションがtrueになっていると、アプリケーションのアセットがconfig.assets.precompileに記載されているとおりにすべて読み込まれているかどうかをチェックします。

つまり、本番環境でアセットパイプラインを利用するWEBアプリの場合(WEB APIを作成する場合は除く)は


config.assets.raise_runtime_errors = false

で開発を行ってはいけません。

当然ですよね。アセットパイプラインを使うのに、アセットパイプラインが有効でない状態で開発を行えば、本番モードでcssやjsが読み込めないエラーが発生する可能性は高くなります。

開発者と本番環境構築の作業者が別で、本番環境構築者が開発と本番の環境の差異を埋めるなら問題はありません。しかし、railsで開発する場合は、開発者が本番サーバーのアプリビルドまで担当することが多いのではないでしょうか。開発と本番の環境は、極力差をなくすべきです。

他にも


config.assets.debug = false

config.assets.digest = true

の設定は、開発環境でも有効にしておくべきです。

そうしないと、開発環境で全てのチェックが終わっても、本番のアセットパイプラインでcssとjsが反映されてないというエラーが発生し、泣く泣く修正作業をすることになります。

"Asset filtered out and will not be served"修正方法

というわけで"Asset filtered out and will not be served"の修正は、開発環境でもアセットパイプラインが有効な設定をしたうえで、assets.rbに


Rails.application.config.assets.precompile += %w( xxxxxx.min.css )

と記載すると良いでしょう。ファイルが増えると冗長になりますが、ひと目で確認できるのは利点です。
ファイル修正後は、サーバーの再起動も忘れずに!!

以上

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

RabbitMQ - インストールから設定まで -

RabbitMQを使用するための調査をしたので、まとめを記載します。
日本語の情報がかなり少ないけど、あまり使われていないのでしょうか…
テスト環境としてvagrantを利用します。

環境

  • mac
  • vagrant1.7.2(cent os)

記事履歴

  • 投稿:2015/04/14
  • 最終更新:2015/04/15

Erlang導入


// wget
wget https://www.rabbitmq.com/releases/erlang/erlang-17.4-1.el6.x86_64.rpm

// install erlang 
sudo rpm -ivh erlang-17.4-1.el6.x86_64.rpm

RabbitMQ導入


// wget
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.5.1/rabbitmq-server-3.5.1-1.noarch.rpm

// install RabbitMQ 
sudo rpm -ivh rabbitmq-server-3.5.1-1.noarch.rpm

chkconfig(サービス自動起動)の設定とサーバーの起動

RabbitMQ serverはパッケージとしてインストールされているので、デーモンとして起動されません。
なので、システムをブートした時にデフォルトでデーモンとして開始するために、以下のように設定をします。


// chkconfigの設定(自動起動)
sudo chkconfig rabbitmq-server on

// 状態を確認
chkconfig --list rabbitmq-server
rabbitmq-server 0:off 1:off 2:on 3:on 4:on 5:on 6:off

// サーバーを起動
sudo /sbin/service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.

Note: 上記の場合、RabbitMQはシステムユーザーrabbitmqとして動作している。
設定ファイルを変更する場合は、root、もしくはrabbitmqになって変更する必要があります。

動作確認


// ステータス確認
sudo rabbitmqctl status # sudo /sbin/service rabbitmq-server statusと同じ

[{pid,9967},
 {running_applications,[{rabbit,"RabbitMQ","3.5.1"},
                        {mnesia,"MNESIA  CXC 138 12","4.12.4"},
                        {os_mon,"CPO  CXC 138 46","2.3"},
                        {xmerl,"XML parser","1.3.7"},
                        {sasl,"SASL  CXC 138 11","2.4.1"},
                        {stdlib,"ERTS  CXC 138 10","2.3"},
                        {kernel,"ERTS  CXC 138 10","3.1"}]},
 {os,{unix,linux}},
 {erlang_version,"Erlang/OTP 17 [erts-6.3] [source] [64-bit] [async-threads:30] [kernel-poll:true]\n"},
 {memory,[{total,34863768},
          {connection_readers,0},
          {connection_writers,0},
          {connection_channels,0},
          {connection_other,2632},
          {queue_procs,2632},
          {queue_slave_procs,0},
          {plugins,0},
          {other_proc,13375752},
          {mnesia,57984},
          {mgmt_db,0},
          {msg_index,45136},
          {other_ets,732320},
          {binary,13416},
          {code,16576864},
          {atom,602729},
          {other_system,3454303}]},
 {alarms,[]},
 {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,192287539},
 {disk_free_limit,50000000},
 {disk_free,194548305920},
 {file_descriptors,[{total_limit,924},
                    {total_used,3},
                    {sockets_limit,829},
                    {sockets_used,1}]},
 {processes,[{limit,1048576},{used,123}]},
 {run_queue,0},
 {uptime,1244}]


ログ


// フォルダ移動
cd /var/log/rabbitmq 

tail -f rabbit@localhost.log
msg_store_persistent: using rabbit_msg_store_ets_index to provide index

=WARNING REPORT==== 14-Apr-2015::02:00:02 ===
msg_store_persistent: rebuilding indices from scratch

=INFO REPORT==== 14-Apr-2015::02:00:02 ===
started TCP Listener on [::]:5672

=INFO REPORT==== 14-Apr-2015::02:00:02 ===
Server startup complete; 0 plugins started.

Limits

Limitの数(スレッド数の上限)は、初期設定では少なすぎるので変更するべきです。
本番環境なら少なくとも65536にすることを薦めます。ただし、開発環境なら4096で十分です。


// プロセス数
ulimit -n
1024

// 変更(一時的に更新)
ulimit -S -n 4096

// プロセス数
ulimit -n
4096

Limitの変更方法は環境や状況に応じて異なります。ここが参考になります。

以上。続きます。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月13日月曜日

Google Blogger - Googleカスタム検索エンジン設置の注意点 -

Googleカスタム検索エンジンとは

ウェブサイトを訪れた人たちが必要なものを簡単に検索できるようにする機能です。
過去に自分が書いた記事を探すのにも役に経ちます。

設置時にはまったこと

検索の対象を


http://xxxx.blogspot.jp

と設定したら、検索ボタンを押してもまったく結果が表示されませんでした。

調査すると、jpではなくcomにしないとダメなことがわかりました。
なので、正しくは以下のとおりにURLを設定します。


http://xxxx.blogspot.com

これできちんとサイト内検索が実行されます。

参照

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月12日日曜日

Arduino はじめてのハードウェア開発(電子工作)

私がスマートフォンアプリの開発をはじめてから約5年が経ちました。
今ではネイティブでスマートフォンアプリの開発をできる人もかなり増え、今後5 ~ 10年くらいはスマホアプリビジネスは安定して続いていくでしょう。

また、アメリカのほうではハード開発のスタートアップも増えてきました。
私もスマホアプリの開発はちょっぴり飽きてきたので(WEBより楽しいですけどね)、そろそろハードの開発のほうにも手を出していきたいと思います。
今更ながらMakerに手を出していきます。

というわけで、昔購入したArduinoを引っ張り出してきて学習を開始しようと思います。前よりも資料も色々増えているので、本格的に学習していければと思います。

さあ、レッツ、イノベーション。

環境

  • Arduino Uno
  • LED
  • Mac
  • Getting started with Arduino, 2nd

教本には『Getting started with Arduino, 2nd』を使用します。英語版ならフリーでダウンロードできるので、それを参考にすすめていきます。

Blinking an LED

『Getting started with Arduino, 2nd』 P28 - 36

日本語では『Lチカ』と呼ばれているプログラミングからはじめていきます。ソフトウェアプログラミングでいう『Hello world』みたいなものです。

まずは用語のまとめです

用語と説明

  • LED(light-emitting diod)
  • cathode(キャソッド)

正電荷が流れ込むほうの電極。
LEDの短い方です。

  • anode(アノード)

正電荷が流れ出す電極。
LEDの長い方です。

code

const int LED = 13; // LED connect to digital pin 13

void setup() {
  // put your setup code here, to run once:
  // sets the degital pin as output
  pinMode(LED, OUTPUT);

}

void loop() {
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}

検証ボタンを押下してコンパイルに成功したら、マイコンボードに書き込むボタンを押すと、Arduinoの動きが変更されます。確認してみましょう。

動いていますね。
さて、各関数の内容を確認していきます。

setup()

プログラムの最初に実行したいコード

loop()

何度も何度も実行するコード

pinMode(LED, OUTPUT)

指定したpin番号を出力に設定する

digitalWrite(LED, HIGH)

pinをon(HEIGH)にする

delay(1000)

1000ms(1秒)停止

digitalWrite(LED, LOW)

off(LOW)にする

上記の動作をより理解するために、以下のように値を変更して動きを確認します。

  • 1.delayを減らす
  • 2.異なったpinを使い、違うパターンのLチカを実行。特にdelayを小さくしたパターンをみるべき

delayを10msまで小さくすると、点滅しなくなりました。

2は3拍子のLチカを作成してみました。

Blinking an LEDは以上で終了です。お疲れさまでした。Lチカはドローンの改造で使えそうですね。
次はWhat Is Electricity?とUsing a Pushbutton to Control the LEDを学習したいと思います。
でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

ドローン購入

  • 公開日:2015年04月12日
  • 最終更新日:2016年01月29日

購入

ようやくドローンを購入しました。

10年後にはアメリカでは、自作ドローンは10億ドルの市場になるとも言われています。

面白そうだし、私も自作ドローンを作ってみたいなあと思ったのですが、まずはドローンを楽しむことからはじめたいと思います。
つまらないことや興味ないことは、どちらにせよ長続きしないので、WEBやスマホのように熱中できたらドローンの自作等の学習をしていきたいと思います。

体験

そんなわけで、さっそく土日に色々と遊んでみたのですが、これは楽しいですねー。
ミニ四駆とかが好きだった人は絶対はまると思います。

なので、まずは自作とか考えないで、ドローンを楽しみたいと思います。僕はラジコンヘリの経験がないので、操作はかなり難しく感じます。 全然思ったように動かせません。

また、私は登山が好きなので、ドローンで色々な角度から撮影出来たら楽しいだろうなあと思いました。

まとめ

自作の山登りのアプリ「マウンテンチャンネル」でも色々と利用できそうな気がします。やっぱ遊びって大事ですね。

日本はドローン後進国と言われていますが、今後日本で広まっていくかどうかはアーリーアダプター達がドローンをどう活用していくか次第だと思います。私も楽しむと同時に、エンジニアの視点からもドローンを見ていきたいと思います。

興味をもった人は、是非ドローンを体験してみてください!

PICK UP オススメドローン
関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月11日土曜日

Create cakephp and fundation project Page 1

Enviroment

  • vagrant centos6.5
  • php5.5
  • php-fpm
  • nginx1.6.2

move project root folder


cd {project_root_folder}

install composer


curl -sS https://getcomposer.org/installer | php

if your server uses chef, you may install composer by recipe. but, I don't recommend to do. Basically, php is instablity. php is not able to execute version controller. php is different from ruby or python.

create composer.json


touch composer.json

{
    "name": "test",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "cakephp/cakephp": "2.6.*"
    },
    "require-dev": {
        "cakephp/debug_kit": "2.2.*@dev",
        "phpunit/phpunit": "3.7.*"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}

install composer.phar


php composer.phar install --dev

create project


cake bake project <path to project>

tmp permission change


chmod 777 tmp
chmod -R 777 tmp/

core.php add mask


/**
 * Configure the cache used for general framework caching. Path information,
 * object listings, and translation cache files are stored with this configuration.
 */
Cache::config('_cake_core_', array(
    'engine' => $engine,
    'prefix' => $prefix . 'cake_core_',
    'path' => CACHE . 'persistent' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration,
    'mask'=>0666
));

/**
 * Configure the cache for model and datasource caches. This cache configuration
 * is used to store schema descriptions, and table listings in connections.
 */
Cache::config('_cake_model_', array(
    'engine' => $engine,
    'prefix' => $prefix . 'cake_model_',
    'path' => CACHE . 'models' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration,
    'mask'=>0666
));


webroot/index.php change


define('CAKE_CORE_INCLUDE_PATH',  ROOT . DS . APP_DIR . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');

↓

define('CAKE_CORE_INCLUDE_PATH',  ROOT . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');

Config/database.php create


cp -a database.php.default database.php

 public $default = array(
  'datasource' => 'Database/Mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'test',
  'password' => 'testtest',
  'database' => 'app_development',
  'prefix' => '',
  'encoding' => 'utf8',
 );

move plugin


// move plugin
mv Plugin/* {app_root}/Plugin/

// Config/bootrap.php
CakePlugin::load('DebugKit');

access


http://192.168.33.12/

Your version of PHP is 5.2.8 or higher.

Your tmp directory is writable.

The FileEngine is being used for core caching. To change the config edit APP/Config/core.php

Your database configuration file is present.

CakePHP is able to connect to the database.

DebugKit plugin is present

Displayed!!

thanks

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月9日木曜日

Zabbix 2.4の導入 - CentOS6.5

Zabbix 2.4をCentOS6.5に導入した記録です

環境

  • sakuraVPS

ハマった箇所

  • php5.5だとyumでinstallできなかった

Zabbix 2.4をyumでinstallしようとすると、centosのphpが5.5だとインストールすることができませんでした。
ZabbixはDBの接続にphpを使っているらしいです。
色々やってみましたが、時間もなかったので、php5.5→php5.3にしてZabbix 2.4をインストールしました。
以下、手順です。

php5.5削除

sudo yum remove php-*

php5.3をインストール

sudo yum install php

cent6.5なのでデフォルトでphp5.3がインストールされます

zabbixのyumリポジトリ登録

sudo rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm

インストール

yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese
yum -y install zabbix-agent
yum -y install zabbix-get

上記のyum installが成功するには、mysqlがインストールしてあり、phpが5.3であることが前提となります。

zabbixのyumリポジトリの無効化 /etc/yum.repos.d/zabbix.repo

// 二箇所変更
enabled=0

MYSQLの設定

mysql -u root -p


// Zabbix用DBの作成
create database zabbix character set utf8;

// Zabbix用ユーザの作成
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; # passwordは適当に変更する

// 設定を反映
FLUSH PRIVILEGES;

// Zabbix用のDBスキーマとデータをインポート
mysql -u zabbix -p

source /usr/share/doc/zabbix-server-mysql-2.4.4/create/schema.sql
source /usr/share/doc/zabbix-server-mysql-2.4.4/create/images.sql
source/usr/share/doc/zabbix-server-mysql-2.4.4/create/data.sql

上記が成功すると、大量のテーブルが作成されます。

zabbixを動作させるための残りの設定

// zabbix DB設定(上記のMysql)
vi /etc/zabbix/zabbix_server.conf

// Zabbixサーバの起動
sudo service zabbix-server start

// apache再起動
sudo service httpd restart

// 動作を確認するため、Zabbixエージェントも起動
sudo service zabbix-agent start

// Zabbixエージェントの動作確認
zabbix_get -s 127.0.0.1 -p 10050 -k agent.version

2.4.4 # Zabbixのバージョンが表示されれば、起動

Apacheに設定を追記

// default.confに追加
Include /etc/httpd/conf.d/*.conf

Apache再起動

// 再起動
sudo service httpd restart

ブラウザから各種設定

// default.confに追加
http://{ip}/zabbix

// 画面通りに進めるはず。最後に以下の画面が表示される。
Configuration file
"/etc/zabbix/web/zabbix.conf.php"
created: OK

Congratulations on successful installation of Zabbix frontend.

When done, press the "Finish" button

お疲れ様でした!!

以上

ps: zabbix導入完了後にphp5.5に戻してもZabbixは正常に動作します。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

vagrant - GuestAdditions versions on your host (4.3.18) and guest (4.3.6) do not match.

vagrantの起動で盛大にはまったのでメモ

  • mac
  • vagrant1.7.2

発生したエラー内容は


GuestAdditions versions on your host (4.3.18) and guest (4.3.6) do not match.

上記のエラーが発生すると、vagrantとローカルのfolderのsyncに失敗してしまって、ローカルで作業できない。
調査して、以下の対応をしたが、全然解決しなかった。


http://jitsu102.hatenablog.com/entry/2014/04/12/235946
http://www.utano.jp/entry/2014/11/vagrant_guest_additions_update_error

仕方なくログを追跡すると、


No package kernel-devel-2.6.32-431.3.1.el6.x86_64 available.

とあったので上記のrpmをinstallすれば解決できるのではないかと推測。

vagrant側

vagrant ssh
sudo yum install -y http://bay.uchicago.edu/centos-vault/6.5/updates/x86_64/Packages/kernel-devel-2.6.32-431.3.1.el6.x86_64.rpm
sudo yum install -y kernel-devel kernel-headers dkms gcc gcc-c++
exit

ローカル側

vagrant vbguest --do install
vagrant vbguest --status

GuestAdditions 4.3.18 running --- OK.

これは成功の予感

vagrantを起動

vagrant up

成功!!

結論

もっと自分の技術を信じようぜ!
Dockerもっと使えるようになりたい!
chefともおさらばしたい!

以上

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月8日水曜日

JobScheduler - Java exception java.lang.NoSuchMethodError

JobScheduler occurred Error. Used Code is SampleParallel of Sample codes.
This error caused by declaration, which is a part of [script language="javascript"].

if JobScheduler was installed 64bit OS , you must change from javascript to javax.script:rhino.

Enviroment

  • Sakura VPS centos6.5
  • mysql(installed)
  • java1.7(installed)

Before


    <script language="javascript">

After


    <script language="javax.script:rhino">

Thanks

Reference site

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

JobScheduler - Operation Note

JobScheduler is similar to JP1. But, JobScheduler is OSS. Everyone is able to be available freely.

Last time, I succeded installing JobScheduler. This time, I try basic function.

Enviroment

  • Sakura VPS centos6.5
  • mysql(installed)
  • java1.7(installed)

launch, stop, restart, status.


#起動
{installpath}/scheduler/bin/jobscheduler.sh start

#停止
{installpath}/scheduler/bin/jobscheduler.sh stop

#再起動
{installpath}/scheduler/bin/jobscheduler.sh restart

#状況  
{installpath}/scheduler/bin/jobscheduler.sh status

if you don't understand {installpath}, you can find scheduler_install.xml.

Language change


vi {installpath}/scheduler/scheduler_data/config/operations_gui/custom.js

// change japanese
_sos_lang            = 'ja';

// browser update

lang file is js.

Execute Job


cd {installpath}/scheduler/scheduler_data/config/live

// create {jobname}.job.xml
touch sample_test1.job.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<job >
  <script language="shell">
      <![CDATA[
      #!/bin/sh
      LANG=C
      echo "$SCHEDULER_JOB_NAME is running"
      echo "now - `date`"
      exit $?
          ]]>
  </script>
</job>

// browser update
// タスク即時実行

// log
sample_test1 is running
now - Mon Apr  6 17:15:38 JST 2015

Execute Time Scheduled Job

  • ジョブメニュー選択
  • タスク実行時刻設定
  • カレンダーで日付と時刻を選択してOKをクリック

Execute Job Chain


cd {installpath}/scheduler/scheduler_data/config/live

// create {jobname}.job_chain.xml
touch sample_chain_test1.job_chain.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<job_chain>
    <job_chain_node state="100"
                    job="first"
                    next_state="200"
                    error_state="error"/>
    <job_chain_node state="200"
                    job="second"
                    next_state="300"
                    error_state="error"/>
    <job_chain_node state="300"
                    job="last"
                    next_state="success"
                    error_state="error"/>
    <job_chain_node state="error"/>
    <job_chain_node state="success"/>
</job_chain>

// create {jobname}.job.xml
touch first.job.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<job >
  <script language="shell">
      <![CDATA[
      #!/bin/sh
      LANG=C
      echo "first job"
      exit $?
          ]]>
  </script>
</job>

// create {jobname}.job.xml
touch second.job.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<job >
  <script language="shell">
      <![CDATA[
      #!/bin/sh
      LANG=C
      echo "second job"
      exit $?
          ]]>
  </script>
</job>

// create {jobname}.job.xml
touch last.job.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<job >
  <script language="shell">
      <![CDATA[
      #!/bin/sh
      LANG=C
      echo "last job"
      exit $?
          ]]>
  </script>
</job>

Execute Order

  • ジョブチェーンメニュー選択
  • オーダー作成
  • 項目を全て設定してOKをクリック

Thanks

Reference site

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月6日月曜日

JobScheduler - Installation Note

JobScheduler is similar to JP1. But, JobScheduler is OSS. Everyone is able to be available freely.

Enviroment

  • Sakura VPS centos6.5
  • mysql(installed)
  • java1.7(installed)

Install Jobscheduler


wget --no-check-certificate https://download.sos-berlin.com/JobScheduler.1.8/jobscheduler_linux-x64.1.8.2.tar.gz

Extract tar


tar zxvf jobscheduler_linux-x64.1.8.2.tar.gz

Setting Mysql


mysql -u root -p

Install mysql-connector-java


sudo yum install mysql-connector-java

ls -la /usr/share/java/ | grep mysql
-rw-r--r--    1 root root   819803  6月 22 23:33 2012 mysql-connector-java-5.1.17.jar
lrwxrwxrwx    1 root root       31  4月  6 10:03 2015 mysql-connector-java.jar -> mysql-connector-java-5.1.17.jar

Setting alternatives java and confirm java version


sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_67/bin/java 1700

alternatives --display java

/usr/lib/jvm/jre-1.5.0-gcj/bin/java - 優先項目 1500
 スレーブ keytool: /usr/lib/jvm/jre-1.5.0-gcj/bin/keytool
 スレーブ rmiregistry: /usr/lib/jvm/jre-1.5.0-gcj/bin/rmiregistry
 スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.5.0-gcj
 スレーブ jre: /usr/lib/jvm/jre-1.5.0-gcj
/usr/lib/jvm/jdk1.7.0_67/bin/java - 優先項目 1700
 スレーブ keytool: (null)
 スレーブ rmiregistry: (null)
 スレーブ jre_exports: (null)
 スレーブ jre: (null)
現在の「最適」バージョンは /usr/lib/jvm/jdk1.7.0_67/bin/java です

java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

Modify scheduler_install.xml


        // install path
        <installpath>/home/{user}/scheduler</installpath>

        // log path
        <UserPathPanelElement>/home/{user}/scheduler/logs</UserPathPanelElement>

        // db setting
        <com.izforge.izpack.panels.UserInputPanel id="dbconnection">
            <userInput>
                <!-- Database Configuration 
                     These entries are only necessary if the package 'Database Support' is chosen. -->

                <!-- Enter the name or ip address of the database host -->
                <entry key="databaseHost" value="localhost"/>

                <!-- Enter the port number for the database instance. Default ports are for MySQL 3306, 
                     Oracle 1521, MS SQL Server 1433, postgreSQL 5432, DB2 50000, Sybase 5000. -->
                <entry key="databasePort" value="3306"/>

                <!-- Enter the schema -->
                <entry key="databaseSchema" value="scheduler"/>

                <!-- Enter the user name for database access -->
                <entry key="databaseUser" value="scheduler"/>

                <!-- Enter the password for database access -->
                <entry key="databasePassword" value="scheduler"/>

                <!-- You must provide the MySQL, MS SQL Server or Sybase JDBC Driver respectively if you selected 
                     corresponding DBMS type. For license reasons MySQL, Sybase and MS SQL Server JDBC Drivers are 
                     not provided. Alternatively you can use the mariadb JDBC Driver for MySQL and 
                     the jTDS JDBC Driver for MS SQL Server and Sybase which is provided.-->

                <!-- You can choose between 'yes' or 'no' for using the jTDS JDBC Driver
                     This entry has only an effect for MS SQL Server or Sybase -->
                <entry key="connectorJTDS" value="yes"/>

                <!-- You can choose between 'yes' or 'no' for using the mariadb JDBC Driver
                     This entry has only an effect for MySQL -->
                <entry key="connectorMaria" value="yes"/>

            </userInput>
        </com.izforge.izpack.panels.UserInputPanel>

        // java mysql adapter
        <entry key="connector" value="/usr/share/java/mysql-connector-java.jar"/>

Install Jobscheduler


./setup.sh -u jobscheduler_install.xml

Access by Browser


http://{ip}:4444/

Thanks

Reference site

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2015年4月2日木曜日

iphone application development project preparation

Make a note about iphone development project preparation every time.

enviroment

  • Xcode6.1

1. create project


    // create project from xcode

2. install cocoapods


    // change directory to project folder
    cd {project_folder}
    // make Gemfile
    touch Gemfile
    // open Gemfile
    vi Gemfile

    // write code
    source 'https://rubygems.org'
    gem 'cocoapods'

    // install
    bundle install --path=vendor/bundle

3. create Podfile


    // change directory to project folder
    cd {project_folder}
    // make Gemfile
    touch Podfile
    // open Gemfile
    vi Podfile

    // write code
    platform :ios, '7.0'
    pod "AFNetworking", "~> 2.0"
    pod 'Reachability', '~> 3.0.0'
    pod 'SHUIKitBlocks'
    pod 'SVProgressHUD'

    // library install
    bundle exec pod install

4. xcode restart and build comfirm

  • xcode close
  • click .xcworkspace flie and xcode restart
  • build and scren display

5. create .gitignore


vi .gitignore

# Mac
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
vendor/bundle/
Pods/

6. create README.md


    // change directory to project folder
    cd {project_folder}
    // make Gemfile
    touch README.md
    // write something

7. git


    // change directory to project folder
    cd {project_folder}
    // make Gemfile
    touch README.md
    // write something
    // staging
    git add --all
    // first tag
    git tag v0.1
    // push master
    git push origin master
    // push tag
    git push -u origin --tags
    // branch
    git branch develop
    // push develop
    git push -u origin develop

All set. Let's enjoy developing.
Thanks.

Reference

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

dockerで開発環境を構築

dockerで開発環境を構築したのでメモを残しておきます。
久しぶりに日本語で記事を書きます。なぜなら言語がPHPだからさ!
フレームワークはこれまた日本人に人気のcakeを使います。

環境

  • Mac Yosemite
  • docker version 1.5.0(using boot2docker)
  • nginx
  • php-fpm
  • php
  • cake php
  • composor
  • suppervisor

dockerファイルの作成

まずはdockerファイルを作成します。dockerファイルを知らないって人は、公式サイトでチュートリアルを勉強してからまた来てください。チュートリアルは理解している前提で進みます。


        cd {projectfolder}
        // 環境構築用のbranchを作成
        git branch env_develop develop
        // プッシュ
        git push origin env_develop
        // Dockerfileを作成
        touch Dockerfile

Dockerfile


FROM centos:6.6
MAINTAINER edy

# yum update
RUN yum -y update

# install nginx
RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
RUN yum -y install nginx

# nginx setting
ADD default.conf   /etc/nginx/conf.d/default.conf
ADD www.conf   /etc/php-fpm.d/www.conf

# install php
RUN rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN yum install -y http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
RUN yum install -y --enablerepo=remi-php55 php php-mbstring php-mcrypt php-devel php-fpm php-cli php-curl php-mysql

# php setting
ADD php.ini   /etc/php.ini

# supervisor
RUN yum install -y python-setuptools
RUN easy_install supervisor

# supervisor setting
ADD supervisord.conf /etc/supervisord.conf

# Expose ports.
EXPOSE 80

# launch nginx
# ENTRYPOINT ["nginx"]
# ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
CMD ["/usr/bin/supervisord"]

nginxとphp-fpmを同じコンテナで動作させるために、supervisorを利用しています。他は特に変わった点はありません。
まず最初にnginxの設定を行います。

default.conf


server {
    listen       80;
    server_name  localhost;

    charset utf-8;
    #access_log  /var/log/nginx/log/host.access.log  main;
    root /var/www/html/app;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

fastcgi_passを設定しています。nginxとphp-fpm間をunix socketで通信します。続いて、php-fpmの設定です。

www.conf


listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nginx
listen.group = nginx

上記に記載されているのは変更点のみです。本来は、全て記載する必要があります。listenはnginxのdefault.confで設定したpathと同じになります。listen.ownerとlisten.groupはnginxです。

php.ini


date.timezone = "Asia/Tokyo"

php.iniはタイムゾーンだけ変更します。この変更をしないとcake phpで警告エラーが表示されます。

supervisord.conf


[supervisord]
nodaemon=true

[program:php-fpm]
command=/usr/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true

nginxとphp-fpmのデーモンを切るのがポイントです。この設定はdocker特有です。

上記で準備は終了なので、ビルドします。

build Dockerfile


  // build Dockerfile
  docker build -t development001 .
  // docker launch by /bin/bash. and foldr sync
  docker run -i -t -v {プロジェクトフォルダ}/app:/var/www/html/app --name dev001 4b97a03d4b73 /bin/bash

上記でbashが起動するので、nginx、php等のバージョンを確認しましょう。cakephpでアプリのひな形を作成するので、-vでローカルのフォルダと同期をしておきます。

install composer and create cakephp


  // syncで指定したフォルダに移動
  cd /var/www/html/app
  // install composer
  curl -sS https://getcomposer.org/installer | php
  // touch 
  touch composer.json
  // crate project
  php composer.phar install

普通にcomposerを導入してcakephpのプロジェクトを作成します。syncしていれば、ローカルからソースコードが操作できるので、ソースコードの変更はSublime Textなどを利用して変更していきましょう。


  1. tmp配下フォルダの権限を777
  2. core.phpのCache::configでmask666を設定
  3. CAKE_CORE_INCLUDE_PATHに変更が必要なら変更する

build Dockerfile posting


  docker build -t development0001 .
  // docker launch by contanier. and foldr sync
  docker run -d -i -v /Users/msuzuki/Documents/nec/api/app:/var/www/html/app -p 80:80 -t development0001:latest
  // ブラウザで開く
  http://localhost:3000/

準備が完了したら再ビルドして、portを指定してdockerコンテナを立ち上げましょう。上記の場合は、boot2dockerでlocalhostを見れるようにポートフォワード設定しています。
上記の設定により、ブラウザから画面が確認できるようになります。

以上。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...