December 2010
1 post
October 2010
2 posts
Mac | F11
Windows でいう win + D Mac OS 10.5 だけかもしれない
September 2010
6 posts
Scala | Project Euler Probrem 1
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%201
val r = (0 to 999)
((r by 3) ++ (r by 5)).distinct.sum // => 233168
Scala | Project Euler Probrem 2
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%202
import scala.collection.mutable
def isEven(n: BigInt): Boolean = (n % 2 == 0)
var fibs = mutable.Map[Int, BigInt]()
def fib(n: Int): BigInt = {
if (fibs.isDefinedAt(n)) return fibs(n)
if (n <= 2) return 1;
fibs(n) = fib(n - 1) + fib(n - 2)
return fibs(n)
}
var result = (1 to 28).map(n =>...
Scala | collatz2
def collatz(n: Int, list: List[Int] = Nil): List[Int] = n match {
case 1 => (n :: list).reverse
case n if n % 2 == 0 => collatz(n / 2, n :: list)
case _ => collatz(3 * n + 1, n :: list)
}
println(collatz(69)) // => List(69, 208, 104, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1)
Scala | collatz
def collatz(n: Int) = n match {
case n if n % 2 == 0 => n / 2
case n => (3 * n) + 1
}
def nestWhileList[A](f: A => A, initial: A, p: A => Boolean) = {
val result = Stream.iterate(initial)(f).takeWhile(p).toList
result :+ f(result.last)
}
val cs = nestWhileList(collatz(_: Int), 200, (_: Int) != 1)
Scala | repl 補完
scala> "foo".
+ asInstanceOf charAt codePointAt codePointBefore codePointCount compareTo compareToIgnoreCase concat
contains contentEquals endsWith equalsIgnoreCase getBytes getChars indexOf intern isEmpty
isInstanceOf ...
もうこの時点で「いやいやrequireは絶対パスで書くだろ、常識的に」とか「autoloadじゃないの?」とか「
– Gree Fast Processor: PHPを3倍(くらい)速く | GREE Engineers’ Blog
August 2010
5 posts
Smarty | 変数の展開 - バッククオートを使う
<% assign var="url" value="http://`$rows.foo`.sample.com" %>
「あなたへのおすすめ」じゃなくて「あなたが意地張ってフォローしない人たち」になってる
– Twitter / ©ディスク百合おん (via junt74) (via fukumatsu) (via asyoulike) (via coolsurf) (via neknee) (via hakkuru) (via kyohei28) (via musashi0129) (via himmelkei) (via ta-bop2nd) (via deathscythe-hell) (via ignis09) (via maybowjing) (via furudanuki)
GAE | 開発環境の管理画面の URL
/_ah/admin/
bash | if 文を一行で
$ [ -d /var/log/hoge ] && echo 'HELLO'
$ [ ! -d /var/log/hoge ] && echo 'HELLO' # 否定
Scala | 単語の削除
def deleteWord(replaceWords: String, originalWords: String) = {
val pattern = "[" + replaceWords + "]"
pattern.r.replaceAllIn(originalWords, " ").mkString
}
println(deleteWord("golf","flogwaiurhgm"))
http://d.hatena.ne.jp/mzp/20100811/deleteWord
July 2010
5 posts
SSL | Connection Partially Encrypted
サイトの一部に http で通信しているものがあり、完全に暗号化できているわけではないというエラー。
Scala | サブ要素の抽出
scala> <a><b><c>hello</c></b></a> \ "b"
res4: scala.xml.NodeSeq = NodeSeq(<b><c>hello</c></b>)
タグ名を引数として \ を呼び出す
Git | git stash
$ git stash
$ git stash pop
git stash は、今まだコミットしていない全状態を横にのけておいてくれる。元のブランチに戻って git stash pop で横にのけておいた状態を取り戻すことができる。
Git | git checkout -b
$ git checkout -b hoge
-b のオプションは、現在の状態を元にして新しいブランチを開始し、 そのブランチ上で開発する。下記コマンドと等価。
$ git branch hoge
$ git checkout hoge
Scala | playframework | tags の使い方
$ mkdir app/views/tags
$ vi app/views/tags/hello.html // or app/views/tags/hello.tag
$ vi app/views/Application/index.html
1 #{extends 'main.html' /}
2 #{set title:'Home' /}
3
4 #{hello /} // hello と tag を指定
June 2010
19 posts
Linux | whoami
$ whoami
admin
# whoami は現在の実効ユーザー id に対応するユーザー名を表示する。 whoami は、コマンド ‘id -un’ と等価である。
TroubleShoot | The connection was reset
The connection was reset
The connection to the server was reset while the page was loading.
* The site could be temporarily unavailable or too busy. Try again in a few
moments.
* If you are unable to load any pages, check your computer's network
connection.
* ...
Scala | assert
Scala の assert メソッドは、引数の Boolean をチェックし、値が false ならば AssertionError を投げる。渡された Boolean が true なら、そのまま何もせずに戻ってくる。
java.lang.AssertionError: assertion failed
at scala.Predef$.assert(Predef.scala:79)
at Main$$anon$1.((virtual file):27)
at Main$.main((virtual file):5)
at Main.main((virtual file))
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Scala | タプル
scala> val pair = (99, "Luftballons")
pair: (Int, java.lang.String) = (99,Luftballons)
scala> println(pair._1)
99
scala> println(pair._2)
Luftballons
タプルは、ドットとアンダースコアと「1から始まる要素の番号」を指定するだけで個々の要素にアクセスできる。 _N の要素が0からでなく、1から始まっているのは、Haskell や ML などの他の言語によって、静的に型付けされたタプルは1から始まるという伝統がすでに敷かれているからだ。
PHP | php.ini の On と Off について
注意: boolean 値を探す場合 off という boolean の ini 値は空文字列または “0” として返されます。 一方で on の ini 値は “1” として返されます。 また、この関数はリテラル文字列で設定された INI 値を返すこともできます。
http://php.plus-server.net/function.ini-get.html
Git | git reset
HEAD^ は「HEAD というコミットオブジェクトの1つ前のコミットオブジェクト」を意味する記法。
git reset HEAD^
$ git st (git)-[master][~/Sites/lang/git/gitusers]
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# new file: style.css
#
# Changed but not updated:
# (use "git add...
Git | git revert
git revert は過去のコミットを取り消す。
$ git revert b7a4a6dc
Git | git reset
git reset は次のコミットでこの内容を記録する、としたインデックスへの記録を取下げること。
Git | git log --grep=
$ git log --grep='特別参加' # ログメッセージの文字列から探すことができる
$ git log --grep='バック' --grep='グラウンド' # これは OR 検索になる
$ git log --all-match --grep='バック' --grep='グラウンド' # --all-match をつけることで AND 検索ができる
Git | git add -u
ワークツリー内の git で版管理しているすべてのファイルの現在の状態を次のコミットに記録したい、とリクエストすることができる。
Scala | sbt
http://code.google.com/p/simple-build-tool/
$ cd ~/bin
$ wget http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.4.jar
$ touch sbt && chmod u+x ~/bin/sbt && vi sbt
#!/bin/sh
java -Xmx256M -jar `dirname $0`/sbt-launch-0.7.4.jar "$@"
$ sbt
Project does not exist, create new project? (y/N/s)
Mac | fcd と open
これを知らなかったことが後悔される。
fcd で Finder で選択されている場所に移動 open . でターミナルで選択されている場所に移動
ターミナルで 「fcd」とタイプするだけで、Finder で選択されている場所に簡単に移動できます。
fcdの逆、つまりターミナルで現在いる場所をFinderで表示する場合は、open .でいけます。~/.bashrcにalias here=”open .”と書いておくと、得も言われぬ快感に浸れます。
http://d.hatena.ne.jp/viver/20080203/p1
なるほど。there と here みたいにやってみようかな。
Ubuntu | version を確認したい - lsb_release
NAME
lsb_release - print distribution-specific information
SYNOPSIS
lsb_release [options]
DESCRIPTION
The lsb_release command provides certain LSB (Linux Standard Base) and distribution-specific information.
If no options are given, the -v option is assumed.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04...
Mac | spotlight を OFF にする
$ sudo chmod 0000 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker
で、再起動。もともとは 755 。
PHP | ascii_stars
http://golf.shinh.org/p.rb?ASCII+Stars
function ascii_stars($num) {
$buf = array();
$size = $num * 2 - 1;
for ($i = 1; $i <= $size; $i++) {
for ($j = 1; $j <= $size; $j++) {
$buf[$i][$j] = "*";
}
}
for ($i = 1; $i <= $size; $i++) {
$abs = abs($num - $i);
for ($j = 1; $j <= $abs; $j++) {
$buf[$i][$j] = " ";
...
Scala | 結果型
コンパイラが要求しない場合でも、結果型を明示的に示した方がよい場合が多い。そうした型アノテーションがあれば、型推論されるべき結果型を読み手自身が関数本体から調べなくて済むので、コードが読みやすくなる。
May 2010
39 posts
PHP | 文法エラーをチェック
$ php -l models/Hoge.php
No syntax errors detected in models/Hoge.php
いつもわすれる
Scala | head, tail, init, last
scala> val l = List(1, 2, 3, 4)
l: List[Int] = List(1, 2, 3, 4)
scala> l.head
res1: Int = 1
scala> l.tail
res2: List[Int] = List(2, 3, 4)
scala> l.last
res3: Int = 4
scala> l.init
res4: List[Int] = List(1, 2, 3)
head には last、tail には init という双対的な操作 (dual operation) が存在する。
Scala | リストと配列の違い
リストは配列とよく似ているが、違いが2つある。
第1に、リストはイミュータブルである。つまり、リストの要素は代入によって書き換えられない。
第2に、配列はフラットだが、リストは再帰的な構造(連結リスト:linked list) を持つ。
Scala | イミュータブルを重視する
Java では、変数はミュータブルがデフォルトです。final 修飾子をつけない限り、変数はミュータブルです。
最初にすることは、イミュータブルのコレクションクラスを標準で使うことです。ミュータブルなコレクションクラスを使う場合には、ミュータブルを選んだ理由をソースコードにコメントとして残しましょう。ミュータブルなコレクションクラスが適切な場合もあります。例えば、メソッドの中でリストを作成している場合には、ListBuffer クラスを使うほうがより効率的でしょう。しかし、戻り値として ListBuffer を返すのではなく、List を返すようにしましょう。Java でStringBuffer を使って、最終的には String を返すのと似ています。イミュータブルのコレクションクラスを使うのを標準にして、妥当な理由がある場合のみ、ミュータブルなデータ型を使うようにしましょう。
...
Scala | null チェックの代わりに Option を使う
最初にすることは、ソースコードから null を追放することです。メソッドの戻り値では、絶対、決して、何があっても null を返してはいけません。 入力値の問題で、null や例外を返すような Java ライブラリを使っているのであれば、Option に変換します。Option を使って、String から Int へのパースを行っています。 Scala の基本です。null は使いません。 コードを書くときにも、null を禁止します。初期化されていないインスタンスの場合、null でない初期値を代入します。もし初期化の前にインスタンスをチェックする可能性があれば、 Option を使いましょう。そうすれば、初期値は None になります。妥当な入力値に対して、返すべき論理的な値がないのであれば、戻り値は Option にすべきでしょう。 Option の get...
Scala | repl でメソッド一覧を確認する
タブでメソッド一覧が確認できる。
scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)
scala> l.
++ +: - --
/: :+ :: :::
:\ addString andThen ...
Firefox | このパスワードを記憶させますか?
Firefox で、form の要素に password がある時に、<input type=”submit”… か <input type=”image… の時にクライアント側で validate をする時に、password に文字列が入力されていると、「このパスワードを記憶させますか?」というダイアログが出てしまう。
このイベントを止めることができないかを調べてみたが、止めることができない?ようだ。
<input type=”button”… にして対応することにする。
Linux | コマンドラインからグローバル IP を得る
$ wget -q -O - http://checkip.dyndns.org | sed 's/.*Address\:\s\(.*\)<\/body>.*/\1/g'
Git | git log あとで試す
$ git log --graph --branches --tags --pretty='%C(yellow)%h%Creset %Cblue%ar%Creset%C(green)%d%Creset %s'
REST | REST とは次の6つを組み合わせたアーキテクチャスタイル
クライアント/ サーバ :ユーザインターフェースと処理を分離する
ステートレスサーバ:サーバ側でアプリケーションの状態を持たない
キャッシュ:クライアントとサーバの通信回数と量を減らす
統一インターフェース:インターフェースを固定する
階層化システム:システムを階層に分離する
コードオンデマンド;プログラムをクライアントにダウンロードして実行する
ngrep | ngrep -W byline port 80
tpcdump よりも分かりやすくリクエストとレスポンスのやり取りが見れる
Scala | パターンマッチ - 特定の文字列とそのひとつ前の要素を削除
def ignore(in: List[String]): List[String] = in match {
case Nil => Nil
case _ :: "ignore" :: rest => ignore(rest)
case x :: rest => x :: ignore(rest)
}
println(ignore(List("hoge", "foo", "ignore", "hello"))) // => List(hoge, hello)
すごいなー。2つすごいと思っていて、一個は単純に再帰のプログラムに慣れてないから、それですごいな、ということと、もうひとつは、こういうパターンマッチって他の言語にあるのかな?(関数型系はありそうだけど)