第2回 アジャイルサムライ読書会 in 廣島に参加した

第2回 アジャイルサムライ読書会 in 廣島に参加しました。

http://atnd.org/events/25904

アジャイルサムライの第2章をその場で読み、議論などなどしました。
それぞれの先入観があって、それぞれの開発の価値観があるのでちゃんと議論になるなーというのが主な印象。

第2章自体の感想としては、アジャイルチームを作るにはそれなり人を選ぶため人選は難しそうなので、アジャイルをしたいって人であつまって実績を作っていかないと広がりをつくることを今はしなきゃいけないのかなーって思いました。

よーするに大変だけど楽しい仕事をしようってことだよね。たぶん。

第3回は3月27日です。

アジャイルサムライ(amazon) http://www.amazon.co.jp/gp/product/4274068560/ref=as_li_ss_tl?ie=UTF8&tag=eiel-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4274068560:

最近のGHCはN+Kパターンがデフォルトで無効。

プログラミングHaskellのコードを試してたらN+kパターンがうごかなかった。
普段 N+Kパターンなんて使わないし、混乱するだけなのでどうでもいいのですが、デフォルトで無効状態で、-xNPlusKPatternsフラグを使えば有効になるようです。

よくわからない人はソースコードの頭に以下をかいておけば有効になります。

{-# LANGUAGE NPlusKPatterns #-}

第1回 アジャイルサムライ読書会 in 廣島に参加できなかった

第1回 アジャイルサムライ読書会 in 廣島に参加できなかったけど、twitterのログをみてると面白かったという意見がちらちらと見えたので悔しいので勝手に引用しとく。

第1回 アジャイルサムライ読書会 in 廣島 : ATND

第2回は2週間後にありますー。
第2回 アジャイルサムライ読書会 in 廣島 : ATND

Macで環境変数の設定方法(not bash)

前に書いたような気がしたんだけど、自分の日記を検索してもでてこなかったのでメモ。

ターミナルから起動するアプリケーションであれば.bashrcや.zshenvで設定してしまえばいいのですが、そうもいかない自体が多々あります。Cocoa Emacsや、gvimをdockなどから起動してしまえば読まれることがありません。

そんな時は以下のplistを作成して作り、PATHのkeyを作成し、内容を設定してあげればよいです。

~/.MacOSX/environment.plist

HaskellでArray操作

Haskell使ってはじめてArray操作したのでメモ。
STモナドをつかったのもはじめてだけども。
使い方があってるのかは保証しない。

arrayパッケージのhackageのページ
http://hackage.haskell.org/package/array-0.4.0.0

  • インターフェイスとしてはImmutablな IArrayクラス とMutableな MArrayクラスがある
  • IArrayとしては Array と アンボックスされてる UArray がある
  • MArrayとして IOArray とか STArrayとかある。それそれアンボックスされてるVersionがある。(IOUArray,STUArray)
  • MArrayとIArrayを相互変換には freeze、thaw とかがある。
  • thawとかfreezeしたときにコピーが発生してるんでないかと思う。
    • freezeしたときはコピーするんだろか。
  • アクセスする際の添字としてはIxクラスであればつかえて、初期化する際に最小値と最大値を指定する。(多次元配列とか簡単につくれる)
    • array関数とかに *1 とか渡してやれば 12x12の配列ができる。

折角なので書いたコードも添付しとく

  • 書いたコードはプログラミングコンテストチャレンジブックのLake Coutingを元にhaskellに書き換えた。
  • 数えた数を保存するのにStateモナドつかってたらうまくいかなかった。どうせSTの中なので新しいSTRefつくった。どうするのがよいのかよくわかってない。
  • solveの中で破壊的な操作があるけれでも、その変更は外に出ないの参照透明性は維持できる。と信じている。
  • whenが連続するのをなんとかする方法をしりたいけど、今回は保留。
  • STモナドはIOモナドみたいに副作用がおこせて、STをはずすこともできるが、その変わり別の制限がある程度に認識している(つまりよくわかってない)
  • 入力はIOUArrayで構築して UArray に変換しておいて、問題をとく場合はSTUArrayにして処理したという感じ。

問題の内容は

大きさがN×Mの庭があります。そこに雨が振り、水溜りができました。
水溜りは8近傍で隣接している場合につながっているとみなします。
全部でいくつの水溜りがあるでしょうか?
(8近傍とは、次のWに対する*の部分を指します)

***
*W*
***

制約 N,M <= 100

入力データは以下のように想定

  • 1行目がN
  • 2行目がM
  • それ移行が庭
10
12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
module Main where

import Control.Monad (forM_,when)
import Control.Monad.ST (ST,runST)
import Data.Array.ST (STUArray)
import Data.Array.IO (freeze,thaw,writeArray,getBounds,readArray,newArray,IOUArray)
import Data.Array.Unboxed (UArray,bounds,array)
import Data.Ix (inRange,range)
import Data.STRef (newSTRef,readSTRef,writeSTRef)

type Point = (Int,Int)
type Field = UArray Point Char
type STField s = STUArray s Point Char
type IOField = IOUArray Point Char

main = do
  n <- getInt
  m <- getInt
  let r = ((1,1),(n,m))
  field <- newArray r ' ' :: IO IOField
  forM_ [1..n] $ \x -> do
    forM_ [1..m] $ \y -> do
      c <- getChar
      writeArray field (x,y) c
    getChar
  f <- freeze field
  print . solve $ f
  where
    getInt :: IO Int
    getInt = fmap read $ getLine

dfs :: STField s -> Point -> ST s ()
dfs f p@(x,y) = do
  writeArray f p '.'
  b <- getBounds f
  forM_ r $ \p1 -> do
    when (p /= p1 && inRange b p1) $ do
      c <- readArray f p1
      when (isWater c) $ do
        dfs f p1
  where
    r = range ((x-1,y-1),(x+1,y+1))

solve :: Field -> Int
solve field = runST $ do
      f <- thaw field :: ST s (STField s)
      solve' f
        where
          solve' :: STField s -> ST s Int
          solve' f = do
            ref <- newSTRef 0
            forM_ r $ \p -> do
              c <- readArray f p
              when (isWater c) $ do
                dfs f p
                x <- readSTRef ref
                writeSTRef ref (x+1)
            readSTRef ref
          r = range $ bounds $ field

isWater :: Char -> Bool
isWater = (=='W')

-- サンプルデータ
ar :: Field
ar = array ((1,1),(2,2)) [((1,1), 'W'),((2,2), 'W')]

*1:1,1),(12,12

第0回アジャイルサムライ読書会 in 広島にでかけた。

勉強会レポートをかくblogになりつつあります。

私のソフトウェア工学におけるプロジェクトマネージメントの知識は基本的にはなくて、ソフトウェア開発技術者試験にうける際に参考書をぺらぺらしたことある程度です。

atndは以下です。
http://atnd.org/events/24779

今回はアジャイルサムライという書籍を教科書に勉強会を(たぶんある種のアジャイル的に)するために人がどれくらい集まるかとどのように行うかを相談しつつも、各々アジャイルについてどのように実践していて、どのような印象をもってるかを話したりしました。無知な私はなんとなく思ってること聞いてみたりしました。

今回参加者は7人ほどで第1回には20人程度を目指していて、どんな勉強会になるのかは、アジャイルサムライ読書会 島根道場のustreamが参考になると思います。http://www.ustream.tv/recorded/18855978

流れとしてはチーム分け、黙読、討論、発表という流れなので、本を読んでいることは必須にはならないようです。本をもってることは必須になってくると思います。
参加者の対象は、開発者のみならずシステム会社とやりとりを行う担当者になりそうな人になると思います。とはいっても、まったく関係ない人でも楽しめるんではないかと思います。

アジャイルの方法論をすべて実践するわけではなく、必要なものをとりいれていく場合、その根幹となる目的を理解することで、有効な方法として利用できるようになるという印象をうけました。アジャイルがなにもかもを解決するわけではないですが、楽しく仕事をしていくには有効な手段になりえるのではないでしょうか。


第1回は開催は2月の28日あたりになるのではないかと思います。
気になる方は一緒にサムライを目指しませんかねー。

wHiroshima.R #2に遊びにいってきた。

Rに特別な興味があったわけではないけど、どんな風にRを使うのか見たかったので遊びにいってきました。こうかくと興味がないように見えるかもしれませんが、興味はあります。ちなみに統計の知識はHead First Statisticsが絶賛読みかけです。

参加者には女性も多く、教育関係をしてる人が多いというコンピュータ系とは思えない感じでした。なので、しっかりといろんな人と交流すべきなんですが、あいも変わらず以下略です。


Rはプログラミング言語という認識だったのですが、徹底的に統計ソフトとして説明するのが印象的でした。Excelの変わりに使うという点に着眼してるのでプログラマが利用すると強力な道具となりそうです。プログラマだとそのまま汎用でなんとかしてしまいそうですが、そうでない人が使うように作られてると考えると楽々と目的が達成することができると予測できます。
言語としても面白いと思います。Lispの影響されてるように感じました。実行環境のイメージをそのまま保存したりするあたりEmacsを思いだします。

個人的にもエクセルの代わりとか、ライブラリの作成時にインターフェイスを参考に役立てたいです。

ドキュメントなどもリンクが貼られております。
http://atnd.org/events/24108

twitterハッシュタグ #HiRoshimaR なので興味ある方はその辺りを追うのもよいと思います。

以下なぐり書きなメモ。

第一部 R入門

明日はOsaka.R

R概論
  • 利点
    • 統計処理を目的とした言語
    • 要すると統計ソフト
    • 無償 (IBM SPSS Statistics 10万)
    • グラフィックが綺麗らしい
  • 欠点
    • 文字ベース
    • 多方面の知識が必要
  • 同類のアプリケーションが高価
  • Excelの処理が信頼できない
  • グラフィックが綺麗でない。

プログラマには統計知識以外関係ないなー。
統計処理したいときに使うのでもう欠点なんてなさそうですね。

基本操作

  • インストールはバイナリがある。
  • GentooのRはちょっとふるかった。
  • 統計ソフトとして使うなら無闇にアップデートしないほうがいい。
  • R Consoleはターミナルから起動するのに比べて多機能っぽい。
  • EmacsならESSというのがある。Rの前進となるSとかも対応してるっぽい
  • JavaScirptみたいに()をつけないと関数呼び出しにならない。
  • 困ったら help()
  • seekR R限定の検索サイト
関数と変数

100/3だと33.3で整数処理ではない。
100^1/2 -> (100^1)/2 -> 100/2 -> 50
100^(1/2) -> 10^(2*(1/20)) -> 10^1 -> 10
演算子の優先順位はどこやろ。

  • 動的型
  • ベクトル、行列があつかいやすそう。
  • c() concatenate combine のC(と予想されてる
    • どういうデータ構造で実装してるのか気になる。
  • 名前空間は関数も変数も同じっぽい?
    • 上書きしても呼び出しはできた。
  • 代入は右でも左でも。
  • 値がとれる関数は大抵ベクトルをうけとれる
  • データフレーム
    • 行列があって構造体のリストみたいに見えた
    • RDBのテーブルにみたてられそーな。
  • pipe('pbpate')
  • 端末からグラフかくとX11で描画されてショボーン
    • 端末からもQuartzでかけるといいな(PDF出力すれば関係ない
  • 箱ひげ図 -> Head First Satics p100に説明があった。
  • 検定って何
Rでグラフ再入門
  • pdf()で出力先をPDFファイルにできる。
  • dev.offすると元の出力先になる模様
  • ggplot2を使うと綺麗なグラフがかける。
グラフで学ぶ主効果・交互作用
  • 結論: 視覚化するとわかりやすい。
RStudio事始め
  • それEmacsでたぶんきっとできる気がする。それとanything
Rを用いた地震データの可視化
  • ggplot2はレイヤー構造がある。

関連書籍

Head Firstデータ解析 ―頭とからだで覚えるデータ解析の基本

Head Firstデータ解析 ―頭とからだで覚えるデータ解析の基本

Head First Statistics ―頭とからだで覚える統計の基本

Head First Statistics ―頭とからだで覚える統計の基本

Rによるやさしい統計学

Rによるやさしい統計学