2012年2月29日水曜日

[Node.js]Mac OS X Lionにインストールしてみる

すでにたくさん記事はあるけど備忘録として。

とりあえずwgetをインストール。 私はhomebrew使ってるけど、まあMac portsとかそのへんはお好みで。

brew install wget

次にnvm(Node Version Manager)をインストール。

% git clone git://github.com/creationix/nvm.git ~/.nvm
% source ~/.nvm/nvm.sh

sourceのところで

nvm_ls:17:no matches found: vdefault*

とかいうエラーが出ていつも使ってるzshでは先に進めなかった。
そのため一時的にbashに切り替えて実行したところうまくいった。

*後から考えてみると、lsコマンドはエイリアス使ってたからそれが問題だったのかもしれない。


最後にNode.js本体のインストール。
Node.jsの日本語サイトでバージョンを調べ、適当なものを選ぶこと。
今回は安定版のv0.6.11を入れた。

nvm install v0.6.11

上記のコマンドを入力すると、コンパイルが始まるので暫く待つ。
インストール後、バージョンを確認する。

node --version

インストールしたバージョンが表示されれば成功。
あと、.zshrcに以下を追記する。

source ~/.nvm/nvm.sh
nvm use v0.6.11 > /dev/null

これでNode.jsが使えるようになっているはず。

ちょっと調べてみたら、nvmとzshは相性が悪いらしい。
というのも、nvmの作者がbash使いでかつ「自分が使うもの以外は実装しない」という主義だからだとか。
zshにそこまでこだわりがあるわけではないので、bashに戻すのもありかも…

2012年2月11日土曜日

[JavaScript] 秒から時分秒を算出

秒で格納してある値を時分秒で表示したかった。
こんな感じ。

var formatTime = function(seconds) {
    var result = "";
    //時間計算
    var hour = Math.floor((seconds / 60) / 60);
    var min = Math.floor((seconds / 60) % 60);
    var sec = Math.floor(seconds % 60);
    //フォーマット

    if (hour > 0) {
        result += hour + "時";

    }
    if (min > 0) {
        result += min + "分";
    }
    if (sec > 0) {
        result += sec + "秒";

    }
    return result;
}

2012年1月27日金曜日

Macbook Airを買って一週間でインストールしたアプリ

Macbook Air 11in.を購入しました。
今までWindowsのデスクトップしかなかったのですが、今年は勉強会等にも積極的に参加しようと思い、手軽に持ち出せる開発環境を用意しよう、という意図です。
後はMacを使ってみたかった、というのもありますね。
メインPCはWindows7なので使い勝手の比較が楽しいです。

なにはともあれ本題。
購入後一週間でインストールし、常用しているアプリを列挙します。
色々なブロガーさんがやっているのを見て、私もMacbook Airを買ったら書こうと思っていたのです^^

  • Alfred

    コマンドラインランチャーです。
    キーボードのみでアプリケーション起動やら検索やら、なんでもできるので便利です。
    QuickSilverというアプリが有名なようですが、とりあえずこちらを試してます。

  • AppCleaner

    Macはアプリをアンインストールしても、設定ファイルやらが一部残ってしまうそうです。
    ですが、これを使ってアンインストールするとその設定ファイルやらなんやらも良きに計らってくれるとか。

  • Dropbox

    オンラインストレージです。
    Windowsとのファイル共有とか、バックアップとか、色々便利です。

  • Eclipse

    Androidアプリの開発もあるため必須です。
    日本語化プラグイン「Pleiades」を使う際は、eclipse.iniにpleiades.jarのフルパスを記入する必要があります。 相対パスではダメなようです。
    日本語化するとメモリを大量に消費するので、出来る人は英語で使うことをオススメします。

  • Evernote

    言わずと知れたオンラインメモサービス。
    色々な情報を貯めこんで、ライフログと化してます。
    整理できてませんけどねー…

  • Google Chrome

    メインで使っているWebブラウザなので、これがないと始まりません。

  • Google Japanese Input

    標準のことえりがおバカさんなのと、Windowsでもメインで使ってるため変更。
    これがフリーっていうのはすごいです。
    後はPC間でのユーザ辞書同期があれば…

  • iTerm2

    ターミナルエミュレータ。せっかくユニックス系のOSなのでターミナル使いこなせるようになりたいですね。

  • MarsEdit

    ブログエディタです。
    まだあまり使っていませんが、良い感じです。Wordpressの管理画面から書くよりは数倍いいですね。

  • XCode

    主にiPhone Simulator用にインストール。
    スマートフォン向けサイトの動作確認によく使います。

  • 夜フクロウ

    Twitterクライアント。
    Tweenみたいのがあればいいんですけどねー。

とりあえずはこんな感じで。
テキストエディタはまだ色々試している状態なので、そのうちまとめて書きたい。
そのうちiTerm2の設定とかも書けたらいいなあ

2012年1月18日水曜日

[Android] WebViewのJavaScriptとJavaを連携する時に注意したこと

Asus Transformer TF101 Android 3.2.1でWebView使って詰まったことの覚え書き

・console.logの出力
そのままでもlogcatに出力されるはずが出力されず。
調べてみたら、WebChromeClientのonConsoleMessageをオーバーライドすればできるらしい。
こんな感じ。

WebView wv = (WebView)v.findViewById(R.id.webview);
wv.loadUrl("file:///android_asset/www/index.html");
wv.setWebChromeClient(new WebChromeClient(){
    @Override
    public boolean onConsoleMessage(ConsoleMessage cm){
        log.d("hogeActivity", cm.message() + "--From line " + cm.lineNumber() + " of " + cm.sourceId());
        return true;
    }
});

html上でconsole.logが呼ばれたタイミングでこのonConsoleMessageが呼ばれ、logcatにlogを出力してくれる。
cm.message():ログの内容
cm.lineNumber():console.logの呼ばれたhtml上の行番号
cm.sourceId():console.logの呼ばれたファイルパス

・JavaScriptのfunctionをJavaから呼ぶ

wv.loadUrl("javascript:hoge()");

hoge()はhtml上で定義してあるJavaScriptのfunction。

・jQueryのfunctionをJavaから呼ぶ
基本は上と同じ。でも、下のhoge()は呼べない。

$(document).ready(function() {
    function hoge() {
        $(document).text("hello world");
    }
});

どうやら、$(document).ready(function() {}); で囲われた部分のfunctionは呼べないらしい。
まあグローバルメソッドじゃないから当たり前といえば当たり前か…
だから、下記のように囲わないで記述すれば呼ぶことができる。
function hoge() {
    $(document).text("hello world");
}

ていうか、$(document).ready(function() {}); で囲わなくても動くんですね…
EDIT: なんかうまく追加したプラグインがロードできてない…ログを見るかぎりではロードの順序がおかしいみたいだけど。

あ、WebViewのJavaScriptを有効にし忘れないようにー。
wv.getSettings().setJavaScriptEnabled(true);

2011年12月17日土曜日

[VB.NET] 週番号から特定の曜日の日付を取得する

指定した年の週番号から、その週の特定の曜日の日付を取得します。
このコードでは第一週をその年の最初の月曜日から、としているため、
例えば2011年の第一週は1月3日からとなります。
2011年1月1,2日は2010年の最終週とみなされます。

''' <summary>
''' 指定した年、週番号の月曜日を取得
''' </summary>
''' <param name="year">年(yyyy)</param>
''' <param name="weekNum">週番号(1-53)</param>
''' <returns></returns>
''' <remarks></remarks>
Shared Function GetFirstDateOfWeek(ByVal year As Integer, ByVal weekNum As Integer) As DateTime
    '第一週をその年最初の月曜日からの週と設定
    Dim weekRule As CalendarWeekRule = CalendarWeekRule.FirstFullWeek
    Dim dtJan1 As DateTime = New DateTime(year, 1, 1)
    '指定した年の最初の月曜日を取得
    'この例では月曜日に固定しているが、DayOfWeek.Mondayを引数として受け取れば
    '任意の曜日の日付を取得できる
    Dim dtFirstMonday As DateTime = GetNearestDayOfWeek(dtJan1, DayOfWeek.Monday)
    Dim cal As Calendar = CultureInfo.CurrentCulture.Calendar
    Dim firstWeek As Integer = cal.GetWeekOfYear(dtJan1, weekRule, DayOfWeek.Monday)
    If firstWeek <= 1 Then
        weekNum -= 1
    End If
    Dim result As DateTime = dtFirstMonday.AddDays(weekNum * 7)
    Return result
End Function

''' <summary>
''' 指定した日付から直近(未来)の指定した曜日の日付を取得
''' </summary>
''' <param name="dtDate">日付</param>
''' <param name="desiredDayOfWeek">曜日</param>
''' <returns></returns>
''' <remarks></remarks>
Shared Function GetNearestDayOfWeek(ByVal dtDate As DateTime, ByVal desiredDayOfWeek As DayOfWeek) As DateTime
    Dim dayOfWeek As DayOfWeek = dtDate.DayOfWeek
    If dayOfWeek = desiredDayOfWeek Then
        Return dtDate
    Else
        Return dtDate.AddDays(((Integer.Parse(System.DayOfWeek.Saturday) - Integer.Parse(dtDate.DayOfWeek) + Integer.Parse(desiredDayOfWeek)) Mod 7) + 1)
    End If
End Function

使用方法はこんな感じです。

Dim year As Integer = 2011
Dim weekNum As Integer = 50
Dim dtMonday As DateTime = GetFirstDateOfWeek(weekYear, weekNum)

※「指定した日付から直近(未来)の指定した曜日の日付を取得する」メソッドに関しては、アジャイルプログラマの日常様のC# で指定した曜日の日を取得をもとに、VBに変換致しました。

2011年12月7日水曜日

[VB.NET] 最小化時に発生するイベント

ウィンドウ右上の最小化ボタンをクリックすると、「Resize」イベントが発生します。Resizeイベントを処理するメソッドの中で「Me.WindowState」を見ることで、最小化時の処理を行います。
こんな感じ

Private Sub Form1_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        '最小化時に行う処理を記述
    End If
End Sub

2011年11月24日木曜日

Visual Studio 2010で.Net Framework 4.0 Fullを使う

Visual Studio 2010でデフォルトで使用されるのは、4.0のClient Profileです。
でもlog4netを使いたかったりすると、Full版が必要になります。(Client ProfileにはSystem.webが入っていません)
ちょっと検索をしてみると、

「プロジェクトのプロパティ」 → 「アプリケーション」タブに 「対象のフレームワーク」という項目がありそこから変更できる

っていうのを幾つか見つけられたのですが、プロパティを覗いてもそんな項目はみつかりません。
最初はVisual Studio 2010 Proのライセンスがうまく認識されていないのか、とか思ったのですが、そうではありませんでした。これ、C#とVBで設定項目の場所が違うのです。
C#だと 上記の場所で変更できるのですが、VBだと、

「プロジェクトのプロパティ」  → 「コンパイル」タブ → 「詳細コンパイルオプションにて変更できます。