shokosブログ

プログラミング

自分用Erlang環境構築メモ

OS:Yosemite

vimの設定

github.com

.vimrcは上記を参考に

hybridが効かないと怒られるので、

git clone https://github.com/w0ng/vim-hybrid

hybrid.vimを~/.vim/colorsにおく

NeoBundleの設定
mkdir -p ~.vim/bundle
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

vimを起動して、:NeoBundleInstall

Erlangインストール

qiita.com

この記事を参考にした

curl -O https://download.basho.co.jp.cs-ap-e2.ycloud.jp/otp/download/otp_src_18.1.tar.gz
tar xvzf otp_src_18.1.tar.gz
cd otp_src_18.1
./configure --prefix=/opt/erlang/18.1 --enable-smp-support --enable-threads --enable-darwin-64bit --enable-vm-probes --enable-kernel-poll --enable-hipe --with-dynamic-trace=dtrace --without-javac --enable-dirty-schedulers --disable-native-libs --disable-sctp
make
make install

ディレクトリが作れないと怒られたりするので、適宜対応
パスに/opt/erlang/18.1/binを追加

opensslを最新に

標準のは古いようなので、brewで新しいの取ってくる

brew upgrade openssl

パスの順番を/usr/local/binが前に来るようにする

brew link openssl --force
which openssl

Haskellでプロジェクトオイラーを問いて解説するスレ

shokos Advent Calendar 2012七日目

プロジェクトオイラー
たまにやると頭の体操になっておもしろい。筋トレ感覚。

第一問

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.

訳:1000未満の、3または5の倍数の和を求めよ。


Haskellで書くとこうなります。

sum [x | x <- [1..999], x `mod` 3 == 0 || x `mod` 5 == 0]


今会社でやっているHaskell勉強会のいい問題になると思うので、軽く解説。

[x | x <- [1..999], x `mod` 3 == 0 || x `mod` 5 == 0]

これはリスト内包表記です。
第一回の勉強会で解説しました。http://shokos.hatenablog.com/entry/2012/12/04/222447
すごいH本だと一章に出てきます。

x <- [1..999]こちらも上記で説明しています。 [1,2,3..998,999]のリストを定義しています。
つまり、1~999の整数で、3で割り切れるものまたは5で割り切れるものを探して、sumしています。

簡単にワンライナーで解けちゃいます!やったね!

Haskellでワンライナーで書いたフィボナッチ数列がなにをやっているのか

shokos Advent Calendar 2012六日目。

ほとんどHaskell触ったことない人向けです。
社内勉強会で使おうと思っているネタ。


Haskellフィボナッチ数列を定義すると、こうなります。

fib = 1:1:zipWith (+) fib (tail fib)

何をやっているのか、式の左側から説明していきます。


コロンは、要素をリストの先頭にくっつけます。
1:1:~は、[1,1,~]を示しています。


zipWithは

zipWith f リストA リストB

リストAとリストBの要素を、それぞれ先頭から順にもってきて、fを適用します。
片方が空リストになったらストップです。


tailはリストの先頭を取り除きます。
つまり、zipWith (+) fib (tail fib)は、fib自身と、fibから先頭を除去したものを、先頭から順番に持ってきて足し算しています。


たとえばこんな感じ。

zipWith (+) [1,1,2,3] (tail [1,1,2,3])
↓
zipWith (+) [1,1,2,3] [1,2,3])
↓
[2,3,5]

すごい!フィボナッチ数列の性質ができた!
これに、初期値1:1:を与えているので、あとは再帰して無限フィボナッチ数列の完成です!

spring3でひとつのコントローラーに複数URLをマッピングさせる方法

shokos Advent Calendar 2012五日目

spring3のマッピングアノテーションで、複数URLを指定する方法
@RequestMappingで、valueにStringの配列を渡してあげればOKです。

@Controller
@RequestMapping(value = {"/", "/top"})
public class TopController {

ちなみにひとつしか指定しない場合は、valueは書かなくてOK。

@Controller
@RequestMapping("/top")
public class TopController {

とびだせHaskellの森1

shokos Advent Calendar 2012四日目

CAで「とびだせHaskellの森」という社内勉強会をしています!

初回はghciでのコマンドを色々試してもらいました。
ちょろっと遅延評価の説明とかもしつつ。

結構人が集まってくれて、感謝。

mavenプロジェクトにコンバートしたときにエラーが出る場合の対処法

shokos Advent Calendar 2012三日目

今日はエラーの対処法の話なので、人の役に立つ確率が高い。

1. 久しぶりにjavaプロジェクトを作ろう。
2. うっかりコマンドから mvn archetype:generateして作ってしまった!
3. eclipseからmavenプロジェクトにコンバートするか。

ってやると下記のように怒られることがあります。

An internal error occurred during: "Enabling Maven Dependency Management".
Unsupported IClasspathEntry kind=4

そのあとMaven > Update Projectしても同じようなこと言われます。

その対処法。

1. プロジェクトを右クリック > Maven > Disable Maven Nature
2. コマンドラインからmvn eclipse:clean
3. Refreshして、再びMavenプロジェクトにコンバート
4. Maven > Update Project

これでOK!

ActiveAdminで作ったアプリのindex画面を編集

shokos Advent Calendar 2012二日目

昨日つくったActiveAdminで作ったアプリのindex画面がいけてないので編集します。

app/admin/schedules.rb を開いて

# encoding: utf-8
ActiveAdmin.register Schedule do
  
  index do
    column "予定", :plan
    column "日時", :occurred_at
    default_actions
  end

end

こんな感じになります。
f:id:syoko_sasaki:20121202185127p:plain


columnで項目指定、default_actionsはViewEdit,Deleteアクションです。