【Rails】n : mのmodel

n:mのmodel定義

has_many    through:を使う

  • モデル定義

rails g model User name:string

rails g model Project name:string

rails g model UserProjectGroup user_id:integer project_id:integer

rake db:migrate

modelに追記

class User < ActiveRecord::Base
has_many :user_project_groups
has_many :projects, through: :user_project_groups
end

class Project < ActiveRecord::Base
has_many :user_project_groups
has_many :users, through: :user_project_groups
end

class UserProjectGroup < ActiveRecord::Base
belongs_to :user
belongs_to :project
end

・コントローラ

rails g controller user_project

class UserProjectController < ApplicationController

def relate

user1 = User.create(name: “ichiro”)
user2 = User.create(name: “jiro”)

px = Project.create(name: “X”)
pa = Project.create(name: “A”)

user1.projects << pa   #関連づけ
user2.projects << pa

user1.projects << px
user2.projects << px

render json: UserProjectGroup.all
end

def ichiro
user1 = User.find_by_name(“ichiro”)
render json: user1.projects
end

def jiro
user2 = User.find_by_name(“jiro”)
render json: user2.projects
end

end

  • ルーティング

get ‘relate’ => ‘user_project#relate’

get ‘ichiro’ => ‘user_project#ichiro’
get ‘jiro’ => ‘user_project#jiro’

【Rails】JSON出力

JSON出力について。

jbuilderを使う。

 

  • ルーティング(config/routes.rb)

get ‘show’ => ‘sessions#show’

 

  • コントローラー(app/controllers/sessions_controller.rb)

class SessionsController < ApplicationController
protect_from_forgery with: :null_session

def show
@status =’ok’
@users = User.all
render “show”, :formats => [:json], :handlers => [:jbuilder]
end

※ @変数はtemplateに引き継がれる。

 

  • viewテンプレート(views/sessions/show.json.jbuilder)

json.status @status

json.users do
json.array!(@users) do |u|
json.name u.name
end
end

 

  • 結果
{"status":"ok","users":[{"username":"admin"},{"username":"mknod"}]}

 

【Rails】Session

ユーザーログインサンプル

rails new xxxx

GemFileでbcrypt有効にし、bundle install

 

  • モデル作成

rails g model user name:string password_digest:string

rake db:migrate

app/models/user.rbにhas_secure_password追記

 

  • コントローラー作成

rails g controller sessions

app/controllers/sessions_controller.rb

 

class SessionsController < ApplicationController
protect_from_forgery with: :null_session

def add_user
user = User.new
user.name = params[:name]
user.password = params[:pass]
user.password_confirmation = params[:pass]
user.save

render text: “OK”
end

def create
user = User.find_by_name params[:name]
if user && user.authenticate(params[:pass])
session[:user_id] = user.id
render text: session[:user_id]
else
render “NG”
end
end

def destroy
session[:user_id] = nil
redirect_to root_path
end

end

 

  • ルーティング設定

config/routes.rb

 

・サーバー起動

rails s

【iOS】CocoaPodsでiOSライブラリ管理

$ cocoapodsインストール
sudo gem install cocoapods

結構待った、、完了。

$ pod setup
(~/.cocoapodsの中身が更新されるらしい)
プロジェクト作成し、A.xcodeprojファイルがある場所へ移動し、”Podfile”を用意する。
$cd どこか
$vi podfile

platform :ios,”6.0″
pod ‘CocoaHTTPServer’
pod ‘AFNetworking’,’~> 2.0′

それから
$ pod install

podfileを追記/削除したときは
$ pod update

BootStrap

BootStrap

CSSツール、とても便利。

 

Grunt
install node.js(npm(node package module)を含む)
http://nodejs.org/download/

JavaScriptでは、以下の作業を行う時がある。。
・minify(圧縮)や結合
・単体テストの実行
・JSLint(構文チェック)の実行

さらに、CoffeeScriptやTypeScript等を使用している場合、
一度JavaScriptへ変換する必要もある。

その自動化ツール(タスクランナー)と呼ばれている。
node.jsを使っていてJS変換スクリプトGruntfile.jsをjavascriptで書いて
タスクを定義する。

【OF + addon】衛星の軌道を計算する。ofxOrbitTools

ofxOrbitTools

NORAD(北アメリカ航空宇宙防衛司令部)から取得したTLE(two line element)をもとに、SGP4(Simplified General Perturbations Satellite Orbit Model)アルゴリズムを用いて衛星の軌道を計算する

 

下記はそのライブラリのOrbitToolsサイトです。

http://www.zeptomoby.com/satellites/

openFrameworksのaddonを作成しました。

ofxOrbitToolsです。

今回はpublic edition(free for non-commercial)を使用させていただきました。

 

リポジトリはこちらです。

https://u26@bitbucket.org/u26/ofxorbittools.git

CDN (Contents Delivery Network)

CDN (Contents Delivery Network)
アクセス集中で、反応が遅くなったり応答不能になる(フラッシュクラウド効果)
に対処するため、サーバーを一カ所に置くだけでなく、地理的に、バックボーン的に分散させる。

サーバーのミラーリング
・DNSラウンドロビン
・PSP
・位置情報を加味したアクセス分散等

【Android+processing 2.1】Eclipse

・EclipseでAndroidプロジェクト作成

・Androidプロジェクトのlibsにandroid-core.zipをコピーする。
 さらに、android-core.zipをandroid-core.jarにリネームする。
 
 Documents/Processing/modes/AndroidMode/android-core.zip.

・Build Settingsの”add jar”で、android-core.zipを追加

【ソース】
public class MainActivity extends PApplet {

public void setup() {
/*…*/
}

public void draw() {
/*…*/
}
}

【Android + processing 2.1】processingが起動できない

※ADTをInstallしておく

OS X Marveric
Processing 2.1.1

・ADTで、SDK level 10をインストールする。

【.bash_profileに下記設定】
export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export ANDROID_HOME=/Users/mknod/project/Android/adt-bundle-mac-x86_64-20140321/sdk
export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH

【ProcessingのjreをADTのものに差し替え】
/Applications/Processing.app/Contents/PlugIns/jdk1.7.0_51.jdk/Contents/Home
mv HOME HOME.org
ln -s $JAVA_HOME HOME