2013年8月16日金曜日

朝霧ジャンボリーゴルフクラブでゴルフをやってやりましたよ

久しぶりのゴルフで、マネージャポイント下げました


「8月の暑い最中ゴルフなんか出きるかよっ!」って思ってる皆さんこんにちは。
出きるんですよ、朝霧なら。

今回は会社のゴルフ仲間と、仲間といっても3人デスが... 久しぶりのゴルフを楽しんできました。天気もよく、富士山の近くなのでウダルような暑さも感じられず、この時期にしては最高のコンディションでプレイしてきました。

AJGCのツツジ?文字がきらめいています。




朝霧ゴルフカントリークラブとは


 第13回世界ジャンボリー開催地

1971年8月に日本で初めての第13回世界ジャンボリーが開催され、何と参加国は87ヶ国、参加人数は23758人と大規模なイベントだったそうです。各国のパレード、キャンプファイヤー、富士登山・ワイドゲーム(これはなにか不明)などのイベントが盛大に行われて、海を越えたスカウトの皆さんが親睦を深めたそうです。
8月7日には、当時の皇太子殿下(現天皇陛下)と美智子妃殿下(皇后殿下)が会場にお越しになりスカウトの皆さんを励まされたそうです。

世界ジャンボリーとは

ボーイスカウトの創始者である英国のベーテン・パウエル卿が青少年の訓育理念を確認するため1907年にイギリス沿岸のウラウンシー島で開催した実験キャンプを記念して生まれたもです。「ジャンボリー」の語源は定かではないのですがスカウトにとっては日頃の訓練を示す場であり、言い換えれば「世界平和の道標となる祭典」といえるでしょう。

朝霧ジャンボリークラブは、この大会を記念して命名され、1975年4月29日に会場となりました。

wiki: ベーテン・パウエル卿

貴重品ロッカーの操作方法を間違える

お財布などを保管しておく貴重品ロッカーですがユーザーインターフェースがあまりよくないので注意してください。ちなみに僕達3人はお財布を保管するのに同じ操作ミスをしていました。IT系の私たちが操作を間違えているようだと、相当数の人が同じ操作ミスをしているんじゃないかとおもいます。

その操作ミスとは
  •  バーコードの読み込み装置の位置(バーコードをかざす)を間違える
  • ランプをみる位置によって使用中(点灯)、未使用中(消灯)が分かりにくい
間違える順序も概ね同じで、まず、登録のためのバーコード読込をキーボードの上部でかざしてしまい(キーボードの設置位置が凹んでいるため、無意識にその奥が読み込み機器があると勝手に思い込んでしまう)、機械の反応が無い状態でしばらく悩む。それから、バーコードtrapをクリアした直後に、「使用中」の金庫を選択してしまう。本来は「未使用」のロッカー番号を選択しなければならい。

これによって、ランプの目視確認のために、ランプの正面で発光状態を確認しにいくという、体の状態を左右、上下運動を行って、足腰に負担をかけてしまう。これはゴルフのスコアを下げる事になるので止めた方がいい。

改善策としては、バーコードを当てる場所をもう少し目立つようにし、メッセージに早い段階に目に入るようにUIを修正する。
ランプに関しては、LEDなどもう少し発行し、省エネなものに変えることと、赤いプラスチックの反射板をどこの角度でも見分けられるようなものに変更するなどの処置が必要と思われる。

画像をあげて置きますので、皆さん使用する事があれば、注意してください。



そしてゴルフ


コース

コースは「富士コース」「駿河コース」「甲斐コース」の三つのコースがあり、本日私たちは「富士コース」と「甲斐コース」でした。幅が広く、右へ左への私としては安心して思いっきりドライバーを使えるような広々としたコースでした。フェアーウエイ、ラフ、グリーンもすごく手入れされていて贅沢な感じです。



こいつはあの憎き宿敵、弊社マネージャーN氏、赤い彗星のシャー好きのくせに何で今日はグフ色のパンツなのかは突っ込めなかった。
奴とは最終ホールで1打差の攻防を繰り広げたが、最終的に私が撃破されました。まずぃっ! (アゴなしゲンとオレ物語風に)

wiki: アゴなしゲンとオレ物語


青ズボン、ムカッ、ナイチュ ショット! 彼の捨て台詞が、

「俺に勝ったらマネージャーポイントをあげてやるっ!」、なな、なんだって!!!! ざけんな!

結果

もうぐちゃぐちゃです、無残にも破れました、マネージャポイントゲットならず...見ていろよっ!、次はちゃんと練習してリベンジしてやる。

真夏のゴルフも気持ちよく楽しいです、いい運動にもなりますし、運動嫌いのエンジニアもみんなでワイワイとゴルフしながらだったら楽しめるかもよ。


 最後に、ゴルフは、できれば乗用車で行った方がいいぞ、玄関先の人がちょっと対応に困るのと(困っているように確実に見える)、止める場所がかなり遠くになる(高級車の横とか前とか、後ろとか色々問題が...)。

まぁ、それでも車が無いのでこれで行きますが、また近いうちにゴルフやりましょう。

場所


大きな地図で見る

2013年8月14日水曜日

haskellでmemcachedとお友達になれる

haskellでmemcachedにアクセスする

ここ最近pythonなどでmemcacheを触ることが多かったので、「haskellにはあるのかな?」と思い探して見たところ、
githubのbeketaさんのリポジトリにhaskell-memcachedが公開されていましたのでforkさせて頂き、Gentoo用のebuildを作らさせていただきました。
ありがとうございました。


haskell-memcacheインストール

自分の使用しているghcが7.6.3で現行のバージョンが動かなかったため、ちょっとcabalファイルにパッチを当てさせてもらいました。

インストールはGentooでしたら、
karky7 ~ # emerge -pv dev-haskell/memcached
[ebuild  N    ~] dev-haskell/memcached-9999:0/9999::karky7  USE="doc hscolour -profile" 0 kB
karky7 ~ #

直接git cloneでしたら、
cuomo@karky7 ~/blogs $ git clone https://github.com/karky7/haskell-memcached.git
Cloning into 'haskell-memcached'...
remote: Counting objects: 111, done.
remote: Compressing objects: 100% (58/58), done.
remote: Total 111 (delta 55), reused 105 (delta 51)
Receiving objects: 100% (111/111), 17.94 KiB, done.
Resolving deltas: 100% (55/55), done.
cuomo@karky7 ~/blogs $ cd haskell-memcached/
cuomo@karky7 ~/blogs/haskell-memcached $ runhaskell Setup.hs install
でいくとは思われますが、やった事はございません。

クライアントコードを書いてみる

インストールが完了したら、実際にアクセスできるか試します、テストコードを見つつ、サンプルコードを書いてみました。

処理内容は以下の3つ
  • memcachedの設定値の取得
  • Intの値の保存と取得
  • ユーザー定義型の保存と取得
を単純に実行しています

import qualified Network.Memcache as M
import Network.Memcache.Protocol as P
import Network.Memcache.Serializable(Serializable(..))
import Data.ByteString.Char8 as C (pack, unpack, words)

data User = User {
  getUsername :: String,
  getAge :: Int
} deriving Show

instance Serializable User where
  serialize (User name age) = pack $ name ++ " " ++ show(age::Int)
  deserialize str = case C.words str of
    (un:ag:[]) -> Just (User (unpack $ un) (read (unpack ag)))
    _          -> Nothing

main :: IO ()
main = do
  memcache <- P.connect "localhost" 11211
  -- Memcacheステータス表示
  putStrLn "------------------"
  putStrLn "Memcacheステータス"
  putStrLn "------------------"
  status <- stats memcache
  _ <- mapM (\tp -> do
                let name = fst tp
                    val  = snd tp
                putStr $ name ++ " = " ++ val ++ "\n") status
  putStrLn ""

  -- Int値を保存
  let foo = 8888 :: Int
  putStr "Setting foo => 3: ... " >> M.set memcache "foo" foo >>= putResult
  -- Int値を取得
  foo' <- M.get memcache "foo"
  case foo' of
    Nothing -> putStrLn "Retrieving foo: expired from cache?"
    Just v  -> putStrLn ("Cached value for foo is " ++ show (v::Int) ++ ".")

  -- ユーザー定義型を保存
  let ando = User "#Ando" 29
  putStr "#A to memcache ... " >> M.set memcache "ando" ando >>= putResult
  -- ユーザー定義型を取得
  ando' <- M.get memcache "ando"
  case ando' of
    Nothing -> putStrLn "#Aは逝ってしまいました"
    Just v  -> putStrLn $ "#A 見っけ お名前は " ++ getUsername v ++ " お年は " ++ show (getAge v)
  P.disconnect memcache

putResult :: Bool -> IO()
putResult r = case r of
  True -> putStrLn "成功じゃないの"
  _    -> putStrLn "それそれ..."

memcachedへ接続してみる

まずmemcachedデーモンを起動しましてサンプルコードの実行
karky7 ~ # /etc/init.d/memcached start
 * Starting memcached ...
 * You should edit /etc/conf.d/memcached and specify an address to listen on.
 * Listening on any address (check your firewall!)                [ ok ]
karky7 ~ #

cuomo@karky7 ~ $ runhaskell memcache_client.hs
------------------
Memcacheステータス
------------------
pid = 7704
uptime = 179
time = 1376452659
version = 1.4.5
pointer_size = 64
rusage_user = 0.016000
rusage_system = 0.000000
curr_connections = 10
total_connections = 11
connection_structures = 11
cmd_get = 0
cmd_set = 0
cmd_flush = 0
get_hits = 0
get_misses = 0
delete_misses = 0
delete_hits = 0
incr_misses = 0
incr_hits = 0
decr_misses = 0
decr_hits = 0
cas_misses = 0
cas_hits = 0
cas_badval = 0
auth_cmds = 0
auth_errors = 0
bytes_read = 7
bytes_written = 0
limit_maxbytes = 67108864
accepting_conns = 1
listen_disabled_num = 0
threads = 4
conn_yields = 0
bytes = 0
curr_items = 0
total_items = 0
evictions = 0
reclaimed = 0

Setting foo => 3: ... 成功じゃないの
Cached value for foo is 8888.
#A to memcache ... 成功じゃないの
#A 見っけ お名前は #Ando お年は 29
cuomo@karky7 ~/Code/haskell/memcached $

memcached付属のコマンドツールでメモリをdumpしてみる

cuomo@karky7 ~ $ memcached-tool localhost dump
Dumping memcache contents
  Number of buckets: 1
  Number of items  : 2
Dumping bucket 1 - 2 total items
add foo 0 1376452480 4
8888
add ando 0 1376452480 8
#Ando 29
cuomo@karky7 ~ $

#A君を突っ込んで、出したりと出きるようになりました、User型みたいのは別として、シリアライズ方法がshowとreadで概ねhaskell用になっているのでjsonとかで保存すれば汎用性が上がっていいかもしれません。
しかし、haskellは書いてて楽しい