日々精進

新しく学んだことを書き留めていきます

tsdを実行すると「Error: self signed certificate in certificate chain」エラー

原因は社内ProxyがGithubのSSL証明書を自己証明書にすり替えて送ってくることだった。 情シスがGithubとの通信内容をチェックするためにやってるんだろうなコレ。man in the middle攻撃じゃん。。 解決策は、.tsdrcファイルを作り、以下内容にしてプロジェクトルートに置くこと。 これで自己証明書でもエラーなく通信できるようになった。

{ "proxy": "http://proxy.example.com:88", "strictSSL" : false }

ホント社内Proxy鬱陶しすぎる。。

参考:

stackoverflow.com

efcl.info

技術文書のLintツール。ドキュメント作成にソフトウェア開発の手法を取り入れるというのは面白そう。

Markdownで文書を書いて、Gitでバージョン管理して、textlintで自動チェックして、お客さんに出す時はGitBookでPDFにして出すのやってみたい。

自動テストもやりたいけど、やるなら普通のドキュメントじゃなくてCucumberとか使って自然言語でテストシナリオを書いて、それを仕様書にするというアプローチになりそう。そういう手法はspecification by exampleという本で紹介されている。

Specification by Example: How Successful Teams Deliver the Right Software

Specification by Example: How Successful Teams Deliver the Right Software

エクセルの差分を確認する

WinMergeでエクセルの差分を強調表示できる。 やり方は以下参照。

replication.hatenablog.com

これ便利な時がありそう。 エクセルの内容をすべてテキストにして差分をとっているので見辛いことがある、数式の差分は取れない(計算結果の差分になる) とかの点がもっと良くなるといいなあ。

プリンタで印刷しようとすると、印刷ジョブが印刷中で止まったまま印刷されない

原因は謎だけど、「デバイスとプリンター」でプリンタを削除し、再インストールしたら直った。 再インストールする際に、「デバイスとプリンター」>「プリンターの追加」>「ネットワーク、ワイヤレスまたはBluetoothプリンターを追加します」 を選択しても、ネットワークプリンタが表示されず困った。 エクスプローラに「\ptrsv01」のようなパスを入力してプリンタを管理しているサーバ?にアクセスするとそこにお目当てのプリンタがあり、ダブルクリックしたらインストールできた。 なぜ検索に引っかからないんだろう。。。

参考: http://happipop.blog90.fc2.com/blog-entry-777.html

AngularJSでスクロール領域内を更新したらスクロール位置が変わってしまう問題

解決が結構面倒だった。 まずng-repeatでスクロール領域内を更新していたので、更新完了イベントが必要だった。 以下のdirectiveを定義してng-repeat完了イベントを定義した。

module sample {
  'use strict';

  /**
   * ng-repeat処理完了イベントを発行するDirective
   */
  export class OnFinishRenderDirective implements ng.IDirective {
    public priority: number = -1;
    public restrict: string = 'A';
    public scope: any = {};
    private timeoutService: angular.ITimeoutService;
    public link: Function;

    /* @ngInject */
    constructor($timeout: angular.ITimeoutService) {
      this.timeoutService = $timeout;
      this.link = (scope: ng.IScope, element: ng.IAugmentedJQuery, attr: ng.IAttributes): any => {
        if ((<angular.IRepeatScope>scope.$parent).$last === true) {
          this.timeoutService(function() {
            scope.$emit('ngRepeatFinished');
          }, 0);
        }
      };
    }


    /* @ngInject */
    public static init($timeout : angular.ITimeoutService): any {
      return new OnFinishRenderDirective($timeout);
    }
  }
}

このon-finish-renderディレクティブはng-repeatを付けているタグに付ける。 後はスクロール領域のスクロールイベントで今表示中の位置を保存し、OnFinishRenderイベントでその値をスクロール位置に設定する。 あるあるな問題だろうからもっと楽な解決策ありそうだけどな。。

参考:

スクロール領域内にfloatでdivを横に並べるとスクロールせず折り返してしまう問題

□がDIVで|が親DIVのEdgeとすると、以下のようにしたい。

|□□□□|

親DIVの幅は固定で、中のDIVの数が増えたら横スクロール出来ようにしたい。 が、中のDIVをfloatを使って横並びにしていたので中のDIVを増やすと以下のように折り返してしまう。

|□□□□|
|□   |

こういう場合、中のDIV全体を囲むDIVをwidth固定で定義すればよい。 中のDIVの数が動的に変わる場合、その数に応じて囲むDIVのwidthを変更しないといけないのでng-styleを使って動的に計算する必要がある。