ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

紙の本の話


f:id:ikeike443:20141129004459j:image
伽藍とバザールが紙の本になってたので買ってしまった。

伽藍とバザールはすでにWeb上でフリーのものがあるし、もちろん僕何回も読んでいる。名論文だよね。

でも紙で買ってしまった。

笑ってくれても構わない。でも紙には魅力がある。ぬくもりがー、とかそんなんじゃなくて、もっといいポイントが。

紙は触って、置いて、並べて、眺めることができる。僕以外の人も。

子供の頃、父親の書棚を見て、自分の知らない難しそうな(でも面白そうな)事柄に思いを馳せたことはないだろうか。様々な分野に興味を持ったことはないだろうか?

僕はある。僕はそれを自分の息子にも感じてもらいたい。それができるのは今のところ紙だけだ、と思う。

Webや電子書籍は便利で高機能だ。そしてパーソナルなものだと思う。僕もたくさん電子書籍を持っている。それもとても良いんだけど、個人で楽しむだけではないことをしたい。

子供の頃に受けた影響は後々までインパクトを与える。子供にいろんなことに興味を持ってもらいたい。

だから紙で買った。

そんな話。

『Amazon Web Services 基礎からのネットワーク&サーバー構築』を読んだ

自分は基本的にアプリケーションエンジニアで、いわゆるインフラまわりはそんなに強くないので買ってみた。

Amazon Web Services 基礎からのネットワーク&サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築

結果的に言って、書かれていることで知らないことはなかったが、久しぶりにAWSを触ってサーバー構築などしてちょっと楽しかったなあと思う。

この本は、アプリケーションエンジニアでインフラ構築などをしたことのない人を対象に、ネットワークやサーバー構築のごくごく初歩的な部分をハンズオンで学ぶことのできる構成になっている。

対象読者としては、アプリケーションエンジニアとして2,3年働いたが、インフラに関わったことがなく、アプリケーションコードを書くこと以外はよく知らない、みたいな人か。そういう人にとってはいい取っ掛かりになる本だと思う。

図を豊富に使ってサーバー構築に苦手意識がある人をフォローしようという意識が感じられるのは好ポイント。
一方でAWSのサインアップの仕方は書いてなかったり、Linux自体の使い方については全く説明がないので、完全な初心者は途中で詰まってしまうだろうなあと思う。あくまである程度Linuxを使ったことがあって、基本的な操作には戸惑わないことが前提になっているので注意。

そういう意味でも、やはり「アプリケーションエンジニアとして2,3年働いたが、インフラに関わったことがなく、アプリケーションコードを書くこと以外はよく知らない」みたいな人にハマる本だと思う。

自分がそういう人だと思うなら、買ってみてもいいのではないでしょうか。

Amazon Web Services 基礎からのネットワーク&サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築



ちなみにリーダブルコードも今更だけど読んだ。
本のサイズも内容もコンパクトに過不足なくまとまっていて読みやすい。携帯もしやすい。
翻訳文も軽妙で楽しい。時々読み返すにもいい本だと思う。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)


こういうテックコラムみたいな本、最近見ないなあ。
Joel on Softwareとか、久しぶりに読みたくなった。

Joel on Software

Joel on Software

More Joel on Software

More Joel on Software

コラムだとこのへんも面白かったなあ。(懐かしい。。)

Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方

Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方

BEST SOFTWARE WRITING

BEST SOFTWARE WRITING

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学


これも定番ですな。。(これは嫌いな人は嫌いだよね。傲慢で差別的だから)

『Java最強リファレンス』をいただきました

先日わざとらしく何気なく上記のようにTweetしたら、著者の @yuichielectric さんにご献本いただきました。ありがとうございます!


読ませていただきましたのでご紹介をば。

Java 最強リファレンス

Java 最強リファレンス

この本は名前の通りJavaのリファレンスです。通読するというよりは、用途に応じて参照するのが正しいでしょう。
この本が素晴らしいのは、基本的にすべての項をJava7, 8といった最近のバージョンをベースにして解説されているところです。*1
大変な労作です。

ラムダ式メソッド参照、Optionalについても "Javaの基礎" という章で解説していますし、Streamについても一章割いてきちんと解説しています。
Fileの読み書きもJava8のStream APIを使った書き方を中心に紹介しているところが大変好印象で、新しいJavaの効率的な書き方がよくわかります。*2

Stream API の後ろで使われている Fork/Joinフレームワークの解説や、Fork/Join 自体の使い方にも触れているところもよいです。ScriptEngine(nashornですね)にもきちんと言及していて、いいリファレンスだと思います。

全体的に標準パッケージのみを解説の対象としているのも潔く、読みやすくなっていると思います。


惜しいのは Servlet にも触れているところかなあと思います。ServletJavaEEですし標準パッケージとは言いがたく、若干蛇足かなと思いました。Web 開発編みたいなものを別途出したほうがいいんじゃないかと思ったけど、Servletを入れないと売れない、っていう判断があったんだろうなあと邪推しました。。

Jettyのようなサードパーティのライブラリ説明をするのに、Mavenのようなビルドシステムの説明がないのは片手落ちな気がしましたし、セッションの説明についても http はステートレスだって書いてるそばからサンプルコードの中でsession.sethogeしており、セッションの永続化をどうするかについて特に説明がないのがちょっと気になりはしました。*3

ですが、気になったのはそこくらいで、Javaの包括的なリファレンスで、最新のJavaをベースに丁寧な解説があるのはとてもとてもポイントが高く、Java開発者であれば必携の書であると思います!

僕も現場の若手に薦めようと思っています。

Java 最強リファレンス

Java 最強リファレンス

@yuichielectric さん、執筆お疲れ様でした。そして出版おめでとうございます!

*1:この本自体はJava5〜8を対象にしています

*2:もちろん5,6,7の書き方も併記されています

*3:そのままだとステートフルになってしまうと思うのでセッションレプリケーションの解説をするか、外部ストレージ(RDBmemcached)に永続化することを説明したほうがいいんじゃないかと思いました

auの誰でも割自動更新には気をつけよう

黙って更新されて、解除料を1万円以上取られます。
2年縛りが解けたあと、ぼやぼやしてるとまた2年縛りになるのでご注意を。
カスタマーセンターに電話して自動更新を解除することはできるっぽいので、早めに確認しておいたほうがいいでしょう。

合法のようですが、黙って更新するのは心象としてはとても悪いですね。

KDDIが逆転勝訴=解約金条項は適法、携帯割引 2年縛り  : キジトラ速報

Jenkins + Maven3.2.1 で IllegalAccessError on AbstractMapBasedMultimap

メモ。時間があるときに調べる。
Maven3.2.1とJenkins1.581のCoreとで依存しているGuavaのバージョンが違っていることが遠因になっていくつかのプラグインが動かなくなっている。(下記参照)
[#JENKINS-22252] Maven 3.2.1: IllegalAccessError on AbstractMapBasedMultimap - Jenkins JIRA

JenkinsでMavenプロジェクトを作って静的解析をしていて下記のようなエラーが出ていたらこの問題に該当すると思って良さそう。PMD, CheckStyle, FindBugs全て同じ。静的解析以外でも問題が起きそうだけど、今のところ聞いてない。

java.io.IOException: Remote call on channel failed
	at hudson.remoting.Channel.call(Channel.java:748)
	at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:168)
	at com.sun.proxy.$Proxy7.execute(Unknown Source)
	at hudson.maven.MavenBuildProxy$Filter.execute(MavenBuildProxy.java:206)
	at hudson.plugins.analysis.core.HealthAwareReporter.registerResultsOnMaster(HealthAwareReporter.java:325)
	at hudson.plugins.analysis.core.HealthAwareReporter.postExecute(HealthAwareReporter.java:316)
	at hudson.maven.Maven3Builder$MavenExecutionListener.recordMojoEnded(Maven3Builder.java:628)
	at hudson.maven.Maven3Builder$MavenExecutionListener.mojoSucceeded(Maven3Builder.java:610)
	at hudson.maven.Maven3Builder$JenkinsEventSpy.onEvent(Maven3Builder.java:306)
	...
Caused by: java.lang.LinkageError: Failed to load com.google.common.collect.AbstractMapBasedMultimap
	at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:326)
	at hudson.remoting.RemoteClassLoader.findClass(RemoteClassLoader.java:236)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:270)
	at hudson.remoting.MultiClassLoaderSerializer$Input.resolveClass(MultiClassLoaderSerializer.java:113)
	... 
Caused by: java.lang.IllegalAccessError: class com.google.common.collect.AbstractMapBasedMultimap cannot access its superclass com.google.common.collect.AbstractMultimap
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
	at hudson.remoting.RemoteClassLoader.loadClassFile(RemoteClassLoader.java:322)
	... 39 more

Workaroundとしては、Mavenプロジェクトをやめてフリースタイルプロジェクトで作るか、Mavenのバージョンを3.0.5くらいまで落とせば一応動く。細かいバージョンの組み合わせは試してないが、まあ3.0.5まで落とせば大丈夫っぽい、という程度の理解をしている。

これ結構直すのは面倒そうだなあ。JenkinsのGuavaバージョンをあげるのか、各プラグイン側でWorkaroundな修正を入れるのか。。

『プロフェッショナルのための 実践Heroku入門』を読んだ

もう2週間も経ってしまったが、RubyKaigi2014に参加してきました。Rubyは全然書いたことないのですが、最近Ruby絡みの仕事をすることになったので行ってみた感じです。

そこでHerokuの相澤さんに買わされたおすすめされた本がこちらです。


これがその時(買った時)のTweet。おっさん二人でむさいですな。。


相澤さんは律儀に僕の本の宣伝もしてくれました! ありがとうございます!!


さてこの『プロフェッショナルのための 実践Heroku入門』ですが、クラウドの利用はすでにしていて、なんだったら他のPaaSも使ったことあるけど、Herokuはちょっとチュートリアルを触ったくらいで細かいことはわかりません、みたいな人にオススメです。Herokuの採用を検討している人も読むといいでしょう。

Herokuをつかって実際にサービスを立ち上げる際に気をつけるべき点や、よく詰まる点などが解説されています。

例えばPaaSならではのタイムアウト制限についても、単純なレスポンスのタイムアウト制限の話から、Herokuの仕組みを知っていないと理解しがたいSlugコンパイル時間の制限、Slugの容量制限の話まで、Herokuの仕組みについて触れながらわかりやすく説明してくれます。

実運用に入れば必ず気になる、カスタムドメインの設定の仕方やSSL導入の際の注意点、Heroku Postgresを使う際のポイントも解説されています。

また7章では実際にHerokuのテクニカルサポートをされている織田さんが、ありがちなトラブルについて具体例を上げながら解説してくれていて役に立ちます。

最後の9章はHeroku創業者の言葉であるThe Twelve-Factor Appの全訳です。全訳はWebでも読めますが、改めてこの本につけていることに大きなメッセージを感じます。
これはHerokuを使う使わないに限らず、モダンなソフトウェアが持っているべきものだと思います。熟読しましょう。

僕自身は前職ではHerokuもよく使っていましたし、Herokuを使って立ち上げたサービスとしては日本では結構早い時期に属するものに関わってたなあと今思い出しました。(更にいうとPlay2+Scalaだったしね)

転職してからはHerokuはじめいわゆるXaaSなものとは全く疎遠になりましたが、また触れる機会を持ちたいものです。。


最後に僕の本のアフィも貼っておきます。一緒に読むと効果的ですよ!