Node.jsの管理をhomebrewからnodebrewに変更

npmでglobalにインストールしたtypescriptとbowerを削除。

% npm uninstall -g bower
% npm uninstall -g typescript

npmを削除

% npm uninstall -g npm

Node.jsを削除

brew uninstall node

nodebrewをインストール

% curl -L git.io/nodebrew | perl - setup

.zshrcにPATHを追加

export PATH=$HOME/.nodebrew/current/bin:$PATH

読み込み直し

% source ~/.zshrc

Node.jsをインストール

% nodebrew install stable

標準で使用するNode.jsのバージョン指定

% nodebrew use stable

bowerとtypescriptをグローバルにインストール

% npm install -g bower
% npm install -g typescript

参考

TypeScriptリファレンス Ver.1.0対応のサンプルコードで--noImplicitAnyをつけて(略

備忘。TypeScriptリファレンス Ver.1.0対応のコールシグネチャのリスト6.56で--noImplicitAnyをつけてる場合。

function db(operation: string, key: string, value?: any): any {
  if (!db.data) {
    db.data = {};
  }
  var data = db.data;
  var oldValue: any; //追加
  if (operation === "update") {
    oldValue = data[key];
    data[key] = value;
    return oldValue;
  } else if (operation === "read") {
    return data[key];
  }
}
module db {
  export var data: any;

  export function update(key: string, value: any) { //追加
    return db("update", key, value);
  }
  
  export function read(key: string) { //追加
    return db("read",key);
  }
}

db.update("str", "string");
console.log(db.read("str"));

db("update", "str", "文字列");
console.log(db("read", "str"));

TypeScriptリファレンス Ver1.0対応 4-4 Enumのサンプルコードで--noiImplicitAnyをつけてるとコンパイルエラー

TypeScriptリファレンス Ver.1.0対応の4-4 Enumのサンプルコードでtscに--noImplicitAnyをつけてるとコンパイルエラー。

enum Suit {
  Spade,
  Heart,
  Club,
  Diamond
}

var s1: Suit = Suit.Spade;
var s2: number = s1;
var s3: string = Suit[s2];
var s4: number = Suit[s3]; 
//↑ error TS7017: Index signature of object type implicitly has an 'any' type. 
console.log(s1, s2, s3, s4);

通るように。

var s4: number = Suit.Spade;
//又は 
var s4: number = Suit["Spade"];

後で読む

備忘録。enumが吐き出すjsのメモ

var Suit;
(function (Suit) {
    Suit[Suit["Spade"] = 0] = "Spade";
    Suit[Suit["Heart"] = 1] = "Heart";
    Suit[Suit["Club"] = 2] = "Club";
    Suit[Suit["Diamond"] = 3] = "Diamond";
})(Suit || (Suit = {}));
//なのでSuitはこうなる。
 {0: "Spade", 1: "Heart", 2: "Club", 3: "Diamond", Spade: 0, Heart: 1, Club: 2, Diamond: 3} 

WebStormでTypeScript開発時に"Accessors are only when targeting EcmaScript5 and higher."とコンパイルエラー

アクセサ書いたらコンパイルエラーに。

f:id:yuichi_katahira:20140506005821p:plain

error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.

アクセサはECMAScript 5のObject.definePropertyを使ってるからと。
Preferences -> Project Settings -> File Watchersでtypescriptを選んで編集。
--target ES5をArgumentsに追加でOK。

f:id:yuichi_katahira:20140506012302p:plain

これだと、新しいプロジェクトごとにFile Watcherに設定しないといけないからグローバルな設定が欲しいなあ。
Template Project SettingsにはFile Watcherの項目存在しないから、多分グローバルな設定出来ないと思うんだけど。

参考

WebStormでTypeScript開発時にtscに--noImplicitAnyオプションを付ける

Preferences -> Project Settings -> File Watchers

f:id:yuichi_katahira:20140505172612p:plain

TypeScriptを選んで編集

f:id:yuichi_katahira:20140505172628p:plain

Argumentsに

f:id:yuichi_katahira:20140505172645p:plain

--noImplicitAnyを追加

f:id:yuichi_katahira:20140505172657p:plain

暗黙的なanyをコンパイルエラーにしてくれるようになったか確認。

function hello(word) {
  return"Hello, " + word;
}

OK.

f:id:yuichi_katahira:20140505172804p:plain

werckerでS3に自動でデプロイしていた静的サイトをjekyllからmiddlemanに変更した

先日書いたこれですが、jekyllからmiddlemanに変更しました。
一緒に作業する非プログラマな方にSlimを見せてみたところ、慣れれば大丈夫そうとの返事をいただいたので 、テンプレートエンジンもLiquidからSlimに変更。

Liquidといっても部分テンプレートの読み込みぐらいしか使っておらず、実質素のHTMLみたいなもので、ページも5ページ程度だったので、Slimへの変更はHTML2slimを使わせてもらって、うまく変換出来なかったところだけ手直しですみました。

werckerは、Deploy targetは同じなので、wercker.ymlをmiddlemanに合わせて修正しただけで終了。

box: wercker/ruby
build:
  steps:
    - bundle-install
    - script:
        name: generate site
        code: bundle exec middleman build --verbose
deploy:
  steps:
    - s3sync:
        key_id: $KEY
        key_secret: $SECRET
        bucket_url: $URL
        source_dir: build/

code部をbundlen exec jekyll...からbundle exec middleman...に変更と、deployのsource_dirを_site/からbuild/に変更。
これで問題なくdeploy出来ました。

Amazon Route 53でのCNAMEの設定をミスっていてスマートフォンからウェブサイトにアクセスできなくなっていた

備忘録として恥を晒しておきます。
自サイトにBootstrap 3を入れてスマートフォン対応しました。
で、おもむろにAndroidで確認しようとしたらWeb Page Not Availableとでて、あれ?スマートフォンから名前を引けてない?

katahirado.jpでアクセスすると、リダイレクトまでは機能していてどうもwww.katahirado.jpが引けていないっぽい。
Amazon Route 53の管理コンソールを確認してみると・・・

f:id:yuichi_katahira:20140501155742p:plain

おっと・・・。CNAMEレコードに、http://プロトコルがついてしまっていました。
登録時にChromeのアドレスバーからコピーしてやってもうたしてしまったようです。
というわけで、http://を削って登録しなおして無事アクセス出来るようになりました。

手元のmacでは問題なく見ることができていたので気づいてなかったです。
ちゃんと検証しないとダメですね。