| Immutable | Mutable --------|-------------|------------------- Boxed | Array# | MutableArray# --------|-------------|------------------- Unboxed | ByteArray# | MutableByteArray# ------------------------------------------
Haskellでバイナリファイルの読み書きをすることがこれまで何回かあったので、それをネタにアドベントカレンダーに参加したつもりだったのですが、定刻よりもだいぶ遅れての年始の到着となりました。申し訳ございません。これはHaskell Advent Calender 2013 11日目だったはずの記事です。明けましておめでとうございます。
さて。コンンピュータで扱うデータはすべてバイナリ形式で表現されています。したがってすべてはバイナリデータであるという言い方ができますが、しかし一般には、テキストでないデータをバイナリデータと呼びます。
Haskellにはバイナリデータを扱うライブラリがたくさんあります。どのライブラリも特別難しい要素があるわけでなく、Haskellのライブラリの中では扱いの容易な部類に含まれるものと思います。しかし、初めて取り組むときには、主要なライブラリのどれも同じようなインターフェイスを提供していることに、何を選べば良いか戸惑う人も多いのではないでしょうか。
| {-# LANGUAGE BangPatterns #-} | |
| {-# LANGUAGE MagicHash #-} | |
| module Bin where | |
| import Control.Applicative (Applicative(..), (<$>)) | |
| import Control.Monad (ap) | |
| import qualified Data.Array.MArray as M | |
| import Data.Array.Storable hiding (getBounds) | |
| import qualified Data.Array.Unsafe as U |
| # -*- coding: utf-8 -*- | |
| import codecs | |
| import sys | |
| class Matrix: | |
| def __init__(self, rows, columns, value=0): | |
| self.rows = rows | |
| self.columns = columns | |
| self.mat = [[value for _ in range(columns)] for _ in range(rows)] |
| function! s:get_cabal_sandbox() | |
| if filereadable('cabal.sandbox.config') | |
| let l:output = system('cat cabal.sandbox.config | grep local-repo') | |
| let l:dir = matchstr(substitute(l:output, '\n', ' ', 'g'), 'local-repo: \zs\S\+\ze\/packages') | |
| return '-s ' . l:dir | |
| else | |
| return '' | |
| endif | |
| endfunction |
| /* LearningSQLExample.sql | |
| from http://examples.oreilly.com/9780596007270/LearningSQLExample.sql | |
| Modified for PostgreSQL. | |
| % psql -f add.sql | |
| */ | |
| /* begin table creation */ | |
| create table department | |
| (dept_id serial, |
Eclipse Test & Performance Tools Platform Project
http://www.eclipse.org/tptp/index.php
以前にYourkit Java Profilerという製品を購入して使ったことがあったけれど、もうだいぶ昔のバージョンになるし、新しいバージョンに更新するにはお金がかかるし、その古いバージョンがリモートのプロセスにアタッチして使うってことができるかどうか調べたことがなかった。AWS上のJavaプロセスにアタッチして、そのプロファイルをとりたかったので、リモートと簡単に接続できるのが必須だったのです。
とりあえずEclipseのサブプロジェクトっぽいEclipse TPTPというのをトライアル。リモートマシンにAgentをインストールしてやる必要があるのだけど、Linux用のパッケージをインストールしたら、中に含まれているソフトウェア構成用のファイルがなぜWindows形式でパスを記述してあって動かないという罠にかかる。Windowsメインで開発してるんですね...
| {-# LANGUAGE FlexibleContexts #-} | |
| {-# LANGUAGE MonadComprehensions #-} | |
| module Main where | |
| import qualified Language.SQL.Keyword.ConcatString as SQLs | |
| import qualified Wifi | |
| import Data.Int (Int32, Int64) | |
| import Database.HDBC (IConnection, SqlValue) |