2008 年 12 月 のアーカイブ

zshユーザーが普通にtrampを使う方法

久々にEmacsの話題です。trampって便利ですよね。ローカルのEmacsでssh先のファイルを編集したり、sudoしてroot権限で編集できたりするのは素晴らしいと思います。trampの素晴らしさを知らない人は、下記サイトなどを参照してください。

ところで、zshをログインシェルにしているとtrampが上手く動かない現象に出くわします。具体的には、「/sudo::/etc/hosts」などを開こうとして下記のように怒られることがあります。

tramp: Waiting 30s for remote `/bin/sh' to come up...
apply: Couldn't `exec env 'ENV=' 'PS1=$ ' /bin/sh', see buffer `*tramp/sudo *'

この解決方法ですが、.zshrcや.zsh_profileなどに下記のように書けばOKです。

(続きを読む…)

Web/JS(あまくち) part.3 – オブジェクト

エンジニア一年生に贈る Web/JavaScript(あまくち) part.3 です。
今回はオブジェクトを扱っています。

(続きを読む…)

JavaScript: 変数+無名関数と関数リテラルの違い

Web/JS(あまくち) part.2 – 変数宣言、関数、無名関数
で関数オブジェクトの生成について触れましたが、var name = function(無名関数を変数にバインド)とする方法とリテラルとでは挙動が違うのではないかとの指摘がありました。
JavaScript の var についての考察にあるように、

  function() {
    var foo = 1;
  };

というコードは内部解釈的に見ると(インタプリタの挙動的に解釈すると)

  function() {
    var foo;
    foo = 1;
  };

となります。
という事は関数に付いても同様で、関数リテラルの場合は名前付き関数オブジェクトが先積みされ、var name = function とした場合は変数 name だけ先積みされる(name = null の状態)と考えられます。

試してみましょう。

  console.log(foo == null); // true
  console.log(typeof bar == 'function'); // true
 
  var foo = function() {
  };
 
  function bar () {
  }

ばっちり予想通りとなりました。

講習会「シェルスクリプト入門」を開催しました

「シェルスクリプト入門」というタイトルで社内勉強会を開催しました。社内でアンケートを取ってみたところ、シェルスクリプトに苦手意識を持っている人がいるようです。「いやいや、普段のコマンドラインと大差ないよ」ということを伝えたくて、簡単な講習をしてみました。これで苦手意識が無くなってくれればいいんですが。

まとめ

  • if文がわかればシェルスクリプトは完璧(?)
    • 条件式の評価には[コマンド(又はtestコマンド)
    • 変数展開はクオーティングに注意
    • 比較するときは”x$hogehoge”を使えば万全
  • exit codeで他のコマンドと連携
    • 0は正常終了、1〜255は異常終了

(続きを読む…)