macのターミナルの使用時にスクロールするとコマンド履歴が表示されるようになったら

ターミナルの環境設定を開き、「プロファイル」の「キーボード」タブにある「代替スクリーンをスクロール」という項目のチェックを外すと、ターミナルのバッファを遡る挙動に戻った。

f:id:tsimo:20160406173146p:plain

そもそも代替スクリーンとは何なのか。

(追記) ターミナルの「表示」メニューにある「代替スクリーンを表示」「代替スクリーンを隠す」で挙動が変わるっぽい。 知らない間にキーボードショートカットを押したのかもしれないが、右端の記号は何なの。

f:id:tsimo:20160406174548p:plain

BOSE QuietComfort20i をいまさらながら購入した

ヨドバシをぶらついていてたまたま手にとって試したこれのノイズキャンセリングの効果がなかなかインパクトがあったので、頻度が増えた電車利用時間を有効活用するのに役立ちそうだと思い、購入した。

先月にノイズキャンセリング機能付きヘッドホンの最新型が出てたみたいで、それにも惹かれたが、電車でヘッドホンをするのも気恥ずかしいし、夏場は暑いだろうし、ということでこちらにした。

雑に扱ってると、ケーブルの端末側あたりがすぐにだめになりそうな気がしてちょっと不安ではある。

Vert.xで複数種類のverticleを動かす

1つのVert.xプロセス内で複数種類のverticleを起動するには、それらを起動する専用のverticleを作成し、 そのstartメソッド内で各verticleを起動する。

package com.mycompany.myproject;

import org.vertx.java.platform.Verticle;

public class EventVerticlesStarter extends Verticle {
    public void start() {
        container.deployVerticle("com.mycompany.myproject.VerticleA");
        container.deployVerticle("com.mycompany.myproject.VerticleB");
    }
}

Vert.xアプリをEclipseからデバッグする

手順概略

  • アプリをデバッグモードで実行する
  • Eclipseからプロセスにアタッチする

アプリをデバッグモードで実行する

JVMの起動オプションを変更する

gradlewのDEFAULT_JVM_OPTSを修正する。

DEFAULT_JVM_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

アプリケーションを起動する

./gradlew runModEclipse -i

-iオプションはvertxのログレベルを指定する。 これがないとコンソールになんにも出力されない。

Eclipseからプロセスにアタッチする

  • Run -> Debug Configurations...を開く。
  • Remote Java Applicationに項目を追加する
  • Host, Portの欄にはlocalhost, 8000が入っているが、違うポートを使っていればそれに変更する。
  • Debugボタンを押す
  • Window -> Open Perspective -> Debugでデバッグ用レイアウトに切り替える

これで、ブレークポイントを設定して処理を実行すればそこで処理が停止してステップ実行などができる。

EclipseでVert.xのプロジェクトを開始する

手順概略

  • Vert.x謹製のGradleプロジェクトのテンプレートを取得する
  • Eclipseのプロジェクトファイルを生成する
  • Eclipseワークスペースにプロジェクトをインポートする

Vert.x謹製のGradleプロジェクトのテンプレートを取得する

$ git clone https://github.com/vert-x/vertx-gradle-template.git my-vertx-module
$ cd my-vertx-module
$ git remote rm origin

Mavenを使った開発環境セットアップ手順の説明も公式サイトにある。

動作確認

$ ./gradlew test

Eclipseのプロジェクトファイルを生成する

以下のGradleのタスクを実行すればEclipseのプロジェクトファイルが作成される。

$ ./gradlew eclipse

Eclipseワークスペースにインポートする

Package Explorerで右クリック -> インポート -> Existing Projects into Workspace とたどり、プロジェクトのディレクトリを指定する。

開発中のアプリケーションを実行する

$ ./gradlew runModEclipse -i

詳細は http://vertx.io/gradle_dev.html を参照。

即席Webサーバ

前提

~/binディレクトリが存在して、パスが通っている

スクリプトを作成

$ vim ~/bin/rhttpd

スクリプトの中身

ruby -run -e httpd -- --port 8000 .

実行権限をつける

$ chmod u+x ~/bin/rhttpd

起動する

$ rhttpd

以上で、例えばhttp://localhost:8000/index.htmlにアクセスすると、プロセスを起動したディレクトリ直下にあるindex.htmlファイルが表示される。

ChromeでデバッグしてるとjQuery内でいちいち停止する

という問題がいつの間にやら起きるようになり、地味につらさが募っていた。 Webで検索すると下記のページを見つけて原因を把握した。

http://stackoverflow.com/questions/8399567/chrome-developer-tools-pauses-the-initialization-of-jquery-1-7

要するに、「例外が発生したらそこで停止する」というオプションを有効にしていた。

f:id:tsimo:20130910135426p:plain

クリックするだけで設定が切り替わるので、意図せずクリックしたのだろう。

jQuery内で例外が発生していたわけだが、ブラウザごとの挙動の違いで処理経路を変える手段として例外を発生させていたようだった。

    assert(function( div ) {

      // Support: Opera 10-12/IE8
      // ^= $= *= and empty values
      // Should not select anything
      // Support: Windows 8 Native Apps
      // The type attribute is restricted during .innerHTML assignment
      var input = doc.createElement("input");
      input.setAttribute( "type", "hidden" );
      div.appendChild( input ).setAttribute( "t", "" );

      if ( div.querySelectorAll("[t^='']").length ) {
        rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
      }

      // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
      // IE8 throws error here and will not see later tests
      if ( !div.querySelectorAll(":enabled").length ) {
        rbuggyQSA.push( ":enabled", ":disabled" );
      }

      // Opera 10-11 does not throw on post-comma invalid pseudos
      div.querySelectorAll("*,:x");  // ### ここで例外が発生していた ###
      rbuggyQSA.push(",.*:");
    });
  }

スッキリした。