Windows7でローカルにタスクをインポートする方法

Windows7でタスクをインポートしようとした時に「ユーザー資格情報がローカル コンピューターでは使用できません」というエラーが出て、どうにもこうにも進まなかったときに以下のリンクを見つけた。
「/Uと/P」ではなく「/RUと/RP」を使えってことらしい

http://thebackroomtech.com/2009/04/06/windows-2008-schtasks-error-user-credentials-are-not-allowed-on-the-local-machine/

キナバル山

2012/06/24〜2012/06/27の間マレーシアのキナバル山に行ってきました。30歳になる前に海外の山を登りたいと思っていてまとまった休みが取れたので登りに行きました。

送信者 2012/06/24〜2012/06/28 Mt.Kinabalu
若干高山病の症状が出ました(腕が痺れる等)が、無事の登り切れました。
送信者 2012/06/24〜2012/06/28 Mt.Kinabalu
道はかなり良く整備されていて登るのはとても楽でした。ただ岩場は急なので慎重に進む必要がありました。
送信者 2012/06/24〜2012/06/28 Mt.Kinabalu
ボルネオ島は熱帯なので、虫も結構いるのかと思ったのですが、キナバル登山ではあまり見かけませんでした。

コタ・キナバル

下山後はコタ・キナバルの町中を散歩していました。イスラム教の国なのでトイレにトイレットペーパーがなく水が出るホースと水が入ったバケツだけでした。

送信者 2012/06/24〜2012/06/28 Mt.Kinabalu

今回の旅行では登山の事以外にも色々と学ぶことが多かったのでこれから思い出してメモを残そうとしています。ノートを忘れたのは痛かった。旅行するときは電子機器使えないこともあるから紙のノートとペンは必須だと感じました。

2012/06/24〜2012/06/28 Mt.Kinabalu

Project Euler 3問目

3問目もRで解いてみた。Rの乱数周りの扱いがまだ良く分からないので、もっと速くてきれいなコードがあると思うのですが、一応問題が解けるので良しとします。

prime_factorize <- function(n) {
  d <- 1
  x <- y <- 2
  while (d == 1) {
    rx <- runif(1, min=2, max=n)
    x <- floor(rx)
    ry <- runif(1, min=2, max=n)
    y <- floor(ry)
    d <- gcd(abs(x-y), n)
  }
  d
}

prime_factor_list <- function(n) {
  prime_factors <- NULL
  repeat {
    pn <- prime_factorize(n)
    prime_factors <- append(prime_factors, pn)
    if (pn == n) break
    n <- n/pn
  }
  prime_factors
}

answer <- function() cat("answer:", max(prime_factor_list(600851475143)), "\n")

もうこの段階でアルゴリズムをちゃんと知らないと解けない問題になってきましたw
素因数分解とか久しぶり

引数の評価についての認識間違い

前回(id:eji:20120619)の遅延ストリームを使った解答に若干修正を加えました。

stream.end <- function(msg) {
   msg == "eos"
}

stream.make <- function(head, tail) {
  function(msg) {
    if (msg == "eos") F
    else if (msg == "head") {
      head
    } else if (msg == "tail") {
      tail
    }
  }
}

stream.is_end <- function(s) {
  s("eos")
}

stream.head <- function(s) {
   s("head")
}

stream.tail <- function(s) {
   s("tail")
}

stream.take <- function(n, st) {
  if (n <= 0 || stream.is_end(st)) {
    stream.end
  } else {
    stream.make(
      stream.head(st),
      stream.take(n-1, stream.tail(st))
    )
  }
}

stream.take_while <- function(pred, st) {
  head <- stream.head(st)
  if (pred(head)) {
    stream.make(
      head,
      stream.take_while(pred, stream.tail(st))
    )
  } else {
    stream.end
  }
}
stream.fold <- function(fn, init, st) {
  if (stream.is_end(st)) init
  else {
    stream.fold(
      fn,
      fn(init, stream.head(st)),
      stream.tail(st)
    )
  }
}

stream.sum <- function(stream) {
  stream.fold(
    function(a, b) { a + b },
    0,
    stream
  )
}

stream.filter <- function(pred, st) {
  head <- stream.head(st)
  tail <- stream.tail(st)

  if (stream.is_end(st)) st
  else if (pred(head)) {
    stream.make(
      head,
      stream.filter(pred, tail)
    )
  } else {
    stream.filter(pred, tail)
  }
}

stream.fib <- (function() {
  fibgen <- function(a, b) {
    stream.make(
      a,
      fibgen(b, a+b)
    )
  }
  fibgen(1, 2)
})()

even <- function(n) {
  (n %% 2) == 0
}

answer <- stream.sum(
  stream.take_while(
    function(n) { n < 4000000 },
    stream.filter(even, stream.fib)
  )
)

cat("answer:", answer, "\n")

遅延評価のためにクロージャで包んでいたストリームの残りを、クロージャで包まないようにしました。Rでは渡された実引数が必要になった時に初めて評価されるため、わざわざクロージャで包んで評価を遅らせる必要がないようです。

例えば、Schemeのような正格評価の言語の場合、以下のようなコードでは第2引数に渡された値は(順番はどうあれ)評価されてしまいます。

; scheme
> (define (func a b)  a)
func
> (func 3 (display "hoge\n"))
hoge
3
>

しかし、Rの場合は引数の値が全く利用されなければ評価されません。

# R
> func <- function(a, b) a
> func(3, cat("hoge\n"))
3
>

RはHaskellと同じように非正格評価の言語なのかな...?

Rの勉強

最近Rをちょいとかじり始めたので、練習がてら Project Euler の問題を解いてみた

Problem2

フィボナッチの遅延ストリームを使って問題を解いてみた。Rにマクロのようなものが見当たらなかったので、クロージャで代用した。

stream.end <- function(msg) {
   msg == "eos"
}

stream.make <- function(head, tail) {
  function(msg) {
    if (msg == "eos") F
    else if (msg == "head") head
    else if (msg == "tail") tail()
  }
}

stream.is_end <- function(s) {
  s("eos")
}

stream.head <- function(s) {
   s("head")
}

stream.tail <- function(s) {
   s("tail")
}

stream.take <- function(n, st) {
  if (n <= 0 || stream.is_end(st)) {
    stream.end
  } else {
    stream.make(
      stream.head(st),
      function() { stream.take(n-1, stream.tail(st)) }
    )
  }
}
stream.take_while <- function(pred, st) {
  head <- stream.head(st)
  if (pred(head)) {
    stream.make(
      head,
      function() { stream.take_while(pred, stream.tail(st)) }
    )
  } else {
    stream.end
  }
}

stream.fold <- function(fn, init, st) {
  if (stream.is_end(st)) init
  else {
    stream.fold(
      fn,
      fn(init, stream.head(st)),
      stream.tail(st)
    )
  }
}

stream.sum <- function(stream) {
  stream.fold(
    function(a, b) { a + b },
    0,
    stream
  )
}

stream.filter <- function(pred, st) {
  head <- stream.head(st)
  tail <- stream.tail(st)

  if (stream.is_end(st)) st
  else if (pred(head)) {
    stream.make(
      head,
      function() { stream.filter(pred, tail) }
    )
  } else {
    stream.filter(pred, tail)
  }
}

stream.fib <- (function() {
  fibgen <- function(a, b) {
    stream.make(
      a,
      function() { fibgen(b, a+b) }
    )
  }
  fibgen(1, 2)
})()

even <- function(n) {
  (n %% 2) == 0
}

answer <- stream.sum(
  stream.take_while(
    function(n) { n < 4000000 },
    stream.filter(even, stream.fib)
  )
)

Vyattaにgccを入れる方法

http://www.vyatta.org/forum/viewtopic.php?p=38906#38906:ここを参考にした。

vyatta@vyatta:~$ configure
[edit]
vyatta@vyatta:~# set system package repository debian url http://debian.osuosl.org/debian
[edit]
vyatta@vyatta:~a# set system package repository debian distribution squeeze #現時点で最新の安定版がsqueeze
[edit]
vyatta@vyatta:~# set system package repository debian components main
[edit]
vyatta@vyatta:~# commit

[その他] 早起き再開

中学の頃から大学卒業くらいまで良くやっていた4時起きを再開した。
最近は日の出が早いので、4時でも結構明るい。

写真は散歩途中の立川駅前。

送信者 2011/06/07 - 立川

若干慣れないので午後になると眠くなるが、夏場は朝涼しいのでたまにやりたい。