2013 Minori Yamashita [email protected]
ターゲットを動的オブジェクト指向プログラマに絞って、関数指向の考え方を説明します。 コードサンプルでは、オブジェクト指向には CoffeeScript ^1、関数指向には Clojure を使用しますが、文章は汎用的に書いてあります。
最下部に用語集があるので、わかりづらい単語、表現があったら参照してください。
/* | |
* Copyright (c) 2013 Calvin Rien | |
* | |
* Based on the JSON parser by Patrick van Bergen | |
* http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html | |
* | |
* Simplified it so that it doesn't throw exceptions | |
* and can be used in Unity iPhone with maximum code stripping. | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining |
// Copyright (c) 2012 Calvin Rien | |
// http://the.darktable.com | |
// | |
// This software is provided 'as-is', without any express or implied warranty. In | |
// no event will the authors be held liable for any damages arising from the use | |
// of this software. | |
// | |
// Permission is granted to anyone to use this software for any purpose, | |
// including commercial applications, and to alter it and redistribute it freely, | |
// subject to the following restrictions: |
var parser = document.createElement('a'); | |
parser.href = "http://example.com:3000/pathname/?search=test#hash"; | |
parser.protocol; // => "http:" | |
parser.hostname; // => "example.com" | |
parser.port; // => "3000" | |
parser.pathname; // => "/pathname/" | |
parser.search; // => "?search=test" | |
parser.hash; // => "#hash" | |
parser.host; // => "example.com:3000" |
2013 Minori Yamashita [email protected]
ターゲットを動的オブジェクト指向プログラマに絞って、関数指向の考え方を説明します。 コードサンプルでは、オブジェクト指向には CoffeeScript ^1、関数指向には Clojure を使用しますが、文章は汎用的に書いてあります。
最下部に用語集があるので、わかりづらい単語、表現があったら参照してください。
// -*- coding: utf-8 -*- | |
// ==UserScript== | |
// @name They are all 17 years old | |
// @author HIRATA Yasuyuki <[email protected]> | |
// @namespace http://yasu.asuka.net/ | |
// @version 1.1.0 | |
// @include http://www.google.tld/search?* | |
// @include https://www.google.tld/search?* | |
// @released 2013-04-23 | |
// @updated 2013-04-30 |
def in_app_purchase receipt_data
res = RestClient.post('https://buy.itunes.apple.com/verifyReceipt', {:'receipt-data' => receipt_data}.to_json)
res = JSON.parse(res)
if res['status'] == 21007
res = RestClient.post('https://sandbox.itunes.apple.com/verifyReceipt', {:'receipt-data' => receipt_data}.to_json)
res = JSON.parse(res)
end
# 役者クラス | |
# | |
# say: 役者は声を発する事ができる。 | |
class Actor | |
def say(words) | |
puts words | |
end | |
end |
原文はマーティンファウラーの記事です。
#マイクロサービスとSOA (Microservices and SOA)
マイクロサービスについて語る時によく言われるのが「へぇー、この考え方って10年ぐらい前に流行ったただのサービス指向アーキテクチャ(SOA)だよね、10年前に見たわー」だ。この目線からのツッコミにも利点はある。マイクロサービスのスタイルというものはSOA派の人たちが支持していたものとよく似ているからだ。でも問題はあって、SOAが意味するものはバラバラすぎて、「"SOA"と呼ばれている何か」がここで述べているスタイル(訳注:マイクロサービス)とはまるで違うなんてことがすごくよくある。そういう場合は往々にして、一枚岩なアプリケーション群をESBで統合することに主眼が置かれていたりする。
特に、サービス指向のいけてない実装はこれまでいくつもいくつも見てきた。複雑な部分をESBの中に押し込めようとして[7]何年も取り組んだけれども、何百万ドルも浪費して何の価値も提供できなかったとか、モデルに統制をかけて変更を積極的に抑制してしまい、問題点の向こう側にあるものを見えにくくしてしまったとか。
確かに、マイクロサービスのコミュニティで使われているテクニックの多くは、大きな組織の中でサービスを統合してきた開発者たちが、その経験の中から育んできたものだ。「読み取る側は寛容に(Tolerant Reader)」パターンはその好例だ。Webを活用するという取り組みがなされていて、単純なプロトコルを使うというアプローチはそういった経験をふまえている――中央集権的な規約を避ける反応だ。そういうものによって複雑さが生まれてしまうのは[正直言って息が詰まる](http://wiki.apache.org/ws/We