■
nex5からrx10へ
けなくの中堅プログラマが読むべき本10冊
ここで中級者とは、仕事でもプライベートでも構いませんが、日常的にプログラムを書き続けて、5~10年であることとします。
ただプログラムを書くのでは無く、より良い書き方の追求、より良い開発環境の構築(スクリプト、CI等)、
他の言語の習得、使っているツールのソースリーディング。
これらを続けての5〜10年とします。
初心者の方はこちらへ
けなくのプログラマが読むべき本10冊 - WeBLoG
http://d.hatena.ne.jp/kennak/20070509/1178766259
また、CIやらないといけないのは解っているけど、一人じゃできないとか、
忙しいからできない等の言い訳も初心者とします。
本題、開発を続けて年数が経つと全体がなんとなく見えてきます。
開発しながら、自分の環境、言語、プログラムを改善し続けてきて、更に見えてくること。
改善するのは開発だけではいけないという事実。
という訳で、前回の初心者向けではプログラムを書くことを、書けることに主眼
を置いていましたが、
今回は開発に目を向けて関連する本を前半後半に分けて。
まずは前半。
継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化
- 作者: David Farley,Jez Humble,和智右桂,高木正弘
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2012/03/14
- メディア: 大型本
- 購入: 24人 クリック: 567回
- この商品を含むブログ (53件) を見る
ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE)
- 作者: John Allspaw,Jesse Robbins,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/05/14
- メディア: 大型本
- 購入: 10人 クリック: 923回
- この商品を含むブログ (50件) を見る
アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス (IT Architects’ Archive)
- 作者: ディーン・レフィングウェル,玉川憲,橘高陸夫,畑秀明,藤井智弘,和田洋,大澤浩二
- 出版社/メーカー: 翔泳社
- 発売日: 2010/02/18
- メディア: 大型本
- 購入: 6人 クリック: 261回
- この商品を含むブログ (21件) を見る
エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)
- 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2011/04/09
- メディア: 大型本
- 購入: 19人 クリック: 1,360回
- この商品を含むブログ (131件) を見る
Making Software ―エビデンスが変えるソフトウェア開発
- 作者: Andy Oram,Greg Wilson,久野禎子,久野靖
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/09/24
- メディア: 大型本
- 購入: 1人 クリック: 132回
- この商品を含むブログ (17件) を見る
とりあえず上記5冊。
全て読み終えたときに開発全体の未来が見えるはず。
さて、次は後半。
前半は開発、では後半はというと、
言語について、です。
良いプログラマは言葉を大切にします。
例えば、なぜforよりeachの方が良いのか。
この意味が解る人、解らない人、ピンと来た人は以下を、
上から順に読んで行くことに意味があります。
ウィトゲンシュタイン『論理哲学論考』を読む (ちくま学芸文庫)
- 作者: 野矢茂樹
- 出版社/メーカー: 筑摩書房
- 発売日: 2006/04/01
- メディア: 文庫
- 購入: 14人 クリック: 60回
- この商品を含むブログ (103件) を見る
- 作者: 野矢茂樹,西村義樹
- 出版社/メーカー: 中央公論新社
- 発売日: 2013/06/24
- メディア: 新書
- この商品を含むブログ (30件) を見る
- 作者: チャイナ・ミエヴィル,内田昌之
- 出版社/メーカー: 早川書房
- 発売日: 2013/02/26
- メディア: 単行本
- クリック: 13回
- この商品を含むブログ (35件) を見る
- 作者: 野矢茂樹
- 出版社/メーカー: 講談社
- 発売日: 2011/07/08
- メディア: 単行本
- 購入: 1人 クリック: 32回
- この商品を含むブログ (23件) を見る
あ、一冊足りないや。
最後の一冊はあなたの心の中にあります。
この仕事を始めた頃に読んだあの本。
読み返すと新たな発見があるかもしれません。
VMWare EsxiとJenkinsとGradleでインフラのコード化&CI
要件は
- 作業のログは永遠に残す必要がある
- いつ、誰が、どういった理由でインフラを変更したかわかるようにする
ひとつ、落とすと
- インフラをコードで書けるようにする
- 開発、本番共にVMWareで構成された基盤なのでVMWareの仮想マシンが作れるコードを書く
- インフラコードをバージョン管理し、変更毎に構築できるかテストする
- コードで構築されたインフラでアプリケーションの全てのテストが通るか確認する(インフラの要件は設定ファイルがあるかどうかではなく、アプリケーションが動作するかどうか)
- テストは既に動作しているCIがあるので、それを使い回す
- ログの保持もJenkinsにしてもらおう
やること
- Jenkinsから仮想マシン作成、OSのインストール
- Jenkinsのノードに作成された仮想マシンを追加
- 追加されたノードでOSインストール後の設定やミドルウェアのインストール
- 環境の整ったノードに対してアプリのデプロイとテスト
インフラ定義Gradleファイル
applyEx { plugins 'java_ext', 'sh', 'tomcat_ext', 'vm', 'mkdir', 'proxy_auth' files 'common/yum_update.gradle', 'common/set_ntp.gradle', 'common/install_httpd.gradle', 'common/install_ssh.gradle', 'common/set_secretkey.gradle' } vCenter { url = 'http://xxx.xxx.xxx.xxx/sdk' user = 'root' passwd 'JM*rtTS**MfJgDt**CXXZ*4gNiyB***jssVS' } vm { description = 'テスト用アプリケーションサーバ' name = 'testap' registry { center = 'vCenter' datastore = 'test' host = 'test_cluster' } cpu { core = 4 socket = 1 } memory { sizeGB = 8 } hdd { sizeGB = 128 type = 'thin' } iso { file = 'iso/CentOS-6.4-x86_64-netinstall.iso' datastore = 'test' } network { name = 'VM Network' ip = '192.168.**.**' openPorts = ['http', '5900:tcp', '8080:tcp', '8081:tcp'] gateway = '192.168.**.**' } passwd 'JM*rtTS**MfJgDt**CXXZ*4gNiyB***jssVS' } dir { root { var { log { testApp(perm:755) } } } } java { version = '7u21' } tomcat { version = '7.0.40' option = ['-Dfile.encoding=UTF-8', '-Dcatalina.logbase=/var/log/tomcat', '-Dnet.sf.ehcache.skipUpdateCheck=true', '-XX:-UseSplitVerifier', '-XX:+DoEscapeAnalysis', '-XX:+CMSClassUnloadingEnabled', '-XX:+UseParNewGC', '-XX:+UseConcMarkSweepGC', '-XX:PermSize=128m -XX:MaxPermSize=256m', '-Xms256m -Xmx512m', '-server'] } システムの設定 << { os.insert('/etc/sysctl.conf'.asType(File), 'vm.swappiness = 30') os.execute('sysctl -p') } //固有設定を追加 Httpdのインストール << { '/etc/httpd/conf/httpd.conf'.asType(File).with { write text.replaceAll('#ServerName www.example.com:80',"ServerName ${vm.name}:80") write text.replaceAll('Options Indexes FollowSymLinks','Options FollowSymLinks') println path println text } '/etc/httpd/conf.modules.d/01-mpm.conf'.asType(File).with { write '''# event MPM |# StartServers: initial number of server processes to start |# MinSpareThreads: minimum number of worker threads which are kept spare |# MaxSpareThreads: maximum number of worker threads which are kept spare |# ThreadsPerChild: constant number of worker threads in each server process |# MaxRequestWorkers: maximum number of worker threads |# MaxConnectionsPerChild: maximum number of connections a server process serves |# before terminating |<IfModule mpm_event_module> | StartServers 2 | MinSpareThreads 25 | MaxSpareThreads 75 | ThreadsPerChild 25 | MaxRequestWorkers 150 | MaxConnectionsPerChild 0 |</IfModule>'''.stripMargin() println path println text } } task installModJk << { os.installRPM('http://repo/repos/CentOS/6/x86_64/', 'mod_jk-1.2.37-1.x86_64.rpm') new File('/etc/httpd/conf.modules.d/00-mod_jk.conf').with { new File('/etc/httpd/conf.modules.d/workers.properties').with { write '''worker.list=ajp13 |worker.ajp13.port=8009 |worker.ajp13.host=localhost |worker.ajp13.type=ajp13'''.stripMargin() } def conf = '/etc/httpd/conf.modules.d/00-proxy.conf'.asType(File) conf.write(conf.text.replaceAll('^LoadModule proxy_ajp_module','#LoadModule proxy_ajp_module')) } 秘密鍵の設定 { host = 'serverA' user = 'root' password = '1to*oCY*et06axq*9TahD***QvRxu**/n8e' } defaultTasks ( 'システムの更新', 'VMWareToolsのインストール', 'VMWareToolsの更新', 'mkdir', 'Javaの設定', 'Ntpの設定', 'Httpdのインストール', 'Tomcatのインストール', 'modJkのインストール', 'システムの設定', '秘密鍵の設定', '再起動' )
このコードを実行すると仮想マシンが作成されるので、
その後、Jenkins上のスクリプトでノードに追加し、ミドルウェアの設定を実行するジョブを後続として流す。
ミドルの変更前にスナップショットが取られるので、テストがうまくいったら削除する(ここはまだ自動化してない)。
見えてない部分のコードでは泥臭くyum installとかwgetとかやっていて、VMの作成はvijavaを使用している。
ミドルウェアの設定ジョブが終わったら、テストジョブを後続として流して、インフラのCI環境の完成。
次にやりたいのは設定や、ミドルウェアをマトリクスで一斉にパフォーマンステストして・・・みたいなことをやりたい。
忙しいプログラマ、SEが購読すべきニュース系RSS
地下鉄でさっとRSSを読みたい。
Google Readerで全文ボタンなんてかったるくて押していられない。
けどニュースは読みたい。
そんな人向けのRSS
年末に向けてRSSを整理したのでついでに公開してみる。
ニュースサイトはタイトルのRSS自体出してない所もあり、対策として全文サービス等をメタメタに使用しているのでRSSのURLが面白いことになっているが気にしない。
少し前まで、まるごとRSSだけで完結してたんだけど、テキスト以外のいいねボタンとかも入ってくるのが嫌なので、他の全文サービスに一部切り替えて使用。
iPhoneではreederが良い。
InfoQ.com Japan
http://mrss.dokoda.jp/a/http/www.infoq.com/jp/rss/rss.action?token=yiTZl4Djkwx6iiLiBnhGQtG8FGpuvKT5
News Spiral
http://mrss.dokoda.jp/a/http/www.the-journal.jp/contents/newsspiral/atom.xml
Newsweek コラム&ブログ
http://mrss.dokoda.jp/a/http/newsweekjapan.jp/column/rss.xml
Publickey
http://fulltextrssfeed.com/www.publickey1.jp/atom.xml
Reuters: トップニュース
http://mrss.dokoda.jp/a/http/feeds.reuters.com/reuters/JPTopNews
SourceForge.JP Magazine
http://mrss.dokoda.jp/a/http/rss.rssad.jp/rss/sourceforge/magazine/rss
The Daily WTF
http://syndication.thedailywtf.com/TheDailyWtf
WIRED VISION
http://www.wizardrss.com/feed/feed.rssad.jp/rss/wired/feed.rdf
「文藝春秋」最新記事一覧 - 文春.jp
http://mrss.dokoda.jp/a/http/bunshun.jp/bungeishunju/bungeishunju.xml
エンタメ スクープ
http://mrss.dokoda.jp/a/http/entameblog.seesaa.net/index.rdf
スラッシュドット・ジャパン
http://rss.rssad.jp/rss/slashdot/slashdot.rss
セキュリティ、個人情報の最新ニュース
http://mrss.dokoda.jp/a/http/b.hatena.ne.jp/entrylist?sort=hot&threshold=1&url=http://www.security-next.com/&mode=rss
ナショナルジオグラフィック ニュース
http://mrss.dokoda.jp/a/http/www.nationalgeographic.co.jp/news/rss.php
ニッセイ基礎研究所 新着情報一覧
http://mrss.dokoda.jp/a/http/www.nli-research.co.jp/rss/index.rdf
リコールナビ
http://mrss.dokoda.jp/a/http/recall-navi.com/modules/whatsnew/atom.php
世界の三面記事・オモロイド
http://mrss.dokoda.jp/a/http/omoroid.blog103.fc2.com/?xml
主要ニュース 東京新聞
http://mrss.dokoda.jp/a/http/www.zou3.net/php/rss/tokyo2rss.php?cat=main
国際ニュース - CNN.co.jp
http://mrss.dokoda.jp/a/http/feeds.cnn.co.jp/rss/cnn/cnn.rdf
地震情報 - goo 天気
http://weather.goo.ne.jp/earthquake/index.rdf
日本経済新聞 すべて
http://fulltextrssfeed.com/www.zou3.net/php/rss/nikkei2rss.php?head=main
暗いニュースリンク
http://mrss.dokoda.jp/a/http/hiddennews.cocolog-nifty.com/gloomynews/atom.xml
NEWS WEEK最新記事
http://mrss.dokoda.jp/a/http/newsweekjapan.jp/story/rss.xml
海外経済全般:経済レポート一覧
http://www3.keizaireport.com/rss/node_52.xml
科学ニュースあらかると
http://mrss.dokoda.jp/a/http/www.mypress.jp/v2_writers/beep/cache/rss.rdf
読売新聞の医療・介護・健康情報サイト「yomiDr.(ヨミドクター)」
http://mrss.dokoda.jp/a/http/rss.rssad.jp/rss/yomidr/rss00-news
ジョナサン・ケイナー - 今週の射手座
http://www.wizardrss.com/feed/www.cainer.com/japan/weekly/sagittarius.html