サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
yunomu.hatenablog.jp
最近ちょっとブラウザで遊んでいたので、共有というか。 Google Chromeにremote debuggingという機能があります。 https://developers.google.com/chrome-developer-tools/docs/debugger-protocol 要するにJavaScript開発者にはおなじみのDeveloper toolsが使っているAPIなんですが、最近モバイル対応だのなんだののために整備されて使いやすくなったとかなんとか。最近て、何年前の話か知りませんけども。 使うためには、remote debugging portを有効化してChromeのプロセスを起動する必要があります。Chromeのプログラム名は環境によって違うので、それらしいやつを起動してください。 % google-chrome --remote-debugging-port=92
Haskellはもういいよって言いながらまたHaskellの話。 Haskellでdcっぽいのを作ってる時、 Haskellでdcっぽいのを作る その1 - yunomuのラクに生きたい Haskellでdcっぽいのを作る その2 型安全とは - yunomuのラクに生きたい 両方とも最後に「なんかコンパイルしたらプロンプトが出るタイミングがおかしくなるんですけどー!」って書いてる。 私が作ったdc2はプロンプトを出して入力を受け取って、pコマンドを受けた時に結果を出力するという動きをするように書いたつもり。 で、ghciで実行すると期待通りに動いてくれるものの、ghcでコンパイルして実行すると、まずプロンプトが出ない。プロンプト出ないながらも出ないというだけで正常に動いてはいるようで、pコマンドとかq(終了)コマンドを実行した時に、今まで出なかった分のプロンプトがまとめて出る。 具体的に
cabalファイルだけでは足りない事がある。どうしても単一のプログラムではできないこともあるし、TemplateHaskellでも生成できなくてやむなくソースコードを自動生成するスクリプトを書かざるを得ない事もあります。自動生成なんかやると何かに負けた気分になりますが、cabalでなければ普通にやっている事なので、何も問題は無い気がします。MakefileとかAntとか。 具体的には、 (1) Haskell製コード生成プログラムをビルド (2) シェルスクリプト経由でコード生成プログラムを実行 (3) 本体のプログラムをビルド という事をやりたい。 ところがcabalには直接的に外部のコマンドを実行してビルドする方法が無いみたいです。無いみたいなんですが、ビルドを細かく制御する方法はいくつか用意されています。 (A) Build-Type: Configureでautoconfで頑張る
なんかちょいちょい電車の中から広告で見てた水樹奈々のTHE MUSEUM IIのジャケットがかわいかったから衝動買いして、それについてたPVを見ながらこの記事を書いています。 かわいいなぁ。 とかやってるうちに終わりましたけど。 まどか☆マギカ見よう。 最近、Erlangにハマっておりまして、ようやくなんか書ける気がしてきたので、隙あらば使ってみようなどと思っているところです。 この本が結構良かった。 Amazon.co.jp: プログラミングErlang: Joe Armstrong, 榊原一矢: 本 普通の教科書なんですけど、エッセイかと思うくらい言い回しが微妙に面白かったりとか、前から順に読んでいくと「今欲しいのはコレだろ?」と言わんばかりに欲しい情報が出てくる感じで。サンプルコードを全部打ち込んでいく感じでやっていくとちょうどいいスピードで進んでいくと思います。1週間あればなんか書
テストって別にやりたくないわけじゃないっていうかやりたいんですけど、なんかつい後回しになってしまうというか。 でも例えば外部システムとの連携部分だったりすると私は割と真面目にテストを書くんですが、普段はなんかなんとなく面倒臭い。面倒くさいと面倒くさくないの境界線は何なんだ。 外部システム連携みたいな入出力系のテストがそれほど苦じゃないのは、どっちにしろ動作確認で動かすからなんですよね。 一方でそれ以外の部分、いわゆる計算というか、モジュール間のデータのやり取りだったりデータ変換だったりとか、そういう部分のテストがなんで面倒くさいかといったら、それは足し算をテストする時の事を考えるとだいたい想像つくと思いますけど、 @Test void testPlus() { assertEqual(plus(1, 1), 2); assertEqual(plus(1, -1), 0); assertEq
当たり前の事を当たり前にやりたいよね。 ちょっとしたスクリプトを書く時に、OSのコマンドを実行してその結果をgrepしてcutしてとか、そういう事をよくやる。Haskellでやるかどうかっていうのは別として、そういうのってどうやるんだろうと思って。 grepとかcutとかはHaskell的にはパーサを書くのかもしれないけど、まずはコマンド実行から。 とりあえずコマンド実行 マニュアルを"cmd"とかで検索するとSystem.Cmdとかが出る。 System.Cmd 使い方はこう。 Prelude> import System.cmd Prelude System.Cmd> system "pwd" /home/user ExitSuccess ExitSuccessが戻り値で、画面出力はなんかそのまま標準出力に出ちゃう。 引数があっても > system "netstat -l" と指定で
1つのモジュールのコンパイルに時間がかかりすぎて、5分間何も出力がなかったとしてビルド失敗扱いされるの、つらいものがある— 就活用アカウントさん (@eagletmt) 2013年1月24日 という話があって。 具体的にはaws-sdk(https://github.com/worksap-ate/aws-sdk)の開発中の話で、 aws-sdkではTravis CI(https://travis-ci.org/)を使ってビルドだけのテストをしているんですが、そのテストっていうかビルドが頻繁に失敗するようになってしまった。 原因はAWS.EC2.Typesのコンパイルで、このモジュールのコンパイルだけで5分以上かかる。その間何も画面出力などはされなくて、Travisでは何も出力がされないまま5分経過するとビルドプロセスが殺されてしまうという。 これはいけませんというか、いや別に普通にTra
コマンドライン引数のパースがだいたいどう転んでも面倒くさい。特にCとかJavaとかは本当に泣きたくなりますよね。まあJavaでコマンドラインのプログラムを書く事なんてあんまし無いかもしれませんけど。いや、ありますけど。泣きながら書いてました。 Haskellでもまあ別に普通に面倒くさいんですけど、いくつかライブラリがあって、その中で一番目についたというか使いやすそうだったライブラリがcmdargsでした。 使い方。 {-# LANGUAGE DeriveDataTypeable #-} module Main where import System.Console.CmdArgs data Option = Option { label :: String , size :: Int } deriving (Show, Data, Typeable) option :: Option op
仕事飽きたからfluentdのpluginを書いて遊んでいたよ。 これを試してみたくて。 fluentdのためのプラグインをイチから書く手順(bundler版) - tagomorisのメモ置き場 作ったのがこれ。 yunomu/fluent-plugin-diskutil · GitHub 例がoutputだったのでinputの方を書いてみた。 dfコマンドの結果を送るだけなので、execとかでもいけたのかもしれないよ。 lib/fluent/plugin/in_diskutil.rb 1 class Fluent::DiskUtilInput < Fluent::Input 2 Fluent::Plugin.register_input("diskutil", self) 3 4 config_param :tag, :string, :default => "diskutil" 5
Conduit 0.5が出て、わかりやすいチュートリアルが書かれていたので、それで一日中遊んでいたりしました。 ConduitとHaskellでネットワークプロキシサーバを作る - 純粋関数空間 Conduit楽しいですね。 これを上から下までやってなんとなく感覚を掴んだところで、Attoparsecと組み合わせて使う場合を作って遊んでみました。 Sink まずSinkの方から作ってみます。 Parserはとりあえず適当にこんな感じで。 import Data.Attoparsec.ByteString import qualified Data.Attoparsec.ByteString.Char8 as AC field :: Parser ByteString field = AC.takeWhile (/= ',') <* AC.anyChar ','までの文字列を返して、一文字(
Haskellのなんでもアリ具合。 ライブラリをビルドしてるとちょいちょい見えるFFIという文字列、気になって調べてみると、ForeignFunctionInterfaceというものがあって、これはHaskellからCの関数を呼び出すためのモジュールというか拡張らしい。 Haskellのものすごいライブラリの充実度の影にはこういうものがあったりするんですね。 ということでちょっと遊んでみました。 だいたいこの記事のトレスです。 本物のプログラマはHaskellを使う - 第22回 FFIを使って他の言語の関数を呼び出す:ITpro 既存のライブラリを呼ぶ 上の記事に習って、libmのsinを呼び出してみます。 まず、何はなくともmanです。sin(3)のmanを見ると、 NAME sin, sinf, sinl - sine function SYNOPSIS #include doubl
WarpってWebサーバらしいですよ。 いやまあ今回はそういう前置きはいいんですけど、 Yesodの人ことSnoymanさんが作っているWaiとWarpでWebサーバを書いてみようと思います。 まずは調査。 Waiとはなんぞや。 Network.Wai Web Application Interfaceらしいです。単体だとナンノコッチャという感じですが、ドキュメントを見るとHTTPのRequestとResponseっぽい型の定義があって、それらを扱うApplicationという型があります。 定義: type Application = Request -> ResourceT IO Response RequestをもらってResponseを返す関数がApplicationです。まあそのまんまですね。 RequestはHTTPの定義通りなので省略、Responseはなんか若干めんどくさい
sudoでコマンド実行しようとしたらcommand not foundになる。 sudo -iなら動きはするんだけど、カレントディレクトリが~rootになるのがあまり面白くない。 sudoの環境変数ってどこから読まれるんだろう……という話。 最初はrootとかそのユーザの環境変数が読まれるのかと思ってたけども、そうではないっぽい。というかそのためのsudo -iですし、セキュリティ的にも制限しておいた方がいいのかもしれないしね。 その辺の設定はsudoersにありました。 env_keepって値で指定した環境変数は、sudoを実行した元の環境から引き継がれるらしい。 なんかこういうの。 Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" Defaults env_keep += "M
Haskellのマニュアル検索のHoogleってシステムがある。 http://www.haskell.org/hoogle/ 便利なんだけど、manに慣れた我々としてはコマンドで使いたいじゃない。Erlangもmanっぽいの用意してくれてるし。 ということで、パッケージがありそうなので入れてみることにしました。 % cabal install hoogle 何故か、コマンドは入らないけどライブラリだけできてるっぽかった? なんかもう先に進んじゃったからよくわかんないけど、エラーメッセージを見ながら、確かnetworkパッケージをupgradeした。と思う。 パッケージを入れ直してcabal install hoogleしたらとりあえずhoogleコマンドが使えるようになった。 さっそく使ってみる。なにはなくともhelpである。 % hoogle --help Hoogle v4.2.9,
前フリ 最近@seizansさんが新人Haskell使いを増やしまくっている。 で、その人達がググった時のために先にたくさんブログ記事書いて釣ろうぜっていう話をしていたけど、@kazu_yamamotoさんとか@nom4476さんらが仰るように、一旦自分がわかってしまうとなかなか記事を書く気力が起きない(し、子育てで忙しいので後は任せたって言われた)。 そうこうしているうちに@seizansさんがすごい勢いでHaskell力を伸ばしはじめた。 なので最近彼が覚えたらしいモナドトランスフォーマーの入門的な記事をStateモナドと合わせて先回りして書いてしまおうというわけす。引用数を稼ぐには先手必勝です。 Stateモナド Haskellで一時的な状態を持たせたい時はStateモナドを使うらしいですよ。 といっても何が何だかよくわかんないんですけど、 状態モナド遊び - あどけない話 この記事
例によってお酒を飲みながら書いているので文章が冗長です。御託はいいって人は本題まで飛ばしましょう。 枕っていうか前置き プログラミング言語選択の理由というのは結局のところライブラリだったり環境にインストールされてるのがそれしかなかったりとか、言語自体がどうこうというのとは関係ない部分で決まったりして。 だからメジャーな言語はひと通りやってると意外な時に役に立ったりすることもあります。Perl, PHP, Ruby, Pythonあたりは2つ3つくらい覚えておくとなにかの役に立つかも。いや「何かの役に立つかも」ってレベルですが、少なくとも私は運が良いのか悪いのか、役立つシーンに遭遇したことがある。 で、 私は最近趣味でプログラミングする時はネットワーク環境が無いところでやる事が多いんです。適当にそこら辺のカフェとかで遊んでいるし、モバイルルータとかも持ってないし。 外で開発してて困ることと言
Haskell Platformってyumに無いの? ブログタイトルを「ラクに生きたい」にしたのに、ソースから入れる記事とかHaskellで悩んでる記事ばっか書いてるとなんか裏切ってる気が。いっそGentoo使いになって「苦労を買ってでもやるブログ」とかにしようか ということで、ソースから入れてみます。CentOSに。 # wget http://lambda.haskell.org/platform/download/2011.4.0.0/haskell-platform-2011.4.0.0.tar.gz # tar xvzf haskell-platform-2011.4.0.0.tar.gz # cd haskell-platform-2011.4.0.0 # ./configure ...(略) ******************************************
割とよく「数学わかんないしプログラミングなんて」とか「数学のできないプログラマなんて」とか、逆に「数学できなくてもプログラミングはできる」とか、そういう言葉を聞きます。よね? 私は聞きます。言いますし。 私は数学苦手だけどプログラミングは割とできる方で、「数学めんどくせぇ」とか言ってる側。数学科出身っぽい上司に「君、数学やりなよ」とか言われる。それにやっぱりすごいと思うプログラマはなんかことごとく楽しそうに数学を語ったりしている。 なんですけど、 いつものごとくid:seizansと他愛のない話をしながらの――いやなんかガッツリと関数型言語っていうかHaskellっていうか関数型言語のデータ構造の話をしていた気がしますけど、それはともかく昼食時、私が「その関数型でのFIFO実装ってJavaのArrayListに似てますよね。だいたい早いけどたまに整理する処理が走る時だけは重くなる感じが」っ
このページを最初にブックマークしてみませんか?
『yunomu.hatenablog.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く