過去、シンガポールとハワイの歴史を読みましたが、今度は 『物語 スペインの歴史―海洋帝国の黄金時代 (中公新書)』 を読んでみました。 スペインはレパント海戦や無敵艦隊などで有名なので、その辺の話を知っている人も多いと思います。学校の授業などでも有名どころとしてまず学ぶところでしょう。 この本はそこだけに焦点を当てるのではなく、そこに至るまでの過去のイスラムによる支配、その国土回復のための活動など、私がよく把握していなかった過去がありました。その後、イギリスのエリザベス1世との関係や、無敵艦隊などの話に続き、その敗戦、現代と話が大きく変化します。大きな局面を例に、スペインの歴史の変化を垣間見ることができました。 「ドン・キホーテ」の著者であるセルバンテスが度々出てきますが、これは著者の嗜好も絡んでいるみたいですが、そういう視点での物語も変わって面白いものですね。 とはいえ、欧州は侵略など含めて大きく歴史が動き続けた場所でもあります。欧州に足を運ぶ際は、こういう歴史的なところも少なからず知っておきたいところですね。More
[Erlang][Elixir]Efficiency Guide User’s GuideでErlang/Elixirを知る
ErlangのEfficiency Guideが役立ったので、メモ。 Erlang/Elixirをやるなら知っておくべきことが多数ありました。 私が読んだのは、version 7.3 http://erlang.org/doc/efficiency_guide/introduction.html また、 http://erlang.org/doc/efficiency_guide/advanced.html にはAtomと言った型に対する制限であったり、メモリの制限などのまとまった情報を得ることができます。他、List操作に対する注意ごとや、tail recuesiveにすることの良さなど。More
[Swift]Regular Expression with Swift
Swiftのexercism.iosを解いている時に、正規表現を使いたい箇所に出くわしました。 Swift、ObjCのそれを使わないといけないのですね。私が扱う言語の中では一番手間隙がかかるやつでした。 メモメモ。以下は、入力文字列に対して 0-9 の数字を文字列として抜き出すメソッドです。 This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters Show hidden characters private func format(startingNumber: String) -> String { let pattern…More
[Elixir]refactor to use pattern match in function instead of case one
exercism.ioで実装した問題を、 case 使って書いてたのですが、冗長なのでメソッドのパターンマッチを使って簡略化しました。 思いの外削減できたので、メモ。 特に、 can_attack? のところのパターンマッチは他の言語で書いた後に戻って書こうとするとパッと思い浮かばないときもある。。。 case でちんたら… が初めのやつ。pattern mach in functionが修正版。 case でちんたら… defmodule Queens do @type t :: %Queens{ black: {integer, integer}, white: {integer, integer} } defstruct black: {7, 3}, white: {0, 3} @doc “”” Creates a new set of Queens “”” @spec new(nil | list) :: Queens.t() def new(positions \\ nil)…More
[Elixir][Erlang]listと、filterの使い心地
ErlangもElixirも、 filter を使う操作で簡単に特定の条件に合致した要素だけのリストを作ることができます。ただ、 filter を使わないで簡単に同様な処理を表現する方法が、Erlangだけでしか思いつかなかったです。。 ただ、ここでElixirにおける for を良い感じで使いたい問題があったのでそちらも。 generate List with for syntax と書いている箇所です。 2つ以上のリストの組み合わせを入力とした処理を書きたい時、書きやすい形で処理を表現できますね。 How to generate list with filter or other ways. Erlang > [X || X <- lists:seq(1, 5), X rem 3 == 0]. [3] > lists:filter(fun(X) -> X rem 3 == 0 end, lists:seq(1, 5)). [3] Elixir > (for x <-…More
[Erlang][Elixir]binaryの扱い
Erlangにおけるbinaryのコピー、参照の扱いに関してメモ。 64 byteまではheap binariesと言われて、メッセージを渡す時にコピーを渡してprocessのheapに保存するらしいです。 一方、それ以上は参照渡しになるらしいです。 なるほど。 参考 http://erlang.org/doc/efficiency_guide/binaryhandling.html http://stackoverflow.com/questions/3406425/does-erlang-always-copy-messages-between-processes-on-the-same-node Vさんの以下が参考になりました。 Erlang のバイナリ特別扱いについては https://t.co/JCfyVIZQhx を見れば書いてあります。日本語は @shibu_jp が翻訳したこちら。https://t.co/c9ssNKHchV — V (@voluntas) March 20, 2016 ネットワークサーバ書く場合は、 binary はコピーされないっての結構大事な話なので覚えておくと良いですよ。設計に影響する。 — V (@voluntas) March 20, 2016 なので、 atom と binary は凄く積極的に使いましょう。ただし atom を動的生成はしてはだめですよ。 — V (@voluntas) March 20, 2016 こっちも読んでいこう。 http://erlang.org/doc/efficiency_guide/introduction.htmlMore
[Elixir]正規表現のグループ化、後方一致メモ
Erlang/Elixirは、Perlの正規表現に沿っています。なので、メタ文字などの細かな箇所はそれにそう形になります。 参考: http://erlang.org/doc/man/re.html その中で、後方一致の時の挙動なんかがパッとわかってなかったので、メモ。 グループ化した ([A-Z]) に対して、同じ文字を0回以上繰り返すものを同一のグループとしてみなします。その結果はリストの [“全ての文字列”, “繰り返される値”] という形になります。 日本語でも、こちらを参考に理解を進めたので、メモ。 http://doc.mas3.net/regexp/#backreferenceMore
[Elixir][Erlang]run functions like yield
These days, I challenge exercism.io to get used some languages. Especially, I use Erlang and Swift. Then, I found some difference between Erlang and Elixir in aspect of syntax. So, I describe them as articles to remember them. This time, I attached gist which is run function defined in variables. Elixir run them with func.(),…More
[Elixir][Erlang]difference of binary
double quote and single quote have different meanings between Elixir and Erlang. In addition, “$” and “?” also have. They make me confuse a bit … 😦 Elixir > ?a 97 > [?a] == ‘a’ true > [?a] == “a” false > is_bitstring “a” true > is_bitstring ‘a’ false Erlang > $a. 97 > [$a]…More
Keep Agility with Rapid Deployment
Steve McConnell氏のRapid Developmentを読みました。90年代の書籍。日本語訳はこちらに。ラピッドデベロップメント―効率的な開発を目指して Rapid Developmentは、短いスケジュールで開発をどんどん回していく、という考え方を持った開発スタイルです。最近のAgileの風潮に対して、以前からそういう開発スタイルが提唱されていた、という参考になりました。 ただ、読書を進めていくと、開発プロセスに関するところは大学で教授から学んだことと大半が重なってて、なんか講義を見直している感じがしました。 Part1. Effective development For every complex problem, there is an answer that is short, simple, and wrong. — H.L. Mencken 人に関する問題が、最もソフトウェア開発や品質に影響を与える、と早い段階で書いています。また、”Motivation”が強く影響する、とも書いています。 Classic mistakeとして幾つか実例を挙げています。分類として、人、プロセス、製品、技術に関わるところから。いずれも、昨今のAgileの文脈で言われることの多い従来の開発における問題やらなんやら書かれています。これを見ると、結局は問題は古くからあって気づいた人はどうにかしようとしている、ということを知ることができます。 ソフトウェア開発に関わる活動のプラクティスを、Management、Technical、Quality-Assurance の面から色々紐解いています。その中では、例えばエラーが出やすいモジュールに対する言及や、Testing、レビュー活動など、現在やっているプラクティスがもろもろ含まれていました。 リスクマネジメントのことも。リスクを識別し、分析、優先度をつけて可能な領域で制御する。そこらへんも書いていたり。 ここら辺を書いていますが、個人的に良かったのはそれらをまとめ、体験としてまとめているところでした。昨今の開発全体を書いている書籍を読むよりは、これを読んだ方が有益な感じがします。 Part2. Rapid Development Part2では、今までの一般的な効率的な開発の説明のなかから、Rapid developmentとしてのプラクティスをまとめています。 Agileのプランニングポーカーみたいなタスクのサイズの計測とか、そういう話に似たものも出てきます。いずれも、時間に対してどこまでやるか、を現実としてどうするかに関する話を交えています。 変えることができるところ、できないところを分けて、いろいろ試行錯誤している感じですね。 ただ、現在とは使える周辺ツールにより当時では時間がかかっていたことも短時間で実施できるようになっていることもあり、書籍の数値が完全に正しいというわけでもありません。一方で、考慮しなければいけない要素自体は、ソフトウェア開発という文脈ではとても参考になるものです。 ここには 時間、コスト、実装する機能の量に関するトレードオフ に関しても、すべて書かれています。なので、昨今のAgile開発に類する開発本を読むよりは、この書籍を読む。その上で、当時問題だったところから現在までに変わったところ(例えば、自動化されたテスト環境とか)を把握していく方が、しっかりとした考えを備えることができそう、と感じました。 というか、90年代の書籍に開発の根本的な要素がまとめられた書籍が多く、それらが現在の開発においても色あせていないところが多い。それは逆に、ツールが発展しつつも、そのコアとなる問題は変わっていないし、 その問題解決は簡単ではない ということなのですかね。 このRapid developmentの開発プロセスのwaterfallとか、spiralとか読んでいると、大学の頃に学んだことに近い、そのまんまなところが頭に浮かんできた。。。 要求分析の話とかも。 面白かったのは、high-performance teamというように、チームで高い成果を出すための大事な要素もまとめられていたところです。人やチームに対する考察も、しっかり書かれているのは素敵ですね。その中で、特に 楽しもう!! が1つのトピックで書かれていたところが印象的。アンチパターンも多くのっているところも良かったです。ここらへんは昨今のAgileの文脈とか、開発プロセスの話でよくでますね。時代は回る〜。 Silver-Bullet…More