錯誤試行

PCや生活の試行錯誤の成果を報告するブログ

mps-youtubeが何だかうまく動かない(解決)

コマンドラインからyoutubeが見られる(もしくは聴ける)mps-youtubeというツールがある。ながら聞きに便利なので、久しぶりに使ってみようとしたところ、色々とエラーが出て動かなかったので、Github公式ページのIssuesを見て対応した。

不具合と対応

対応した内容は以下。

  • 「ValueError: time data '20xx-xx-xxTxx:xx:xxZ' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'」というエラーが出てクラッシュする
    「userpl hoge」(指定したユーザーのプレイリストを表示)したところ発生した。
    /usr/local/lib/python3.x/dist-packages/mps_youtube/util.pyの315行目と325行目を以下のように直せばよいとのこと。

    time_obj = time.strptime(yt_date_time, "%Y-%m-%dT%H:%M:%SZ")
    

    ValueError: time data does not match format '%Y-%m-%dT%H:%M:%S.%fZ' · Issue #1086 · mps-youtube/mps-youtube · GitHub

  • 「Problem playing last item: unconverted data remains: Z」と言われる
    曲一覧から「i 1」(曲の情報を取得)したところ発生した。
    /usr/local/lib/python3.x/dist-packages/mps_youtube/commands/misc.pyの253行目を以下のように書き換えるとのこと。

    pub = datetime.strptime(str(p.published), "%Y-%m-%d %H:%M:%SZ")
    

    Problem playing last item: unconverted data remains: Z · Issue #1101 · mps-youtube/mps-youtube · GitHub

  • 「urllib.error.HTTPError: HTTP Error 403: Forbidden」が出て起動しない
    続けて「pafy.util.GdataError: Youtube Error 403: The request cannot be completed because you have exceeded your quota.」も出る。
    「~/.config/mps-youtube/cache_py_*」を消したら直った。

    Problem playing last item: HTTP Error 403: Forbidden · Issue #1071 · mps-youtube/mps-youtube · GitHub

  • (番外)set api_keyしてもInvalid key or quota exceededと言われる
    これはmps-youtubeの問題ではなかった。
    作成したapiキーをコピペして入力しているのにエラーが出る。バージョンを下げたりパッケージ管理ツールを変えてもダメ。
    対応として、Google Cloud Platformでプロジェクトを作り直し、apiキーを作り直したところ解決した。
    以下Githubコメントの通り、APIキーは、ある程度使わないでいるとプロジェクトやらキーやらが無効になることが原因であるらしい。確かに、mps-youtubeをしばらく使っていなかった。

    (翻訳)
    「無効なキーまたはクォータを超えました」というエラーが発生した場合、APIキーは保存されないため、代わりに元の開発者キーが使用されます。
    Google Developers Consoleで新しいプロジェクトと新しい認証情報を作成し、Youtube Data APIを追加して、そのAPIのみに制限する必要があります。理由は100%わかりませんが、キーをしばらく使用しないと、プロジェクトが無効になるか、プロジェクトの背後にあるIDが削除される場合に発生するようです。

    Polluted by AIzaSyCIM4EzNqi1in22f4Z3Ru3iYvLaY8tc3bo API key. · Issue #1061 · mps-youtube/mps-youtube · GitHub

fonモバイルルータをレンタルしたメモ

目次

ネット回線に困り、モバイルルータを借りてみた

ネットがもはやインフラの昨今に、固定回線が利用できない状況になり、大部不便にしていたが、世の中にはモバイルルータのレンタルサービスがあることを思い出したので、kakaku.comで調べてみた。
しかし時期が悪いのか、ランキング上位として表示されているショップはどの端末も「在庫切れの可能性があります」と表示されていた。料金に引かれて見に行ったらレンタルできない、となると面倒なので、そうした表示が無い以下のショップからレンタルすることにした。

WiFiレンタルならFon Rental Wi-Fi

fonと言えば、ずいぶん昔にユーザー間での無線LANシェアサービスで有名だったが、今もサービス中なのだろうか。

届くまでの日数や料金

サービスの内容を読むと、平日14時までで当日出荷、地域によるが翌日には届くとのこと。往復の送料は無料で、端末保証の有無を選択できるようになっている。
最低使用日数は2日からで、レンタル料金は使う日数と機種によって料金が変わる。

今回は、一週間ほどの間、せいぜい1日1GB程度使えれば良いので、一番安価なSoftBank 801ZTs(税込1,870円)という端末をレンタルすることにした。
端末のスペックは、4G通信の最高下り速度112.5Mbpsで通信容量5G/月、8.5時間連続通信となっている。

詳しく

kakaku.comやサイトの料金表示を見る限りでは、1日いくらで借りられるのかと思ったがそうではなくて、利用期間が2日間〜8日間、9日間〜15日間、16日間〜22日間、23日間〜31日間、32日間〜…のように使用日数に応じて段階的に料金が上がるようだ。

今回借りたSoftBank 801ZTsは、通信容量が小さいからか31日間までの利用までは、基本料金の1,870円のままでレンタルすることができた。

料金システムはショップによって様々になっていて、料金が1日刻みになっていたり、1ヶ月を固定料金としてその後1日ごとの料金が取られたり、利用期間が短いと1日の料金が上がったり、端末により最低利用期間が決まっていたりする模様。

端末保証は、外に持ち歩くわけではないので付けないことにした。なお、保証に入らずに壊したり無くしたりしてしまうと44,000円の請求となるようなので注意したい。保証に入っていれば11,000円で済むとのこと。詳しくはサイトのよくある質問オプションサービスのページを参照。

土曜の早朝にレンタルを注文したところ、18時頃に発送済みの連絡が来て、日曜の昼に端末が到着した。

レンタルした端末

f:id:moerrari:20210407025656j:plain:w288
起動した直後に「Pocket Wifi」の表示が出た。ずいぶん昔にPocket Wifiのみで通信をまかなっていたことがあったが、この端末はどうもその子孫らしい。

端末のオプションで設定すると、画像のように、使用した通信容量を表示でき残量を確認できる。通信容量の上限はスペック上では「5GB/月」となっていたが、端末のディスプレイ表示ではなぜか「(使用した量)/7GB」と表示されている。

実際に7GBまで使えるのだろうか?と疑問に思ったが、サイトのよくある質問によると「一部端末は初期表示されているデータ通信量の分母が《月7GB》となっておりますが、ご契約プランに準じたご利用が可能でございます。」とのこと。

端末の裏面にはSSIDや接続パスワードが印刷されている。

通信速度

Amazonのトップページを開いてみると、トップスピードで700KB/s(5.6Mbps)程度出た。
YoutubeでHD動画を再生してみると、トップスピードで1.7MB/s(13.6Mbps)ほど出ており、一般的なブロードバンド回線に比べたら遅いかもしれないが、視聴に全くストレスは無かった。

有線LANしか無いPCでもスマホを介して使える


別にfonのモバイルルータに限った話ではないのだが、有線LANしかないPCでの利用について。
メインで利用しているデスクトップPCは有線LANしか無いのでどうしようかと思ったが、スマホWifiで受信した通信を、USBテザリングでPCに中継することで通信できた。

ただし、USBケーブルを介してなので、USBテザリングで接続できるのは1台のPCに限られる。
UbuntuでのUSBテザリングの方法はUbuntu16.04 LTSにAndroid端末をつないでUSBテザリングする - 錯誤試行を参照。

radikoで地域外のラジオが聴けた


radikoを開くと首都圏のラジオ局が表示されていて、聴くことができた。
Google Mapを開くと、アクセスポイントの関係なのか、初期位置が首都圏になったり関西になったり九州になったりしたので、このためだろうか。

端末の返却

f:id:moerrari:20210407025706j:plain:w230
端末と一緒に同封されてくるレターパックを使う。レンタル終了日の「翌日」の消印が有効とのことで、余裕を持って返却できる。

レターパックの宛先と、送られてきた封筒の差出人の名前が「荷捌き所」となっていたので、相当大規模で、大量の在庫を持っているのではないだろうか。

速度規制について

上限の5GBを超えて利用したところ、6.5GB前後で速度規制が掛かった。
Google Mapを開いてみると25〜120kbps程度で通信をしている。さすがになかなか地図が表示されず、表示されても移動や拡大、縮小したりするとまた地図が真っ白になってしまい、実用的に使えるとは言えない。

Youtubeで適当な動画を再生してみると、こちらは最低品質(144p)だが動画が何とか再生できた。
その後、日付を回る前の23時頃になったところ速度規制が解除されたが、翌日さらに使用したところ再度速度規制が入った。この時点でデータ使用量は8.9GBだった。

その翌日になったところ、再び速度規制は解除された。格安SIM回線よりは速度規制が緩めになっているようだ。

まとめ

レンタルした端末とサービスは、今回の自分のニーズを満たしていたので特に問題ないという感想だった。
無制限のプランは無かったものの、長時間に渡る動画視聴やオンラインゲームなどの大容量通信を連日続けるのでなければ、不都合なく使えるのではないのではないかと思う。

今回は一週間の利用だったが、一ヶ月使うとすれば、最高下り速度612Mbpsで通信容量50GB/月(2G/日)の601HWという端末を選んだだろう。税込5,800円/月となっており、他ショップや固定回線の料金と比べてもそこまで割高ではない。
端末ラインナップがシンプルで、どれを選べばいいか迷わずに済む。

他ショップで端末が在庫切れになっていて借りらずに探し回ったり、多数の端末の中から比較検討するより、楽なのではないだろうか。

通信量把握のすすめ

通信ツールを使って、自分の通信量を把握することをおすすめしたい。
自分が1日や1月に使う通信量を把握していれば、ブロードバンドやスマホ契約の際に必要充分なプランを選ぶのに役立ったり、今回のようにモバイルルータのレンタルをする際に、人気の高いショップで在庫の少ない端末を奪い合わなくてもよくなるかもしれない。

Windows10なら、設定→ネットワークとインターネット→データ使用状況で過去30日のデータ通信量が表示される。
Ubuntuなら、vnstatというコマンドを使うか、システムモニターから通信量を把握することができる。
スマートフォンなら、機種によって違うだろうが設定→ネットワーク→データ使用といったメニューから確認できるだろう。

人は令和のネットを通信規制されたテザリング回線で戦えるのか

目次

IIJmioで通信規制がかかる

通信手段が格安SIMであるIIJmioテザリングしかないが、月の容量を使い切り、クーポンOFF低速回線での3日間366MB制限もオーバーして通信規制が掛かってしまった。

通信規制の速度はどのくらいか


ツールで通信速度を見てみると5KB/s前後しか出ていない(赤枠「RECEIVED」の列)。5MB/s(40Mbps)ではなく、5KB/s(40kbps)である。実にアナログモデム(56kbps)でインターネットをしていた時代のレベルである。

通信規制されるとどんな感じになるのか

 
シンプルなページとして、Googleと、あるWebサービスのサイトの画像を貼り付けた。シンプルなサイトですらこの状況で、実に昔のインターネットという感じである。

この速度で令和のウェブページは辛過ぎで、スタイルシートjavascriptが読み込まれなかったり、待てど暮らせど反応が帰って来なかったり、そのまま読み込みがどこかへ行ってしまったりする。

昔のソフトなら何とかなる

 
こんな時に役に経つのがネット回線が細かったいにしえの時代のアプリで、w3m(正確にはemacs-w3m)というテキストブラウザを使用した。

先ほどのフルブラウザと比べると、ページが表示されるまでの時間がだいぶ早い。
今度は何とか実用的なネットサーフィンが可能となった。文章が読めれば一応、用は足りる。

ページが重過ぎて読み込めないGmailの読み書きは、ThunderbirdEmacsWanderlustを、同じく重過ぎて読み込めないTwitterEmacsのtwittering-modeを使った。
専用クライアントを確保してあれば、重たいウェブアプリを開かなくても、少ない通信量で表示できる。

まとめ

ネット回線がアナログモデムだった時代からあるソフトを使えば、戦えるかどうかは知らないが、回線が細くてもやっていくことはできる。ただし、表示されるインターネットも昔の時代に戻されることになる(テキストブラウザjavascriptが動かないので、はてブもできない)。

Youtubeが見られないのはどうしようもないので、手持ちの音楽や動画で乗り切ることにした。こうして最低限の文化的生活は守られたのだった。
同じく通信規制に苦しむネット回線難民は参考にしてみてはいかがだろうか。

おまけ(Youtubeを無理矢理表示)

 
試しにYoutubeを無理矢理表示してみたところ。トップページは表示されるまで8分かかった。動画ページは6秒の動画を再生するのに3分を要した。クリックしてみると、アドレスバーが進捗していて、止まっていないのが分かってもらえると思う。

Tridactylでモード別にキーバインドを変える

Firefoxキーバインドを変更するアドオンの「Tridactyl」を使用してみたところ、コマンドラインモードがあり、よりVimperatorライクで使いやすかった。が、キーバインドに少し不満を感じた。

一つは、タブ移動にC-nとC-pが使えないこと。これは以前の記事のFirefox Quantumでカスタマイズできないデフォルトショートカットキーを変更する - 錯誤試行や外部のキーカスタマイズツールで解決できる。
もう一つは、コマンドラインモードの上下がTabでの移動になっていて操作しづらいこと。これもC-nやC-pで上下移動させたいが、そうすると上記の方法ではタブ移動とキーバインドがバッティングしてしまう。

Tridactylで何とかできないかと思っていたところ、以下の記事が見つかった。

  • C-n, C-pでタブを移動
    以前の記事のFirefox Quantumでカスタマイズできないデフォルトショートカットキーを変更する - 錯誤試行の通り、omni.ja内のbrowser.xhtmlでC-nとC-pを無効にしておく必要がある。

    bind --mode=normal <C-n> tabnext_gt
    bind --mode=normal <C-p> tabprev

  • コマンドラインモードでC-n, C-pで上下に移動。C-nについては同上の処理が必要。

    bind --mode=ex <c-n> ex.next_completion
    bind --mode=ex <c-p> ex.prev_completion

  • コマンドラインモードの-C-fを→にしたい
    C-fがデフォルトでコマンド履歴からの補完に割り当てられていたが、現在のURLを編集したいときに矢印でカーソル移動しなければならず不便。
    unbind --mode=ex しても割り当てが解除されなかったので、一旦適当なキーで上書きしてやったところうまく行った。

    bind --mode=ex <C-f> <RightArrow>
    unbind --mode=ex <C-f>

  • google(日本)でもページナビによる移動を有効にする
    「]]」で検索結果の前のページへ、「[[」で次のページへ飛ぶことができる。これは結構便利なので設定をおすすめ。
    (追記)なぜか使えたり使えなくなったりする模様。

    set followpagepatterns {"next": "^(next|newer)\\b|»|>>|more|>|次へ", "prev": "^(prev(ious)?|older)\\b|«|<<|<|前へ"}

参照サイト

EmacsからAnkiに単語登録できるanki-editorを使ってみる

EmacsからAnkiに単語登録したい


Ankiという単語帳アプリがあり、学習時の暗記に利用している。
Ankiを取り上げた記事は、はてなブックマークで何度もホッテントリに上がっていて使いたい気にさせられる。以下にいくつかAnkiのホッテントリを挙げる。

復習のタイミングを変えるだけで記憶の定着度は4倍になる 読書猿Classic: between / beyond readers

決して後退しない学習ーAnkiを使うとどうして一生忘れないのか? 読書猿Classic: between / beyond readers

暗記学習をサポートする学習ソフト、その名も『Anki』(無料) | ライフハッカー[日本版]

高校の授業で反復練習ソフトウェアを使ってみた結果、こうなった - GIGAZINE

(他のホッテントリタイトル 「Anki」 を検索 - はてなブックマーク)

スマートフォンアプリも出ているため、PCで入力しておけば、スマホでいつでもどこでも単語帳学習をすることができ大変便利である。

そこでEmacsからAnkiに単語を登録できるようなlispがあれば便利だと思い探してみたところ、登録する単語帳をEmacsから、しかもorg-modeの書式を使って入力できるという、願った通りの機能を持つanki-editorというツールを見つけた。

GitHub - louietan/anki-editor: Emacs minor mode for making Anki cards with Org

インストールは上記GitHubページの手順にならえばできるが、使用法やエラーについて日本語の情報が全く見当たらなかったので、わずかばかりだが分かったことをメモしておく。

anki-editorの使い方などのメモ

対応するEmacsのバージョン

Emacs25以降。手元の環境はEmacs26.3で動作を確認した。

バージョン0.3.0を使用する

最新のバージョン0.3.3はエラーが出てしまい、カードがAnkiに送信できない(下の方に記載)。バージョン0.3.0はカードの送信は問題なくできるので、そちらをMELPAでダウンロードしたanki-editor.elと差し替える。

単語(カード)の登録方法

以下のようなorgファイルを作成して「M-x anki-editor-push-notes」すると、「Default」のデッキにBasicタイプのカードが登録される。下の様式で複数の項目を作れば、作っただけ一度に登録することができる。
「:ANKI_NOTE_TYPE:」を「cloze」にすれば穴埋めタイプのカードとして登録される。
「:ANKI_DECK:」には登録する先のデッキを指定する。
「Front」「Back」はノートタイプのフィールド名やフィールドの数と一致させる。例えばフィールド名が「表面」と「裏面」になっているならそう変更し、「裏の裏」というフィールドがあるなら、「裏の裏」の見出し項目(「** 裏の裏」)を追加する。そうしないと「cannot create note because it is empty」のエラーが出る。

* 適当なカード
   :PROPERTIES:
   :ANKI_DECK: Default
   :ANKI_NOTE_TYPE: Basic
   :END:
** Front
ほげとは何か
** Back
意味を持たない文字列
#+BEGIN_EXPORT html
<img src="hoge.jpg">
#+END_EXPORT

  • 詳しく
    org-modeで使える書式が使用でき、カードはhtmlに変換されてAnkiに登録される。
    上記の例では画像を貼り付けているが、画像はユーザーディレクトリ(linuxでは~/.local/share/Anki2/ユーザー名/)の「collection.media」に置いておけば拾って表示してくれる。
    公式サイトのexamples.orgの例にあるように、org-modeの書式を使って「#+BEGIN_EXPORT」でhtmlを記述できたり、「#+BEGIN_SRC」でプログラムのソースコードが記述できたりする。
    latexはそのまま書けば[latex]〜[/latex]で囲まれてAnkiに出力される。latexの箇所は画像として表示される(dvipngコマンドが必要)。カードを表示するタイミングでその都度latexコンパイル→dvipngで画像出力がされていて、画像をどこか専用のディレクトリに保存しているわけではないので、スマホではlatexの箇所は表示されない(latexソースコードでの表示になる)。

カードは更新が可能

一旦カードを送信すると、「:PROPERTIES:」に「:ANKI_NOTE_ID:」という項目ができ、さらにカードを編集して送信すると、Anki側でもカードが更新される。ただしAnkiのブラウザを閉じておかないと更新されない。

改行を反映させたい

入力した内容をAnkiに送ったところ改行が反映されていない。改行を反映するには空行を入れるか、「M-;」してから以下を入力してEnterするか、予め.emacsに書いておく。
その後にM-x anki-editor-push-notesすると改行が反映されるようになる。

(setq org-export-preserve-breaks t)

(org-mode , export , how to 'force' newline on lines between paragraphs? - Emacs Stack Exchange)

キーバインド

「a-pu」はそのままをタイプすればよい。

キーバインド M-x 意味
M-x a-pu RET anki-editor-push-notes カードをAnkiに送信
M-x an-i RET anki-editor-insert-note カード(orgのツリー)を追加
M-x a-cl-r RET anki-editor-cloze-region リージョンから穴埋め問題を作成

バージョン0.3.0では「anki-editor-insert-note」と「anki-editor-cloze-region」はエラーが出て使用できなかった。

anki-editorはカードの登録専用

anki-editorはAnkiにカードを登録できるが、Ankiからカードを読み込む機能はない。
GitHubIssueで、Ankiからの読み込み機能を追加して欲しいとの要望が出ていたが、作者からは一旦HTMLにしたのをorgに戻すのは難しい、という感じの返答になっていた。
上記リンク先の要望の下の方に、Ankiから読み込む機能を作成したというコメントが付いているので、その手順にならって取り込んだファイルからHTMLタグを取り除いて、手作業でorgの書式に直せば一応実現は可能。

「#+PROPERTY: ANKI_DECK Default」をファイル先頭に書いても「:ANKI_DECK:」を指定しないと送信されない

公式では「#+PROPERTY: ANKI_DECK Default」をファイル先頭に書いておけば、登録するカードごとに「:ANKI_DECK:」を指定する必要はない、と書かれていたが、なぜかデッキが指定されていない旨のエラーが出て送信ができなかった(0.3.3でも同様)。

バージョン0.3.3で発生したエラーについて

最新のバージョン0.3.3を使用した際に発生した不具合をメモとして残しておく。使用したEmacsのバージョンは「GNU Emacs 26.3 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.18.9) of 2019-12-24」

重複したカードは上書きされない

内容の重複したカードを送信すると「:PROPERTIES:」内の「:ANKI_FAILURE_REASON:」に「Symbol’s function definition is void: err」というエラーが出てしまい、インポート時のように上書き保存はされない。つまり、org-mode側で単語帳を管理しておく、という使い方はできない(デッキからカードを全部消して再度anki-editorから送信すれば別だが、学習履歴が消えてしまう)。
→バージョン0.3.3のバグ?と思われる。

「:ANKI_FAILURE_REASON: Symbol’s function definition is void: err」について

「:ANKI_DECK:」に指定するデッキの名前が間違っていたり、ブラウザを開いたときに表示されている「ソートフィールド」が重複したカードを送信すると表示されるエラーだが、あまりにもそのままのエラー表示で、あたかもインストールの不具合のようであり紛らわしい。
→バージョン0.3.0では、それらのときには対応するエラーメッセージが正しく表示されていたので、内部的なエラー表示と思われる。

「:ANKI_FAILURE_REASON: Wrong type argument: listp, 」について

カードをAnkiに送信する際になぜか表示されるが、単語は問題なく登録されている。気にしないことにする。

感想

これで晴れてEmacsの、しかもorg-modeから単語登録ができるようになり、学習も捗るようになるだろう(願わくば)。
実際には、このインストール作業の試行錯誤で大部時間を浪費してしまったのだが…。

iOSアプリ「beorg」でapache2のWebDAVサーバと同期できるようにする

Emacsのorg-modeをアウトラインプロセッサーとして愛用している。org-modeで書いた文書を手持ちのiPadで閲覧・編集できれば便利だと思い、iOSでorg-mode文書を扱えるというアプリ「beorg」を見つけた。
iCloudDropboxで簡単に同期できるとのことだが、私的なファイルのため、できればローカルで同期をさせたい。
ローカル同期させるにはWebDAVが使えるようだが、beorgのWebDAVの設定がよく分からず、同期に失敗してしまう。Web上を調べても日本語での設定例は見当たらず、お蔵入りとなっていた。
今回時間ができたので再度設定を試みたところ、無事同期できるようになったのでメモとして残しておく。

beorgの設定

Settingsの「FILE SYNCHRONIZATION」の項目を以下のようにした。
PC側のDocumentRootは「org」としてある。
WebDAV URLを「https://localhost/org」としていたところ同期できなかった。

    Sync method	WebDAV
    Folder	/org
    File extension	.org
    WebDAV URL		https://localhost
    Username		(apache2の設定ファイル内 AuthUserFileに登録したユーザー名)
    Password		(apache2の設定ファイル内 AuthUserFileに登録したパスワード)
    Allow untrustd certificate	ON

日本語ファイル名が文字化けする

ただし、orgファイル名が日本語の場合、Filesタブに表示されるファイル名は手元のUbuntu16.04だとパーセントエンコードされた表記になってしまう。beorgに文字コードを指定するような項目は見当たらない。
apacheの設定で、mod_encodingを利用すれば良いとのことでlibapache2-mod-encodingパッケージをインストール、他のモジュールの例にならって/etc/apache2/mods-available/encoding.confを作成して以下のように記述、a2enmod encoding、service apache2 restartしてみたが文字化けは改善されない。
なお、上記パッケージのインストール前でも、iOSアプリ「Documents」(Readdle)のWebDAVでは日本語ファイル名が文字化けすることなく表示されていた。

<IfModule mod_encoding.c>
  EncodingEngine on
  SetServerEncoding UTF-8
  DefaultClientEncoding UTF-8 MSSJIS EUC-JP
  AddClientEncoding UTF-8 "*beorg*"
</IfModule>

どうにかすれば直るのかもしれないが、今回は同期したいファイルが一つだけなので、ひとまずこのまま使うこととした。

参照サイト

NetbeansのPHPデバッグで、開始ファイルがphpでないとブレークポイントが動作しない(解決)

NetbeansにてPHPデバッグブレークポイントが動作しない。環境は以下の通り。

状況

xdebugの設定には以下を記述してあった(Ubuntuではphp.iniではなく以下のxdebug専用の設定ファイルが設けられていた)。
/etc/php/7.0/apache2/conf.d/20-xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.idekey="netbeans-xdebug"

Netbeansのプロジェクト・プロパティ→実行構成の「開始ファイル」にはhtmlファイルを指定していた。
「開始ファイル」にphpファイルを指定してある場合(もしくは「開始ファイル」を空欄にしてプロジェクトURLの最後にphpファイルが来る場合)は、デバッグ実行でブレークポイントが動作するが、htmlファイルを指定するとブレークポイントが動作することなく最後まで実行されてしまった。

対応

/etc/php/7.0/apache2/conf.d/20-xdebug.iniに以下を追記したところ、デバッグを実行した際にブレークポイントが動作した。

xdebug.remote_autostart=on

参照サイト