野球とバスケのスーパープレー動画です。
Photo by Michael R Stoller Jr ※画像は動画とは関係ありません。イメージです。
動画はどちらもニコ動から。
こういうの見ると「すげぇ!」ってわくわくするよね。
野球とバスケのスーパープレー動画です。
Photo by Michael R Stoller Jr ※画像は動画とは関係ありません。イメージです。
動画はどちらもニコ動から。
こういうの見ると「すげぇ!」ってわくわくするよね。
これくらいでいったい何がそんな逆鱗に触れるのか、といったことがなくはない。ネットだと顔が見えない分、余計にその要素が強くなる。
例え話をしよう。 あなたは飯屋でバイトをしていて、ある客から豆腐の注文を受けた。醤油とポン酢を選べて、その客はなんとなしにポン酢を選んだ。特にそこにこだわりはなさそうに見える。
いざ厨房へ行ってみると、ポン酢はちょうど在庫を切らしている。仕方がないので「お客様、申し訳ございません。只今ポン酢をきらしておりまして、醤油しかご用意できません。如何致しましょうか。」と例の客に聞いた。これが逆鱗に触れ、「俺はいつもポン酢で食べるんだ!なぜ醤油しかないんだ!」と叱責される。
そりゃ店長が入荷をミスったか、バイトリーダーが在庫をいい加減に数えたか、おそらくそのへんだろう。しかし、客は別にそれを聞きたい訳じゃない。怒ったところでポン酢が泉の如く湧き出てくるか、といってそんなことはありえないのは自明である。もしそんな泉が存在すれば、私は大変嬉しい。
結局のところ、例の客がポン酢豆腐を食えなかった理由は明確にただ一つである。店長が、バイトリーダーが、とか、そんなのは関係ない。「この店に来てしまった」つまり、「運が悪かった」のである。従って、アルバイトであるあなたが例の客に叱責された理由も「運が悪かった」ためである。
結局のところ、人の気持ちなんて虫の居所次第であり、唯一コンピュータと同じなのは「バグが全ての原因である」ということなのだ。
こんにちは。皆さんご存じ、カレー店のCoCo壱番屋(通商ココイチ)で豪遊する方法です。 やり方は簡単。
蒸し鶏と大根の塩ダレサラダ 「蒸し鶏と大根の塩ダレサラダ」 - ココイチのメニュー|カレーハウスCoCo壱番屋より引用
メンチカツカレー 「メンチカツカレー」 - ココイチのメニュー|カレーハウスCoCo壱番屋より引用
この塩だれサラダの塩だれが本当にウマい。1人で2皿はぺろっと食べられてしまうくらいの旨さ。 11月末で無くなってしまうので、まだの人は是非食べて頂きたい。なんなら、カレーよりもこのサラダだけでも食べて頂きたい。(良識ある大人はやめよう)
そしてメンチカツ。揚げたてカリカリの旨いメンチカツを塩だれでしょっぱくなったところに駆け巡る。冷たい塩だれと熱々メンチカツのハーモニー。そして定番のカレーの漁夫の利状態。これ。
しかも先にサラダを食べておくことで、カレーライス(というよりは米)を食ったときに上がる血糖値を、上がりにくくするこうかまであるのです! www.kewpie.co.jp
重ねて言いますが、蒸し鶏と大根の塩ダレサラダは期間限定です。まだの人は是非ココイチへ足を運んでみてください。 なお、この記事はココイチからお金をもらって書いているのではないことを付記しておきます。
image by Tom Schaub
詳しい話はid:tuto0621さんのブログに譲るとして、10秒で何ができるかを説明する。
こんな感じで使える。
require 'shellwords' system("ls #{Shellwords.escape(ARGV[0])}")
こんな仕組み。
irb(main):013:0> Shellwords.escape("foo bar.txt") => "foo\\ bar.txt" irb(main):014:0> Shellwords.escape("a+b+c bar.txt") => "a\\+b\\+c\\ bar.txt"
便利。
Kotlinの公式リファレンスを翻訳してみました。まだ一部ですが、ぼちぼち進めていきたいと思います。
パッケージの記述は、ソースファイルの先頭になければならない。
package my.demo import java.util.* // ...
ディレクトリやパッケージに合致する必要はない。 ソースファイルをファイルシステムの任意の位置に置くことができる。
Packagesを参照のこと。
2つのInt
型の引数を持ち、Int
型を戻り値とする関数:
fun sum(a: Int, b: Int): Int { return a + b }
実体と推論された戻り値の型を持つ関数:
fun sum(a: Int, b: Int) = a + b
意味のある値を返さない関数:
fun printSum(a: Int, b: Int): Unit { print(a + b) }
Unit
型の戻り値は、省略できる:
public fun printSum(a: Int, b: Int) { print(a + b) }
Functionsを参照のこと。
1度だけ代入できる(読み取り専用)ローカル変数:
val a: Int = 1 val b = 1 // `Int`型が推論される val c: Int // 初期値が与えられない場合、型指定が必要 c = 1 // 明確な代入
Mutable(可変)な変数:
var x = 5 // `Int`型が推論される x += 1
Properties And Fieldsも参照のこと。
fun main(args: Array<String>) { if (args.size() == 0) return print("First argument: ${args[0]}") }
String templatesも参照のこと。
fun max(a: Int, b: Int): Int { if (a > b) return a else return b }
if{: .keyword }を式のように使用することもできる:
fun max(a: Int, b: Int) = if (a > b) a else b
if{: .keyword }-expressionsを参照のこと。
null{: .keyword }値を許容するのであれば、明示的にnull許容であると表記しなければならない。
もしstr
が整数値を持たなければ、 null{: .keyword }を返す:
fun parseInt(str: String): Int? { // ... }
null許容値を戻り値として返す関数を使う:
fun main(args: Array<String>) { if (args.size() < 2) { print("Two integers expected") return } val x = parseInt(args[0]) val y = parseInt(args[1]) // `x`, `y`はnullが入っていることがあるので、`x * y`はエラーを引き起こす if (x != null && y != null) { // `x`と`y`は、nullチェックの後自動的に非null許容型へキャストされる print(x * y) } }
or
// ... if (x == null) { print("Wrong number format in '${args[0]}'") return } if (y == null) { print("Wrong number format in '${args[1]}'") return } // `x`と`y`は、nullチェックの後自動的に非null許容型へキャストされる print(x * y)
Null-safetyを参照のこと。
is{: .keyword }演算子は、式がその型のインスタンスであるかを確かめる。 もし可変なローカル変数やプロパティが特定の型でチェックされれば、明示的にキャストする必要はない:
fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj` はこのブランチ内では自動的に`String`へキャストされる return obj.length } // `obj` は型チェックが行われたブランチ外では、まだ`Any`型である return null }
or
fun getStringLength(obj: Any): Int? { if (obj !is String) return null // `obj` はこのブランチ内では自動的に`String`へキャストされる return obj.length }
or even
fun getStringLength(obj: Any): Int? { // `obj` は`&&`の右側では自動的に`String`へキャストされる if (obj is String && obj.length > 0) return obj.length return null }
Classes and Type castsを参照のこと。
for
ループの使用fun main(args: Array<String>) { for (arg in args) print(arg) }
or
for (i in args.indices) print(args[i])
for loopを参照のこと。
while
ループの使用fun main(args: Array<String>) { var i = 0 while (i < args.size()) print(args[i++]) }
while loopを参照のこと。
when
式の使用fun cases(obj: Any) { when (obj) { 1 -> print("One") "Hello" -> print("Greeting") is Long -> print("Long") !is String -> print("Not a string") else -> print("Unknown") } }
when expressionを参照のこと。
in{: .keyword }演算子を使用すると、ある数が範囲内にあるかをチェックできる:
if (x in 1..y-1) print("OK")
ある数が範囲外かチェックする:
if (x !in 0..array.lastIndex) print("Out")
範囲内で反復する:
for (x in 1..5) print(x)
Rangesを参照のこと。
コレクション内で反復する:
for (name in names) println(name)
コレクションがあるオブジェクトを含むかを in{: .keyword }演算子で調べる:
if (text in names) // names.contains(text) が呼ばれる print("Yes")
関数リテラルをfilter
やmap
のコレクションとして使用する:
names .filter { it.startsWith("A") } .sortedBy { it } .map { it.toUpperCase() } .forEach { print(it) }
例えば焼きそばUFO。一平ちゃんでも良い。
こいつをいつも通り作った後、LLサイズの生卵をポトンと落としてかき混ぜる。
生卵UFO、無糖炭酸水、生卵UFO、無糖炭酸水の順で頂く。これが至高。 生卵とソースが絡み合って口の中がマッタリしたところに、炭酸水がシュワーッと駆け抜ける。これ。
無糖炭酸水を推奨するけど、必須では無い。(ただし、焼きそばのソースが既に甘いので、おすすめはしない。)
生卵+カップ焼きそばはよくある旨い食べ方だと思うが、そこに無糖炭酸水をプラスして提唱しているのは自分だけではないだろうか。