2014年7月29日火曜日

gem Pundit

 Punditはアクセス管理の認可(authorization)を実装するためのgemですが、これを使えと言われて使ったものの、下知識が足らず、Readme見ても簡単簡単と書かれている割にその通りにしてもうまくいかず、なんなんだよ、と。
 最終的に下記のページを参考にしました。この例を見る限りでは、簡単というほど簡単ではないように思うのですが…。
 ちなみにこのサイトの記事は実装までを完全に再現してくれてはいないため、リンク先のgithub上にある実際のコードが一番参考になりました。

参考:

 つれーなー。Rails始めて2ヶ月くらい経つけど、拒絶反応が取れた程度の進捗。本当に自分がふがいない。
 1人で楽しく自由に進めた方がこれに関しては良い気がする。ドットインストールの興味のある講座とか見たいけど、余計なことに時間を使うなとえらい人がキレたりするからな。なんなんだろう。吸収できるものから吸収して、ちょっとは感覚を持つというかちょっとでも自信をつけさせて欲しいよ。

2014年7月24日木曜日

アスペクト比を変えずに画像を縦横長の決まった範囲に収める

 例えば200*200というマスの中に画像を縮小して、且つアスペクト比を変えずに表示させたい。
 需要ありそうだけど、ググってもなかなか見つからない。

 縦か横のどちらかにだけ合わせるのであれば、cssにwidth: autoやらheight: autoやら書けば対応できるみたいだけど、これを縦横から挟むようなcss書いてもうまくいかない。

 とりあえず裏技っぽいのはあったので参考にリンクを張っておこう。

参考:
【図解】CSSだけで画像の縦横比を維持したサムネイルを表示する

 こんなの簡単そうなのにね。いや、きっとすげー簡単なんだよ。職人はきっと当たり前のように使っているんだ。うーむ。
 いろいろなページのソースを見てみよう。

 gemとか使って事前に切り出しとけよ、とかそういう話なんだろうか。
 切り出してRailsで使う方法はこの辺が参考になりそう。必要になったら読もう。

参考:
#374 Image Manipulation

 自分がRailsを質問すべき人が、キレてて質問しづらい。なんだよ。ちくしょー。優しく教えてくれよ。未経験だって言ったじゃないか。

数値を区切りや通貨単位を入れて表示する

 例えば変数priceに10000000.0と入っていたとして、それを10,000,000円と表示させたい場合、下記で対応可能なんですって。
number_to_currency(price, precision: 0, unit: "", format: "%n%u")
その他、整形に使えるヘルパーはたくさんあるようです。以下、参考まで。

参考:
[Ruby on Rails] 数字を整形する便利なViewヘルパー


新しいブランチとしてpushする

 gitはとても便利らしいけど、複数人で使っていると怖い。よくわかっていない。

 とりあえずローカルで新しく作ったブランチをリモートの新しいブランチとしてpushすることがよくあるので、メモ。
git push -u origin [new branch]
 -uすると、push先が同じであればその後ブランチ名が省略できる。

 こういう一面的な覚え方はいけないんでしょうけど、今は悠長に勉強している暇がない。

[未解決] Windows8.1マシンが自動スリープしない

 Windows8.1にしてから、というわけではないのだけれど、(ログを見ると)2か月前くらいから電源オプションで設定した時間が経過してもスリープにならなくなってしまった。

どんな操作やソフトウェアのインストールしたのかは記憶にないのだけれど、現状を書いておいておきます。

  • Windows8.1 Pro 64bit
  • ホームグループには不参加(パブリックネットワーク)
  • 思いつく全てのデバイスのスリープ復帰機能を停止
  • OS起動直後は問題なく動作する
  • 同じシステムで、XPの頃には問題なかった

 で、動画を再生した後に発生するような気がする!と思い始めたのが最近で、その辺のキーワードで検索したら下のサイトにたどり着いた。内容的に関係ありそうな感じもするので、試してみよう。

参考:
Windows8.1にアップデートしたら自動でスリープに移行しなくなった

イベントビューアーによるとたまにUSBルートハブが原因でスリープから復帰していたので、この線で相当デバイスをとったりつけたりon/offしたり調査していたのですが、こっちは関係ないのかな…。再現頻度も低いし、上の問題と連動している感じはしない。

 うーむ。

 また夜にでもイベントビューアーやらなんやらを確認してみよう。直っていたら嬉しいなー。

---

 で、その後、ネットワーク上の動画を再生して放置を繰り返してもちゃんとスリープに入れるようになりました。サンキュー、ブログの人!

---

 更にその後、頻度は少なくなったけどやはりたまにスリープに入らない。
 今はOneDriveとかOneNoteとかちょっとでもあやしいアプリケーションを削除したり停止したりしている。CCCもWindows8.1上でかなり変な動きしているんだよな…。
 あー、ここで改めてUSBルートハブか。またいろいろ確認してみよう。

---

 さて、スリープに入れない件を放置していましたが、今日イベントビューアーのApplicationを見てみると下記の情報がたくさんあったのでググってみた。
- System
  - Provider
   [ Name]  ESENT

  - EventID 103
   [ Qualifiers]  0

   Level 4

   Task 1

   Keywords 0x80000000000000

  - TimeCreated
   [ SystemTime]  2014-08-17T21:13:16.000000000Z

   EventRecordID 10418

   Channel Application

   Computer 1F-TV

   Security

- EventData
   svchost
   2876
   Instance:
   0
   [1] 0.000, [2] 0.000, [3] 0.000, [4] 0.000, [5] 0.016, [6] 0.000, [7] 0.000, [8] 0.000, [9] 0.000, [10] 0.000, [11] 0.000, [12] 0.000, [13] 0.000, [14] 0.000, [15] 0.000.
   0 

すると、スリープに関する記事がいくつか出てきて、いきなり核心に迫る感じ。
 参考にしたサイトのマネをして管理者権限のDOS上でpowercfg /requests。理由はわからないけど、Realtekオーディオをシステムがつかんだまま(逆?)のようです。
C:\WINDOWS\system32>powercfg /requests
DISPLAY:
なし。
SYSTEM:
[DRIVER] Realtek High Definition Audio (HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS
_1043841B&REV_1003\4&1d1d2e48&0&0001)
現在 1 つのオーディオ ストリームが使用中です。
AWAYMODE:
なし。
実行:
なし。
PERFBOOST:
なし。

 対処法がよくわからなかったのでとりあえずデバイスマネージャーでドライバーの再更新(これまでと同じバージョンを再適用しただけ)をしたところ、この使用中ステータスは解消されました。

 さて、これで直るの?使用中になってしまう、という問題かもしれないな。ちょっと様子見。

参考:
Windows 8で自動スリープしなくなった時の対処
Windows: Windows7で自動スリープにならない場合の対処

---

 直らなかった。DOS上のステータスが変わっただけで今回の問題とは関係ないのかも。
 ストレージ関係の情報の中にヒントがありそうな気がするので、次はこの線を洗う予定。

---

 またしばらくして電源オプションを見ると、電源プランがSamsung High Performanceになっていた。SSDのアプリがなにかのタイミングでこの設定を変えるみたいだけど、こちらでも最初に書いたマルチメディアの設定を行ったら調子いいみたい。さて今度はどうなるかな。

---

 その後も相変わらず直らず、可能性として優先順を低く見積もっていたBIOS更新をやってみたら、なんかすごく調子いい…。まじかよ。
 Windows8のS3以上となんか衝突していたんだろうか。

 クローズできそうな気配。今週一杯問題が発生しなかったら終了にしよう。

---

 ダメでした。動画見たりいろいろ操作するとやはりスリープに入らなくなる。再起動すると戻る。なんだろか。うーん。
 もう一回イベントビューアで、Windows8をクリーンインストールした直後からか、8.1に更新してからか、どんな変更の後に問題が出るようになったか再確認してみよう。ちょっと記憶があやふや。

---

 その後もイベントビューアを追うのが面倒で、まずはドライバ更新と今一番怪しいと感じているCCCを一時的にスタートアップから外している。ドライバーが動いていれば十分なので。