Tag Archive Laravel

RaspberryPi x Laravel x リモコンサーバー

こんにちは、なかしーです。
寒くなって来ましたね。エアコンの時期です。
ということで、我が家のRaspberry Pi君を、現在のAirPlayサーバー、VPNサーバーだけでなく、リモコンサーバーにもしてみました。
ざっくり環境:

  • 機器:raspberry pi B+ (Firmは最新化済)
  • OS:raspbian jessie
  • Framework:laravel 4.2
  • HTTP:apache2 2.4
  • PHP:php5.6
  • DB:mysql(バージョンなんだろう?最新のやつ)

やり方は、先人達が詳しくやり方をのせてらっしゃるので、それを参考にした感じです。但し、RaspbianのJessieを使っている場合はデバイス関連の扱いがWheezyと違うので、要注意です。(ここでハマって、2回クリーンインストールした。。)

  • /etc/modulesではなく/boot/config.txtを弄ります
  • sudo cat /sys/kernel/debug/gpioしても、リストされません。

英語記事やらさんざん見てみましたが、結論として、日経BPさんの記事Raspberry Piをリモコンにしてエアコン制御、ロボットにも搭載が一番参考になりました。感謝。
 
そして、ある程度コマンドレベルでLIRCが動かせる様になったら、次は無駄にLaravelを入れてみます。(単に、MVCの書き方に慣れすぎたせいで、普通のPHPコードを書くのが億劫なだけ、、という。。)
下ごしらえ:

  • sudo apt-get install at (一時ジョブ用として使う。Cronよりお手軽。)
  • sudo apt-get install apache2 (入ってるかな?)
  • sudo vi /etc/apache2/sites-available/000-default.conf (必要に応じてドキュメントルート変更)
  • sudo vi /etc/apache2/apache2.conf (同じくドキュメントルート変更分と、AllowOverride Allにする)
  • sudo a2enmod rewrite
  • sudo vi /etc/apache2/ports.conf (Portを80ではなく8080とかにする)
  • sudo vi /etc/apache2/sites-enabled/000-default (同じくPort変更)
  • sudo service apache2 restart
  • sudo apt-get install mysql-server (rootのパスワードは適宜)
    • インストール確認
      mysql -u root -p
      select user,host,password from mysql.user;
      ->ユーザーが5つ表示されることを確認
    • アプリ用のユーザー作成
      GRANT ALL PRIVILEGES ON <DB名>.* TO <ユーザー名>@localhost IDENTIFIED BY ‘<パスワード>’ WITH GRANT OPTION;
      select user,host,password from mysql.user;
      ->ユーザーが6つ表示されることを確認
    • アプリ用のデータベース作成
      CREATE DATABASE <DB名> CHARACTER SET utf8;
      select host,db,user from mysql.db;
      ->データベースが1件表示されることを確認
  • sudo apt-get install php5-mysql
  • sudo apt-get install unzip (入ってれば良いです)
  • sudo apt-get install curl (入ってれば良いです)
  • sudo apt-get install openssl (入ってれば良いです)
  • sudo apt-get install php5-mcrypt
  • sudo /etc/init.d/cron start (Cronを使えるようにする)
  • 家のルーターに穴を開ける。(上でapacheのポート変更した番号をRaspberry Pi君に渡してあげる)
  • DDNSなどを適宜設定する。(すいません、私はここは手抜きしているので割愛)
  • SSL(お金が有れば鍵を買いましょう。。無ければ野良・・?)
  • リモコンコマンドの準備
    • irsend SEND_ONCE  XXX XXXX で扱える様に、複数登録しておく
    • カンタンで良いのでスクリプトに上記を突っ込む
    • 上記スクリプトをアパッチで使えるように、sudoers下部に以下エントリ追加する(XXXはスクリプトのパス)
      www-data ALL=NOPASSWD:/XXXXXXXX

 
はい。ここまでくれば、あとは既にどこかで動かしてあるLaravelをまるごとtarで持ってくれば動きます。(というか、疲れたのでcomposerの設定するが面倒になっただけです。初Laravelの人は、、他所の記事を参考にして下さい。。。スマソ)
Laravel確認事項:

  • 初回のmigrate (不要なら不要です)
  • app/config以下を見直す
    • appのKey要素
    • databaseのDB設定
    • emailの各種設定
    • その他。。
  • ユーザー認証をしていれば、ユーザーを再作成する(必要な分だけ)
  • コマンド実行は、raspiコントローラを作って(非REST)、getIndexの引数みてswitch文でコマンド実行してからreturnするようにしてみてます。ここはそのうちもすこしマシにする予定。

 
ということで、わざわざここまでしてリモコンサーバー on Raspberry Pi powered by Laravel環境を作る意味は謎ですが、まぁ、やってみたかったのでやりました。
若干メモ感は半端ない記事ですが、その内ハンズオンセミナーなどやってみますかね。
今後やる事:

  • リモコンコマンドのジョブスケジュール登録を可能にする(atコマンドを使う)
  • 予約済みジョブを変更する(atqコマンドでリストアップして削除などを行う、Cronを編集する)
  • 室温センサーで現在の室温・外気温をモニターする
  • 気圧計をつけてみる

とかかなー。次回あたりは回路図など載せていきます。
では。
 
役に立ったよ、という方、(役に立たなかったよ!という方も)
Facebookページにいいね!して頂けると嬉しいです。
まだの方は、ビジネスクリエーターズへの会員登録をどうぞ。
会員登録は無料です。
◆◆スタッフ募集中◆◆
ビジネスクリエーターズでは、
一緒に活動するスタッフを募集中です。
今よりもちょっと成長のスピードを上げたい方は、
ぜひ一緒に活動しましょう♪
友だち追加数

MySQLのカラム定義を変更する

こんにちは、なかしーです。
今日もWEB関連です。DBのお話ですね。
元々Nullableでなかったカラムを途中でNullableにしたくなりました。管理画面からSQL叩いて直接変更するという手もあるんですが、折角Laravel使っているのでMigrationでやる方法で行きたいと思います。
今回もStackOverflowです。
http://stackoverflow.com/questions/24419999/laravel-migration-change-and-make-column-nullable/24425013#24425013
ここの中の、UpとDownで2行ずつあるところを参考にして以下のような感じで実装しました。

        const CHGFIELD = 'fieldname';
        const ORGTYPE = 'VARCHAR(256)';
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
                DB::statement('ALTER TABLE `table` MODIFY `'. self::CHGFIELD .'` '. self::ORGTYPE .' NULL;');
                DB::statement('UPDATE `table` SET `'. self::CHGFIELD .'` = null WHERE `'. self::CHGFIELD .'` = "0";');
        }
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
                DB::statement('UPDATE `table` SET `'. self::CHGFIELD .'` = "0" WHERE `'. self::CHGFIELD .'` = NULL;');
                DB::statement('ALTER TABLE `table` MODIFY `'. self::CHGFIELD .'` '. self::ORGTYPE .' NOT NULL;');
        }

こんな感じです。fieldnameとvarchar部分は今回変更するカラムの内容で、tableは対象テーブル名として下さい。
 
 
役に立ったよ、という方、(役に立たなかったよ!という方も)
Facebookページにいいね!して頂けると嬉しいです
受付中イベント情報はこちら
まだの方は、ビジネスクリエーターズへの会員登録をどうぞ。
会員登録は無料です。
明日は大久保さんです。
友だち追加数

bootstrapだけで丸ボタンを作る

こんにちは、なかしーです。
今日もWEB関連です。今日はHTMLですね。
Bootstrapで丸いボタンを作りたいな-と思いました。HopelistのHope一覧でログインした時とかにオーナーとかエントリー済みとか表示する際に使ってます。
これを作る際に参考にさせてもらったサイトが以下です。
http://bootsnipp.com/snippets/featured/circle-button
実装時には、微妙にピクセル単位で見え方は調整はしましたが、大体同じですね。
 
役に立ったよ、という方、(役に立たなかったよ!という方も)
Facebookページにいいね!して頂けると嬉しいです
受付中イベント情報はこちら
まだの方は、ビジネスクリエーターズへの会員登録をどうぞ。
会員登録は無料です。
明日は大久保さんです。
友だち追加数

atomでremote-syncのパターンマッチ(minimatch)で参考になったサイト

こんにちは、なかしーです。
今日もWEBというかatomのお話です。
前回もremote-syncのお話でしたが、今回も引き続きです。
初回でディレクトリ全体をSyncしたあとは、編集(実質的にはSave)した分だけサーバー側と同期されますが、たまにサーバー側でいじってしまった時には、atom側にも全体持ってきたいとかもあるわけです。
じゃぁまた全体をSyncすればいいじゃん、となるわけではありますが、Laravelつかってる以上、プロジェクト全体を持ってこようとするとatom側でほとんどいじることがないvendorとかapp/storage以下とかまでご丁寧に全部Syncしようとするので、時間が掛かって面倒くさいわけです。
それで、remote-syncのignoreなんかを指定しちゃう時にあんまりminimatchという形式に詳しくなかったので参考にさせてもらったサイトが以下です。
http://motemen.hatenablog.com/entry/2014/07/15/minimatch-cheat-sheet
https://github.com/isaacs/minimatch
それで、私が実際に入れた設定を一部紹介すると、以下のような感じ。他にも有れば同様に追加すればよいでしょう。

"ignore": [
    "vendor/**",
    ".remote-sync.json",
    "app/storage/views/**",
    "app/storage/logs/**",
],

こんな感じです。
 
役に立ったよ、という方、(役に立たなかったよ!という方も)
Facebookページにいいね!して頂けると嬉しいです
受付中イベント情報はこちら
まだの方は、ビジネスクリエーターズへの会員登録をどうぞ。
会員登録は無料です。
明日は大久保さんです。
友だち追加数

EloquentでIDを使わない(作らない)で作る方法

こんにちは、なかしーです。
今日もLaravelです。
履歴を残す為のモデルを作りたくなることありますよね。私にはありました。
そこまで重要な内容ではない&情報量増えると思ったので、スリムなデータ構造にしたく、IDも入れたくない、timestampsも入れたくないと思ったわけです。
ただ、EloquentでID使わないって出来るんだべか?という気持ちになって調べてたら良い奴がおりました。
こちらをご参考下さい。
ついでにtimestampsについては、Migrationの中で作らないように修正しました。
とりあえず動いてるからこれでいいのかな。
 
 
では。
 

Bootstrapのgridの非表示の件

先日、やっとこさ我々の新しいサービスをみなさまにお知らせする事が出来ました。
去年からもそうですが、遊んどる暇はありません。
という事で今日もWEB関係です。
Bootstrap使いまくってますが、Gridで画面つくってる時に、PCだと必要だけどMobileだと見せたくないんだよなー、って奴が出てきました。
(位置合わせ用で置いた空の部分とかです。)
んで、どうやるんだろなーと思ってたらこんなサイトがありました。
http://easyramble.com/twitter-bootstrap-responsive-utilities.html
大変お世話になりました。有難うございます。
では。

ブートストラップのCSSとJSのバージョンが違った3.3.2(JS)と3.3.4(CSS)場合、モーダルダイアログが影の下に隠れた。バージョンを合わせたら大丈夫だった。当たり前か。

こんにちは、なかしーです。
今日の記事はタイトルのまんまです。
「BootstrapのCSSとJSのバージョンが違った3.3.2(JS)と3.3.4(CSS)場合、モーダルダイアログが影の下に隠れた。バージョンを合わせたら大丈夫だった。当たり前か。」
まぁそりゃそうですよね。
なんでだろー、って色々探して以下の記事見た時に、そうか、と気がつきました。
http://qiita.com/jkawamoto/items/fec73c4daac41fc86a28
色々やってる時にバージョンがずれちゃったんでしょうね。ご注意下さい。
では

利用規約の長文テキストをiFrame風に小さい枠にスクロールつけて表示したい時

こんにちは、なかしーです。
今日もWEB関連。
会員登録フォームのSubmitボタンの前に規約を表示しておく必要があるということになりました。
そういうことありますよね。あると思います。やっといたほうがいいらしい。
でもiFrameを使って実装するのはなんかヤダなーという事で、調べてたらありました。
http://peacepopo.net/blog-entry-94.html
まぁ技術的にiFrameが使えない環境ではないのですが、このやり方はいいかも。
私は具体的には以下のCSSでやりました。
サンプルコード

/* 利用規約用小窓みたいなスクロール付き要素の設定 */
.box_srcollbar {
overflow:auto;
height:150px;
border:1px solid #CCCCCC;
padding:10px;
}

では。

Laravelのエラーページで便利だったサイト

こんにちは。
今日もLaravelです。
エラーページを準備しよう、となった時に役に立ったのがこちら
ほぼこのまんま使ってます。ありがたやありがたや。
 
では
 
 
 

Eloquentで実際に裏で叩かれるSQLの確認の際に役立ったサイト

こんにちは、なかしーです。
またLaravel関連です。
以前の記事でwhereHasを使ったScopeの話をしました。
作ったはいいのですが、なんとなくそろそろパフォーマンスが気になるお年頃です。
そこで、どういうSQLが動いているか、時間はどんなもんかを見たくなったので、以下を参考にしました。
http://dim5.net/laravel/debugging-sql-queries.html
私は、(今回は)Afterの方法で実装してSQL眺めてみました。
とりあえず紹介したかっただけなのでこれくらいで。
では。
 
 
 
 
 

12