MacでUSBのデータ通信端末が起動できない場合

MacBook ProにUSBのデータ通信端末を挿しても何も起きない、という現象が発生。
本来はUSBに挿した時に、自動的にデータ通信端末のアプリが自動インストール&フォルダが開くのですが、何も起きない。自分のケースは管理者権限がない(?)せいか、USB挿しても自動起動できなかったようでした。詳しい原因はいまいちわかりませんが、「これを一通り試してみるとよい」というのをまとめました。

■やりたいこと
・MacBook Proにデータ通信端末を挿してインターネット接続したい
・(どのメーカーもだいたいこんな感じの挙動)データ通信端末をUSBに挿すと、自動的に起動するためのアプリが自動で開いたり、アプリが入っているフォルダが開いたりするので、そのアプリを起動したい

■環境
・MacBook Pro 2016 late, macOS Sierra 10.12.6
・1個目 USBのデータ通信端末 SoftBank 604HW
・2個目 USBのデータ通信端末 au Speed Stick U01
・AUKEY USB Type-Cハブ 4ポート

■試すとよいこと
・データ通信端末が正常に動くのかどうか、Windows機、その他のMacで動作確認
→ 動作すればデータ通信端末自体は正常、Mac側の設定の可能性あり

・USBハブの違うポートに挿し替えてみる、Macの違うポートに差し替えてみる

・再起動する

・ウィルススキャンを無効にする
→ Symantec Endopoint Protectionの場合だと、「ウィルスとスパイウェアの対策機能を無効にする」と「ネットワーク脅威防止を無効にする」を選択する

・USB認識しているか確認する
→ システムレポートでUSB認識してるか確認する。以下参考サイト
macOS Sierra: USB 装置が動作しない場合

・スーパーユーザーでログインしてUSBを挿してみる
→ 今回はこれが原因のようでした。一般ユーザーでログインしていて、USBは認識しているがUSB挿してもデータ通信するためのアプリフォルダが自動的に開かない状況。以下の手順で解決した。
1)一般ユーザーアカウントでログインしてデータ通信端末をUSBに挿す → 何も起きない
2)ユーザーユーザーアカウントでログインし直してデータ通信端末をUSBに挿す → 何も起きない(一回もログインしたことなくてプロファイル設定とか走った。USB挿しても何も起きなかったけどこれが決め手っぽい)
3)一般ユーザーアカウントでログインし直すデータ通信端末をUSBに挿す → データ通信するためのアプリが自動的に開いてアプリフォルダにインストールもされる
– 以上で解決 –

■備考
・auもSoftBankもどちらもUSB挿しても何も起きなくてハマった。USB接続の無効設定なんかも特にしてないはずだしな・・・。いまいち挙動がつかめない。

・USB認識しない場合の対策として、以下の兆候を見るとSMCリセットは直接関係しなそう

—以下、引用 ——————————————————————————

SMC のリセットが必要な場合の兆候

以下の症状が認められる場合は、SMC のリセットが必要だと考えられます。
  • コンピュータへの負荷が高くなく、正しく通気されているにもかかわらず、コンピュータのファンが高速で回転する。
  • キーボードのバックライトが正しく機能しない。
  • ステータスランプ (SIL) (搭載されている場合) が正しく機能しない。
  • バッテリーランプ (搭載されている場合) が正しく機能しない (バッテリー内蔵の Mac ノートブックの場合)。
  • ディスプレイのバックライトが周囲の明るさの変化に正しく反応しない。
  • Mac が電源ボタンを押しても反応しない。
  • Mac ノートブックが蓋を開閉したときに正しく反応しない。
  • Mac が予期せずスリープ状態になったりシステム終了したりする。
  • バッテリーが適切に充電されない。
  • MagSafe 電源アダプタの LED (搭載されている場合) が適切な動作状態を示していない。
  • CPU に異常に負荷がかかっているわけでもないのに、Mac の動作速度が通常よりも遅い。
  • ターゲットディスプレイモード対応のコンピュータで、思うようにターゲットディスプレイモードにしたり、ターゲットディスプレイモードを解除したりできない。または、予期せずターゲットディスプレイモードになったり、ターゲットディスプレイモードが解除されたりする。
  • Mac Pro (Late 2013) の入出力ポート付近のイルミネーションが、コンピュータを動かすと点灯しない。

——————————————————————————
 引用元:Mac の SMC (システム管理コントローラ) をリセットする方法

MacでOWASP ZAPを使ってBasic認証かけたサイトを簡易脆弱性診断

MacでOWASP ZAPをインストールして、https(SSL)のサイトを簡易的に脆弱性診断を実施した時のメモ。

■単語メモ
・OWASP オワスプ -> Open Web Application Security Project
・ZAP ザップ -> The Zed Attack Proxy

■環境
・MacBook Pro – macOS Sierra ver10.12.6
・ZAP 2.6.0

■インストールと起動
1.Macでアクセスしてそのままインストール
OWASP Zed Attack Proxy Project

2.起動後にJavaエラーが出てJavaか何かを更新した気がする(だいぶ前にやったので忘れた)

3.改めて起動

4.タブ「クイックスタート」をクリックし、https付きで診断したいURLを入力

5.次にBasic認証を突破するためのjsスクリプトを登録する。左上の「サイト」の右にある「+」をクリックして「スクリプト」をクリック。するとスクリプト関連が表示される。

6.左上のfaviconぐらい小さく3つ並んでいるアイコンの一番右側の紙と+が合体しているマークをクリック。マウスオーバーすると「新しいスクリプト」と表示されるやつです。

7.新規スクリプト画面で以下を選択する。

8.右上の空白の入力画面(実行ボタンの真下)に以下のコードを入力する。
—————————————————————————————–
 org.parosproxy.paros.network.HttpSender.addListener(
   new org.zaproxy.zap.network.HttpSenderListener {
     getListenerOrder: function() {
       return 1;
     },
     onHttpRequestSend: function(msg, initiator) {
       msg.getRequestHeader().setHeader(
         // 第一引数は「Authorization」で、第二引数は「Basic 」と「ユーザー名:パスワード」をBase64でエンコードした文字列
         “Authorization”, “Basic ZHJwaGxxxxxxBob3Rv”
         );
     },
     onHttpResponseReceive: function(msg, initiator) {
     }
 });
—————————————————————————————–
コメント部分以外は以下サイトからコードを引用しています。
引用元:OWASP ZAPでBASIC認証を突破する

【注意】”Authorization”, “Basic ZHJwaGxxxxxxBob3Rv”の「Basic 」の後の文字列は、「ユーザー名:パスワード」をBase64でエンコードした文字列を入れる必要があります。
エンコードは以下サイトで変換できます。
Encode to Base64 format
例えば、ユーザー名が「yamada」で、パスワードが「himitsu」だった場合は、「yamada:himitsu」を上記サイトに入力してエンコードしてください。
(jsでBase64エンコードするコードも少し書いたのですが、いまいち上手くいかず、結局Base64エンコードした文字列を直接入力した方が早かったです)

9.「実行」ボタンを押す。「実行」を押しても特に反応はないですが、ちゃんと反映されます。なお、コードがミスったりしていると下にあるウィンドウにエラー内容が表示されます。

10.「クイックスタート」タブに戻って「攻撃」ボタンを押すと診断開始。
なお、 Basic認証の通過に失敗していると、URL入力欄の下に401エラーが表示されます。

■参考にしたサイト
# 本当に助かりました。ありがとうございます。
OWASP ZAP で送信されるリクエストに自動で独自ヘッダを追加する方法
OWASP ZAPでBASIC認証を突破する
・ブラウザを通して診断する場合 → Mac版のOWASP ZAPで脆弱性チェックの設定
・StackOverflow – How to assign basic authentication header to XMLHTTPREQUEST?

req.setRequestHeader('Authorization','Basic ' + Base64StringOfUserColonPassword);

↑「Basic認証できない」の回答が上記

■(参考)診断の所要時間
以下、ZAPをデフォルト設定で診断した場合の所要時間
・Rails5で、Scaffoldで作った直後のアプリ(データのCRUDができる程度、6画面、そのほか少しカスタマイズした程度)を診断 → 約1時間かかった
・全て静的ファイル(HTML, js, CSS, 画像のみ、50画面、サーバーサイドで実行するスクリプトは一切なし) → 約5分

■(参考)ZAPの全般的な操作方法
IPAから、以下マニュアルのP.21「検査ツール実行及び検査結果」に画面付きで丁寧に操作説明が書かれています。それ以外にも診断ツールの比較やどのフェーズで診断すべきか、何が診断できるのか、も含めてわかりやすく説明されています。 # さすがIPA
IPA テクニカルウォッチ 「ウェブサイトにおける脆弱性検査手法」(ウェブアプリケーション検査編)」
※PDFが開きます

Rails5でMaterialize使うときのSubmitボタン実装方法

Materializeのsubmitボタンメモ

(1)form.submitはaタグのリンク範囲おかしくなる(文字しかaタグ効かない)からbutton_tag使う
(2)Enterでsubmitしないようにtype:”button”を使う
(3)type:”button”だとsubmitできないのでonclick:”submit();”を定義する

【viewのsubmitボタン実装例】
    <%= button_tag ‘投稿’, class: “btn waves-effect waves-light”, type: “button”, onclick: “submit();” %>

■参考
Input Submit Field with Materialize doesn’t work properly #1493
Enterキーを無効にする方法

Rails5 app/assets、lib/asses、vendor/assetsの使い分け

以下の理解。

・app/assetsはアプリ全体として共通管理するもの(app/assets/javascripts/application.jsとか)やアプリ固有のもの(app/assets/javascripts/posts.coffeeとか)を置く
・lib/assetsは自作コードを置く(特定のviewだけxxのファイルを読み込みたい、みたいな時はここに置いて読み込む?ここ以外に最適そうなとこがない)
・vendor/assetsはサードパーティ(外部ベンダーが提供したもの、bootstrapとか)を置く

—Railsガイドからの引用—

  • app/assetsは、カスタム画像ファイル、JavaScript、スタイルシートなど、アプリケーション自身が保有するアセットの置き場所です。
  • lib/assetsは、1つのアプリケーションの範疇に収まらないライブラリのコードや、複数のアプリケーションで共有されるライブラリのコードを置く場所です。
  • vendor/assetsは、JavaScriptプラグインやCSSフレームワークなど、外部の団体などによって所有されているアセットの置き場所です。

引用元:アセットパイプライン | Rails ガイド

■外部ベンダー提供のjs, CSSを読み込む場合の例
外部ベンダーの bootstrap-tagsinput.min.js と bootstrap-tagsinput.cssを読み込みたいとする。

1.vendor/assets/javascripts/bootstrap-tagsinput.min.js と vendor/assets/stylesheets/bootstrap-tagsinput.css にファイル置く
2.config/initializers/assets.rb に以下を定義する

Rails.application.config.assets.precompile += [
    #Bootstrap Tags Input
    ‘bootstrap-tagsinput.min.js’,
    ‘bootstrap-tagsinput.css’
]

3.railsを再起動する
4.読み込みたいviewで、stylesheet_link_tag と javascript_include_tag を使って定義したファイルを読み込む

Rails5 CoffeeScriptで「プロパティ:値」を複数書くときは改行するだけ

jQueryでよく使う「({ ・・・ });」の複数のプロパティと値を一括で指定する方法をCoffeeScriptでやる場合は改行で指定する。
(例)
————————————————————–
$ ->
  $(‘.datepicker’).pickadate
    selectMonths: true
    selectYears: 100
    max: true
————————————————————–

CoffeeScriptとjQueryで書いた場合の例

MacのPostgres.appはDB名をダブルクリックで対話モード開始

Postgres.appをインストールして起動したあと、DB名をダブルクリックすると対話モード($ psql postgresの実行)に入れる。

ドキュメント見ても載ってなくて最初わからなかった。

■備考
1.Rubyでの設定方法もあったが、特に何もしなくてもPostgres.app動いてる。
Configuring Ruby for Postgres.app
 2.ただし、bundle installすると「checking for pg_config… no」と怒られるので以下Qiitaの記事で書かれた対応が必要。Gemfileに書いて開発してるかと思うので、「Gemfileに書いている時には環境変数CONFIGURE_ARGSを設定する」と書かれてる対応を実施する。
Postgres.appを使ってPostgreSQLを使う場合に、gem ‘pg’を入れる方法

Rails5でMaterial Design Lite動かないのでturbolinksは切る

Material Design Liteがうまく動かないのでTurbolinksを切ったら、ちゃんと動くようになった。

■Turbolinksの切り方
以下、引用。

1) Remove the gem ‘turbolinks’ line from your Gemfile.
2) Remove the //= require turbolinks from your app/assets/javascripts/application.js .
3) Remove the two “data-turbolinks-track” => true hash key/value pairs from your app/views/layouts/application.html.erb .

 引用元:How to disable turbolinks in Rails 5?

3)は丸ごと行を削除でOK。

■メモ
・TurbolinksはReact使う時も切るのがよいとのことで、なるべく切る
・「rails new my_app –skip-turbolinks」でTurbolinksを無効にして作成できる
・「rails g scaffold」した時はturbolinks有効にしないと動かないものがあるっぽいので注意

Rails, React, Material Design関連のキーワード自分用まとめ

自分用まとめ。誤りあったらごめんなさい(すぐ修正します)。

■前提知識
・Homebrew:macOS用に使うパッケージを管理してくれる。似たものでMacPortsもあるがHomebrewで実装されていることが多いっぽい

■Rails関連のキーワード
・rbenv(Simple Ruby Version Management):Rubyをバージョン切り替え管理できる
・Rails 5.1からフロントエンド周りの強化としてYarnとWebpackerが実装されて、React実装がかんたんになった
Yarn(A new package manager for JavaScript):RubyGemsっぽいもの
Webpacker:JavaScriptアプリをRailsでかんたんに扱えるようにしたものっぽい
・Gemは使わなくてよいなら極力使わないこと。下手に使うと依存関係の修正対応が延々と終わらない。「使われなくなっている/使わないGem」などで調べるといろいろ見つかる

■React関連のキーワード
Node.js:JavaScriptで動かせる実行環境。これなくてもRailsに実行環境を用意すれば動かせる
npm(Node Package Manager):Node.jsで使うパッケージを管理してくれる。Node.jsインストールすると一緒に付いてくる。Railsだけで動かしているとパッケージの依存関係が大変になるので本気でやるならこれがいるっぽい
・実装は、Rails 5.1のYarnとWebpacker使った方法や、Gemfileに「gem ‘react-rails’」でインストールする方法などがある
・シングルページアプリケーション(SPA)を作らないなら無理してReact使わなくてよい。Reactのよさが活用できそうにないなら自分の得意なものを選択したほうが効率よい
・UIだけならMaterial Design使えばよい
・Reactやると、学習コストがReact以外に関連技術(実行環境とか)もいろいろ必要になるので大変そう。Reactのコードや学習自体が難しいわけではない
・React Native:JavaScriptで開発して、iOSとかAndroidのようなネイティブな描画ができる。

■React Native
React Native:React NativeのviewはiOSのUIViewにしてくれる。ただし、さらに関連技術(Redux/Fluxとか)の学習が必要。発展途上なので2017/10時点だといろいろと開発が大変らしい

■Material Design(CSSフレームワークとしての)関連のキーワード
Material Design Lite:Google作成。コンポーネント足りないものがややあり。これの後継になるMaterial Components for the Webが発表された
Material Components for the Web: Google作成。コンポーネントが相当豊富でなんでも揃ってる
Materialize:すごい学生さんたちがMaterial Designに則って作成。jQuery依存あり。コンポーネントが相当豊富でなんでも揃ってる。GitHub上も活発
Material-UI:Reactを使ってMaterial Designを実装となる。Call-Em-Allという会社が作成
・RailsでインストールできるGem(rubysamurai/material_design_lite-sass など)もあるが、Material Design Liteの実装自体が非常にかんたんなので、どんなシーンでこのGemを利用すべきか不明

■わかりやすい参考サイト
Rails関連
依存関係をなくそう : Rubyアプリ・Gemの開発者への提言

React関連
Rails 5.1でReact.js連携アプリを構築してみよう
react-railsを使ってReactのTutorialをやってみる
react + rails 構成パターンまとめ。npm とか bower とか一体何なんだよ!Javascript 界隈の文脈を理解しよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
シングルページアプリケーション(SPA)の導入メリット&デメリット

React Native
React Native開発のつらい点まとめ

Material Design(CSSフレームワーク)関連
マテリアルデザインをサクッと実装できるCSSフレームワーク6選【2017年版】
CSSフレームワークを使って今から始めるお手軽マテリアルデザイン

Rails5でSQLiteからPostgreSQLに変更した時のメモ

■PostgreSQL側でCREATEDB権限がない時のエラー
———————————————————————
$ rails db:setup
PG::InsufficientPrivilege: ERROR:  permission denied to create database
———————————————————————
config/database.ymlで設定書いたユーザーにCREATEDB権限があるかどうか、PostgreSQL側で確認する。

■CarrierWaveで複数画像を投稿するとエラー
1.SQLiteとPostgreSQL/MySQLで実装方法が異なる。PostgreSQLの実装にする。
(参考)CarrierWave –  Multiple file uploads
(参考)CarrierWave 複数の画像をコード三行で一つのカラムに保存する ※PostgreSQL/MySQLの実装方法でSQLiteではない

2.複数画像を投稿時に以下エラーが出る場合は構文を書き間違えている可能性あり。
———————————————————————
TypeError in UsersController#create

no implicit conversion of nil into String
———————————————————————
(参考)Stack Overflow – “no implicit conversion of nil into String” error for carrierwave multiple image upload
「mount_uploaders」ではなく「mount_uploader」と書く。

———————————————————————
# app/models/users.rb
class User < ApplicationRecord
  # 画像1つのみアップロードする場合。imageカラムに格納指定。
  mount_uploader :image, ImageUploader
  # 複数画像アップロードする場合。image_anotherカラムに格納指定。
  mount_uploaders :image_another, ImageUploader
end
———————————————————————

PostgreSQLコマンドメモ

■PostgreSQLの対話的ターミナルの入り方
————————————————————————-
$ psql postgres
postgres=#
————————————————————————-

■DB名を指定してフル権限を付与する – GRANT
DB名「db_development」にユーザー「user_development」をフル権限(ALL PRIVILEGES)で付与する。
————————————————————————-
postgres=# GRANT ALL PRIVILEGES ON DATABASE db_development TO user_development;
GRANT
postgres=# l
————————————————————————-
補足:最後に「;」をつける
補足:DB名を指定する場合は「ON DATABSE」をつける。これがないとテーブル名指定になる

■DB作成権限を付与する – ALTER ROLE
ユーザー「user_development」に「CREATEDB」権限を付与する。
————————————————————————-
postgres=# ALTER ROLE user_development WITH CREATEDB;
ALTER ROLE
postgres=# du
————————————————————————-
https://www.postgresql.jp/document/8.1/html/sql-alterrole.html

■RailsでPostgreSQL使う場合に最初にやること
PostgreSQLの管理系コマンドまとめ

■参考情報
PostgreSQL 9.1.5文書 – GRANT
PostgreSQL 8.1.9文書 – ALTER ROLE