digifacture

Railsとかデジモノとか色々勉強した事とか作った事とか気になった事とか

DJIPhantom2 修理メモ 外装ボディ交換 FPV用12V電圧の確保 +iOSD mini導入

世はDJIが発表した新型高性能ドローンで話題が持ち切りですが、前回Phantom2が墜落してからFPV用にトランスミッターに電源が供給出来なくなったのでそのメモとか実録とか。

あれこれ原因を特定しようとボディを開けたり閉じたりしてるうちに付属のドライバーの先端がネジ頭に埋まってしまった。

 

oh...

 

バカジャネーノ オレ…

 

 

 

というわけでネジ周りをルーターで削ってネジを外す事に。

うん、本体丸ごとスクラップになるよりよかった安上がり安上がり…

f:id:digifacture:20141117221159j:plain

メモ:Phantom2買ったとに付いてくるドライバーは使うべからず。

 

やわっこいよあれ

 

 

そんなわけで外装ボディをまるごと交換するハメに。 

自分が買った時は12,000円くらいしたのに今見ると6,500円になってる…

 

さておき裏側のネジを外しボディ上部を開ける。

その際にGPSの端子を傷つけないように気をつける。

f:id:digifacture:20141118004711j:plain

次にプロペラ基盤とモーターを外す。

f:id:digifacture:20141118004826j:plain

ネジを二つ外すと下部のLEDランプカバーが外れて、基盤も外れる。

f:id:digifacture:20141118005111j:plain

f:id:digifacture:20141118005058j:plain

 

本体基盤の取り外し

メイン基盤→USB基盤→受信基盤→バッテリー端子の順に外していくとやりやすい。

f:id:digifacture:20141118010343j:plain

USB基盤を外すとメイン基盤が動かせるようになり、他の基盤を外しやすくなる。

 

f:id:digifacture:20141118010837j:plainf:id:digifacture:20141118011038j:plain

 

そんなこんなでカバーから基盤一式を外し終わる。

f:id:digifacture:20141118011234j:plain

受信部の下にあるプロモ設定用のボタンも移植するのを忘れずに。

f:id:digifacture:20141118011353j:plain

 

あとは組み込むだけなのだが、今回のそもそもの目的であるFPVトランスミッタ用の12V電源を確保しなければならない。

基盤を眺めてもコンデンサその他がショートしたり半田が破損してるのを確認出来なかった。

しかし基盤から伸びてる電源コードは5Vしか出ておらず、電流は無いに等しい。

どうするか…他に12V取れる端子が……

f:id:digifacture:20141118012031j:plain

あった!

バッテリーそのものは11.1V。

それを5Vに降圧すれば良し。

というわけでコードを半田する。

f:id:digifacture:20141118012404j:plain

あまりキレイじゃないけど、トランスミッタは無事動作した。

これで本来の目的をクリア!

あとは新しいボディに組み込んで

f:id:digifacture:20141118012650j:plain

ついでにiOSD miniを組み込んでおしまい。

 

f:id:digifacture:20141118012656j:plain

f:id:digifacture:20141118013038j:plain

 

ちなみに:

iOSD miniをファームウェアアップデートするにはWindows XP以降が必要。

Phantom 2 - Downloads - Manuals, Software, Drivers download | DJI から

DJI WIN Driver Installer と iOSD Assistant Software v4.0 をインストールする必要がある。

特にDJI WIN Driver Installerを実行しないとAssistantを起動して「no device is connected 」と表示されてアップデートできない。

RailsとSafariのsessionの不具合?

safariのsessionが勝手に切れてしまうバグがある?

 

Rails3にてユーザー認証を実装した。

アクションsigninでは、ユーザー認証後にはmypageにリダイレクトするように実装する。

しかしURLに/signinを入力するとsessionが失効されて再度ユーザー認証を求めるようになってしまう。

これを入力するのではなくコピペやブラウザの戻るボタンだとsessionは失効されずにmypageが表示される。

なぜかwebインスペクタを起動してると現象は発生しない。

FirefoxChromeでは現象が発生しない。

Safari内の履歴やキャッシュの扱いの問題のような気がするけど、原因が特定できずにイマイチすっきりしないのでメモ。

 

 

def signin
  if session[:user_id] == nil
    if request.post?
      if User.authenticate(params[:username], params[:password])
        session[:user_id] = User.authenticate(params[:username], params[:password]).id
      redirect_to :action => session[:intended_action], :controller => session[:intended_controller]
      else
        render :text => "error"
      end
    end
  else
    redirect_to "/mypage"
  end
end

 

でもまあなんやかんやでユーザー認証みたいなものは作れた

https://shrouded-falls-3859.herokuapp.com/foods

これでやっとウェブサービスに必要な最低限の道具を手にしたような気持ち。

DEVICEとかCANCANやtwitter authを使えばもっとしっかりと作れるかな?

次は画像のアップロードとかグラフィカルな実装をがんばう 眠 (¦3[ スヤァ.. ]

メモ Rails日本語化

I18n、i18n_generatorsでrailsアプリを日本語化する - mochizblog

  activerecord:
    models:
      user: ユーザー
    attributes:
      user:
        name: ユーザー名
        age: 年齢

  label:

    titles:
      dragon_knight: 龍騎
      dcd: ディケイド
      w: ダブル

 このようにモデル名とカラム名に対応した単語をインデントを交えて記載して、下記の/config/locals/ja.ymlの末尾に書き足せばOK

 

Rails全体でエラーメッセージ日本語化
rails 3 エラーメッセージ日本語化のメモ
rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub

メモ データベース操作と確認

備忘録.りくわいやー

 

rails dbconsoleでデータベース確認
Sqliteクライアントを起動する
>rails dbconsole
>.tables
でテーブル一覧
>.schema books
でbooksテーブル内の構造を確認

 

 

NOT NULLなどの制約の設定 - Ruby on Rails入門

create_table :titles do |t|
t.string :name, :null => false
t.integer :old, :default => 10
t.string :address, :null => false, :default => 'Tokyo'
end

 

modelに日本語書くとエラーになるときの対策

環境

Rails 3.2.9

ruby 1.9.3p194

 

たとえばバリデーションのメッセージに日本語で書くとする。

class Machine < ActiveRecord::Base
validates_presence_of :rental_no, :message =>"ダメだよ"
attr_accessible :detail, :hikitori, :kaishu, :location_id, :machine_name_id, :motikomi, :rental_no, :shukko, :used
end 

するともれなく「We're sorry, but something went wrong.」と表示されてしまう。

そんなときはmodelの冒頭に「# encoding: UTF-8」を書き加えてあげると解決する。

# encoding: UTF-8
class Machine < ActiveRecord::Base
validates_presence_of :rental_no, :message =>"ダメだよ"
attr_accessible :detail, :hikitori, :kaishu, :location_id, :machine_name_id, :motikomi, :rental_no, :shukko, :used
end

なんでmodelだけこんなんなんだろ?

 

参考:


Rails の models クラスに日本語を記述するとエラーになる: ある SE のつぶやき

 

あとRails全体でエラーメッセージ日本語化

rails 3 エラーメッセージ日本語化のメモ

rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub

オールAjaxなTodoアプリ作ってみた

デプロイ先はHeroku

http://warm-temple-6617.herokuapp.com/apps/

目標であったCRUDを全部Ajaxでするって目標は達成。

これでWebアプリっぽいものができた。

試行錯誤すると曖昧なまま理解してないことが浮き彫りになる。

 

今後の課題:

Railsjavascriptの連携、棲み分けの方針を意識する

 viewのなかでどこまでRailsで処理して、どこまでjsで処理すべきか。

 link_toで生成した方が良いのか<a href="">に書くのは良い事なのか。

 Unobtrusive JavaScriptとは。保守性の高い、見通しの良いコードとは。

・DRYを忘れない。

 共通するコードは積極的に使い回せるように書く。

 

次にやる事:

・1対多、多対多のデータベース処理。

ゆくゆくやる事

・ユーザー登録、認証。

Railsとjsの連携の強化。グラフィカルな処理。

twitterfacebookの認証。dropboxとかもできるかな?

スクレイピング

参考にしたサイト

Railsで簡単なアプリをscaffoldで作ってHerokuにデプロイするまで - Qiita


Rails x Herokuでアプリを作成 [完全初心者向けチュートリアル] - 酒と泪とRubyとRailsと

 

下記メモ

環境はRails 3.2.9

Gemfile書き換え

gem 'sqlite3'

   ↓

gem 'sqlite3', :group => [:development, :test]

group :production do
gem 'pg'
end 

あとはターミナル

git init

git add .
git commit -m "first commit"
heroku create
git push heroku master
heroku run bundle exec rake RAILS_ENV=production db:migrate

 

メモ

Ruby Learning Notes: Replacement for remote_form_for in Rails 3

 

_form_seat.html.erb

<%= form_for(seat, :remote=>true) do |f| %>

<% if seat.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(seat.errors.count, "error") %> prohibited this seat from being saved:</h2>

<ul>
<% seat.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= f.hidden_field :flight_id %>
</div>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :baggage %><br />
<%= f.text_field :baggage %>
</div>
<div class="actions">
<%= f.submit %>
</div>

<script type="text/javascript">
$(document).ready(function(){
  $("form#new_seat").bind("ajax:success",function(event,data,status,xhr){
    $("#seatscontainer").html(data);
    $("#notice").html("Seat was succesfully booked やったね!");
  });
})
</script>
<% end %>