Windows8 キーボードショートカット(自分用)

Windows8はショートカットキー知ってるかどうかでいろいろ見方が変わると思います。

Windowsキー + 入力
PCを検索する
Win+Q
アプリ検索
Win+W
設定検索
Win+C
チャームを開く
Win+H, I, K
共有チャーム、設定チャーム、デバイスチャーム
Win+,
デスクトップのプレビュー
Win+Space
IMEの切り替え
Win+J
メインアプリ⇔スナップアプリのフォーカス切り替え
Win+O
画面向き固定
Win+Z
アプリのコマンド表示
Win+PageUp/Down
アプリの表示ディスプレイ変更
Win(+Shift)+.
アプリを左右にスナップ
Win+Enter
ナレーター
Ctrl+ -/+ or ホイール
スタート画面の項目を縮小・通常表示する

タスクバーとか

タスクバーでShift+クリック or Win+Shift+数字
アプリを別インスタンスで開く
タスクバーでCtrl+Shift+クリック or Win+Ctrl+数字
管理者としてアプリを開く

エクスプローラ

Alt-p
プレビューの切り替え
Ctrl+Shift+E
カレントディレクトリの子ディレクトリをツリーペインに展開
Ctrl+Shift+N
新規ディレクト

おおかみこどもの雪と雨を観た

ほとんど貸切状態で観てきました!

  • 観てよかった。
  • 途中の雪や星の表現が2D映画なのに3Dしていて面白かった。空気感とかが本当によく伝わってくる。背景の作画が好きです。
  • 人物の表現は普通かなあと。
  • 子供の予測できない動きというか、そういう感じはよく出ていました。
  • 主人公がぬかるんだ山でズリズリ滑ったりするシーンが個人的に好きです。
  • ストーリーですが:
    • 何かが鼻につくとか、意識して気にしなければ何も気にならないと思います。野菜とか田舎との交流とかがいかにもフィクションっぽいですが、まあ映画なので素直に楽しみましょうってことで。
    • 描写されている家を見るとテレビがない。ゲームもない。もちろんPCもネットも。時代かと思えば、図書館の入り口が割りと最近っぽい?こういう家庭で生まれた子が学校での話題についていけるかなあーって思いました。変な子だよね。田舎だと局少ないからテレビは話題にならないもんなんでしょうかね。でも女の子だからゲームやPCはしなくても何もならないかな。田舎補正でメディアから遠ざかるのは問題なくなるのかな。
    • サマーウォーズは大家族っていう括りがあったので、家族内での力学とか、嫁いだ側のキリキリ感とか勝手に想像しちゃってアレでしたが、こちらはそんなこともなくすっきり見られた。
    • 次回作も田舎が舞台なんでしょうか。
    • 主人公が教養のない女の子だったら嫌な話になっていたと思いました。登場人物に対してイラつかせないために、登場人物について基礎教養があったり、多少のスーパーマン要素を足したりするのはフィクションの常套手段ですね。

レキシカルクロージャについて今日もやらかしてしまったのでよくある失敗への対処を書く

今日やらかしたミス。

下記のソースを見て欲しい。3つ目が本日もやらかしたミス。

ループの中で(レキシカル)クロージャを生成してHTML要素のイベントにバインドする、などよくあるシチュエーションだと思うが、そういう場合にクロージャ内でループ変数を参照すると痛い目にあう。

クロージャから見えるループ変数はその時の値ではなく、あくまでループに使われた変数としての値を持っているので、ループ内でせっせと作ったクロージャを実行する頃には、ループを走り終わった出汁ガラのような骸がループ変数に束縛されている。

これを防ぐ方法はいくつかあるが、一番安易なのはレキシカルクロージャを二段構えにして、内部でループ変数から値をコピーするやり方(4番目)。

まあ、CoffeeScriptJavaScript)にかぎらず、レキシカルな言語だとよくあることですね。

教訓としては、ループ内のあとあと残る即時関数内でループ変数見てたら要注意ってことです。

FizzBuzz前後ぐらいの難易度の問題はあるだろうか

FizzBuzz前後ぐらいの難易度のプラクティカルな問題はあるだろうか?ということで考えてみる。

下記は好きな言語で実装してよい。

  • ある数値列のminとmaxを取れ。合計と平均値も取れ。
  • ある整数を、minとmaxの間の数に制約せよ。
  • うるう年の仕様を別添するので、与えられた年、月、日の整数の組み合わせが存在するか判定せよ。
  • 文字列をN回繰り返せ。
  • 文字列値が4つ入っているタプルがあり、4番目、3番目、2番目の順番で同じ値に対して集約処理をかけたいとする。その処理を書け。
  • 正規表現を使って、別添のログファイルの日付行を抜き出せ。
  • 文字列の2次元配列をCSVとして正しく書き出せ。(正しく読むよりははるかに簡単)

こんなの本当に論外レベルの人を弾くためにしか機能しませんが…。

プログラミングコンテストのように、面接用にこういう問題をいくつか揃えておき、コードを即席で書いて送ってその場で結果を出して判定するようなものがあればいいのかもしれない。

CoffeeScriptの書き方いろいろ

とりあえずちょっとした時間で思いついた分です。

お好みに合うかどうかは別として...

可変長引数呼び出し

# funcを呼び出したら、anotherFuncを引数そのままの状態で呼び出す
func = (args...) -> anotherFunc args...

コストが気になるなら最後にreturnを置きましょう

func = (list) ->
    # 最後にリストを作ってしまうのがいやなら...
    e.hoge() for e in list

betterFunc = (list) ->
    e.hoge() for e in list
    # こうすればいい
    return

いないプロトタイプだーれだ?

# 厳密には行儀悪いかも
Function::bind ?= (context, baseArgs...) -> (args...) => @call context, baseArgs..., args...

配列のコピー

ary = [1..100]
copied_array = [ary...]

値交換

[a, b] = [b, a]

変数名省略

{ hoge, fuga } = obj # { hoge : hoge, fuga : fuga } = obj
func {hoge, fuga} # func { hoge : hoge, fuga : fuga }

リストに混ぜて引数にして呼び出し

a = 1
b = [1..10]
c = 2
d = [3..10]

# console.log(1, 1, 2, 3, 4, .., 10, 2, 3, 4, .., 10)
console.log a,b..., c, d... 
console.log a,[b..., c, d...]...

お好きなだけ分配してください

[a, b..., c] = [d..., e, f..., g...]
[[a, alpha], b..., c, {hoge, fuga}, { foo : bar, baz : boo}] = [d..., e, f..., g...]

足りないとどうなるんだろう?

lack = ([head, body..., tail]) -> console.log head, body, tail

lack [1, 2, 3] # prints '1 [ 2 ] 3'
lack [1, 2]    # prints '1 [] 2'
lack [1]       # prints '1 [] undefined'
lack []        # prints 'undefined [] undefined''

仮引数でも分配できるよ

func = ([first, mid..., last]) -> first + last
console.log func [1..10] # prints '11'

func = ({a, b}) = a + b
console.log func a : 1, b : 2 # prints '3'

# 文法としては成立するようです
func = ({length}...) -> length # 下記コードとあわせると[3,2,1].lengthを返す
console.log func 3,2,1 # prints '3'
# だからこれもアリ
func = ({0 : one, 1 : two, 2 : three}...) -> one * two * three
console.log func 1,2,3 # prints '6'

グローバル関数の定義

@globalFunction = (x) -> x * x

# スコープを分けたい場合は do => で
do =>
  scopedVariable = [1..4]
  @anotherGlobalFunction = -> console.log(scopedVariable)

関数を気軽に飾りましょう

$this = (fn) -> (args...) -> fn.call $(@), args...

$(':input').each $this ->
    @val 'hello!'