同じにやっても動かない

書いてある通りやっているのに動かないのです

Cocoonでhas_oneな関連モデルのフォームを作りたいとき

ひさびさのRailsネタ。

has_manyな関連モデルを一挙に 生成 / 更新 / 削除 できるフォームを作るのにとても便利なcocoon
has_oneな関連モデル用フォームでも使いたいのだけど、link_to_add_association ヘルパーを普通に使うとうまく動きません。

以下のように :force_non_association_create オプションを入れると期待どおりに動くようになります。

= link_to_add_association('add something', @form_obj, :comments,
    :force_non_association_create => true)

実際の動作は以下の感じです。

  • 保存済みのレコードが無い場合は新規作成
  • 保存済みのレコードがある場合は最後にlink_to_add_associationで追加された内容で登録済みレコードを更新

※ 参考サイト
github.com

Amazon DashボタンでiTunesを操作するぞ

うちにもDashボタンが来たので何かしてみようということで、

気分じゃない曲がかかったらDashボタンで次の曲へスキップ

をやってみることにしました。
超簡単だよ!

まずは以下サイトを参考にボタン検知できるようにします (takustaquさんあざます!)。

qiita.com

次に iTunesを操作するライブラリをインストール。

$ npm install --save itunes-remote

最後に上記サイトのtestコードに3行追加するだけ!

const DashButton = require("dash-button"); 
const PHY_ADDR = "xx:xx:xx:xx:xx:xx"; 

// 追加コード1行目
const itunesRemote = require('itunes-remote');

Let button = new DashButton(PHY_ADDR);

button.addListener(() => {
   // 追加コード2行目
    itunesRemote("play", () => {});
   // 追加コード3行目
    itunesRemote("next", () => {});
});

iTunesウィンドウに移動しなくてもDashボタン1プッシュでスキップじゃ!

SMARTalkが着信しない

Nexus6P (Android7.0) にSMARTalkを入れたのですが、Androidがスタンバイに入ってしばらくすると「ネットワーク不通」とSMARTalkが表示して着信できない状態になっている事に気が付きました。
多分以下で解決したと思います。

0. 設定 → 電池 を選ぶ

1. 右上のメニュータップして「電池の最適化」を選択

f:id:nyarugo:20161031235104p:plain


2. そこにSMARTalkが表示されていなかったら「すべてアプリ」タップし、SMARTalkを選択

f:id:nyarugo:20161031235217p:plain


3. 「最適化しない」を選択

f:id:nyarugo:20161031235259p:plain

ChefでDockerを入れるとVagrant upが終わらない

OSXVagrant入れてVMCentOS上でDocker動かすというのをやっています。
環境はこんな感じ。


[ホストOS]

  • OSX Yosemite
  • Vagrant 1.8.4
  • Virtual box 5.0.20
  • chef Development Kit Version: 0.14.25
  • chef-client version: 12.11.18
  • berks version: 3.1.5
  • kitchen version: 1.8.0

[ゲストOS]


そしてなぜかよくわからないのですが

  1. ゲストOSにDockerをインストールして
  2. ホストオンリーネットワークかブリッジネットワークを有効にする


と、Vagrant upが

==> default: Configuring and enabling network interfaces...


で止まって永遠に帰ってこなくなります。
ここで強制終了して再起動かけると今度は以下が延々と表示されてやはりvagrant upが終わらない。

default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...


ループバックアドレスのみのときはちゃんと立ち上がるんですよね。

DEBUGモードでvagrant upしてみるとSSHでこけているみたいだったので、Google先生に聞いて色々試したのですがどれもだめでした。

ダメ元でゲストOSをCentOS7.1にしてみたところ、


問題解決しました(・∀・)


Chefが関係あるような投稿を英語サイトで見つけたのですが、Chef以外からのDockerインストールは試していないのでよくわからず。
理由はわかりません。。

SNI SSL対応のcurlをビルドする

SNI SSLに対応したcurlをビルドする必要があったので手順をメモしておきます。

事の発端はCS-CARTを導入したのもの、SSLを有効化しようとすると下記エラーが出て設定できなかったというもの。

HTTPS接続チェックに失敗しました。 "config.php" ファイル内のHTTPSに関する設定を確認のうえお使いのサーバーにSSL証明書がインストールされていることを確認してください。
f:id:nyarugo:20160120191225p:plain


色々調べてみたらSSL有効化チェックでcurlを使っているのだけど、サーバーにインストールされているcurlがSNI SSLに対応しておらずエラーを吐いている事がわかりました。
ネームスペースSSL激安で良いなあと思って飛びついたのですが、こんなところでハマるとは (^^;

というわけでSNI対応curlをビルドします。


1. SNI対応のopensslのビルド
※ OpenSSLのSNIサポートはOpenSSL 0.9.8j 以降のようです

curlsslをしゃべるわけではないようなので、まずはcurlが使うopensslライブラリをSNI対応にする必要があります。

openssl-1.0.2e.tar.gzをダウンロードして

$ tar zxvf openssl-1.0.2e.tar.gz
$ cd openssl-1.0.2e
$ ./config shared zlib --prefix=/home/opt/openssl-1.0.2e
$ make; make test; make install


2. SNI対応のopensslライブラリを使ってcurlのビルド
curlのSNIサポートは7.18.1以降のようです

curl-7.46.0.tar.gzをダウンロードして、環境変数export PKG_CONFIG_PATHに先にインストールしたopensslのpkgconfigのパスをセット

$ export PKG_CONFIG_PATH=/home/opt/openssl-1.0.2e/lib/pkgconfig
$ cd curl-7.46.0
$ ./configure --with-ssl --prefix=/home/opt
$ make; make install


これでSNI SSLサイトに対応したcurlの完成。

SNI SSLに対応していないcurlでSNI SSLサイトに繋ぐと

$ curl https://www.snissl.com
curl: (51) SSL: certificate subject name '*.****' does not match target host name 'www.snissl.com'

となりますが、新しくビルドしたcurlで繋ぐとソースが表示されるはずです。

もうなんにも覚えていない

久々に、そして初の商用サイトをRailsで開発しないといけなくなったけど、1年以上触っていないのでもう何も覚えていない。。

Raspberry Pi のプログラムをMacのXサーバーで実行

追記あり

Raspberry Pi を入手したのですが、HDMIモニターが家にないためXを動かしてもどうなっているのかわかりません。

なので、MacのXサーバーで描画してみることにしました。

  • MacのXサーバーを起動

MavericksではX11のサポートがなくなっていて、XQuartzをインストールするように誘導されました。
インストールしたらXQuartzを起動でXtermが立ち上がります。
これでOK。

  • サーバーへの接続許可設定

xtermで下記を実行

$ xhost +<Raspberry Piのアドレス>
  • X11転送オプションでssh接続

xtermで下記でRaspberry Piに接続

$ ssh -X user@<Paspberry Piのアドレス>
  • あとはRaspberry Pi上からプログラムを起動するだけで、Mac側に描画されます。

[追記]
Xquartzを立ちあげなくても、-X オプション付きで slogin すれば自動でX serverが立ち上がりました。