サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
krdlab.hatenablog.com
はじめに 久しぶりに Haskell に戻って Servant を触ってみたら,いつの間にか認証周りの仕組みが実験的に追加されていました. 興味がわいたため,Authentication in Servant とコードを読みながら少しだけ仕組みをのぞいてみました. バージョン情報 lts-7.14 です.バージョンは以下の通りです. GHC 8.0.1 servant 0.8.1 サンプルコード 実際に動くコードを用意しました. examples/try-haskell-servant-auth Recap の方にまとまっていますが,認証無しの場合と異なる箇所をザックリ挙げると以下の通りです. 認証をかけたいエンドポイントに AuthProtect コンビネーターを指定する AuthProtect "hoge" :> ProtectedAPI とした場合,ProtectedAPI が認証処
はじめに モジュール間連携のイベントバスとして RabbitMQ を使用したいのですが,クラスタを組む場合にどうするのが良いのかな?ということを調べてみました *1. なお,以降では「CAP のうち CP 特性が欲しい」ということを念頭において調査しています. 動作確認について RabbitMQ は 3.6.1 です.ローカルのマシンに VM を起動して動作確認しています. https://github.com/krdlab/examples/tree/master/distributed-rabbitmq-brokers RabbitMQ の分散構成について 分散構成に関する公式の情報は以下の通りです. https://www.rabbitmq.com/distributed.html https://www.rabbitmq.com/clustering.html https://ww
Haskell で書いた Web サービスの自動テストを考えたとき,IO の部分が問題になる場合があります. KVS や DBMS を利用する部分は CI サービス上で必要なものを起動すれば問題ないのですが,外部サービスと連携する部分は問題として残ります. またデグレするとユーザに直接影響を及ぼす部分については,IO であってもその動作を自動テスト化しておきたくなります. こういった部分はモック化をサポートするライブラリを用いてテストすると思いますが*1,Haskell の場合はその辺どうするのだろうか?という疑問から調べて実験してみました. なお,モック化のことを考えなければ既にある素晴らしいライブラリを利用してテストを書くことができます. この件についてはこちらの記事が大変参考になります. 先行事例 型クラスを利用したものと Free モナドを利用した事例がいくつかみつかります. 今回
はじめに Haskell には大小様々な Web フレームワークがあります.(yesod, scotty, spock, apiary, rest, 等々) API サーバを作りたいときは scotty を利用することが多かったのですが,つい最近 haskell-servant というパッケージ群を知りました. 小さな API サーバを書きたいときに便利そうだなと思い,使いつつ軽くコードを読んでみました*1. 環境 GHC 7.8.3 (64bit) haskell-servant 公式ページ 型を用いて API 仕様を定義するタイプのフレームワークで,クライアントコードやドキュメントも生成してくれます. API の型とそれに対応するハンドラを組み合わせることで WAI アプリケーションとして動作します. 現在の形になったのはつい最近なんでしょうか? → Rethinking webser
はじめに io-streams パッケージがリリースされた折にふと「conduit,pipes,io-streams 以外の streaming data を扱うライブラリには何があるんだろうか?」と疑問に思いつぶやいてみたところ, machines がある ということを教えていただきました. 気になったので調べてみた,というのが今回の内容です. 基本的な使い方に始まり,何とか attoparsec を組み込むあたりまでは辿り着きました.なお,GHC 7.4.1 を使用しています. 見出し これは何? 雰囲気 どう使うの? 基本形 Source の作成 Process の作成 Transducer を組み込む 複数入力の取り扱い Parser を組み込む おわりに これは何? 今回の対象は↓これ. machines-0.2.3.1 http://hackage.haskell.org/pa
忙しいときほど他のことをやりたくなるのは人の性なのか...というわけで今回も Haskell 関連の内容です. はじめに Twitter の Streamimg API から取得した内容を Conduit で処理する,という内容です.Streaming API は Source として利用するのに最適な気がしたのです. 環境 ubuntu 10.04 32bit ghc 7.0.4 cabal-install 0.10.2 *1 using version 1.10.2.0 of the Cabal library 利用パッケージ 主な利用パッケージは以下の通りです. (具体的な import については「リポジトリ」のところに載せたコードを参照) http-conduit-1.4.1.3 http://hackage.haskell.org/package/http-conduit-1.
前回の続きで今回は Fiber の話題.ずいぶんと日が空いてしまいました. 見出し はじめに 環境 node-fibers とは? Fiber の利用例 Fiber を使った非同期処理の記述例 終わりに はじめに 今回は fiber を導入し,非同期 API のコールバック周りを少し整理してみよう,ということが主題です. node.js (というかそのエンジンである V8) は fiber をサポートしていませんが*1,node-fibers を利用することで node.js 上に fiber を導入することができます. 環境 ubuntu 10.04 32bit (VM 上で稼働) node 0.6.6 node-fibers 0.6.3 node-fibers とは? node-fibers は node.js 上で fiber (coroutine) *2 をサポートするためのライブ
最近仕事で Java ばかりの KrdLab です.そんな中,Eclipse の Memory Analyzer (MAT) が素晴らしかったので紹介. http://www.eclipse.org/mat/ はじめに Java ではメモリリークによって OutOfMemoryError (OOME) が発生する.このリークを特定する作業はなかなか困難な作業になることが多い (特に,誰が作ったのかわからない古いコードの保守で発生すると大変!). 今回はその作業コストを軽減するツールとして Memory Analyzer (MAT) を紹介する. Eclipse Memory Analyzer とは? JVM のヒープダンプを解析するツール.どのオブジェクトがリーク候補なのか,どこから参照されていたものだったのか,といった情報がグラフィカルに表示される. 他にもダンプ分析のための様々な機能が
前回からかなり時間が空いてしまいました...やっと時間取れた.今回は 2 回に分け,1 回目で TameJSを,2 回目で node-fibers を取り上げたいと思います. ちなみに,「この方法が良い」と言うよりは「こんな方法もありますよね」というスタンスで書いています*1. 見出し はじめに TameJS とは? TameJS の利用例 TameJS のしていること おわりに はじめに Node.js は非同期処理が基本であり,コールバックを多用するスタイルです.そのため,コードは簡単にコールバックのネストだらけになります*2. この "深いネスト" を解消するため,多くの場合は control flow ライブラリ が使用されます*3. TameJS では,非同期処理の記述に await/defer を持ち込み,上記の解決を試みています. TameJS とは? TameJS は tj
node.js の負荷分散について考えてみました (フェイルオーバは考慮できていません).個人レベルなので 1 台のハード上に仮想マシンを 5〜6 個立ち上げて実験しています. 見出し はじめに cluster で負荷分散 寄り道:cluster の仕組み 例えばこんな全体構成 おわりに はじめに node.js は設計上,大量のコネクションを省リソース (プロセス・スレッドをバカスカ生成しない) でさばきます.おそらく想定されているのは I/O バウンドな処理であり,この場合は基本的に非同期で処理されるため,I/O 待ちで他のリクエスト処理がブロックすることはまずありません. node.js は「サービスをつなぎ・組み合わせるためのハブ」的な位置づけが一番しっくりくるように感じます *1. ただ, 大量のリクエストをさばかなければならない ロジックが重くてコールバック処理に負荷がかかって
久しぶりに Mongoose ネタです.Schema の API である static メソッドについて少しだけ. 今回は短め. 見出し 何ができる? 登録した関数内での処理 実際の定義 参考にした情報 何ができる? 例えば User というモデルを定義 (UserSchema) したとします.User に対しては,find/findOne といったメソッドを呼び出すことができます. しかし,例えば DataMapper のような「first_or_create (あれば最初の 1 つを返す,無ければ作って返す)」が欲しくなった場合はどうすればよいでしょう? 上記のような場合に Schema.static メソッドを使用します.Schema.static メソッドは,モデルに対して独自の処理を追加することができます. var UserSchema = new Schema({ name:
node.js + MongoDB はイイ感じです.というわけで Mongoose ネタの続き. 見出し connect と disconnect 明示的にコネクションを扱う Connection とイベント connect と disconnect require で取得する Mongoose オブジェクトには connect と disconnect があります. var mongoose = require('mongoose'); var Schema = mongoose.Schema; // スキーマ登録 var HogeSchema = new Schema({ label: String, value: Number }); mongoose.model('Hoge', HogeSchema); // デフォルトコネクションを開く mongoose.connect('mon
またしてもスケジュールきつめのプロジェクトに放り込まれた KrdLab です.Java ジャバしてます.IDE がないとコード書くのがしんどすぎて,もううんざりです. はじめに 何らかのプラットフォームを利用する場合,その仕組みについて知っておくことは,より適切な設計を行うという目的に対して有用な情報となるでしょう. というわけで,今回は少しだけ node.js の内部に潜ってみようと思います.対象は git repo から clone した 0.4.x です (2011/03/29 に clone したっぽい). なお,今回はイベント駆動に焦点を当て,V8 については割愛します. 見出し 全体像 メイン処理 イベントループで処理される各種 watcher tick 系のイベント処理 gc 系のイベント処理 eio 系のイベント処理 IOWatcher によるソケットの READ/WRIT
node.js から MongoDB にアクセススためのライブラリに Mongoose があります.今回はこれを紹介しようと思います.O/R Mapper っぽく使えるように設計されており,既存の O/R Mapper を使ったことがある人にとっては,比較的わかりやすい仕様です. 見出し Mongoose とは? インストール 何はともあれ使い方を Schema 定義について ドキュメント生成 (保存) ドキュメント読み取り ドキュメント更新 ドキュメント削除 Embedded Document 終わりに Mongoose とは? node.js 向けに開発された MongoDB アクセスライブラリです. 公式:http://mongoosejs.com/ GitHub:https://github.com/learnboost/mongoose/ Mongoose is a MongoD
目次 has n and belongs_to (One-To-Many) has n, :through (One-To-Many-Through) ここでちょっと補足 has, and belongs to, many (Or Many-To-Many) Self-Referential Has, and belongs to, many Adding To Associations Removing From Associations Customizing Associations Adding Conditions to Associations Finders off Associations 参照情報 はじめに ここでいう Association とは,テーブル (DataMapper の場合はモデル) 間の関連性を示します.例えば,Blog の記事 (Post モデル) は
さて,今回は検索について.1ヶ月ぐらい前に書いたものだけど... (この続き→ DataMapper を使う - KrdLabの不定期日記) いつも通り以下のサイトを参考に,ざっと使い方をメモってみた. http://datamapper.org/doku.php?id=docs:finders 使えるメソッド DataMapper の検索メソッドには,get, all, first がある. zoo = Zoo.get(1) # primary key zoo = Zoo.get!(1) # 失敗すると ObjectNotFoundError zoo = Zoo.get('DFW') # natural primary key zoo = Zoo.get('Metro', 'DFW') # composite key zoo = Zoo.first(:name => 'Luke') #
http://d.hatena.ne.jp/KrdLab/20090503/1241331627 の補足. モデル定義についてです. 一部のサンプルは公式サイトから拝借しています. プロパティの宣言 モデルクラス内部で property メソッドを呼び出す. class Post include DataMapper::Resource property :id, Serial # primary serial key property :title, String, :nullable => false # null 値不可 property :published, Boolean, :default => false # デフォルト値 = false end DataMapper.auto_migrate! すると以下のようになる. +-----------+-------------
以下,超意訳です.あしからず. 原文:http://datamapper.org/doku.php?id=why_datamapper - DataMapper は,他の O/R Mapper といくつかの点で異なる. Identity Map DB における 1 つの行は,1 つのオブジェクト参照と等しくなるべきである. とても単純だが,とてもインパクトがある. もし ActiveRecord で以下のコードを実行した場合,あなたは全て false という結果を見るだろう. だが DataMapper で同じ事をした場合,全て true になる. @parent = Tree.find(:first, :conditions => ['name = ?', 'bob']) @parent.children.each do |child| puts @parent.object_id ==
ruby で comet を利用した Web アプリを作成しようと思い,調べてみると,ShootingStar というコメット対応サーバがありました. (ちなみに,Java だと Tomcat6 で CometProcessor や CometEvent を使う) とりあえず動かす とりあえず,チュートリアルを. Making A Chat System Within 5 Minutes http://shooting-star.rubyforge.org/wiki/wiki.pl?Making_A_Chat_System_Within_5_Minutes OS:ubuntu 8.04 ruby:1.8.6 rails:2.0.2 (たぶん.この記事を書く前に update しちゃったんでうろ覚え.) つまずき 1 shooting_star init shooting_star が見つか
最近 C# から Clipboard をゴニョゴニョするプログラムを作る必要があったため,いろいろと調べてみました(VS2005sp1 + .NET Framework 2.0). .NET Framework では,Clipboard クラス (System.Windows.Forms) として Clipboard に対する操作がまとめられており,簡単にデータの設定/取得を行うことができます. Clipboard クラスを使用したサンプルは,DOBON.NET: VB.NET, C#, 無料ソフトウェア... にて紹介されています. 例:クリップボードにファイルをコピーまたは切り取りをする、クリップボードからファイルを取得する、貼り付ける: .NET Tips: C#, VB.NET しかし,Clipboard に対するイベントは Clipboard クラスに定義されていないため,Cli
DataMapper って結構いいのかもしれない...と思い,目下勉強中. 以下,超意訳です.あしからず. 原文: http://datamapper.org/doku.php?id=getting_started_with_datamapper はじめに,もしヘルプが必要だと思った場合,Mailing List と IRC を通したアクティブなコミュニティのサポートがある. さて想像してみよう. 私たちは,ブログアプリのためのモデルを用意している最中だ. 私たちはそれを,いい感じでシンプルにしておきたい. 最初に決めることは,私たちがモデルに何を求めているか?ということだ. Post は与えられている.Comment もだ.But let's mix it up and do Category too. (←?) Install DataMapper もしあなたが RubyGems をイ
http://d.hatena.ne.jp/KrdLab/20090503/1241331627 の補足. 今回は Validation についてです. 一部のサンプルは公式サイトから拝借しています. http://datamapper.org/doku.php?id=docs:validations はじめに Validation を使うには,まず require する. require 'dm-validations' Validation 指定 validates_present 空でないかどうか validates_absent 空かどうか validates_is_accepted ? validates_is_confirmed ? validates_format 指定されたフォーマットに従うかどうか validates_length 指定された条件の長さを満たすか vali
ActiveRecord はかなり便利な O/R mapper ですが,さらに上(?)がありました. DataMapper http://datamapper.org/ なお,このエントリは 0.9.11 をベースに書いています. このエントリの目次と他エントリへのリンク 概要 [関連するエントリ] Why DataMapper? Getting Started With DataMapper 接続 マイグレーション Logger モデル定義 Property 定義 Validation 指定 [関連するエントリ] Properties Validations Index Single Table Inheritance Hook モデル操作 作成 読み取り 更新 削除 [関連するエントリ] Finding トランザクション [関連するエントリ] Transactions アソシエーション
C++/CLIでクラス作成したとき,アンマネージポインタをメンバに含む場合があります.このクラスをシリアライズするときは,ISerializableインタフェースを実装し,アンマネージの内容を明示的にシリアル化する必要があります(Serializable属性を付けるだけだと,ポインタの値がそのまま記録されてしまいます(たぶん)). また,ISerializableインタフェースを実装すると,逆シリアル化の際の呼び出し順の関係上,既定の処理の前に,逆シリアル化用のprotectedコンストラクタが呼び出されてしまいます(シリアル化プロセスの手順:http://msdn2.microsoft.com/ja-jp/library/tyf8zbfk(VS.80).aspx).そのため,メンバ間に依存関係がある場合は,依存関係にある全てのメンバを,明示的にシリアル/逆シリアル化する必要があります.
「PHP から SOAP 経由でサービスをよんでね」とか言われたのですが,PHP は使ったことがないのですよ...orz とりあえず調べてみると,PEAR にベータ版だが SOAP モジュールがあるのでこれを使うことにします. 基本的な使い方は以下のサイトで紹介されています. http://blogs.wankuma.com/katamari/archive/2007/12/09/112281.aspx http://www.s-koichi.info/blog/archives/2008/01/08/2315-005421.php ただねー,「これ使って」と渡された WSDL ファイルを SOAP_WSDL が正しく解釈してくれない...orz どっちが悪いんだろうか. 仕方がないので SOAP_Client の方でがんばることに. ヘッダに情報を追加する Client.php や Va
昨日は,Google Maps APIを利用して学会マップなるものを作成しました. 今日は,マップ上の任意の2点間の距離を計算する方法を考えてみました. Google Maps APIでは,マップ上における"click"イベントを捕まえることで,任意の地点の経度,緯度情報を取得することができます. そこで,経度,緯度情報から球面上の弧の距離を計算する方法を考えてみました. 経度とは,ロンドンの旧グリニッジ天文台を基点に±180°で等間隔に割り当てられています(参照:経度 - Wikipedia). 緯度とは,赤道を基点に±90°で等間隔に割り当てられています(参照:緯度 - Wikipedia). 経度を,緯度を,地球の半径をrとし,地球の中心を原点とした極座標系を考えます. ここから,直交座標系におけるx,y,zをそれぞれ計算すると, となります. これにより,任意の2点間の直線距離が求
前述のように,Clipboard が更新されたことを知るためには,対象となるフォームのウィンドウプロシージャを override する必要があります.でも,何となく Clipboard のために override した WndProc を,Form のコードに書きたくないなぁ,とか思ったので,ウィンドウプロシージャを Hook することにしました.調べてみると,NativeWindow クラス (System.Windows.Forms) という,便利なクラスがあります. これを使ってみることにしました. public class ClipboardHelper { #region イベント定義 /// <summary> /// クリップボードの内容が更新されたときに発生するイベント /// </summary> public event EventHandler DrawClipboa
はじめに Haxe ビルド環境をセットアップするための krdlab/setup-haxe を作成して Marketplace に公開しました. github.com github.com 背景 仕事の方で Haxe を使っているリポジトリ*1があって,このリポジトリから共通ライブラリが生成されている状況にあるのですが,これまではこの生成作業が手動で行われていました. しかし作業自体はコマンド化されていること,またリリースのタイミングに規則性があることから自動化が可能であると判断し,関係者と相談した上で GitHub Actions を利用して自動化することにしました. このとき setup アクションの Haxe 版があると便利なのですが,あいにくと Marketplace ではみつからなかったため,自宅に戻ってから調べて作成してみました. アクションの作り方 krdlab/setup-
以前↓ここで紹介したやつです. http://d.hatena.ne.jp/KrdLab/20071003 かたちになってきたので,公開してみようと思います. Lisys-0.6.3 Lisys-0.6.3-src (2012/11/11: github に移りました → http://d.hatena.ne.jp/KrdLab/20121111/1352633124) まだα版,といった感じですが,もし良かったら使ってみてください. まだまだ機能が貧弱なので,もうちょいがんばる予定です. (2009/05/07: Lisys-0.6.4 をリリースしました→ http://d.hatena.ne.jp/KrdLab/20090507/1241626831) 開発環境 WindowsXP Home Edition SP2(Professionalが欲しいなぁ) Visual Studio
次のページ
このページを最初にブックマークしてみませんか?
『KrdLab's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く