お昼を外で食べようと外に出たら…昼からエライ寒い(泣)
いつも大体近所のパン屋さんの喫茶室でパンと紅茶で済まします。
今日はねこさんの結構好きなチーズパンが3つで100円とかで売ってます。大安売りです!で、いつものメニューにこれを3つ付けてもらって残りを持って帰ろう…と思ったら全部食べてしまいました。
仕方ないので帰りに6つ買って帰りました(おぃ)。
ねこさんのぐうたらなにちじょう
こんなことを書いた後、布団の中でぼんやり考えているうちにあることに気が付きました。この日はねこさんの人生の中でも比較的重要な日であったのではないかと。
つまり、明言してもらってはいないのだけど、ねこさんが今いる会社はもうダメなのであるということに明確なイメージを持つことができたという意味で。
8~11月に社内で遭遇した個人的な事態をきっかけに、たとえこの会社がまだまだ存続するとしても、ねこさんがもうだいぶじじいねこであることを鑑みると、キャリアパスについて考え直す最後のチャンスが今なのではないか、という思いを強く持ったりした訳で、今更この事態に気が付いたとしても思うところはそう変わりようがないということは、ねこさんにとっては幸いといえば幸いなのです。ボスにはそのことに結構気にかけて頂いていたので、いろいろ相談に乗ってもらっていたし、いくつかの引き合いを紹介して貰っていて、一応この先を選択できる立場にいることができているので、若干気持ちに余裕を持つことができますが、他の人たちはたぶんとっても大変なのだと思う。
たぶんこの何日かは気持ちの上での分水嶺にいるのだと思う。少しでも記憶に留めて置こう。
に行きたいなーとか言っていた訳で。「行ってきましたー」なんて言えたらいいなーとか思って、取りあえず悪足掻きで何処かに行けたりする余裕はないかなーと考えてみたのですが、どう考えてもありません orz ありがとうございましたー(泣)
今日もだうなーなねこさん。周りでとっても景気の悪い話ばかりが飛び交ってるし。先日に社長が無意味な話をするに至った理由についての噂を聞いた。どうも不可抗力だったらしい。いずれにしても仕方がない。仕方がないけど、気力も湧かないので仕事に必要な数値計算資料とか眺めて過ごす…これはこれで気力を消耗するけどね。
今日は先日に買ったROCCAPERCIATA SICILIA 2007。久しぶりのイタリアで白ですー。ブドウはINZOLIAとCHARDONNAYなのですー。最近は赤ばっかり飲んでいたので多分物足りないかなーと思っていたのですが、なかなかフレッシュな風味・比較的強い酸味で嫌味が全然なくとっても爽やかな飲み口で後に微かなピーナッツのような香ばしさが口に残るのです。これはこれでとっても美味しい。今度は試しに赤も買ってみよう!
試しにお酒Blogを気取ってみました。多分ねこさんには荷が重いので続きません。
ではおやすみなさーい。
昨日社内の日本語ネイティブでない方から相談されたのですが昨日は忙しくて全然対応できなくて、今日ちょっと触ってみたのですが以外に手強そうなので、取りあえず調査続行ということで保留。
代わりがなくなって慌てて買ったぱんつをようやっとおろした。
希望のサイズ(76cm)がなかったので仕方なく1サイズ下げ(73cm)たのですが、それなりにぴったり。ベルトが飾りとしてしか機能してません。太らなければ全然問題ないですね。布地も縫製もしっかりしていていい感じです。かなり気に入りました。
今日の夕食は誘われて早めにラーメン屋に行ってチャーハン定食大盛りを食べたのですが、会社に戻ったら、来年から兼務が決まってる職場の人達に誘われて向こうのボスの家でお酒を飲むことに。噂通りに料理が上手くて飲めや食えやで…先に食べたチャーハン定食大盛りが効いて死にそうです orz 美味しいのでつい食べてしまうのがいけないのですが。
お邪魔する前におつまみになるものを買っていったのですが、フザケ半分にハバネロのサルサを買っていったら…あまりの辛さにお酒をガブ飲みして一遍に酔いが回りこれまた大変なことに。ふざけて辛い物を食べるのは止した方が良さそうです orz
そうそう今年はじめてBeaujolais Nouveauを飲みました。これはこれで美味しいですねー。
それにしても全員が信じられない位濃ゆい人達ばかりで、そのハイブロウな話題には付いていくのも必死です。来年のねこさんは大丈夫でしょうか。
数学用語のHomogeneousを最近では日本語では「同次」と訳されていますが、昔は「斉次」と訳されていました。
それはいいのですが、今の今までねこさんは「斉次」を「さいじ」と読んでました orz
正しくは「せいじ」と読みます…そういわれてみれば学部一年のときにそういわれた記憶もあるような、ないような orz
たぶん、ねこさんは首相の事を笑えません orz
こちら様経由で。
お酒飲みながらふらふらしてて発見。実は今日(昨日?)ちょうどこんなテイストのソフトがあるといいな、と思って探していたのです。なんというグッドタイミング!
触ってみて、「Noteの大きさを自由に変えられるといいな」とか思うところはあるけど、 (1) そう多くの機能はいらない、(2) 単一のウィンドウに貼り付いているだけ、(3) グループ分けできそう、(4) 書き込んだ内容を全体俯瞰で眺めることができる、(5) データの再利用が容易そう、な付箋ソフトが欲しい!という欲求をそれなりに満たしてくれそうです。
て事でしばらく使ってみることにしますです。
少なくともねこさんが物心が付いた頃から母親はかなりの夜更かしさんで、昔から父親に良く怒られていたその影響か、ねこさんも昔から(少なくとも小学生位から)相当の夜更かしさんです。一応サラリーマンの癖して比較的最近まで4~5時まで起きてる事もざらだったりしました。起き続けることには結構の自信があったのですが、木~金曜日までには壊滅的に体力を消耗していて、週末はもう半病人状態だったりしてました。
そういった意味では今もあまり変わりませんが、最近歳の所為かもしくは老い先の短さを意識して残り人生でなしうる何かを生み出す効率を強く意識するようになりつつある所為か「若干早く寝るべきである」と思うようになりました。といったところで長年の習慣ですので沿う簡単には参らないわけで、なるべくそれまでやってる作業の手離れを良くする為の方法を模索してたりするわけですが、その一つとして、「これ以上は何やっても無駄だと思えるように『とっととお酒を飲んでしまう』メソッド」というのを考案したのですが、残念ながらねこさんはお酒を飲む欲求がかなり低いので、結局とっとと飲んだりはしなかったりしてるのです。それでも繰り返していると、どうも飲んで寝た方が目覚めが若干よろしい(かなり浅めだった睡眠が若干深くなる?)ようなので、飲むこと自体は習慣化できるようになってきました。
ということで、これからはなるべく遅くとも0時あたりになったらお酒を飲むことにしようかなと思います…とお酒を飲みながら考えました、まる。
そうそう、今週はグリューワインを飲んでいるのですが、なかなか良いです。クリスマスが近づくと割合入手が容易なのですが、シーズン後も継続的に飲める方法を考えておくと若干幸せになれそうな気がしています。
古いホールトマトの缶詰が気になっていたので、消費してしまおうと今日もパスタを。
久しぶりのトマトのパスタなので、やっぱりうまく行かない。っていうかトマトの缶詰が思いの外古いのが激しく気になる… orz ニンニクも切れていて、ジェノベーゼペーストを代わりに入れたらおいしくない。そもそもの具で入れたシーチキンの缶詰と小松菜が悪かったのか?
おなかを壊していなければ明日また作ってみる。
気がついたら穿けるパンツが一着しかなくなっててどう考えてもピンチ。昨日お出かけした時に買おうかと思ってたけど、裾直しをしないか直ぐにしてくれるところ以外では買うべきではない、ということで今日自宅の近所で買った。
後は野菜ジュースと小松菜。
夕べ寝る段になって、Note PCのACアダプタを忘れたことに気がついた。朝起きてどうしようか悩み、Linux Zaurus+Gaucheでどうにかすることも考えたけど、そんなマネが徹せる程の能力があるわけではない。結局重たいポートリプリケータを箱にまとめ2輪台車に縛り付けて出発、既に遅刻気味 orz 重たい荷物を引き摺っているので歩みも遅い。電車に乗っても座席取り競争に参加できるわけもなく、眠くてもずっと立ってるしかない orz
若干遅れたけど、まだ始まってなかったので助かった orz
少々イライラした精神状態で参加したためか、成果はそれなりな感じ。人の話もちゃんと頭に入らなくてごめんなさい orz
もっとちゃんとしなければ orz
今日少しHaskellを触っていて、「ファイル名のbasenameを取得する」コードを書こうとしばし悩んでました。んで書いたコードがこれ。
basename ext inname =
join "." \$ reverse \$
(\name ->
if (head name)==ext then tail name
else name) \$ reverse \$ split '.' \$ inname
"."をデリミタにしてリストに分割して逆順にして、先頭に拡張子が入っているかを確認したうえで先頭を削除して、正順に戻して"."を挟んで文字列に戻してます。んでこれを書くのに使っている補助関数が
split :: Char -> String -> [String]
split _ "" = [""]
split delim (c:cs)
| c == delim = "" : remains
| otherwise = (c: head remains) : tail remains
where
remains = split delim cs
join :: String -> [String] -> String
join _ [] = ""
join delim (c:cs) = c ++ delim ++ (join delim cs)
でもこんなの既に用意されているような気がしてなりません。
野外活動の後、皆で暖かいものを食べに行こうという話になって、リンガーハットでちゃんぽんを食べることに。ねこさんはどんだけ食べてるんだか orz
帰りにヨーグルトと靴下を買った。歯磨きと歯ブラシを買いそびれたけど。
以前に作った実数値を読むパーサですが、これを使ってcairoで絵を描かせてみたら、小数点の直ぐ下に"0"が並んでいると無視される酷いバグが! orz
realNum :: Parser Double
realNum = do sign <- option 1 (do s <- oneOf "+-"
return \$ if s=='-' then -1 else 1)
int <- option 0 cntNum
option '.' (char '.')
zeros <- many (char '0')
frac <- option 0 cntNum
exp <- option 0 (do oneOf "eEdD"
e <- intNum
return \$ e)
return \$ (fromIntegral sign) *
(fromIntegral int +
(toFrac (fromIntegral frac) (length zeros))) *
(10**(fromIntegral exp))
where
toFrac n m = if n<1 then
if m<=0 then n
else toFrac (n/10) (m-1)
else toFrac (n/10) m
cntNum :: Parser Int
cntNum = do n <- many1 digit
return \$ (read n :: Int)
intNum :: Parser Int
intNum = do sign <- option 1 (do s <- oneOf "+-"
return \$ if s=='-' then -1 else 1)
num <- many digit
return \$ sign * (read num)
小数点直下の"0"の数を数えて、その分だけ小数点以下の数を10で割るように修正。これでいいはず。やっぱりデータを視覚化すると一発だな orz
今日はねこさんとしては結構冒険をしてみました!
パスタを作るときにオリーブオイルの代わりにごま油を使ってみたらどうだろう?…という思い付きを解決すべく、今日はごま油を使ってペペロンチーノを作ってみました!材料は昨日とほぼ一緒(万願寺唐辛子と三度豆)です。
結論を言うと、ごま油を使うこと自体は全然悪くなさそうです!ただ、使用したごま油はハッキリ言って不味過ぎでした。それは判っていたので、大量に消費できそうなパスタ料理を作ることを思いついたのですが。美味しいごま油を買いたいですが、この不味いごま油を使わないと新しいのを買えない貧乏性なねこさん。あと、昨日がしょっぱ過ぎたので塩を減らしたのですが、それでもまだしょっぱかった…昨日はどんだけしょっぱかったのか orz
今日もへとへとなねこさんです。今晩はゆっくり寝ます。明日は会社のソフトボール大会で気合の入っている人もいるのですが、ねこさんはへとへとなので家でゆっくりしてます。
それより明日は雨ではないのかなー?
久しぶりにちょっとだけHaskellをいじってみてました…といっても本当に久しぶりだったのでどうしていいのかも思い出すのに時間がかかってしまっていて、ほとんど何もできなかったりする訳なのですが orz
そうそう、ちょっと前にHaskell触っててこんなことぼやいたりしていたのですが、ほとんど独り言な質問にお答えを頂いてしまいましたー ヽ(´ー`)ノ 独り言でも何でも言ってみるもんですねー。
printf は
http://www.haskell.org/ghc/dist/current/docs/libraries/base/Text-Printf.html
ってのがありますが、
http://www.haskell.org/ghc/dist/current/docs/libraries/base/Numeric.html
のほうがよいかも。
ありがとうございます m( _ _ )m ねこさんもText.Printfは存じてはいたのですが、(IO a)しか返せないのかとばかり思っていました。リンク先のドキュメント読んでもどうやったらString型で返せるのか判らない orz … それ以前にHaskell関連の仕様書の表現に全然慣れなくて、意味を読み解けずにえらく難儀してます orz よくわからないので、力任せにprintfの返り値がStringだと思いこんだコードを書いてみたら、ちゃんと意図通りに動いていて驚きました↓。
(\\str->(read str :: Double)*2) (printf "%f" 2.0)
ねこさん的にはこれで十分な感じではありますが、確かにprintfはExceptionエラーを引き起こす可能性があるので気持ち悪いかもしれません。なのでshowFFloat, showEFloat, showGFloatを使う方がいいようですね。ねこさんはこれらの関数を知らなかったので、そのうち似たようなものを作ろうかと思っていました orz よけいな車輪の再発明しなくて済んでよかったよかった。あと、floatToDigitsも細かい事を自分でやろうと思った時には何気に便利そうですね。便利な情報をありがとうございました。
そしてなにより、
Show については、
data Point = Point {x :: Double, y :: Double} deriving (Eq,Show)
とかやるとよいです。
たしかにどっかでこういうのを見た記憶が。試してみましたら…すごい! 確かにこれくらいだいたい自明なんだからどうにかして!とか思ったりしてましたが、どうにかしてくれるんですねー。これは便利ですね。
匿名さん、大変勉強になりました!どうもありがとうございました!
今日中に2つのプレゼン資料を作成しなければならないのですが、必要に迫られてPDFCreatorを使ってみました。
正直微妙な使い心地ですが、任意のアプリケーションの印刷機能からイメージファイルの作成ができるのはそれなりに便利です。一旦PDFに変換してからイメージファイルに変換する方法はいろいろありますが、ごちゃごちゃならなくてもできるのがいいところですね。出力されるフォーマットの指定が処理の一番最後である辺りから、省力化になっているのかと問われれば微妙な使い心地ですが。
ねこさんが某掲示板とかを見るのに使っているrep2のバージョンがかなり古いせいか、最近書き込みができなくなっているので、忙しいのにもかかわらずついアップデートしてしまおうと思った次第。
rep2はTigerが入っているCubeで動かしているので、ここのdmgなインストーラでインストールして…動きません orz
よく見るとPHP 5.2.3以降でないと動かないらしい…ということでPHPもアップデート。もはや激しくめんどうな気分になっているのですがこのままにしても掲示板が見れるようになるわけではないので、一番楽そうな手段を…ということでMarc Liyanageさんのentropy-php-5.2.4をインストール。apacheを再起動…しません orz 単に元々のPHP4の設定をそのままにしていただけなのでhttpd.confの該当箇所をコメントアウトして再起動…apacheもrep2も動きました。
「PHP 5.2.6以降がお勧めですよー」と怒られている気がしますが、また気が向くまで無視してやり過ごすことに致しますー orz
会社では今日から3日間、年に一度のお祭りです。人がいっぱい来ます(今年は何故かちょっと少ないみたいですが)。おかげで社食でごはんが食べられません。ま、それはいいのですが。
例年はお祭りの準備を担当して本番は勘弁してもらっていた(あんまり客前に出していい行儀の良いねこではないので)ので今年もそのつもりでいたのですが、人手が足らないからと明日はねこの手を差し出さなければならなくなりました。サラリーマンの癖に背広持ってないねこさんはピンチですw
て言いますか、明日までに準備しなければならない資料がまだできてない方がもっとピンチなのですが orz
ていうことで今日のHaskellは中止 orz
世間的には"Jurassic Park"や"ER"の人だと思うのですが、ねこさんにとっては"The Andromeda Strain"の人な訳でして。ほかにも"Westworld"とか"Runaway(未来警察)"などのB級SF映画の監督(褒め言葉)だったことは、少なくとねこさんの周りではあまり知られていないようです。
特にコンピュータでの生体認証の話題を目にするたびに、若いころにTVで見た未来警察の1シーンがトラウマの様に思い出されてしまいます。20年以上も前に作られた映画であることにある意味驚きを禁じえません。
安らかにお休み下さい。
ねこさんは数値データをテキストファイルでやり取りすることが多いのですが、Haskellでの実数データの読み込みは互換性の観点からすると都合がよろしくありません。read関数だけでなくParsecにもfloatというパーサが用意されているらしいのですが、これでは使い勝手が良くないのです。こちらにfloatパーサを使いつつ改善したパーサが紹介されていますが、Fortranの出力形式にも対応して欲しいねこさんには不満が残ります。
仕方が無いのでParsecの練習を兼ねて自前でパーサを組んでみることにしました。
realNum :: Parser Double
realNum = do sign <- option 1 (do s <- oneOf "+-"
return \$ if s=='-' then -1 else 1)
int <- option 0 cntNum
option '.' (char '.')
frac <- option 0 cntNum
exp <- option 0 (do oneOf "eEdD"
e <- intNum
return \$ e)
return \$ (fromIntegral sign) *
(fromIntegral int + toFrac (fromIntegral frac)) *
(10**(fromIntegral exp))
where
toFrac n = if n<1 then n
else toFrac \$ n/10
cntNum :: Parser Int
cntNum = do n <- many1 digit
return \$ (read n :: Int)
intNum :: Parser Int
intNum = do sign <- option 1 (do s <- oneOf "+-"
return \$ if s=='-' then -1 else 1)
num <- many digit
return \$ sign * (read num)
初めて書いた割には結構それなりに動いているようです。よかった。
話は変わりますが、代数的データ型を使ってコードを書いているとデバッグ時に「(Show ~)のインスタンスがないよー?」と怒られてちょっと悲しいのですが、これを解決するには当然(Show ~)のインスタンスを定義すればいいと。
data PointType = Point { x :: Double, y :: Double }
instance Show PointType where
show (Point x y) = "Point " ++ (show x) ++ " " ++ (show y)
これでデバッグしやすくなりました。
ところで、Haskellにはsprintfに相当する関数はないのでしょうか?とりあえずは実数の出力形式を細かく指定できればねこさんには十分なのですが。
扱いたいデータを表現するために新しいデータ型を定義して、これのリストにデータを入れていけばいいのだな…とか考えて触っていたのですが、リストの要素を順番に印字する処理で考え込んでしまった orz
なるほど入出力は難しいのかー…などと思ったのですが、考えれば大したことはなくて、>>を使って
printList [] = putStr ""
printList (x:xs) = print x >> printList xs
でいいのだった。こんなので難しいなんていっていたら叱られる orz
さっそくParsecを使ってみようかと…思いましたが、流石に無理でした orz たぶん使うだけなら本当にすぐだとは思うのですが「何をするのか?」の準備をしないことには始まりません。
「仕事で使っているデータファイルを視覚化するプログラム」を作ることを目指します。このデータフォーマットは秘密の形式をしているので公開できませんw そのうち何か考えます。
あとはここを見ながらgtk2hsのcairoでPDFを出力するコードを書いてみるです。
module Main where
import Graphics.Rendering.Cairo
main :: IO ()
main =
let
w = 720
h = 720
in
withPDFSurface "text.pdf" w h \$ \surf -> renderWith surf \$ do
setSourceRGB 1 1 1
paint
setSourceRGB 0 0 0
moveTo 0 0
lineTo w h
moveTo w 0
lineTo 0 h
setLineWidth (0.1 * (h + w))
stroke
rectangle 0 0 (0.5 * w) (0.5 * h)
setSourceRGBA 1 0 0 0.8
fill
rectangle 0 (0.5 * h) (0.5 * w) (0.5 * h)
setSourceRGBA 0 1 0 0.6
fill
rectangle (0.5 * w) 0 (0.5 * w) (0.5 * h)
setSourceRGBA 0 0 1 0.4
fill
今日はここまでー。