動かざることバグの如し

近づきたいよ 君の理想に

シャープのBDレコーダーが故障したのでHDD換装して修理した

結論

  • シャープのビデオレコーダーの修理に成功した
  • が、シャープのレコーダーは他社と比べてもHDD交換が非常に面倒
  • 自分で修理したから実質無料修理(????

発端

実家のBDレコーダーの調子が悪いということで貰った。

機種はBD-HDW75。シャープ製である。

症状としては電源の付きが遅かったり、録画できたりできなかったりらしい。これ聞いてHDDの故障を疑った。

なにしろ地デジ化寸前に買ったものなので、かれこれ8年前の代物である。むしろよく頑張ったなHDD

ってことで分解したらただ3.5インチのHDDがSATAケーブルでささってただけだったので、結構HDDの交換は楽だと思った。そんなことなかった

用意するもの

  • ビットトレードワン製 USB赤外線リモコン(AD00020)
    USB接続 赤外線リモコン キット

    USB接続 赤外線リモコン キット

    • 後述するが、これがないとHDDをフォーマットできないクソ仕様である
    • 大きさから俗にフリスクリモコンと呼ばれてるらしい
    • これを接続するWindowsマシンも必要
    • 自分でハンダで組み立てるタイプ(AD00020)と組み立て済み(AD00020P)の2種類がある。

USB接続 赤外線リモコン 完成品

USB接続 赤外線リモコン 完成品

  • mini USB to USBケーブル
    • microUSBケーブルではないので注意

手順

先にUSB赤外線リモコンがPCから動くか確認しておく

で、以下のサイトからBtoIrRemocon.exeをダウンロードする

DSAS開発者の部屋:親指サイズの USB 赤外線リモコンが面白い

  1. まず分解してHDDを交換
  2. 電源を入れる
  3. HDDが認識できませんの表記が出るのでリモコンのホーム→設定からシステムテストを実施
  4. テスト結果が出た状態のまま、PCから以下のコマンドを実行
BtoIrRemocon.exe C1AA5A8F30F501

以下の状態でコマンドを実行して赤外線を認識させる

f:id:thr3a:20190114160538j:plain

これがいわゆるサービスマン用リモコンコードと呼ばれるもので、これを受信しないと、シャープのレコーダーは新しいHDDを認識してくれない。 ほんとクソ(再度

コマンドは機種によっても違うらしく

C1AA5A8F30F501
C1AA5A8F31F511
C1AA5A8F32F521

の3種類どれか試せば当たると思う(適当

すると見慣れない変な画面に飛ぶはずなので、リモコンの赤いボタンを押して「エージング」を選択。すると画面が遷移するので、十字キーで「HDD-IDの登録」の「ON」に移動して実行。これで新しいHDDがようやく認識された。

この画面で赤いボタン押す

f:id:thr3a:20190114160558j:plain

最後はHDDの初期化。同じ画面のままエージング項目の最初の「START」にカーソルを合わせて実行。10分待つ

エージング実行中

f:id:thr3a:20190114161132j:plain

右がOKになれば完了 画面を戻れないので電源OFFしかないと思う

f:id:thr3a:20190114161928j:plain

そしたら電源を消して再度つける。あとは普通の画面から入れる設定へ行って「HDDの初期化」を実行

ようやく録画ができるようになった

が、普段テレビを見ない人間なので、当分はバンドリ専用録画機になりそうだが、、、

参考リンク

シャープ製レコーダーでデフォルトの録画画質を変更する方法

実家のBDレコーダーを新しいのに変えた。

価格.com - シャープ AQUOSブルーレイ BD-UT2200 価格比較

今まで使っていたBDレコーダーが、おそらくHDDの故障なのだろう、録画も電源ONすらままならない状況になってしまったためである。

前回もシャープだったので、同じメーカーのほうが操作方法もあんまり変わらないんじゃないかと思ってBD-UT2200にした。実家はわりとテレビ録画するタイプなので、3番組同時録画できるタイプにした。

録画画質が変更できない

のはいいんだけど、録画のデフォルトがDR(最高画質)になってしまう。映像はきれいだけど、全然容量が足りなくなるので、3倍とか5倍とかに変更したい。が、その都度変えるのは非常に面倒だし、一発録画のときは設定変更画面が出ないので、自動で最高画質になってしまう。。。

しかも設定画面で探しても項目がない

デフォルトの録画画質を変更する手順

が、よーく探すとあった

まずレコーダーの電源を入れて、リモコンの「ツール」を押す。

f:id:thr3a:20190104113158j:plain

すると、画面の左側に以下のようなメニューが出るので「録画画質設定」を選択して押す

f:id:thr3a:20190104113204j:plain

すると録画画質の選択画面にようやくいけるので、好みの画質にする。初期値はDRで最高画質なので、右にいけばいくほど画質は落ちる。が、たくさん番組を録画保存できるようになる。我が家では「5倍」で設定した。そんなに違和感はない(テレビのインチが小さいから

f:id:thr3a:20190104102957j:plain

説明書見てもそれらしき説明なかったし、あえて変更させずにレコーダーの購入サイクルを早めようとしてるんじゃないかと疑ってしまうようなUIな気がする。普通に設定画面から維持れるようにしてくれ〜〜

スクレイピングツールMechanizeでリンク先の絶対URLを取得する方法

mechanizeとは言わずとしれたRubyスクレイピングツールである。

で、例えば以下のようにページ内のaタグからリンク先のURLを取得したいとする。

url = "https://stackoverflow.com/questions/34471102/python-nameerror-name-include-is-not-defined"
agent =Mechanize.new
agent.get url
href = agent.page.at('a.question-hyperlink').attr('href')
p href.to_s

が、実際にstack overflowのサイトを見るとわかるが、以下のようにURLではなくpathになってしまう。いわゆる相対パスってやつ

> "/questions/34471102/python-nameerror-name-include-is-not-defined"

絶対パスで取得する方法

http://〜から始まる形で欲しい場合は、以下のようにする

p (agent.page.uri.merge href).to_s
> "https://stackoverflow.com/questions/34471102/python-nameerror-name-include-is-not-defined"

最後に.to_sしているのは、URI::HTTPSクラスになってしまうため。

参考リンク

dockerで特定のログをひたすらtailし続けるコンテナを作る

環境

  • docker-compose

やりたいこと

いや、大したことじゃないんだけど、docker logでは各プロセスの標準出力が流れる。で、自前のアプリケーションのlogを流したかった話

コード

  image: "alpine:3.8"
  command: /bin/sh -c "mkdir -p /app/rails && touch /app/rails/log/server.log && tail -F /app/rails/log/server.log"
  volumes:
    - "./:/app/rails"

すると /app/rails/log/server.log のログがdocker logに流れる。td-agent使えよ

Rails開発をもっと楽しくする便利メソッド集

この記事はRuby on Rails Advent Calendar 2018の7日目です。

はじめに

今回は知らなくても生きていけるけど、知っておいたほうがお得で便利なRailsメソッドを紹介していく。RailsといいつつActiveSupportやんけ

squish

冒頭と末尾のホワイトスペースを削除して、連続したホワイトスペースを1つだけになるように整形してくれる。

" hoge \n \t piyo   fuga\n".squish
=> "hoge piyo fuga"

try

知ってる人は常識だけど未だに知らない人多い。例えば以下のようにpostに紐づくuserのlogin.idを有れば取得する場合、

post = Post.last
post.user.present? && post.user.login.present? && post.user.login.id

以下のように短くできる。

post = Post.last
post.try(:user).try(:login).try(:id)

presence

便利なのに、present? に比べて presence知名度が低い印象。

nilかどうかチェックしてnilならAを、違うならそのまま返したいときに

object.present? ? object : 'nanasi'

と書くところを簡単にできる。ぜひ使ってほしい。

name.presence || 'nanasi'

presence_in

これも present? に比べて知名度低い。引数のリスト中にあればそれ自身を返す。なければnil いわゆるホワイトリストに使える。

'admin'.presence_in %w(admin staff viewer)
=> "admin"
'invalid'.presence_in %w(admin staff viewer)
=> nil

all_week, all_month, all_year

例えば今月の初日から末尾までをrangeで欲しい場合、普通に書くと

Date.today.beginning_of_month..Date.today.end_of_month

となるが、all_month で一発

Date.today.all_month
=> Sat, 01 Dec 2018..Mon, 31 Dec 2018

とできる。 他にも all_year も便利。

Date.today.all_week
=> Mon, 03 Dec 2018..Sun, 09 Dec 2018
Date.today.all_year
=> Mon, 01 Jan 2018..Mon, 31 Dec 2018
Date.today.all_year.count
=> 365 # 当然w

all_day

all_day はその日まるごとの時間をrangeで取得できる。

Date.today.all_day
=> Wed, 05 Dec 2018 00:00:00 JST +09:00..Wed, 05 Dec 2018 23:59:59 JST +09:00

to_s(:db)

さっきの all_*** と組み合わせると強い。

(Date.today..Date.tomorrow).to_s(:db)
=> "BETWEEN '2018-12-05' AND '2018-12-06'"

overlaps?

2つのrangeに対して、重複している部分があるかをチェックする。

(1..10).overlaps?(3..6)
=> true
(1..10).overlaps?(11..20)
=> false

rangeに対して使えるので、日付とかでもOK。

(Date.new(2018,12,1)..Date.new(2018,12,10)).overlaps?(Date.new(2018,12,3)..Date.new(2018,12,6))
=> true