IntelliJ IDEAのこんなショートカット知ってますか?

いつもお世話になってるstackoverflowで見つけた情報をぺたり。
What are the most useful Intellij IDEA keyboard shortcuts? - Stack Overflow
java - Ctrl-tab in IntelliJ IDEA - Stack Overflow

詳しいことはリンク先を見ていただくとして、今回は僕も知らなかったお役立ちショートカットだけに絞って紹介します。

Ctrl + Tab Switcher
Ctrl + TabでSwitcherが開きます。そのままCtrlを離すと直前に開いていたファイルを開くことができ、またCtrlを押したままさらにTabを押すと、今開いているファイルをエディタで開いたり、プロジェクト構造やエディタ、TODO、メンバ一覧(Structure)などのツールウインドウを選択して開いたりできます。

Ctrl + Shift + A Find Action

  • あのキーボードショートカットが思い出せない
  • メニューに無いアクションを実行したい

というときは、Find Actionを使いましょう。
キーワードでアクションを検索してENTERで実行できます。

僕は半年くらいIntelliJ IDEAを使ってきて知りませんでした。
皆さんはいかがでしょうか。

答案:時間帯重複チェック(Scala)  簡易版

お題:時間帯重複チェック - No Programming, No LifeScalaで解いてみた(その2)

お題:時間帯重複チェック(Python) - でこすけの日記を参考に、関数ひとつでまとめてみました。
こんな風にも書けますよ、ってことで・・。

個人的には、多少長くても前回の書き方の方が好きです。

答案:時間帯重複チェック(Scala)

お題:時間帯重複チェック - No Programming, No LifeScalaで解いてみました。

答案:時間帯重複チェック (Scala による Option モナド活用編) - akihiro4chawonの日記との一番の違いは、classをバンバン定義してimplicit defも使いまくって、難しくしてみたところでしょうかw
あと、for使ってません。foreach, map, flatMap, filter, filterNot only...。
慣れると意外と読みやすい?

長く見えますが半分はテストコードとコメントですし、

時間・分のバリデーションを行ってる部分

  val HourRange = 0 to 23
  val MinuteRange = 0 to 59
  val SpecialCase = (24, 0)

  def isValid = (HourRange contains hour) && (MinuteRange contains minute) || (hour, minute) == SpecialCase

時間帯を分単位のRangeに変換してる部分

start.inMinutes to (end.inMinutes - 1)

時間帯aと時間帯bが重複しているかチェック

a duplicateWith b

とか結構直感的だと思います。
また、timeDuplicationCheckそのものの定義は10ラインしかないです。

どんなもんでしょう。

タイピングゲームのたまご(canvas)

http://jsdo.it/mumoshu/qQ7x

こんなものを作ったので、html5canvasを使ってタイピングゲーム的なものを作るのに役立った情報をまとめておきます。

テキストの描画の基本や入力されたキーの取得などはここでは触れないので、こちらを参照してください。
キーボードから入力した文字をcanvasに描画する - mumoshu.log

文字色を変える
context.fillText(text, x, y)でテキストを描画する場合は、context.fillStyleに色を設定する。
色はcssのcolorプロパティと同じ書式して指定する。
灰色にするならこんな感じ。

guideWriter.context.fillStyle = "#aaaaaa";

キャンバスをクリアする
透明で塗りつぶす。表現がアレですが。ペイントソフトの消しゴムみたいなものです。
白で塗りつぶすのではなく、何も色がぬられていない状態に戻すということ。

canvasの描画領域全体を塗りつぶす場合は以下のようなコードにします。
描画領域には、style指定するようなmarginやpadding部分は含まれません。
jQueryを使う場合は、jQuery(canvas).width(), height()したときのサイズが描画領域です。

var worldContext = worldCanvas.getContext('2d');

worldContext.clearRect(0, 0, worldCanvas.width, worldCanvas.height);


他のキャンバスの内容を別のキャンバスに描画

context.drawImage(canvas, x, y)でできます。
引数は描画するcontextでは無く、canvasであることに注意。
2dcontextではない、別種のcontextで描画された内容もdrawImageできるようにこうなってるのかな。

worldContext.drawImage(guideCanvas, 0, 0);

キーボードから入力した文字をcanvasに描画する

http://jsdo.it/mumoshu/n318
こんなものを作ったので、html5canvasjavascriptでテキストを描画するにあたって役にたった情報をまとめておきます。

canvas.getContext(name)で取得できるContextの一覧CanvasContexts - WHATWG Wiki

2dcontextの仕様
getContext('2d')で取得できるcontextの仕様.
http://dev.w3.org/html5/2dcontext/

2dcontextのtext描画まわりの仕様
http://dev.w3.org/html5/2dcontext/#text
文字種、文字サイズの設定や、描画の方法まで全てのってる。

jQueryで押下されたキーを識別する
.keypress() | jQuery API Documentation

keypressイベントをjQueryで拾って、引数に渡ってきたeventオブジェクトのwhichに押されたキーに対応する文字コードが入ってます。

文字コードをstringに変換
文字コードをstringに変換する関数がJavaScriptに標準装備されています。

jQuery#keypressと組み合わせて押されたキーに対応する文字を出力したいなら、こんな感じ。

$(document).keypress(function(event) {
  var charcode = event.which;
  console.log(String.fromCharCode(charcode));
});

グラフィックがぼけないようにcanvasのサイズを変更する

$(canvas).css('width', '800px');
$(canvas).css('height', '500px');

こんな感じで、styleでサイズ指定をするのはNG。
canvasのcontextサイズが変わらないのか、描画されたグラフィックが無理やりstyleに指定したサイズに拡大されてボケボケになります。

canvas.width = 800;
canvas.height = 500;