Entertainer Engineering

人を楽しませられる技術者を目指すあおかびんのブログ

ParseでMoment.jsとMoment-timezone.jsを使った話

こんばんは、aokabinです。

Parse使うときに、タイムゾーン合わせたりしたいですよね。

そんな時にMoment.jsとMoment-timezone.js使おうとしたのですが
なんかちょっとうまく行かなかったのでその対処法を残しておきます。

以下はMoment.jsとMoment-timezone.jsへのリンクです。

Moment.js | Home
Moment Timezone | Home

まず、上の2つをDLしましょう、念のため大きなサイズのファイルをとってきました。

DLしたらcloudディレクトリに入れました。

その後main.jsで、requireしましょう。

var moment = require("cloud/moment-timezone.js");

多分このままではバージョンが古いと怒られるので

moment-timezone.jsで

require('moment');

と書かれているところを

require('cloud/moment.js');

に変更しましょう。
これで準備OKです。

やってみましょう。

Parse.Cloud.define("momentTest", function (request, response) {
  var moment = require("cloud/moment-timezone.js");
  response.success(moment().tz("Asia/Tokyo").format());
});

として、curlで確認。
ちなみにcurlでプロキシサーバーを通したいときは

--proxy http://プロキシサーバー:ポート

とするとプロキシサーバーを経由させることができます。

というわけで、curlしてみてください、多分出来ると思います。

Parseで自作のUserクラスを参照できなかった話

どうも、aokabinです。

Parseという便利なサービスがあるのですが、
その中のCloud Codeという機能の中で、自作のUserクラスを参照できなかったので
その対策↓

Parse.User.allowCustomUserClass(true);

これで、カスタムUserClassが使えるようになります!

見つけるのに3時間くらいかかった。

Node.jsのExpressの中でPOSTリクエストを受け取ろうと詰まった話

こんばんは、毎度おなじみaokabinです。
なかなかブログ読んでくれる人増えないですねー、周知していないからだと思いますが。

さて、タイトルにあるように、Node.jsのExpressを使って開発を進めているのですが
POSTリクエストがどうもうまく通らなくて3時間くらい使っちゃったので
忘れないうちにメモを取りたいと思います。

最近使い始めたのでExpress自体よくわかっていないのですが、まぁなあなあで。

流れとしては以下の様な感じ
1.app.js内部に書くもの
2.routes/以下のjsファイルに書くもの

1.app.js内部に書くもの
expressコマンドでテンプレートを書き出した際にapp.jsはできていると思うのですが、そこに幾つかの項目を書いていきましょう。
今回はroutes/test.jsというファイルがある事を想定して書いていきたいと思います。

app.jsの中のroutesとかusersとかの下に、以下を記述しましょう。

var test = require('./routes/test');

続いて、POSTリクエストを受け取るのに必要なのがコレ

app.use(bodyParser.urlencoded({extended : false}));

コレを記述する事で、2で書く書き方で取り出す事ができます。

そして、忘れないように

app.post('/test', test.post_test);

これは/testにアクセスしたときにtestのpost_testというfunctionが呼び出されるという記述になります(多分)

続いて2では、このpost_testメソッドを作っていきましょう。

2.routes/test.jsに書くもの
POSTデータの受け取りは以下のような感じになります。
例えば、name=aokabinというようにデータをPOSTしている場合

exports.post_test = function(req, res){
 console.log(req.param('name'));
 res.send(true);
};

というように記述すると、nameに入ったaokabinというデータが出力されると思います。

コレを探すのに時間がかかったというのはちょいと苦労がありましたが、何とかなってよかった…。
今度はasyncについて書いとかないと忘れそう。

何かコメントがありましたら、随時募集しておりますので、気軽にどうぞー。

追記
これ最近のはデフォルトで入っているんですね、知らなかった…

Rails4.1.6でbootswatchを導入したときにSSLエラーで詰まった話

こんばんは、aokabinです。

現在卒業研究でRails4.1.6を使ったアプリケーションを作ろうと思っているときに、bootswatchのcosmoを導入しようとしたのですが、importをするときに謎のSSLエラーに巻き込まれていました…


Ruby on rails4系でBootstrap系のthemeを使うときに詰まった - Entertainer Engineering

こちらに書いてあるように、importって何やねん…となっていました。
実は上の記事でもcosmoを導入していたつもりだったのですが、デフォルトのbootstrapしか適用できていない事が判明しまして…申し訳ありません。

さて、上記の記事にも書いてあるようにimportをしていた際にエラーが吐かれていました。

エラーログは割愛しますが、

OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

こんな感じのエラーが吐かれました。
ショックがハンパじゃなかったですね。

という訳で対策を書いていきます。

CA証明書を参照できるようにする

SSLエラーで言われているのは、とにかく”証明書が参照できねえよ!”ということらしいので、参照できるようにしてあげればいいわけです。

irbコマンドで、opensslが参照している証明書の場所を確認してみましょう!

irb
> require 'openssl'
> p OpenSSL::X509::DEFAULT_CERT_FILE
"/opt/local/etc/openssl/cert.pem"

すると、cert.pemへのパス情報が表示されると思います。(今回のパス情報は一例です)
そのパスをコピーしておきましょう。

そして、証明書がちゃんと存在しているかをcatコマンドで確認してみましょう。

cat /opt/local/etc/openssl/cert.pem

もし何もなければ、それは証明書を参照できていないので、cert.pemを用意してあげる必要があります。(それ以外の問題でしたら、ちょっとわかりません、ごめんなさい)

先ほどのパス(上記の場合/opt/local/etc/openssl)へと移動して、cert.pemをDLしましょう。

cd /opt/local/etc/openssl
sudo wget http://curl.haxx.se/ca/cacert.pem
sudo mv cacert.pem cert.pem

もしwgetでDLできなければ、curlやらscpやらを使ってなんとか/opt/local/etc/openssl/の中にcert.pemを入れこんであげましょう。

ねんのためcatでファイルの存在を確認

cat /opt/local/etc/openssl/cert.pem

コマンドを実行した後に、暗号化された文字列が表示されたらおそらくopensslから証明書を参照する事ができていると思います。
できていなければもう一度手順をやり直してみてください。

さて、この状態でbootswatchを試してみましょう。

rails new cosmo
cd cosmo/
vim Gemfile

Gemfileをエディタで開いたら

gem 'libv8', '~>3.11.8.13'
gem 'twitter-bootswatch-rails', '~> 3.2.0'
gem 'twitter-bootswatch-rails-helpers'
gem 'execjs'
gem 'less-rails'

これらを書き込んで上書き保存。(vimなら :wq)

bundle install #エラーがでない事を確認
rails g bootswatch:install cosmo
rails g bootswatch:import cosmo
rails g bootswatch:layout cosmo

これでテンプレートが出来上がったかと思います。

実際に出来上がっているかを確認するため、
app/views/layouts/のcosmo.html.erbをindex.html.erbに改名、そして

rails g controller layouts

を実行
config/routes.rbファイルを開いて

resources :layouts

を記述、最後に

rake routes
rails s

これでhttp://localhost:3000/layoutsにアクセスしてみましょう。
f:id:aokabin:20140918112246j:plain
このような画面が表示されていればおkです!

しかしこの間は間違った記事を出してしまった事を深く反省しております。

これでうまくいったり行かなかったりしたらコメントいただければ幸いです!

Ubuntu(多分Linuxも)サーバー起動時にShell Scriptを動かす話

こんばんは、aokabinです。

この記事が移設1号目の記事でございます。
閲覧ありがとうございます!

さて、Ubuntuサーバーを起動したと同時にShellScriptを実行したい時ってありますよね。
そんな時に使える方法を見つけたのでこちらに書いていきます。

まずはvimemacsといったエディタを使って

vim /etc/rc.local

のファイルの中身を見てみましょう!

このrc.localというファイルは、サーバー起動時に実行されるスクリプトになります。
このファイルのなかには普通にShellScriptを書く事ができますので好きなように記述してください。
このファイルの末尾にあるexit 0(だったかな)の上に書くようにしてくださいね。

で、僕は毎回毎回チェックの旅にサーバーをリブートさせてたのですが
どうやら

sh /etc/rc.local

で実行確認できるみたいですね…中で別のShell Scriptだけが起動確認できなくて苦労しました。

シェルスクリプトのchmodも忘れないようにしてください。

あと、rc.localで起動するプログラムはchmodなら

/bin/chmod +x hogehoge.sh

というように起動しないと、ちゃんと起動しない事があるみたいです。

今日はこれで結構時間取られたので、忘備録的に残しておきます。

Ruby on rails4系でBootstrap系のthemeを使うときに詰まった

どうも、こんにちはaokabinです。

二日間位railsにCosmoのデザインテンプレートを導入するのに苦労したので、備忘録として残しておきます。

事前準備として、

rails new testapp --skip-bundle
cd testapp/

というようにrailsアプリケーションを作って、作業ディレクトリに移動しておきましょう。
加えて、Gemfileの下の方に

gem 'twitter-bootswatch-rails', '~> 3.2.0'
gem 'twitter-bootswatch-rails-helpers'

の2つを記述しておきましょう。

詰まった点
1.therubyracerとlibv8のバージョンのいざこざ
2.bootswatch:importで毎回転ける

1.
gemでtwitter-bootswatch-railsとかhelperとか書いていると、作ったばかりのrails appではbundle installで転けてしまいます。
なんかtherubyracerがねえよ!とか言われるので、Gemfileに

gem 'therubyracer', platforms: :ruby

コメントアウトを外して再bundle install

bundle install

すると今度はlibv8がねえよ!このバージョンな!と怒られました。

gem 'libv8', 'そのバージョン'

と書いてbundle installすると

libv8がねえよ!このバージョンな!

は?いや、指定しとるやんけ!

こちらのサイトによると

therubyracer 0.11.0 問題まとめ - 自称すーじー。

どうやらtherubyracerとlibv8には互換性が微妙なところがあるらしく、どちらかのバージョンをちゃんと指定しないといけないらしい。

しかも、railsのエラーで言われたバージョンじゃダメらしい、頼むぜぃ。

今回はlibv8のバージョンをそろえるようにしましょう。

gem 'therubyracer', platforms: :ruby
gem 'libv8', '~>; 3.11.8.13'

ということでbundle installするとエラー無く通りました!
本当はもっといい方法があると思うんですがね…
いい方法あったらおしえてください。。。

別のパターンでnokogiriがねえよとか色々と怒られた覚えがあるけど、何かあればコメントでも残して頂ければ幸いです。

とりあえずbundleのエラーは解消されたという風にしておきましょう。

2.
さて、bundle installが通ったのでbootstrapデザインテンプレートを導入していきたいと思います。
次のサイトの2番を参考にして書いていきましょう。


ひと味ちがうTwitter Bootstrapの18個の無料テンプレート&有料まとめサイト - 酒と泪とRubyとRailsと

rails g bootswatch:install readable
rails g bootswatch:import readable
rails g bootswatch:layout readable

すると、bootswatch:importで謎のSSLエラーが発生します。
僕もこのSSLエラーを解消しようと色々調べたのですが、もうimportいいやという結論に至りました。
これもまたいいやり方あったら教えてください。

というわけで手順(使用するテンプレートはCosmo)

rails g bootswatch:install cosmo
rails g bootswatch:layout cosmo

layoutを実行してconflictが出てくるかもしれませんが、そういう時はとりあえずyとEnterの交互連打でなんとかなりました。

これで testapp/app/views/layoutsの中に
application.html.erbとcosmo.html.erbが出来上がるかと思います。
cosmo.html.erbはindex.html.erbにリネームしておいてください。

コレをちょっと検証するために、scaffoldを使って適当なアプリケーションページを作りましょう

まず最初にconfig/initializers/assets.rbに次の1文を追記してください。

Rails.application.config.assets.precompile += %w( cosmo.* )

そして次にlayoutsのcontrollerを作りましょう。

rails g controller layouts

そして最後にconfig/routes.rbにルーティング情報を書き込みます。

resources :layouts

rake routesも忘れないようにしておきましょう。

rake routes

さて、rake routesが終わったら実際に動かしてみましょう。

rails s

http://localhost:3000/layoutsにアクセスして

f:id:aokabin:20140912231727p:plain


このような画面が出てきたら成功です!

いやー疲れた。importって一体何だったんだろう…?

therubyracerとimportの問題について知っている人が居ましたら教えて頂けると幸いです。

AWSでなんとかASP.NETを動かそうと奮闘した話

こんばんは、aokabinです。

今回はAWS使って何とかASP.NETを動かそうと奮闘しておりました。

えー結果から言いますと、AWSLinuxではなくUbuntuを使う事にしました。

サイトで書いてあるCentOSのパッケージリポジトリのURI404だもんで…
こればかりはどうしようもありませんでした…

最初は此方のサイトを参考にしていたのですが
Mono×LinuxASP.NET MVCを動かすまで
AzureのCentOSだとAST.NETの起動でつまり
AWS Linuxだとそもそもmakeが通らなかったりと
よくわからない問題がありましたので、やめました。すみません。

というわけでUbuntuで実行した話を進めていきたいと思います。
とはいえUbuntuでの進め方は公式サイト(http://www.mono-project.com/docs/getting-started/install/linux/)に書いてあるので、そちらを参考にしても全然できると思います。

まずは環境を整えるために
1.AWSUbuntuインスタンスを起動
2.建てたUbuntuサーバーにSSHで接続
というところまでやっておいてください。

入力するコマンドはこんな感じ

sudo su
wget http://download.mono-project.com/repo/xamarin.gpg
apt-key add xamarin.gpg
echo "deb http://download.mono-project.com/repo/debian wheezy main" > /etc/apt/sources.list.d/mono-xamarin.list
apt-get install mono-devel mono-complete

1.管理者権限でログインして
2.xamarin.gpgファイルをダウンロード
3.そしてapt-keyでxamarinのパッケージを認証
4.mono系のパッケージダウンロード先をmono-xamarin.listに登録(多分)
5.mono実行に必要なmono-develとmono-completeをインストール

これでできると思います。

確認のために、ASP.NETのファイルを適当に作成して、ファイルがあるところでxsp4を実行してみてください。

テスト用ファイル

<%@ Page Language="C#" %>
<html>
    <head>
        <title>Test Page</title>
    </head>
    <body>
        <h1>Hello aokabin!</h1>
    </body>

実行コマンドライン

xsp4

実行できましたら、ブラウザでhttp://DNS:8080/ファイル名.aspxにアクセスすると、画面にHello aokabin!の文字が表示されているかと思います!
ちなみにこのとき、AWSでセキュリティグループに8080ポートの開放をするようにしてください!

明日はMVCの方で実行してみます。うまく動くといいんだけどなぁ。

うーん、CentOSで実行できないのがなぁ…
うまく動かせるようであれば教えてください!!

以上aokabinでした!