Ruby で インスタンス変数 に File.open を格納して複数のメソッドで each_line したらハマった

結論

こんな感じに書くと、Hoge#bar では期待通りの挙動*1にならないです。

class Hoge
  def initialize
    @file = File.open('/path/to/piyo.txt')
  end

  def foo
    @file.each_line do |line|
      puts line
    end
  end

  def bar
    @file.each_line do |line|
      puts line
    end
  end
end

hoge = Hoge.new
hoge.foo
hoge.bar

なぜか

hoge.foo によって行数のポインタが最後まで到達してしまっているから。hoge.bar では最後の行から each_line がスタートするから。

ハマった

小一時間ハマってしまった。

*1:ファイルの内容が 2回 表示されてほしい

YouTube で「埋め込みを許可しない」状態で動画の URL を Twitter に投稿すると、以降サムネイルが表示されなくなる現象への対処

結論

1. 「埋め込みを許可する」

2. YouTube の URL に適当なパラメータを付与して Twitter に投稿する

  • たとえば動画の URL が https://www.youtube.com/watch?v=abcdefg のとき、適当なパラメータ foo=bar を付与します
    • https://www.youtube.com/watch?v=abcdefg&foo=bar
    • 動画の視聴に影響はありません*1
  • この時点で動画にサムネイルが出ることを確認します
  • 投稿の際にバレたくないならばコミュニティ機能を使うなどします

3. 以降はサムネイルが生成される

これで、以降は誰が投稿してもサムネイルが生成されるようになります。「2.」で付与した「適当なパラメータ」は用いる必要はありません。

4. サムネイルが表示されることを確認したら先ほどのツイートは削除する

「2.」で投稿した https://www.youtube.com/watch?v=abcdefg&foo=bar を含むツイートは削除して問題ありません。

補足

Card Validator は提供終了しています。

参考

*1:そもそも、ツイートはすぐ消します

Kindle のライブラリに epub や PDF を送る方法

結論

Webページ経由がいい。

補足

  • メールだと認証が挟まったり時間がかかったり*1ので、Webからサクッとアップロードするのがいいです
  • クラウドなので、ここからアップロードすれば全端末から見られます*2

*1:おそらく定期的にバッチで処理していると思われる

*2:当たり前ですが

スプレッドシート を API や GAS で扱うときに常に意識しておいたほうが良いことの一つ

結論

シート上での「型」と API や GAS 上での「型」の違い。

具体例

  • 取得した値に対して文字列操作をするときに、数値に対して置換をするとエラーが出る*1

型恐怖症

たとえば GAS なら、何でもかんでも String(hoge) でキャストするという方法がある。一般的にはこれはエラーを握りつぶす行為になってしまうが、様々な状況を考えると GAS ならギリギリありかなと思っている。

*1:このエラーメッセージがすぐには分かりにくいことがある

Google Analytics 4 (GA4) で linkId (Link ID) の長さの上限は 100文字

結論

表題のとおりです。

100文字を超えると(=101文字より長くなると)切られて、先頭の 100文字 が記録されます。

(参考)Link ID とは

a タグ の含まれる id 属性のことです。類似の概念として Class ID もあり、こちらは class 属性の値が記録されます*1

*1:こちらもおそらく長さの上限は 100文字 のはず

Powered by はてなブログ