サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
ruicc.hatenablog.jp
エンジニアで周囲だけでも睡眠に困っている人が予想以上に観測できるので、僕自身が行った試行錯誤について書いておこうと思う。 僕は不眠症というわけではないが夜に眠ることがうまく出来ず、長い間(10年以上)試行錯誤を続けてきた。 つい三週間前は0時に布団に入ったが6時まで眠ることはできなかった。非常につらい。 それが今では夜自然に眠れるようになった。それが二週間以上続いている。二週間も続いたらこれはもう勝ちだろ、ということでエントリを書くことにした。 当たり前だが僕は臨床医でもなんでもなく、単なるソフトウェアエンジニアなので以下の体験はサンプル数N=1である。疑って読んでほしい。 世界に溢れる「眠れるようになった」という体験談 さて夜に眠るということは意外と難しい。というか難しい。眠りたいときにいくら気合を入れても眠れないのだ。普段の生活習慣がものを言う。そんなの難しいに決まっている。 厄介なの
ブログに書くという行為を忘れがちな昨今。 9/13に関数プログラミング交流会があったので発表してきました。 http://connpass.com/event/16193/ 並行プログラミングと継続モナド from Kousuke Ruichi 関数プログラミングという題目のため、参加者はかなり広いと思われました。そのためわかり易い話題とわかり易い遷移を心がけつつコアな人にも何か持って帰るものがあるといいなーと作成しました。まあしかし発表時間の短さ故にかなり早口で喋ったため、置いて行かれたように感じた方もいたようです... twitterで質問がありましたが、スタックオーバーフローとかネタとしてはもう少しあったのですが流石に詰まりすぎかなと断念。並行プログラミングネタをもっと前面に押し出さないと題名負けかなーと思ったけどこれも色々あって断念。並行プログラミング関係なく継続モナドが便利なだけ
:set whichwrap=b,s,h,l,<,>,[,],~左右のカーソル移動において、行を跨いで移動出来る様にするオプション。 行頭で左を押すと前行末に跳ぶ様に、行末で右を押すと次行頭に跳ぶようにする。 エディタとして当たり前の機能かもしれないが、vi/vimは初期状態ではそれが出来ない。まあそんなに必要ないものだし。けど出来ないとたまに苛つくから設定している。 フルに指定している俺は邪道だったりするのだろうか。 それはともかくこのオプション、どうやら.vimrcにおいて :set [no]compatible以降に書かないと有効にならないようだ。今までずっと謎だった。 あ、普通に :help whichwrap に書いてあった。
函数型なんたらの集い 2014 in Tokyo - connpass 最近私的にモナドが非常に熱いのでそれについて話してきました。 しかし資料としては要改善点が多いですね... 図入れるとか具体的なコード入れるとか色々出来たのですけど。 Engineer-uses-monads from Ruicc Rail 例 具体例をスライドに入れられなかったため、trivialな例を示す。 おおまかな雰囲気は感じられると思う。 明記してないけど、純粋関数は任意のモナド内でモナドとは関係なく使えます。 -- Derivingに必要 {-# LANGUAGE GeneralizedNewtypeDeriving #-} import Control.Applicative (Applicative) import Control.Monad.IO.Class (liftIO, MonadIO) imp
2015-07-03追記: 現在yesodを使いたい場合は、stackを導入するのが適切だと思います。 https://github.com/commercialhaskell/stack cabal-install-1.18からsandbox機能が付き便利になったわけだが、いまいちyesodでsandbox機能をスマートに使う方法が見つからなかったのでメモ(というエントリを書いてからその方法が見つかると言うね。まあいいのだけど)。 なおGHC7.6.3, yesod-platform-1.2.7.1を前提としている。 どうでもいいがyesod-platform-1.2.6はyesod-bin-1.2.6で生成したファイル群で使えない悲しさがあった。そこバージョン合わせている訳じゃないのか。 yesod-platfromとは複雑な依存関係を持つyesodにおいてcabal-hellを回避す
Haskell Advent Calendar 2013 9日目です。 概要 SetはFunctor。 Categorical Programming for Data Types with Restricted Parametricity rmonad: Restricted monad library なぜSetはFunctorになっていないのか Setを要素が重複しないデータ構造とします。Setはその性質のため、要素には比較出来ることが要求されます。Haskellで言うとEq制約です。まあ本来重複しないことだけを要求するならEq制約だけでいいはずですが、SetがOrd制約を要求しているのは効率の良い実装にするためでしょう。containersパッケージのData.Setはバランス二分木で実装されています。 本来SetはFunctorにすることが出来るはずです。しかし現状(GHC7.6
前書いたけど一応。 gnomeの場合。 gdmてのはgnome desktop managerの略。 X停止 $ sudo /etc/init.d/gdm stop X開始 $ sudo /etc/init.d/gdm start KDEの場合 kdmはKDE desktop managerの略。 X停止 $ sudo /etc/init.d/kdm stop X開始 $ sudo /etc/init.d/kdm start X開始は $ startx でも同じなんかな。違いがわからん。 X停止コマンドは Ctrl+Alt+BS でも同じ? コンソール変更 Ctrl+Alt+F1 Ctrl+Alt+F2 Ctrl+Alt+F3 Ctrl+Alt+F4 Ctrl+Alt+F5 Ctrl+Alt+F6 Ctrl+Alt+F7 (X server起動場所) F1-F6の違いは何かあるんかな。実行
厄介なのはjoinだ。joinは以下のような型を持つ。 join :: Monad m => m (m a) -> m a 読み下してみよう。「joinは、二重にネストしたモナド(m (m a))をとり、一つに潰して返す(m a)」。 モナドとは、このjoinによって決まる。 モナドの定義でreturn, (>>=)の対がよく出てくるが、(>>=)の代わりにjoinを使ってもいい。 (>>=)のjoinを用いた定義は以下だ。 (>>=) :: Monad m => m a -> (a -> m b) -> m b m >>= f = join $ fmap f m これも読んでみよう。「bind(>>=)は、(fmap f m)で生成されたネストされたモナド(m (m b))を、joinで潰した結果を返す」 つまりモナドの性質とは、このjoinの、モナドの潰し方によって決まる。 つまりモナ
ゆるふわHaskell勉強会にてゆるふわなLTしてきました。 ゆるふわすぎましたね、Freeのあたりとか。 ゆるふわなHaskell話 from Ruicc Rail
http://d.hatena.ne.jp/perlcodesample/20130227/1361928810 Haskellが好きな人です。 普段0.4M行くらいのPHPコードなんとかしてます。 Haskellerへ 変な事言ってないかチェックお願いします。 動的型付言語のトレードオフ 変数に型が無い事のトレードオフが理解出来ていないと思われる。 件のエントリを見ると、変数に型が付いていない方が圧倒的に有利に見える。そうだったら世の中のソフトウェアは全て動的型付言語を用いるはずだ、そうなっていないのは静的型付言語にもメリットがあるからだ、という論を僕はここではしたくはない。 彼が書いている部分でそのような論を用いている箇所が有る。大規模サイトで実際に動的型付言語を用いている、だから十分に使える(はずだ)という。ここは彼の自分の論(型が付いていない方が有利)から発生していない、少しずるい
Haskell Advent Calendar 2012二日目です。 一日目から飛ばしてきましたね。負けずに頑張らなければなりませんね。 QuasiQuotes書くときにdataToExpQ便利ですよね。 便利だけどこんさんが何言っているかわかんねえ!という人向けの記事です。 間違ってたらツッコミください。 (以下ではGHC7.4.1を用いています) 何故QuasiQuotesなのか 僕らエンジニアが扱うものは基本何らかのシンタックスに則って書かれています。 つまりHaskellerはConfigファイルやSQL文字列、もしくはある言語ファイルなどを目の前にして、 「このファイルパーズして"Haskellのデータ構造"として欲しいなあ」とつぶやく訳です。 文字列から値生成ならまだランタイムに出来ますが、型の生成や型クラスの生成などとなるとコンパイルタイムにやるしかありません。 というわけで
repa触ってみたらGPUも触ってみたくなったので触りました。 ライフゲームを略。 次の時刻の盤面を計算する部分です。ドキュメントやサンプルを見ると、どうやらstencilを使うと良いようです。 step :: Board -> Acc Board step arr = Acc.stencil stencil2D (Constant 0) . Acc.use $ arr cellとその周囲cellから次の時刻の値を計算出来るという、流体シミュレーションのために有るような関数ですね。 その際、境界条件をどうするかが第二引数です。 data Boundary a = Clamp | Mirror | Wrap | Constant a 最外値がその外もそのまま続いているかのように扱うのがClamp、範囲外の値が反転しているものがMirror、境界外が反対側と繋がっているものがWrap、定数値が
Haskell Advent Calendar2011 2日目です。 もう42時になってしまいました...さすがに遅いですね。 Haskellと言えば型クラス オブジェクト指向のクラスとHaskellの型クラスは違いますよ的な説明は見ますがどう違うか比べた情報が無い オブジェクト指向知っている人からの理解を簡単にすればHaskell理解する人が増えますね! という目論見の元にスライドを作りましたが、ユーザ視点が足りずに混乱させてしまったかも知れません。 Programming haskell chapter10 View more presentations from Ruicc Rail Haskell Advent Calendar明日はid:melponさんです。
本を適当に開いて読んでみるということをたまにする。 Real World Haskell(RWH)のデータ構造の章。 ghci> 3 * 2 + 4 10 ghci> prettyShow $ 3 * 2 + 4 "3 * 2 + 4" こんな感じのものが書いてあった訳だ。 僕には何が起こっているか全然分からなくて、一体どんな言語拡張使ってるんだこの野郎と思いつつその章をざっと見たけど何も説明見つからなかったりして混乱。 結論を言えば2,3,4はよく知っている数値リテラルで、(+)も(*)もよく知ったNumのメソッドだった。僕が思っていたより色々出来たというだけで。 僕が数値リテラル見たときだけ何故かCやPHPといったあちらの言語を想定してしまっていたことが原因だった。 加えてHaskellでデータ構造を作るには、値コンストラクタ(もしくはそれ相当の関数)が必要だと思っていたためだった。
先にこちらをどうぞ。Template Haskell入門 - think and error QuasiQuotesで簡単なものを作りましょう。 ここではヒアドキュメントを作ろうと思います。Haskellにはヒアドキュメントがないですから。 参考: こんさんのあれ:準クォートでもてかわゆるふわメタプログラミング! - はてな使ったら負けだと思っている deriving Haskell - haskell TemplateHaskellのあれ 前提: GHC7.2.1 そもそもTemplateHaskellで何が出来るのか 「既知の情報」と「ルール」をもとにHaskellのコードを生成するわけですね。 Haskellのコードで直接実現出来ないことや、似たようなコードを大量に書きたい時など便利そうです。 例えば可変引数関数(QuasiQuotesの例としてprintfが挙げられていますね)や、
関数合成てのは f(g(x))こんなやつです。でもたまには次のようにやりたくなるわけですね。 h(x,y) = f(g(x,y)) Haskellでの関数合成は(.)です。これで上記をやろうとします。 -- 1引数関数 f x = x + 2 -- 2引数関数 g x y = x * y -- fとgを合成しようとする h = f . g -- hに2引数渡そうとする main = print $ h 3 5 -- => 17? これは型エラーがでます。 No instance for (Num (a0 -> a0)) arising from a use of `f' Possible fix: add an instance declaration for (Num (a0 -> a0)) In the first argument of `(.)', namely `f' In th
Template Haskell(以下TH)超入門です。 まあ入門するのは僕ですが。 Haskellの易しいエントリがあまり見あたらないため、僕が書いていくことにしようとか考えたり。 続き よかったらこちらもどうぞ。 続・Template Haskell入門 -- QuasiQuotes編 - think and error 前提 GHC7.0.2で。 GHC7.0.1からQuasiQuotesの記法が一部変更したようです。 ..と下書きを書いて既に数ヶ月が経とうとしています。 実はこの記事はHIMA' #6に参加したことをきっかけとして書いています。 partake.in 7/24(Sun)にはスタートHaskellが開かれます! http://atnd.org/events/17468 ....それも終わって既に2ヶ月経ってますね。やる気ないですね僕。 しかしHaskellは熱いですね
MSN ニュース はてなブックマークを見るとみんな口を揃えてバーナム効果、バーナム効果て。皆がバーナム効果大好きなことはよくわかったよ。 でもたまにはバーナム暗号のことも思い出してあげてください。 バーナム暗号 - Wikipedia 完全暗号ですよ。解読者がどんなスペックのスパコンを持っていたとしても、鍵が無いと復元不可能なわけですよ。すごいですね。仕組みも「平文と鍵をXORするだけ」ですからね。よく思いついたよねこれ。 ちなみに量子暗号は、離れている2者間の暗号鍵の共有にのみQuantum的なものを用いており、実際の通信の安全性はこのバーナム暗号に基づいています。 まあそれはともかく、性格診断です。あの性格診断が正しいと仮定しましょう。 そこから導き出せることは何でしょうか。もちろん、「色彩パターンの好みと自己認識の相関」を表していますね。まあ心理学のジャーゴンとか知らんので違うかもし
この記事はHaskell Advent Calendarのために書いたものです。 先ずは自己紹介でも。 大学の専門は機械でした。制御システム工学。まあ情報(工学|科学)科ではないということです。仕事で使っている言語はPHP。実用主義的な言語ですね。Haskellとは正反対です。 Haskellは私的に使うために習得しているところ。出来ればHaskellでプロトタイプ作成くらいはさくっと出来るようにはしたい。 ホーム言語というか得意な言語とかあるといいよなあー、とか思いつつ大学生協でRWHを立ち読みし、よしこれにしようと思い立ったのがHaskellはじめだったかな。 ポリシーが明快なものは良いですね。PerlとかRubyとかPythonとか結構好きです。PHPとか好きではない。最近はClojureなんかも結構いいなあ、などと思っていたり。 それはともかく、このHaskell習得時期にAdve
あなたの思考が穴だらけだからである。 その穴だらけの思考を具現化して何になるというのだ。 遊びならいいが仕事では駄目だ。デバッグに手間がかかりすぎる。 では何故Haskellか? Haskellは包括的な記述をあなたに要請するからである。 以下はHaskellのif式だ。式なのでそれ自身値を持つ。 if n > 3 then "n is bigger than 3" else "otherwise" Haskellでのif式ではelse以降を省略することが出来ない。 使いづらいと思うだろうか。しかしifをネストし、else以降を書かなかった部分があったために致命的なバグを生んでしまったことはないだろうか。そのバグは見つけづらい。それはそうだ。コンパイルでは見つからず、あなたの思考には穴があるために何度読んでも正しいとしか思えないからだ。 賢明であれば、その前後で使用している変数の値を追いか
見ていただけるのは嬉しいですがこのエントリは十分古いため、新しい情報へアクセスをしてください。以下の本をお勧めします。 すごいHaskellたのしく学ぼう! 作者: MiranLipovaca出版社/メーカー: オーム社発売日: 2017/07/14メディア: Kindle版購入: 4人 クリック: 9回この商品を含むブログを見る 関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus) 作者: 大川徳之出版社/メーカー: 技術評論社発売日: 2014/11/14メディア: 単行本(ソフトカバー)この商品を含むブログ (8件) を見る みんなHaskellやろうぜ!! ということで書きました。 CやJava、Rubyなど他言語を知っている人は、これを読むことでHaskellの大抵のことはマスターでき…ません。 特殊な構文が多すぎて他言語との類
matlabをssh経由で使用するとGUIの表示が非常に遅い。Alt-tabでウィンドウの表示切り替えするとなると表示まで2秒くらい待たされる。ストレスフル。 ということでGUIを捨ててCUIで全て行うことにした。m-fileは元々vimで書いてたし。 matlab起動時に-nodisplayオプションをつけるとCUIで使用可能 なんとscreen上でmatlabが使える!超便利。 matlabシェル上で頭に!をつけるとshellコマンドが使用可能 matlab shell上でrmとかmkdirとか使えるわけだ。 m-fileにも書けるから便利。 m-fileにshellscriptが書けるわけだ。多分。 matlab(CUI)上でvimが起動できる。面白い。 CUIで画像保存はsaveas(plot(..略..), 'filename.jpg', 'jpg');こんな感じ。jpgなら。
頭の中でチャイコフスキー5番1楽章を鳴らしながら思った。 冒頭のクラリネットを隣に並べて散歩したい、と。 と書いていこうと思ったけど、書いてて普通に変人と感じたので止めておく。 共感覚について。 最近小説や漫画でやたら登場する共感覚だが、ちょっと違うと思う。 一般的な非共感覚者の、共感覚に対するイメージは例えばこうだ。 「ドの音が赤く見える」 また、Wikipediaでは以下の様に書かれている。 共感覚(きょうかんかく、synesthesia, synæsthesia)とは、ある刺激に対して通常の感覚だけでなく異なる種類の感覚をも生じさせる一部の人にみられる特殊な知覚現象をいう。 まあ間違ってはいないのだけど、だいぶ誤解がある様な気がする。 共感覚は誰でも持っているが、現代では芸術やスポーツ等に有利なそれを「共感覚」と呼んでいるに過ぎない。 共感覚とは感情から生まれるものだ。 チャイコフス
Debianは結構前に入れていたのだけど、wireless lanがつながらなくて困っていた。ようやく成功。 Debianを入れた経緯は、vistaが壊れたから。rescue and recoveryをしたら全て吹っ飛んだ。rescue and recoveryをもう一度行おうとしたら、そのパーティションも壊れたらしい。機動直後のF11で反応がない。 XPのリカバリというかダウングレード的なディスクがあったけど、fontとGUIの汚いXPには戻れません。 環境 thinkpad x200 Debian lenny (kernel 2.6.26) Debian install 初めてDebianを見たとき、「ディバイン」と読んでおお格好いいなー、と思った。一体どこのエクスカリバーだよ。 ということでlenny netinst i386をインストール。特に問題無し。 stableを入れようとし
悲しみを仮想化して、俺への影響を少なく出来ればいいわけだ、と思った。 それは人格の仮想化と同じであるのだろうか。つまりは多重人格のエミュレートなのだろうか。特定の感情をほうり投げるにつれて次第に他のものも吸い込まれるようになり、結果俺は感情を無くしてしまったりするのだろうか。もしくは何かの拍子につながりが切れてしまって本当に人格が分裂してしまったりするだろうか。それは正直俺の友人やらに迷惑掛かるだろうから望ましくないのだけど、今までと同様に処置するのもあまり良いとは思わない。というかブルックナー演奏以降、音鳴り*1が複雑に豊かに鳴るようになったというのに、それを失うのは少々もったいない気がするのだ。ようやく映画やアニメや小説や会話など、いろんなものを楽しめるようになったというのに、傷つくたびに感情を絞るのはひどくかなしい気がするのだ。 ということで、もう一人つくった。もしくは既にいた。 以
http://d.hatena.ne.jp/secondlife/20060108/1136650653 これをVimperatorで出来たら便利かも。見ているページ上の単語補完。 Web上で見つけた単語検索のためにマウス使うのめんどいし、t押して単語全部打つとかめんどいし、Caret modeでyankするのもめんどいし。 set completeあたりに取り込まれないかな。
Vim講座1 - think and error #絵をちょっと見やすくした。(2009.02.13) 前回からだいぶ日にちが空いてしまった。 Vim講座2は都合により作者がお休みするので、今回は3です。まあ日にち的に。 さて教育とは小さい子供にとってはある種洗脳とも言えるほど大きな影響をもつものです。その教育の目的とは一体なんでしょう。それは一言で表すなら自立を促すことです。自立とは、自己判断が出来、親の元から離れること。つまり自立とは親の立場から見れば自律(automation)ともいえます。自律主張ジェネレータ作成が教育の目標であります。 Vimを勉強する人は大抵自律しているので教育はすでに終わっていると思いますが、私はこのような入門講座の目的にも、同様のことが成り立つと考えます。 つまりこの講座は、Vimを一人前に使う人が増え、その人たちにがんがんpluginを作ってもらい、俺のV
最高傑作が出来た。これはおすすめせざるをえない。 まだ途中ではあるが。 (2008.12.10 z後の補完が不完全であったためdot.nodoka追加) 何を基準にするのか? プログラムをするのに、現在のキーマップは不便すぎる。なにせ、重要な記号が上や右上に追いやられてしまっているからだ。そこで記号の打ちやすさを改善すべく作ってみた。 基本原則がある。頻繁に使うものを打ちやすい位置に。 そしてなるべく合理的に、覚え易く。 俺の一日の成果が以下だ。HHKpro2での使用を想定している。 修飾キーを何にするのか? デフォルトでshiftを名乗る左右のそいつだ。 SandSの存在を知った時点で俺の勝ちは見えていた。 SandSとは、Shift and Spaceのことであり(Space and Shiftという意見もある)、Spaceを押しながら他のキーを押すとshiftとして機能し、Space
はてぶのページ遷移めんどい.ということでこれ. Dis Communication - 符号無し DCWiki どうやらvimperator2.0preでないと動かない模様. vimperator1.2では :%s/liberator.modules/liberator/g としても無理だった.:sbmは一応使えるようになるが,タグとコメントが付かない. firefoxだけじゃなくてvimperatorのバージョンも書いてくれよー. そしてvimperator2.0preにするとなんと_vimperatorrcが読み込まれなくなった. どうやら_vimperatorがutf8かつlf(line feedだっけ)でないといけないらしい.ということで :set fenc=utf8 ff=unix として保存.これで大丈夫. そしたら今度はfirefox addonであるtabmixplusのタ
次のページ
このページを最初にブックマークしてみませんか?
『think and error』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く