tag:blogger.com,1999:blog-27643155565840619842024-03-14T20:10:08.831+09:00しゅんたっくの開発日誌技術に関する学びの記録
<a href="http://twitter.com/#!/shun_tak">@shun_tak</a>Unknownnoreply@blogger.comBlogger37125tag:blogger.com,1999:blog-2764315556584061984.post-8003085856004326062015-11-29T12:14:00.001+09:002015-11-29T12:19:04.858+09:00JJUG CCC 2015 Fallに参加してきました<div dir="ltr" style="text-align: left;" trbidi="on">
Javaのコミュニティカンファレンスに参加してきたのでメモを投稿。ちゃんとまとめるつもりはあまりないけど、あとで公開されたスライドへのリンクも追加する。<br />
<br />
JJUG CCC 2015 Fall<br />
<a href="http://www.java-users.jp/?page_id=2056">http://www.java-users.jp/?page_id=2056</a><br />
<br />
<h2 class="entry-section">
keynote-1 基調講演1 : Javaは守りに入らない、これが今のJavaだ</h2>
by 谷本 心(日本Javaユーザーグループ)<br />
10:00-11:00<br />
#ccc_keynote1<br />
<br />
Kids are Future.<br />
Javaを子供向けに教える。教育に利用する。<br />
<br />
そろそろ他の言語に行こうと思っていたが、やっぱりJavaから離れられなかった。<br />
Spring Boot<br />
<br />
<h2 class="entry-section">
keynote-2 基調講演2:Java EE 8 – Work in Progress</h2>
by David Delabassee(Oracle Corporation)<br />
11:00-12:00<br />
#ccc_keynote2<br />
<br />
進捗がいいもの<br />
WEB層の拡張 (HTML5 Support/ Web Tier Enhancements)<br />
JSON Binding (JSONB)<br />
JSON Processing (JSON-P) enhancements<br />
Server-sent events (SSE)<br />
Action-based MVC<br />
HTTP/2 support<br />
<br />
Survey: <a href="https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee">https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee</a><br />
<br />
JSON-P 1.1<br />
JsonPointer…JSONの要素へのポインタオブジェクト<br />
immutableになってる<br />
<br />
SSE<br />
JAX-RSを活用していく<br />
ストリームを使う例<br />
@Produces("text/event-stream")<br />
<br />
MVC<br />
Java EE 8ではAction-based MVCを提供する (Struts2やSpringのようなアプリケーションでコントローラを実装するMVC)<br />
今まで通りJSFのようなComponent-based MVCも提供し続ける<br />
Model層、View層は既存の資産を利用すれば良いが、Controller層については議論された。結局JAX-RSを使うことになり、それがいい方法であった。<br />
<br />
Controller用の新しいアノテーション<br />
@Controller…メソッドに付与してコントローラであることをフレームワークに知らせる<br />
<br />
HTTP/2サポート<br />
Servlet 4.0による<br />
ほとんどの開発者にとっては今まで通りの使い方でHTTP/2対応ができる<br />
<br />
感想<br />
早くJava EE 8出てほしい。<br />
<br />
<h2 class="entry-section">
AB-1 「jOOQ と Flyway で立ち向かう、自社サービスの保守運用」</h2>
by 池田 裕介(株式会社サイバーエージェント)<br />
13:00-13:50<br />
#ccc_ab1<br />
<br />
DBスキーマのバージョン管理<br />
チーム開発実践入門にも書かれてる<br />
<br />
Flyway…DBマイグレーションツール<br />
mavenやgradleでビルドできるようにするといい<br />
<br />
ファイル名のバージョンは連番ではなくタイムスタンプにすると良い<br />
マージしたときに衝突しない<br />
outOfOrderオプションを使うことで過去のバージョンも適用できる<br />
<br />
JOOQ<br />
すでに存在するDBを重視<br />
ドキュメントやチュートリアル、サンプルコードが充実している<br />
fetch()から結果をCSV, XML, HTML, FormatedText フォーマットで出力が可能<br />
<br />
感想<br />
JOOQ便利そうだし可読性もすごくいいけど、JPAにあるようなentity cacheやprepared statement cacheの機能があるのかどうか。<br />
またJPAでも、Criteria APIの可読性が低いと思ったらJPQLを使えば良いのでは。要調査。<br />
<br />
回答を発表者から頂けた。<br />
<blockquote class="twitter-tweet" lang="ja">
<div dir="ltr" lang="ja">
<a href="https://twitter.com/shun_tak">@shun_tak</a> JPA のエンティティの概念とは違って、純粋な O/R mapper ではないので Entity Cache に当たる機能はないですね。EhCache や hazelcast 使う感じです。</div>
— Yusuke Ikeda (@yukung) <a href="https://twitter.com/yukung/status/670475455032524801">2015, 11月 28</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" lang="ja">
<div dir="ltr" lang="ja">
<a href="https://twitter.com/shun_tak">@shun_tak</a> Prepared Statement Cache も機能としては無くて、代替案としてはこんな感じです。<a href="https://t.co/qRM4SskEAc">https://t.co/qRM4SskEAc</a>
作者の考え方としてはここに記載があります。 <a href="https://t.co/npsB7Cy9KE">https://t.co/npsB7Cy9KE</a></div>
— Yusuke Ikeda (@yukung) <a href="https://twitter.com/yukung/status/670475504479178754">2015, 11月 28</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
<br />
<h2 class="entry-section">
EF-2 How to speed up your application using JCache[通訳有]</h2>
by gregrluck<br />
14:00-14:50<br />
#ccc_ef2<br />
<br />
データを2回以上参照するなら、キャッシュを使う<br />
データベースアクセスだけでなく、データの生成など<br />
<br />
アムダールの法則 (amdahl's law)<br />
<br />
Cache効率(キャッシュのヒット率)<br />
<br />
何をキャッシュにつめるか<br />
参照データ(郵便番号など)<br />
長期間存在するデータ<br />
よく使われるデータ<br />
よく変化するデータについては考慮する<br />
<br />
メソッド<br />
get, put, putAndGet<br />
<br />
JSR107 annotations<br />
<br />
感想<br />
JCacheのセッションすごく面白かった。キャッシュのイントロダクションが長かったかも。通訳しながらなので仕方ないけど、JCacheの設計方針や実装についてもっと詳しく話を聞きたかった。<br />
<br />
<h2 class="entry-section">
GH-3 マイクロサービスアーキテクチャ – アーキテクチャ設計の歴史を背景に</h2>
by 鈴木 雄介<br />
15:00-15:50<br />
#ccc_gh3<br />
<br />
時代の変化<br />
メインフレーム→クラサバ→ウェブ<br />
<br />
クラウドの時代(過渡期)<br />
サーバーの処理能力が超巨大化<br />
巨大なサービスをどのように変化させていくか<br />
<br />
カナリアリリース(ブルー・グリーンデプロイ)<br />
新バージョンをリリースして稼働させたサーバー群に、全体のアクセスのうち少量だけ流すことで、システム全体を停止することなくリリース時の不具合を検知することが出来る<br />
<br />
ダークカナリアリリース (test-in-prod)<br />
LBから新バージョンにアクセスできるのは開発者のみ<br />
モチベーション:ステージングではなく本番でテストしたい<br />
→連携するシステムとの整合性が取れているかは本番環境でなければわからない<br />
<br />
Chaos Monkey<br />
Netflixの事例<br />
<br />
巨大なサービスをいかに管理するか<br />
→マイクロサービスアーキテクチャ (MSA) に分割<br />
<br />
広義には、粒度ではなく関係性に注目を<br />
重要なのはサービス相互の関係性のあり方<br />
- 複雑なものを、いかに管理するのか<br />
<br />
巨大なサービスはトップダウンに管理できない<br />
技術面:分散配置と統合<br />
組織面:持続性と分権<br />
ボトムアップでもうまくいかない<br />
あるルールのもとで多様性を保証する<br />
→プラットフォームを利用する<br />
<br />
サービスの分割<br />
モジュール分割の基本は「時間軸の中で変化するスピードの違いの境目」で切る<br />
<br />
プラットフォームとは<br />
巨大なサービスを管理するための基盤<br />
<br />
<h2 class="entry-section">
GH-4 GS CollectionsからEclipse Collectionsへ - 機能豊富なオープンソースJavaコレクションフレームワーク</h2>
by 伊藤 博志(ゴールドマン・サックス)<br />
16:00-16:50<br />
#ccc_gh4<br />
<br />
スライド:<a href="http://www.goldmansachs.com/gs-collections/documents/2015-11-28_JJUG_CCC.pdf">http://www.goldmansachs.com/gs-collections/documents/2015-11-28_JJUG_CCC.pdf</a><br />
<br />
JavaOne 2014で発表して以降、人気急上昇中<br />
<br />
開発者としてはかなり自信があり、Java標準のコレクションに採用されても遜色がないと考えている<br />
<br />
ファクトリーメソッドが用意されてる mutable/immutable<br />
より簡潔に書ける<br />
より多くのケースでメソッド参照を活用できる<br />
より高い可読性で記述できる<br />
再利用が可能<br />
メモリ効率が良い<br />
<br />
SortedBag<br />
キーに対して、キーのaddされた回数を保持する<br />
<br />
shuffleThis<br />
リストの要素の順番をランダムに入れ替える<br />
<br />
zip<br />
リストとリストを組み合わせてペアのリストにする<br />
<br />
chunk<br />
コレクションの分割処理<br />
<br />
集合演算<br />
intersect, union, difference, symmetricDifference (XOR)<br />
<br />
CharAdapter<br />
文字列のコレクションから、数字のみ抽出して別の文字列コレクション<br />
<br />
GS Collections Kata<br />
<a href="https://github.com/goldmansachs/gs-collections-kata">https://github.com/goldmansachs/gs-collections-kata</a><br />
ユニットテストをひとつずつパスしていくTDD型トレーニングマテリアル<br />
<br />
感想<br />
GuavaやApache Commonsのコレクションで良くない?って思ってたけど、Eclipse Collection使おうと思えた。すごい。<br />
<br />
<h2 class="entry-section">
EF-5 これからのコンピューティングの変化とJava</h2>
by きしだなおき<br />
17:00-17:50<br />
#ccc_ef5<br />
<br />
処理を早くするには<br />
並列度を上げる<br />
より近いところにデータを置く(キャッシュ)<br />
<br />
データ・セントリック・システム<br />
データの近くで処理(Hadoop等)<br />
<br />
ノイマン型アーキテクチャ<br />
CPU…OSが実行できる<br />
GPU<br />
<br />
非ノイマン型アーキテクチャ<br />
ノイマン型じゃない<br />
FPGA, ニューラルネット型コンピュータ、量子コンピュータ<br />
2,3つ目は今のところプログラム可能ではない<br />
<br />
FPGA<br />
命令をメモリから読み込む必要がない<br />
データを流すだけで回路が処理をしてくれる<br />
<br />
JavaでCPU<br />
Streamで並列処理<br />
<br />
JavaでGPU<br />
Aparapi…JavaコードをOpenCLに変換・楽だがGPUの性能を出しにくい<br />
OpenCL…JOCLとかある・ちょっと面倒だけどGPUの性能を出せる<br />
Project Sumatra…Stream処理を自動的にGPUで行う(今年5月で開発終了)<br />
<br />
ディープラーニングで処理が速くなる<br />
<br />
JavaでFPGA<br />
Synthesijer…FPGA用のコードを自動生成してくれる<br />
<br />
今のままのJavaで足りるのか<br />
オブジェクトのメモリ効率が悪い<br />
さまざまなアーキテクチャに対応した値が扱えない<br />
- 256bit整数型、floatx4型(SIMD命令用)<br />
高機能データ構造がメモリにやさしくない<br />
- Genericsが基本型を扱えない<br />
配列がハードウェアにやさしくない<br />
<br />
ハードウェアに近付く (Close to the Metal)<br />
sun.misc.Unsafe<br />
並列化プリミティブとかシリアライズとかメモリ管理とかJVMとのやりとりができる<br />
Cassandra, Ehcache, HBase, Hadoop, Hibernate, JRuby, Netty等の製品が使ってる<br />
Java9でメンテナンス停止(仕様凍結)<br />
Java $N-1で完全置き換え、Deprecate<br />
Java $Nで廃止<br />
Unsafeの代替は仕様策定中<br />
<br />
Project Valhalla<br />
ユーザー定義基本型<br />
ValueType…nullを持たず、参照ではなくデータを格納する<br />
ハードウェアに近いコードが書けるようになっていく<br />
<br />
コンピュータは変わる<br />
Javaも変わる<br />
あなたは?
<br />
<h2 class="entry-section">
ふと思ったこと</h2>
<blockquote class="twitter-tweet" lang="ja">
<div dir="ltr" lang="ja">
あくまで自分はそう感じるというだけだけど、RailsやNode.jsやGolangのコミュニティよりも、Javaの方がワクワクする。 <a href="https://twitter.com/hashtag/jjug_ccc?src=hash">#jjug_ccc</a></div>
— しゅんたっく (@shun_tak) <a href="https://twitter.com/shun_tak/status/670470151335231488">2015, 11月 28</a></blockquote>
<script async="" charset="utf-8" src="//platform.twitter.com/widgets.js"></script>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-92075107635854628992014-08-18T14:31:00.000+09:002014-08-18T14:32:00.778+09:00Mac OS X 10.9の初期セットアップ覚え書き<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 class="entry-section">
バージョン</h2>
<div>
<ul>
<li>Mac OS X 10.9.4</li>
</ul>
</div>
<h2 class="entry-section">
システム環境設定</h2>
<div>
<ul style="text-align: left;">
<li>トラックパッド・ジェスチャの設定</li>
<ul>
<li>システム環境設定 --> トラックパッド</li>
</ul>
<li>Spotlightのキーボードショートカットを [⌘+Space] に変更</li>
<ul>
<li>システム環境設定 --> キーボード --> ショートカット --> Spotlight</li>
</ul>
<li>スリープ開始5秒後にパスワードを要求</li>
<ul>
<li>システム環境設定 --> セキュリティとプライバシー --> 一般</li>
</ul>
</ul>
</div>
<h2 class="entry-section">
基本的にインストールするもの</h2>
<ul>
<li>FIrefox</li>
<li>Google Chrome</li>
<li>Evernote (App Store)</li>
</ul>
<h2 class="entry-section">
開発用にインストールするもの</h2>
<ul style="text-align: left;">
<li>XCode (App Store)</li>
<li>iTerm2</li>
<li>CotEditor</li>
<li>Emacs for Mac OS X</li>
<li>Eclipse</li>
<li>Intellij IDEA 13</li>
<li>SourceTree (Git)</li>
<li>MySQL Workbench</li>
<li>Sequel Pro (MySQLクライアント)</li>
</ul>
<h2 class="entry-section">
フォント</h2>
<ul>
<li><a href="http://www.marksimonson.com/fonts/view/anonymous-pro" target="_blank">Anonymous Pro</a></li>
<li><a href="https://launchpad.net/takao-fonts" target="_blank">Takao fonts</a></li>
</ul>
<div>
<br /></div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-25144949529829081612014-04-23T19:19:00.000+09:002014-05-08T18:41:54.688+09:00[Jenkins] 選択肢からGitのブランチを選んでJenkinsビルドできるようにする方法<div dir="ltr" style="text-align: left;" trbidi="on">
ビルドする度に毎回、Jenkinsの設定でビルド対象のブランチを変更するのがめんどくさい。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeJS9PrMIPh6uW3MutwPM5d7oddlsdcJUJYHLV78Nd7WTq87aWSOiJpL-h8-RxfrNrbpkUtVgzCR_AYGm3LB6gchD56MwytgqyiZjVaCv3x6eWkGa4xOFY7eZrGNnfyuRanUdg23qb07ge/s1600/build_parameter_choose.png" /></div>
<br />
こんな感じで、ビルドボタンを押したあと、ブランチ一覧が出てきて、それを選択して指定できたら便利だなあ…。<br />
ブランチ一覧も、Gitリポジトリから自動的に生成できたらいいなあ…。<br />
<br />
ということでJenkinsの環境を整えた。<br />
<br />
以下、Gitで管理されたプロジェクトをJenkinsでビルドするとき、リモートリポジトリ(中央リポジトリ)から動的にブランチ一覧を生成し、一覧からブランチを指定してビルドする方法です。<br />
<h2 class="entry-section">
やりたいこと</h2>
<div>
<ul style="text-align: left;">
<li>ビルドボタンを押したあと、どのブランチでビルドするか選びたい</li>
<li>ブランチ一覧はGitリポジトリから自動的に生成したい</li>
</ul>
</div>
<h2 class="entry-section">
前提</h2>
<div>
<ul style="text-align: left;">
<li>Git pluginを使って、Gitプロジェクトのビルドができる</li>
</ul>
</div>
<h2 class="entry-section">
使ったプラグイン</h2>
<ul style="text-align: left;">
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin">Extended Choice Parameter Plug-In</a> (version 0.30)</li>
</ul>
<div>
似た名前のプラグインで、Extensible Choice Parameter pluginというものがあるので注意。こちらも便利だけど、本題から外れるので紹介しない。</div>
<h2 class="entry-section">
1-1. ブランチ一覧ファイルのフォーマット</h2>
<div>
以下のようなフォーマットでブランチ一覧ファイルを生成することで、ビルド時に選択肢として使用することができる。<br />
<script src="https://gist.github.com/shun-tak/11204128.js"></script><noscript><pre><code>repoA = origin/develop,origin/feature/cashback,origin/master
repoB = origin/login_campaign,origin/tutorial,origin/master</code></pre>
</noscript><br />
フォーマットは次のようになっている:<br />
<ul style="text-align: left;">
<li>一行は次のように構成される</li>
<ul>
<li>キー名 = [カンマ区切りで要素を羅列]</li>
</ul>
<li>右辺の要素が選択肢を構成する</li>
<li>左辺のキー名は、選択肢を呼び出すときに使用する</li>
</ul>
<h2 class="entry-section">
1-2. ブランチ一覧ファイルの生成</h2>
<div>
肝心のブランチ一覧ファイルは `git ls-remote` コマンドを使用してブランチ一覧を取得し、 `sed` と `tr` で加工して生成する。<br />
<script src="https://gist.github.com/shun-tak/11204365.js"></script><noscript><pre><code>#!/bin/sh
git ls-remote --heads git@project.example.com:organization/repo_a.git | sed -e "s#.*refs/heads/#origin/#" | tr "\n" "," | xargs echo "repoA =" > branch_list.properties
git ls-remote --heads git@project.example.com:organization/repo_b.git | sed -e "s#.*refs/heads/#origin/#" | tr "\n" "," | xargs echo "repoB =" >> branch_list.properties</code></pre>
</noscript><br />
本題から外れるので、各コマンドの説明は省略する。<br />
<br />
このコマンドをJenkinsのジョブで「定期的に実行」させておく。別に定期的に実行でなくてもいいけど、定期的に実行することで、意識せずにブランチ一覧を最新状態に保てる。<br />
<br />
自分のチームの場合、スケジュールは `H/15 10-21 * * 1-5` としている。(月-金曜日の10-21時台で、15分ごとに実行)</div>
</div>
<h2 class="entry-section">
2-1. ビルド時に選択肢を提供する</h2>
ブランチ一覧ファイルが生成できたら、これをExtended Choice Parameter Plug-Inで利用する。<br />
<ol style="text-align: left;">
<li>ビルドのパラメータ化にチェックを入れる</li>
<li>パラメータの追加からExtended Choice Parameterを選択</li>
<li>Name, Property File, Property Keyを適切に入力する<br />このとき、Nameはビルド時に環境変数として利用できる</li>
</ol>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0-6uXDbrmksfh1N9sUVJJZG6MiztkZkfRn2YPlkbNsiC7Df7KVnm_DW6O3NyCu5whRT4WWF64WaIQ06yCz6csK-c-IzdWNOWPSh500wEj0mntkUsvLhWA0IVaP-K0IDMJCNVt13HYRaNS/s1600/extended_choice_parameter_plug-in.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0-6uXDbrmksfh1N9sUVJJZG6MiztkZkfRn2YPlkbNsiC7Df7KVnm_DW6O3NyCu5whRT4WWF64WaIQ06yCz6csK-c-IzdWNOWPSh500wEj0mntkUsvLhWA0IVaP-K0IDMJCNVt13HYRaNS/s1600/extended_choice_parameter_plug-in.png" height="364" width="640" /></a></div>
</div>
<br />
<ul style="text-align: left;">
<li>Property Fileは、ブランチ一覧ファイルのパスを指定する</li>
<li>Property Keyは、ブランチ一覧ファイルの中のキー名を指定する<br />ここでどの選択肢を使用するか指定できる</li>
<li>Nameは何でもいい</li>
</ul>
<h2 class="entry-section">
2-2. 選択肢に応じてビルドするブランチを変える</h2>
<div>
続いてGit Pluginの方を設定する。</div>
<div>
<br /></div>
<div>
GitのBranches to buildの項目に、Extended Choice Parameterで指定したNameを入力する。例えば `${target_branch}` のように入力する。</div>
<div>
<br /></div>
<div>
これで全ての設定は完了。</div>
<div>
<br /></div>
<div>
ビルドすると次のように選択肢が現れ、どのブランチをビルドするか選べるようになる。</div>
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4wY86ZN6DgbrD83k_yoSMM6m_40RPTzpgLrJMTg2jhYGC1sSCiqSX_0_BF8S6a0fxlTFUJ-JzUBbG0LIDHGImJAnYffFsb05ydg4Nvh59yYVxyHc5emp3TyRuZMqTSmgNl7mcKhCxVSGP/s1600/build_parameter.png" /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi11xsoTmV4u-mjSEvoLW08dQ8J0swDbxK09gvaq7ydhRLbMfkErNcx3bYw2CE5AcjNJtT_86A2tDYS2qxx-c7mbc9KV7GJGmMc_DDvSJdxBwUrbaCIvLmYBAuwHF1lOgiV7drQzkRN1wP9/s1600/build_parameter_choose.png" /></div>
<div>
<br /></div>
<br />
<h2 class="entry-section">
補足</h2>
`hotfix/~` とか `feature/~` を表示したくないって場合は、ブランチ一覧ファイルを生成する段階で、適当に `grep -v` したりして除外してください。<br />
<div>
<br /></div>
<div>
うちのプロジェクトでは、リモート上の不要なブランチは随時削除しているので全て表示しても問題ない感じです。</div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-67769880504589053872014-01-23T15:09:00.002+09:002014-01-23T15:13:48.556+09:00自分のためのrbenvまとめ<div dir="ltr" style="text-align: left;" trbidi="on">
rbenvの使い方の覚え書き<br />
<h2 class="entry-section">
1. Homebrewを使ったrbenvのインストール</h2>
Homebrewを使ってインストールする。
<script src="https://gist.github.com/shun-tak/8573564.js"></script>
<noscript><pre><code>brew update
brew install openssl
brew install readline
brew install rbenv
brew install ruby-build</code></pre>
</noscript>
.bash_profileに以下を追記する。
<script src="https://gist.github.com/shun-tak/8573616.js"></script>
<noscript><pre><code>eval "$(rbenv init -)"</code></pre>
</noscript>
<br />
<h2 class="entry-section">
2. rbenvを使ったrubyのインストール</h2>
インストール可能なrubyバージョンを調べる
<script src="https://gist.github.com/shun-tak/8573635.js"></script>
<noscript><pre><code>rbenv install -l
rbenv install -l | grep 1.9.3</code></pre>
</noscript>
rubyをインストールする
<script src="https://gist.github.com/shun-tak/8573680.js"></script>
<noscript><pre><code>rbenv install 1.9.3-p448</code></pre>
</noscript>
<br />
<h2 class="entry-section">
3. rbenvの操作</h2>
インストール済みのrubyを表示(*が付いてるやつが今適用されてるversion)
<script src="https://gist.github.com/shun-tak/8573694.js"></script>
<noscript><pre><code>rbenv versions</code></pre>
</noscript>
使用するrubyのバージョンを変更する
<script src="https://gist.github.com/shun-tak/8573726.js"></script>
<noscript><pre><code>rbenv global 2.0.0-p247</code></pre>
</noscript>
現在のディレクトリだけrubyのバージョンを変える
<script src="https://gist.github.com/shun-tak/8573716.js"></script>
<noscript><pre><code>rbenv local 1.8.7-p374</code></pre>
</noscript>
gemの操作
<script src="https://gist.github.com/shun-tak/8573749.js"></script>
<noscript><pre><code>rbenv exec gem install bundler</code></pre>
</noscript>
bundlerの操作
<script src="https://gist.github.com/shun-tak/8573759.js"></script>
<noscript><pre><code>rbenv exec bundle install</code></pre>
</noscript>
<br />
<h2 class="entry-section">
参考</h2>
<ul style="text-align: left;">
<li><a href="http://qiita.com/emadurandal/items/a60886152a4c99ce1017">Rails開発環境の構築(rbenvでRuby導入からBundler、Rails導入まで)</a></li>
<li><a href="http://www.d-wood.com/blog/2013/06/30_4157.html">[Ruby on Rails] Homebrew + rbenv で Ruby をインストールする</a></li>
</ul>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-76739867061590689242013-12-12T20:00:00.000+09:002013-12-12T20:00:14.327+09:00新規開発するときに整えたい開発体制<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div>
新規じゃなくてもいいけど、こうだったらいいなという願望。</div>
<ul style="text-align: left;">
<li>バージョン管理を徹底する</li>
<li>masterブランチはいつでもリリース可能に</li>
<li>バッチはJenkinsに集約</li>
<li>テスト駆動開発(単にテストを書くということではなく、テストが開発を駆動していること)</li>
<li>感覚ではなく事実を信じる(計測する)</li>
<li>全てのビュー改修・文言修正にはA/Bテストを</li>
<li>短期的な利益を捨てても長期的な利益を取りにいく</li>
<li>管理ツールも使いやすく(運用コストを減らし、運用ミスの発生確率を下げる)</li>
</ul>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-853464207059732932013-12-08T17:33:00.002+09:002013-12-08T17:34:56.341+09:00アジャイルサムライベースキャンプに参加して<div dir="ltr" style="text-align: left;" trbidi="on">
Agile Samurai Base Campっていうイベントに参加してきました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzUy1I6jKkjovD_HjrKm5Q6p4WLKifuFfh8bx2taK551C6hej7YGrbvFSoqM5GvYuLfophfOGVImC81ukoRF-SRtb1cH8gO4GdMzyi2OfK9XxADZk3rWcWjFcorqJqsMw6Kd6xPk1bn_Z3/s640/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-12-08+17.04.17.png" width="640" /></div>
<a href="http://www.agilesamuraibasecamp.org/">http://www.agilesamuraibasecamp.org/</a><br />
<br />
角谷氏の基調講演から始まって、インセプションデッキとテスト駆動開発の2グループに分かれてセッションが行われました。<br />
<br />
講演者の一人である和田卓人氏は、以前ペアプロをしてもらったこともあり、もう一度お話を聞きたかったので、今回のイベントに参加しました。というわけで自分自身はテスト駆動開発のセッションに参加しました。<br />
<h2 class="entry-section">
和田さんのお話</h2>
冒頭は、まず目標を考え、それを示すテストを書き、red --> green --> refactoringのサイクルを回しましょう(<span style="color: red;">黄金の回転</span>)という、いつものお話から始まりました。<br />
<br />
印象に残ったのは<br />
<ul style="text-align: left;">
<li>「複数を相手にしない。一人ずつ対処する。」(五輪書)</li>
<li>いきなり全てのテストを書いてRedだらけにしない</li>
<li>TODOリストから一つのタスクを引っ張ってきて、テストを書く</li>
<ul>
<li>一つずつテストをひっぱってきて、黄金の回転ですばやく倒す</li>
</ul>
</ul>
という話でした。この話をする前に、大きなタスクは小さく分解して、「一つずつ少しずつ段を小さく」というお話をされていたけど、具体的に言われると、やりがちなので注意しようと思いました。<br />
<br />
テストを書くのは不安を取り除くためというのは、ペアプロをしてくださったときに何度も言われていたけど、今回も強調していっていたのでやはり重要なのだなあと再確認できました。実際にテストを書いて進めてたときは、気持ちが楽だったし。<br />
<br />
また、あるリリース済みの機能の仕様変更が来た場合、テストコードの変更が大量に発生してしまう場合はどうしたらいいですか?という質問をしました。<br />
<br />
当たり前のことだけど、仕様変更が大きければテストコードの変更が多くなるのは当然のことで、その<span style="color: red;">変更をできるだけ少なくするためにはテストフレームワークをカスタマイズする等して対応すると良い</span>とのことでした。<br />
<br />
ただ、テストフレームワークのカスタマイズって、どのレイヤーの話だ?もうちょっと掘り下げて質問すれば良かったけど、自分の技量ではまだ理解できないと思ったのでやめといた。<br />
<h2 class="entry-section">
テスト駆動開発の事例の話</h2>
ここで印象に残ったのは、レガシーコードのTDDの話。これは、自分の環境にも近いものがあり、参考になりました。<br />
<br />
また、<span style="color: red;">TDDしてるプロジェクトのソースコードレビューの観点</span>を質問したが、テストコードをよく見るとのことでした。<br />
<ul style="text-align: left;">
<li>テストが小さな粒度に分解されているか</li>
<li>一つのテストケースで複数のアサーションが入っていないか</li>
</ul>
<div>
テストコード以外の部分は、普通のレビューと同じらしいです。</div>
<h2 class="entry-section">
まとめ</h2>
朝9:30からのイベントだったので、結構疲れた。<br />
<br />
多くの講演者の方々が、一人でも始められるとおっしゃっていたので、がんばってみようと思う。和田さんにも久しぶりにお会いできて、やる気でました。<br />
<br />
明日からまた塹壕に帰ります。がんばるぞー!</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-1129948888960463072013-11-12T20:18:00.002+09:002014-08-18T14:16:33.185+09:00Mac OS X 10.8の初期セットアップ覚え書き<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 class="entry-section">
バージョン</h2>
<div>
<ul style="text-align: left;">
<li>Mac OS X 10.8.5</li>
</ul>
</div>
<h2 class="entry-section">
システム設定</h2>
<div>
<ul style="text-align: left;">
<li>Spotlightのキーボードショートカットを [⌘+Space] に変更</li>
<ul>
<li>システム環境設定 --> キーボード --> キーボードショートカット --> Spotlight</li>
</ul>
<li>スリープ開始5秒後にパスワードを要求</li>
<ul>
<li>システム環境設定 --> セキュリティとプライバシー --> 一般</li>
</ul>
</ul>
</div>
<h2 class="entry-section">
基本的にインストールするもの</h2>
<ul style="text-align: left;">
<li>FIrefox</li>
<li>Google Chrome</li>
<li>Thunderbird</li>
<li>Skype</li>
<li>Evernote (App Store)</li>
<li>XtraFinder</li>
</ul>
<h2 class="entry-section">
開発用にインストールするもの</h2>
<ul style="text-align: left;">
<li>XCode (App Store)</li>
<li>iTerm2</li>
<li>CotEditor</li>
<li>Emacs for Mac OS X</li>
<li>Eclipse</li>
<li>Git</li>
<li>MySQL</li>
</ul>
<h2 class="entry-section">
フォント</h2>
<ul style="text-align: left;">
<li><a href="http://www.marksimonson.com/fonts/view/anonymous-pro" target="_blank">Anonymous Pro</a></li>
<li><a href="https://launchpad.net/takao-fonts" target="_blank">Takao fonts</a></li>
</ul>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-28957864880314895652013-09-20T14:40:00.001+09:002013-09-20T14:44:18.477+09:00ディスクの空き領域を0で埋めるスクリプト<div dir="ltr" style="text-align: left;" trbidi="on">
0が1024*1024文字書き込まれたファイルを延々と生成し続ける。<br />
<br />
ファイル名の形式はYYYY-MM-DD.hhmmss.xxxxxxのようになる。<br />
最後の6桁はマイクロ秒が入る。<br />
<br />
例)2013-09-20.143441.222938
<br />
<br />
Fileは、ディスクがいっぱいになると例外 Errno:ENOSPC を投げる。<br />
これを捕捉して、disc_fullディレクトリを空にすれば、再びディスクを0で埋めることができる。<br />
<br />
これを何度か繰り返せば、ディスクに残るデータを完全に消去することができる。<br />
(フリーソフトを探してダウンロードするのが面倒だったので、自分でスクリプトを書いた)<br />
<br />
以下、スクリプト<br />
<script src="https://gist.github.com/shun-tak/6633636.js"></script>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-33786718469133800392013-09-02T14:40:00.000+09:002013-09-02T15:35:49.036+09:00Rails 3のActiveRecordで、saveしようとするとundefined method `eq' for nil:NilClassのエラーが出る問題の対処<div dir="ltr" style="text-align: left;" trbidi="on">
これは、idカラムの存在しないテーブルなど、Primary Keyを設定していない場合に起きる問題となっている。<br />
<div>
<br /></div>
<div>
参考: http://stackoverflow.com/questions/3124290/undefined-method-eq-for-nilnilclass-with-rails-3-and-ruby-enterprise-on-ubunt</div>
<div>
<br /></div>
<div>
従って、以下のようにmodelでPrimary Keyを指定してやればよい。</div>
<script src="https://gist.github.com/shun-tak/6409439.js"></script>
<div>
RailsではPrimary Keyが存在しないと問題が起きることが多いので、基本的にはPrimary Keyを設定したidカラムを付けておくことを強く推奨する。</div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-57244247312094662312013-06-07T12:40:00.000+09:002013-06-07T12:40:55.999+09:00しゅんたっく 24歳 夏<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcSdHPXWjESAxlwxtstEFHynoFFddMJG3tTNWe5HNU7saXqseo0pclg7Tel4cMxC-f0XkRdgJwsHtkKh0TfCFDkVhB4_ZRJ_t7ZUo-fTuvBrZxoAVIn8apa1Z8CoiaQGF_abntitWtyXDj/s1600/201107050024107ba.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcSdHPXWjESAxlwxtstEFHynoFFddMJG3tTNWe5HNU7saXqseo0pclg7Tel4cMxC-f0XkRdgJwsHtkKh0TfCFDkVhB4_ZRJ_t7ZUo-fTuvBrZxoAVIn8apa1Z8CoiaQGF_abntitWtyXDj/s1600/201107050024107ba.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.amazon.co.jp/gp/product/408870326X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=408870326X&linkCode=as2&tag=tech.shuntak-22">HUNTER×HUNTER 28巻</a>より<img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=408870326X" style="border: none !important; margin: 0px !important;" width="1" />
</td></tr>
</tbody></table>
<br /></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
しゅんたっく 24歳 夏<br />
<br />
己の知識とスキルに限界を感じ悩みに悩み抜いた結果<br />
彼がたどり着いたさきは<br />
感謝であった<br />
<br />
自分自身を育ててくれたシステム開発への限りなく大きな恩<br />
自分なりに少しでも返そうと思い立ったのが<br />
一日一万行 感謝のプログラミング!!<br />
<br />
気を整え 拝み 祈り 構えて タイプ<br />
一連の動作を一回こなすのに当初は5〜6秒<br />
一万行書き終えるまでに初日は18時間以上を費やした<br />
<br />
書き終えれば倒れる様に寝る<br />
起きてはまた書くを繰り返す日々<br />
<br />
2年が過ぎた頃 異変に気付く<br />
一万行書き終えても 日が暮れていない<br />
齢30を越えて 完全に羽化する<br />
感謝のプログラミング 1時間を切る!!<br />
かわりに 祈る時間が増えた<br />
<br />
SOHOを出た時 しゅんたっくのテキストエディタは<br />
描画を置き去りにした</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-81302102260944045082013-05-10T12:00:00.000+09:002013-06-10T13:39:47.468+09:00オブジェクト指向できていません!<div dir="ltr" style="text-align: left;" trbidi="on">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO6klgcSfvxRa7fiPhqGPmMCpcS7JJU32_jA5fql6hkCh1_ilBiAGqDp-7jZGPPFx8lbSBPWlzUJIekzGT8hcXnIvs3bP6lSMFUlpFGNHziqqFFMf0tBSy8NV5O-xmXXWZtw1H-ESkhM6R/s1600/small_311878800.jpg" style="margin-left: auto; margin-right: auto;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.flickr.com/photos/alainbachellier/311878800/">Alain Bachellier</a> <a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">cc</a></td></tr>
</tbody></table>
<span style="font-size: large;">定期的に何度も見返すスライドってあんまりないような気がするけど、このスライドだけは何度も見返してしまいます。</span><br />
<span style="font-size: large;">確か去年の夏頃に出会ったので、もうすぐ1年が経つんですね。</span><br />
<br />
<iframe frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/14083300" width="427"> </iframe><br />
<br />
<div>
<strong> <a href="http://www.slideshare.net/MoriharuOhzu/ss-14083300" target="_blank" title="オブジェクト指向できていますか?">オブジェクト指向できていますか?</a> </strong> from <strong><a href="http://www.slideshare.net/MoriharuOhzu" target="_blank">Moriharu Ohzu</a></strong></div>
<br />
<span style="font-size: large;">このスライドでは、<b>真のオブジェクト指向プログラミング</b>を実践するための方法が紹介されています。</span><br />
<span style="font-size: large;">例はC++で書かれているけど、JavaやRubyやJavascriptにも考え方はそのまま適用できます。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">このスライドで紹介されている、Jeff Bay氏の「必然的にオブジェクト指向になってしまう、<b>Extremeなコーディング規約</b>」は、すぐに実践する価値があると思います。</span><br />
<span style="font-size: large;">Extremeとはいっても、それほど難しいことは言っていないので、すぐに取り組めると思います。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">ただ自分の場合、この手法がなかなか身に付かず、簡単な</span><br />
<ul style="text-align: left;">
<li><span style="font-size: large;">#1 1つのメソッドにつきインデントは1つまでにすること</span></li>
<li><span style="font-size: large;">#2 else句を使用しないこと</span></li>
</ul>
<span style="font-size: large;">等から始めて、少しずつ実践できるように練習を続けています。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">早期リターンを活用しインデントを浅くする手法なんて、言われてみればその通りなんですが、盲点でした。</span><br />
<span style="font-size: large;">else句もなるべく使わないようにして、とにかく条件分岐をシンプルにするよう心掛けただけで、<b>自分のコードが明らかに読みやすく</b>なったのは驚きでした。<b>実践してみて、価値があったな</b>と思いました。</span><br />
<span style="font-size: large;"><br /></span>
<br />
<ul style="text-align: left;">
<li><span style="font-size: large;">#3 すべてのプリミティブ型と文字列型をラップすること</span></li>
</ul>
<span style="font-size: large;">というのは、オブジェクト指向プログラミングの基本だと思うので、自分の場合は違和感はありませんでした。</span><br />
<span style="font-size: large;">最近友人が、「Javaの嫌なところは、Listにプリミティブ型が入れられないところ」と言っていて、これはオブジェクト指向でやってないから困ることになるんだよなぁって思いました。</span><br />
<span style="font-size: large;">個人的に感じるJavaの嫌なところは、リテラルがないことですね。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">他にも#4〜#9まで挙げられていたのですが、<b>どれも実例付きでわかりやすい</b>です。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">ただ、やはりすぐに全部を取り入れるのは難しいので、何度もこのスライドを繰り返し見て、少しずつ身に付けるようにしています。</span><br />
<span style="font-size: large;">特に、103ページ目からの実際に採用した簡単なバージョンは、ハードルが下がっていい感じです。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">最近またこのスライドを見返して、やっぱりいいスライドだなぁと感じたので、自分のブログでも紹介させて頂きました。</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">是非、すべてのプログラマさんに見てほしいスライドです。</span><br />
<br />
<br />
<h2 class="entry-section">
<span style="font-size: small;">
スライド中で紹介されていた書籍・資料・リンクまとめ</span></h2>
<ul>
<li><a href="http://www.amazon.co.jp/gp/product/487311389X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=487311389X&linkCode=as2&tag=tech.shuntak-22">ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=487311389X" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.amazon.co.jp/gp/product/4797347783/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797347783&linkCode=as2&tag=tech.shuntak-22">アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797347783" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.amazon.co.jp/gp/product/4048676881/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4048676881&linkCode=as2&tag=tech.shuntak-22">Clean Code アジャイルソフトウェア達人の技</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4048676881" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.amazon.co.jp/gp/product/4873112729/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4873112729&linkCode=as2&tag=tech.shuntak-22">プレファクタリング ―リファクタリング軽減のための新設計 (THEORY/IN/PRACTICE)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4873112729" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.amazon.co.jp/gp/product/4894712288/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4894712288&linkCode=as2&tag=tech.shuntak-22">リファクタリング―プログラムの体質改善テクニック (Object Technology Series)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4894712288" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.amazon.co.jp/gp/product/4822282384/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4822282384&linkCode=as2&tag=tech.shuntak-22">パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4822282384" style="border: none !important; margin: 0px !important;" width="1" />
</li>
<li><a href="http://www.amazon.co.jp/gp/product/4844330845/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4844330845&linkCode=as2&tag=tech.shuntak-22">Scalaスケーラブルプログラミング第2版</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4844330845" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.amazon.co.jp/gp/product/4873114667/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4873114667&linkCode=as2&tag=tech.shuntak-22">プログラミングF#</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4873114667" style="border: none !important; margin: 0px !important;" width="1" /></li>
<li><a href="http://www.slideshare.net/MoriharuOhzu/ss-9224836">ソースコードの品質向上のための効果的で効率的なコードレビュー</a> (slideshare)</li>
<li><a href="http://www.bennadel.com/resources/uploads/2012/ObjectCalisthenics.pdf">Jeff Bayのオブジェクト指向エクササイズ全文(英語)</a> (PDF)</li>
<li><a href="http://www.slideshare.net/yojik/ss-1033616">オブジェクト指向エクササイズのススメ</a> (slideshare)</li>
<li><a href="http://www.slideshare.net/rdohms/your-code-sucks-lets-fix-it">Your code sucks, let's fix it - DPC UnCon</a> (slideshare)</li>
</ul>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=487311389X" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797347783" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4048676881" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873112729" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4894712288" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4822282384" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4844330845" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873114667" style="height: 240px; width: 120px;"></iframe>
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" mozallowfullscreen="" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9224836" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="http://www.slideshare.net/MoriharuOhzu/ss-9224836" target="_blank" title="ソースコードの品質向上のための効果的で効率的なコードレビュー">ソースコードの品質向上のための効果的で効率的なコードレビュー</a> </strong> from <strong><a href="http://www.slideshare.net/MoriharuOhzu" target="_blank">Moriharu Ohzu</a></strong> </div>
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" mozallowfullscreen="" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/1033616" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="http://www.slideshare.net/yojik/ss-1033616" target="_blank" title="オブジェクト指向エクササイズのススメ">オブジェクト指向エクササイズのススメ</a> </strong> from <strong><a href="http://www.slideshare.net/yojik" target="_blank">Yoji Kanno</a></strong> </div>
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" mozallowfullscreen="" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/13248330" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="http://www.slideshare.net/rdohms/your-code-sucks-lets-fix-it" target="_blank" title="Your code sucks, let's fix it - DPC UnCon">Your code sucks, let's fix it - DPC UnCon</a> </strong> from <strong><a href="http://www.slideshare.net/rdohms" target="_blank">Rafael Dohms</a></strong> </div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-73074553642948555422013-05-05T16:21:00.004+09:002013-05-24T19:54:48.268+09:00YaTeXとEmacsで快適LaTeX生活を謳歌したい!<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqAmiDffk6JF4CUvJr3YIjpIsGiJ5jQpqMl1uFVEsUOcAix_8J3yWMREFzEPT12iUiFz4pSEwYQTwORoY8XjfdMBuBE2kZpz_v1RSDlvOvk5uoPfa4VEtX2wDsL-J4_mzm-Lfgq4JjTgz/s1600/emacs.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqAmiDffk6JF4CUvJr3YIjpIsGiJ5jQpqMl1uFVEsUOcAix_8J3yWMREFzEPT12iUiFz4pSEwYQTwORoY8XjfdMBuBE2kZpz_v1RSDlvOvk5uoPfa4VEtX2wDsL-J4_mzm-Lfgq4JjTgz/s200/emacs.jpeg" width="200" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXF7M15GuY9n7pvnpDh8c8FXZ_jHESI7m9fbOZ8SOKsiQeceDUw1lHwtk8Fx7f_iag8LCFdmFpf_DIEkT-cdsPEIubZSIduK-Jg0Lk_ODSqwhrPvUc1QaRPJiyNYgsFU8MvUjuQRurM8w1/s1600/yatex.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXF7M15GuY9n7pvnpDh8c8FXZ_jHESI7m9fbOZ8SOKsiQeceDUw1lHwtk8Fx7f_iag8LCFdmFpf_DIEkT-cdsPEIubZSIduK-Jg0Lk_ODSqwhrPvUc1QaRPJiyNYgsFU8MvUjuQRurM8w1/s1600/yatex.gif" /></a>Emacsを常用するようになっても、LaTeXだけはTeXShopを使い続けてた。<br />
<br />
でも、もういいだろう、と。面倒だったけど、その先により快適な環境があると信じて、構築を開始しました。<br />
<br />
んで、YaTeXっていうのがすごくいいというのを聞いていたので、それを使って導入してみることにしました。YaTeXも先月、最新安定版を出したばかりみたいだし、いいタイミングだったかも。<br />
<br />
設定とかは、基本的に<a href="http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?YaTeX#p7238e02">TeX WikiのOS Xの項目</a>を参考にしました。<br />
<h2 class="entry-section">
バージョン・前提</h2>
<ul style="text-align: left;">
<li>GNU Emacs for Mac OS X 24.2.1</li>
<li>YaTeX 1.77</li>
<li>TeXShopでのLaTeX環境構築済み</li>
</ul>
<h2 class="entry-section">
1. YaTeX本体をダウンロード&インストール</h2>
YaTeXのサイトからtarファイルをダウンロードし、解凍。<br />
<br />
ディレクトリ名がyatex1.77とかになってるから、yatexに変更し、~/.emacs.d/site-lisp/に保存。<br />
<h2 class="entry-section">
2. Emacsの設定</h2>
TeX Wikiの説明に従って、.emacs.d/init.elに以下の設定を追記する。<br />
<br />
<script src="https://gist.github.com/shun-tak/5519993.js"></script>
<noscript><pre>;;
;; YaTeX
;;
(add-to-list 'load-path "~/.emacs.d/site-lisp/yatex")
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq auto-mode-alist
(append '(("\\.tex$" . yatex-mode)
("\\.ltx$" . yatex-mode)
("\\.cls$" . yatex-mode)
("\\.sty$" . yatex-mode)
("\\.clo$" . yatex-mode)
("\\.bbl$" . yatex-mode)) auto-mode-alist))
(setq YaTeX-inhibit-prefix-letter t)
(setq YaTeX-kanji-code nil)
(setq YaTeX-use-LaTeX2e t)
(setq YaTeX-use-AMS-LaTeX t)
(setq YaTeX-dvi2-command-ext-alist
'(("dviout" . ".dvi")
("psv" . ".ps")
("TeXworks\\|SumatraPDF\\|evince\\|okular\\|firefox\\|chrome\\|AcroRd32\\|pdfopen" . ".pdf")))
(setq tex-command "powershell -Command \"& {$b = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFileNameWithoutExtension($args),'\"\"\"');$texopt = [System.String]::Concat('\"\"\"','-kanji=utf8 -guess-input-enc -synctex=1 -sjis-terminal -jobname=',$b,'\"\"\"');ptex2pdf -l -ot $texopt $b}\"")
;(setq tex-command "powershell -Command \"& {$b = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFileNameWithoutExtension($args),'\"\"\"');$texopt = [System.String]::Concat('\"\"\"','-kanji=utf8 -guess-input-enc -synctex=1 -sjis-terminal -jobname=',$b,'\"\"\"');Start-Process ptex2pdf -ArgumentList ('-l','-ot',$texopt,$b)}\"")
;(setq tex-command "ptex2pdf -l -ot \"-kanji=utf8 -guess-input-enc -synctex=1\"")
;(setq tex-command "ptex2pdf -l -u -ot \"-kanji=utf8 -no-guess-input-enc -synctex=1\"")
;(setq tex-command "pdfplatex.bat")
;(setq tex-command "pdfplatex2.bat")
;(setq tex-command "pdfuplatex.bat")
;(setq tex-command "pdfuplatex2.bat")
;(setq tex-command "pdflatex -synctex=1")
;(setq tex-command "lualatex -synctex=1")
;(setq tex-command "luajitlatex -synctex=1")
;(setq tex-command "xelatex -synctex=1")
;(setq tex-command "latexmk")
;(setq tex-command "latexmk -e \"$latex=q/platex -kanji=utf8 -guess-input-enc -synctex=1/\" -e \"$bibtex=q/pbibtex -kanji=utf8/\" -e \"$makeindex=q/mendex -U/\" -e \"$dvipdf=q/dvipdfmx %O -o %D %S/\" -norc -gg -pdfdvi")
;(setq tex-command "latexmk -e \"$latex=q/platex -kanji=utf8 -guess-input-enc -synctex=1/\" -e \"$bibtex=q/pbibtex -kanji=utf8/\" -e \"$makeindex=q/mendex -U/\" -e \"$dvips=q/dvips %O -z -f %S | convbkmk -g > %D/\" -e \"$ps2pdf=q/ps2pdf.bat %O %S %D/\" -norc -gg -pdfps")
;(setq tex-command "latexmk -e \"$latex=q/uplatex -kanji=utf8 -no-guess-input-enc -synctex=1/\" -e \"$bibtex=q/upbibtex/\" -e \"$makeindex=q/mendex -U/\" -e \"$dvipdf=q/dvipdfmx %O -o %D %S/\" -norc -gg -pdfdvi")
;(setq tex-command "latexmk -e \"$latex=q/uplatex -kanji=utf8 -no-guess-input-enc -synctex=1/\" -e \"$bibtex=q/upbibtex/\" -e \"$makeindex=q/mendex -U/\" -e \"$dvips=q/dvips %O -z -f %S | convbkmk -u > %D/\" -e \"$ps2pdf=q/ps2pdf.bat %O %S %D/\" -norc -gg -pdfps")
;(setq tex-command "latexmk -e \"$pdflatex=q/pdflatex -synctex=1/\" -e \"$bibtex=q/bibtex/\" -e \"$makeindex=q/makeindex/\" -norc -gg -pdf")
;(setq tex-command "latexmk -e \"$pdflatex=q/lualatex -synctex=1/\" -e \"$bibtex=q/bibtexu/\" -e \"$makeindex=q/texindy/\" -norc -gg -pdf")
;(setq tex-command "latexmk -e \"$pdflatex=q/luajitlatex -synctex=1/\" -e \"$bibtex=q/bibtexu/\" -e \"$makeindex=q/texindy/\" -norc -gg -pdf")
;(setq tex-command "latexmk -e \"$pdflatex=q/xelatex -synctex=1/\" -e \"$bibtex=q/bibtexu/\" -e \"$makeindex=q/texindy/\" -norc -gg -xelatex")
(setq bibtex-command (cond ((string-match "uplatex\\|-u" tex-command) "upbibtex")
((string-match "platex" tex-command) "pbibtex -kanji=utf8")
((string-match "lualatex\\|luajitlatex\\|xelatex" tex-command) "bibtexu")
((string-match "pdflatex\\|latex" tex-command) "bibtex")
(t "pbibtex -kanji=utf8")))
(setq makeindex-command (cond ((string-match "uplatex\\|-u" tex-command) "mendex -U")
((string-match "platex" tex-command) "mendex -U")
((string-match "lualatex\\|luajitlatex\\|xelatex" tex-command) "texindy")
((string-match "pdflatex\\|latex" tex-command) "makeindex")
(t "mendex -U")))
(setq dvi2-command "texworks")
;(setq dvi2-command "start SumatraPDF -reuse-instance")
;(setq dvi2-command "powershell -Command \"& {$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFileName($args),'\"\"\"');Start-Process firefox -ArgumentList ('-new-window',$p)}\"")
;(setq dvi2-command "powershell -Command \"& {$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFullPath($args),'\"\"\"');Start-Process chrome -ArgumentList ('--new-window',$p)}\"")
(setq dviprint-command-format "powershell -Command \"& {$r = Write-Output %s;$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFileNameWithoutExtension($r),'.pdf','\"\"\"');Start-Process pdfopen -ArgumentList ('--rxi','--file',$p)}\"")
(defun sumatrapdf-forward-search ()
(interactive)
(let* ((ctf (buffer-name))
(mtf)
(pf)
(ln (format "%d" (line-number-at-pos)))
(cmd "start SumatraPDF")
(args))
(if (YaTeX-main-file-p)
(setq mtf (buffer-name))
(progn
(if (equal YaTeX-parent-file nil)
(save-excursion
(YaTeX-visit-main t)))
(setq mtf YaTeX-parent-file)))
(setq pf (concat (car (split-string mtf "\\.")) ".pdf"))
(setq args (concat "-reuse-instance \"" pf "\" -forward-search \"" ctf "\" " ln))
(message (concat cmd " " args))
(process-kill-without-query
(start-process-shell-command "sumatrapdf" nil cmd args))))
(add-hook 'yatex-mode-hook
'(lambda ()
(define-key YaTeX-mode-map (kbd "C-c s") 'sumatrapdf-forward-search)))
(defun fwdsumatrapdf-forward-search ()
(interactive)
(let* ((ctf (buffer-name))
(mtf)
(pf)
(ln (format "%d" (line-number-at-pos)))
(cmd "fwdsumatrapdf")
(args))
(if (YaTeX-main-file-p)
(setq mtf (buffer-name))
(progn
(if (equal YaTeX-parent-file nil)
(save-excursion
(YaTeX-visit-main t)))
(setq mtf YaTeX-parent-file)))
(setq pf (concat (car (split-string mtf "\\.")) ".pdf"))
(setq args (concat "\"" pf "\" \"" ctf "\" " ln))
(message (concat cmd " " args))
(process-kill-without-query
(start-process-shell-command "fwdsumatrapdf" nil cmd args))))
(add-hook 'yatex-mode-hook
'(lambda ()
(define-key YaTeX-mode-map (kbd "C-c w") 'fwdsumatrapdf-forward-search)))
(add-hook 'yatex-mode-hook
'(lambda ()
(auto-fill-mode -1)))
;;
;; RefTeX with YaTeX
;;
;(add-hook 'yatex-mode-hook 'turn-on-reftex)
(add-hook 'yatex-mode-hook
'(lambda ()
(reftex-mode 1)
(define-key reftex-mode-map (concat YaTeX-prefix ">") 'YaTeX-comment-region)
(define-key reftex-mode-map (concat YaTeX-prefix "<") 'YaTeX-uncomment-region)))</pre>
</noscript>
<br />
うまくできたら、Emacsからコンパイル (C-c C-t j) のテスト。<br />
<h2 class="entry-section">
3. その他の注意点</h2>
コンパイルしたときに、自分の環境ではptex2pdfがないよーって言われたので、探して/usr/texbin/に入れてあげたらうまくコンパイルできました。<br />
ptex2pdfが見つからなかった人は、<a href="http://www.ctan.org/tex-archive/language/japanese/ptex2pdf">CTAN</a>からダウンロードできます。/usr/texbin/に入れるときは、拡張子のluaは削除してやってくださいな。<br />
<br />
あと、当然だけど、Emacsのload-pathに/usr/texbinを追加してやらないと、ptex2pdfが呼び出せないので、気をつけてくださいな。<br />
<br />
YaTeXの設定は以上です。</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-74503898733789822852013-05-03T15:04:00.000+09:002013-05-03T15:29:31.736+09:00Node.jsのclusterでworkerが異常終了したとき自動的にforkして復帰させる方法<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="separator" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;">
<img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzdoxWCTRi_p-CGzaXITdzEu91VKpmLngaXAeIsj6-5kQ2rFaA9TTaAlKVMYcwr8Je7t0bQmdsCJTHiIwtEybqMDImr6BxotWf2OpofHg2_Z-hoz4MAejgOjSOSoLmXdX7r75Rf2j7QSWp/s200/4c3312d921b812342e0ec44f0c3879d3.jpg" width="200" /></div>
Node.jsでclusterモジュールを使って、masterからworkerをいくつか呼び出してアプリを動かすことはよくある。<br />
<br />
そのときに、workerが正常終了(worker内でプログラマが意図してkillさせた場合)した場合と、異常終了した場合とで処理を分けたい時がある。<br />
<br />
特に、異常終了した場合に自動的にworkerを再起動させる方法をまとめておく。<br />
<br />
<h2 class="entry-section">
バージョン</h2>
<div>
以下の環境にて動作確認済</div>
<ul style="text-align: left;">
<li>Node.js v0.10.5</li>
<li>Amazon Linux AMI 2013.03</li>
</ul>
<h2 class="entry-section">
やりかた</h2>
とりあえずサンプルを載せます。<br />
<br />
<script src="https://gist.github.com/shun-tak/5507446.js"></script>
<noscript><pre>var cluster = require('cluster');
var http = require('http');
var forks = 4;
if (cluster.isMaster) {
// workerをfork
for (var i = 0; i < forks; i++) {
cluster.fork();
}
// exitイベント
cluster.on('exit', function(worker, code, signal) {
// exitしたworkerが正常終了かどうかを判定
if (worker.suicide === true) {
console.log('Oh, it was just suicide\' – no need to worry');
} else {
console.error('worker ' + worker.process.pid
+ ' died ('+code+'). restarting...');
cluster.fork(); // 再びforkして復帰
}
});
} else {
// worker内での処理
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
console.log('worker ' + cluster.worker.process.pid
+ ' listening on http://localhost:'+port+'/');
}
</pre>
</noscript>
<br />
こんな感じで動く。<br />
<br />
exitイベントでコールバックしてきたworkerオブジェクトがsuicideというプロパティを持っているので、そこを参照すると、そのexitイベントが正常終了によって起こったものなのかどうかが分かる。<br />
<h2 class="entry-section">
参考資料</h2>
<ul style="text-align: left;">
<li><a href="http://nodejs.jp/nodejs.org_ja/docs/v0.10/api/cluster.html">Cluster Node.js v0.10.5 Manual & Documentation</a></li>
</ul>
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-32787101290474644942013-05-03T14:28:00.000+09:002013-06-07T12:43:47.904+09:00ポートを占有しているプロセスを見つける方法 lsof -i<div dir="ltr" style="text-align: left;" trbidi="on">
lsofコマンドにiオプションを付けて調べることができる。<br />
<br />
例えば、3001番ポートでWebアプリケーションを立ち上げたいけど、何かがすでに占有していて立ちあげられないから調べたいという場合は、以下のようにすればいい。<br />
<br />
<script src="https://gist.github.com/shun-tak/5507342.js"></script>
<noscript><pre>$ lsof -i:3001<br />
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME<br />
node 4356 ec2-user 12u IPv4 12655 0t0 TCP *:3001 (LISTEN)<br />
node 4362 ec2-user 12u IPv4 12655 0t0 TCP *:3001 (LISTEN)
</pre>
</noscript>
<br />
この結果から、nodeアプリケーションがすでに3001番ポートを占有していることが分かる。
<br />
この場合、プロセス4362はnodeクラスタのworkerなので、masterプロセスである4356の方をkillすればよい。
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-55041659074169244392013-05-03T13:42:00.002+09:002013-05-03T15:44:35.754+09:00Gitでコミットメッセージのテンプレートを設定する方法<div dir="ltr" style="text-align: left;" trbidi="on">
プロジェクト管理で、コミットメッセージにチケット番号を毎回書くのが面倒とか、そういうときの対策。<br />
<div>
<br /></div>
<h2 class="entry-section">
1. テンプレートをつくる</h2>
<div>
適当な場所 (~/.gitmessage.txt) にテンプレートを書いて保存する。<br />
<br />
<script src="https://gist.github.com/shun-tak/5507230.js"></script>
<noscript>
<pre>コミットの概要を1行で説明<br>
<br>
コミットの内容を詳細に説明する。<br>
<br>
[ticket: ] # ここにチケットの番号を記載</pre>
</noscript></div>
<h2 class="entry-section">
2. .gitconfigにテンプレートの場所を設定する</h2>
<div>
以下のコマンドで適用される。<br />
<br />
<script src="https://gist.github.com/shun-tak/5507242.js"></script>
<noscript>
<pre>$ git config --global commit.template $HOME/.gitmessage.txt</pre>
</noscript>
以降、git commitしたときにテンプレートが適用されるようになる。</div>
<h2 class="entry-section">
参考資料</h2>
<div>
<ul style="text-align: left;">
<li><a href="http://git-scm.com/book/ja/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%81%AE%E8%A8%AD%E5%AE%9A">7.1 Git のカスタマイズ - Git の設定</a></li>
</ul>
</div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-12655457315156384552013-04-21T17:31:00.003+09:002013-06-10T13:29:50.451+09:002013新卒のWeb系エンジニアが実際に読んでいるプログラミング入門書籍まとめ<div dir="ltr" style="text-align: left;" trbidi="on">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNT0I40ppXbBeq46j2fS1T-v2orwuXmSwVcOXDDitKCav9KxCaU2zxaOBLfaxPiP9y0vmgomufAmFtixUfIXlHuQol0zckVgRealdKvamXQkQGyPpT5djGWPsW9Gs0eHVpLsBZOWDS6cJ-/s1600/small_4556156477.jpg" style="margin-left: auto; margin-right: auto;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.flickr.com/photos/seeminglee/4556156477/">See-ming Lee 李思明 SML</a> <a href="http://creativecommons.org/licenses/by-sa/2.0/">cc</a></td></tr>
</tbody></table>
個人的にリストをつくっていたので、ついでに公開しておこうと思います。<br />
<br />
エンジニア・プログラマとしての心構え的な本も並べようか迷ったけど、人の好みで大きく分かれるので止めときます。技術者として必要そうな「入門書」をリストアップしておこうと思います。<br />
<br />
デザイナーの人はこちらもどうぞ<br />
→ <a href="http://tech.shuntak.net/2012/08/web-2012.html">これからWebデザインの勉強を始めるのに役立つ書籍・資料まとめ 2012年度前期版</a><br />
<br />
<h2 class="entry-section">
1. 最初に読む本</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4774153982/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4774153982&linkCode=as2&tag=tech.shuntak-22">平成25年度 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4774153982" style="border: none !important; margin: 0px !important;" width="1" /></h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774153982" style="height: 240px; width: 120px;"></iframe>
<br />
この本は、IPAの基本情報技術者試験の解説書。この本を通して、Webサービス開発やソフトウェア開発、システム開発をする上で基本となる知識をざっと把握しておくと良い感じ。試験自体は簡単なので、資格がほしい人は挑戦してみるといいかも。<br />
<br />
<h2 class="entry-section">
2. プログラミング入門書籍 (Java)</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4797371250/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797371250&linkCode=as2&tag=tech.shuntak-22">Java言語プログラミングレッスン 第3版(上)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797371250" style="border: none !important; margin: 0px !important;" width="1" />
<br /><a href="http://www.amazon.co.jp/gp/product/4797371269/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797371269&linkCode=as2&tag=tech.shuntak-22">Java言語プログラミングレッスン 第3版(下)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797371269" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797371250" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797371269" style="height: 240px; width: 120px;"></iframe>
<br />
開発言語がJavaな人用。他の言語でやりこんでいるものがあれば、上巻はさっさと終わらせて、下巻を読むといいかも。プログラミングテクニックみたいなのはあんまり書かれてなくて、基本的なこと(制御構造とかクラスとか)が初心者目線で分かりやすく書かれてる。言語仕様の細かいことが知りたい人は、この本に文句を言う暇があれば<a href="http://docs.oracle.com/javase/7/docs/api/">Javadoc</a>を読みましょう。<br />
<br />
<h2 class="entry-section">
3. プログラミング入門書籍 (ruby)</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4797357401/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797357401&linkCode=as2&tag=tech.shuntak-22">たのしいRuby 第3版</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797357401" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797357401" style="height: 240px; width: 120px;"></iframe>
<br />
開発言語がrubyな人用。たのしくプログラミングできる本。これも基本的なことが分かりやすく解説されてる。PHP, rubyといったLL (軽量プログラミング言語) はJavaと違う部分がかなりあって、使い方のコツがあるから、LLをやったことない場合はしっかり読んでおくといいかも。<br />
<br />
<h2 class="entry-section">
4. プログラミング入門書籍 (Javascript)</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/477414813X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=477414813X&linkCode=as2&tag=tech.shuntak-22">パーフェクトJavaScript (PERFECT SERIES 4)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=477414813X" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=477414813X" style="height: 240px; width: 120px;"></iframe>
<br />
Java, PHPないしrubyなどでプログラミングの勉強をしてから読む本。Javascript+jQueryで軽くAjaxするだけなら、オンラインドキュメントを読めばできると思う。ただ、もう一歩先にいくなら、JSそのものの勉強をして、その特殊性 (プロトタイプベース、クロージャ、非同期等) を理解しておく必要がある。この本は、すごく丁寧かつ実践的に解説されているので、ぜひ手に取ってほしい。<br />
<br />
<h2 class="entry-section">
5. SQL入門書籍</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4774130850/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4774130850&linkCode=as2&tag=tech.shuntak-22">改訂新版 反復学習ソフト付き SQL書き方ドリル (WEB+DB PRESS plusシリーズ)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4774130850" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774130850" style="height: 240px; width: 120px;"></iframe>
<br />
SQLはリレーショナルデータベース管理システム (RDBMS) を操作するのに使われるDSLで、要はデータベースを使う人は必ず勉強しなきゃいけないってことですね。つまりWeb系の人は避けて通れない訳です。この本は簡単で分かりやすいのでおすすめですう。<br />
<br />
<h2 class="entry-section">
6. インターネット・ネットワーク入門書籍</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4274068765/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4274068765&linkCode=as2&tag=tech.shuntak-22">マスタリングTCP/IP 入門編 第5版</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4274068765" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4274068765" style="height: 240px; width: 120px;"></iframe>
<br />
TCP/IPのすべての本。これだけあればいい。ネットワーク周りは、実際に自分でサーバーを運用してみた方が勉強になることが多いかも。<br />
<br />
<h2 class="entry-section">
7. フレームワーク入門書籍</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4797358114/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797358114&linkCode=as2&tag=tech.shuntak-22">SpringによるWebアプリケーションスーパーサンプル 第2版</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797358114" style="border: none !important; margin: 0px !important;" width="1" />
<br /><a href="http://www.amazon.co.jp/gp/product/4774146633/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4774146633&linkCode=as2&tag=tech.shuntak-22">Ruby on Rails 3 アプリケーションプログラミング</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4774146633" style="border: none !important; margin: 0px !important;" width="1" />
<br /><a href="http://www.amazon.co.jp/gp/product/4797370904/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797370904&linkCode=as2&tag=tech.shuntak-22">はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797370904" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797358114" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774146633" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797370904" style="height: 240px; width: 120px;"></iframe>
<br />
Webアプリケーションフレームワークの入門書。Javaな人はSpringの本、rubyな人にはRailsの本を読むことになるんだろうけど、おすすめするならこの辺りかなあ。Railsの本はソフトバンククリエイティブからも出てるけど (<a href="http://www.amazon.co.jp/gp/product/4797363827/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797363827&linkCode=as2&tag=tech.shuntak-22">Rails3レシピブック</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797363827" style="border: none !important; margin: 0px !important;" width="1" />) 、こっちはリファレンス的に使うのがいい。Nodeのこの本は実は俺は読んだことないんだけど、周辺の13新卒が読んでたので挙げてみた。雰囲気は良さげ。<br />
<br />
<h2 class="entry-section">
8. UI/UXも分かるエンジニアになりたい人が読む本</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4873115574/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4873115574&linkCode=as2&tag=tech.shuntak-22">インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4873115574" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4873115574" style="height: 240px; width: 120px;"></iframe>
<br />
この本は、良い。すごく良い。デザインとか真面目に勉強したことなかったけど、この本を一通り読んでみて、「デザインは、その理由を説明できなきゃいけない」という言葉の意味が分かった。とりあえず立ち読みだけでもしてみてください。<br />
<br />
<h2 class="entry-section">
9. 頭一つ抜けたエンジニアになりたい人が読む本</h2>
<h3>
<a href="http://www.amazon.co.jp/gp/product/4764904063/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4764904063&linkCode=as2&tag=tech.shuntak-22">アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4764904063" style="border: none !important; margin: 0px !important;" width="1" />
<br /><a href="http://www.amazon.co.jp/gp/product/4797327030/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797327030&linkCode=as2&tag=tech.shuntak-22">増補改訂版Java言語で学ぶデザインパターン入門</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797327030" style="border: none !important; margin: 0px !important;" width="1" />
</h3>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4764904063" style="height: 240px; width: 120px;"></iframe>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4797327030" style="height: 240px; width: 120px;"></iframe>
<br />
プログラミングの入門書を一通り読んで、フレームワークとかも使ってみてからやるといいかも。いわゆる計算機科学を勉強してた人には馴染みの(苦しめられたに違いない)アルゴリズムとデータ構造、そしてデザインパターンの書籍です。<br />
<br />
アルゴリズムとデータ構造に関する本は最近増えてきたけど、アルゴリズムイントロダクションは良書。この緑の本は第1巻で、<a href="http://www.amazon.co.jp/gp/product/4764904071/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4764904071&linkCode=as2&tag=tech.shuntak-22">第2巻</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4764904071" style="border: none !important; margin: 0px !important;" width="1" />もある。もっとやりたかったら挑戦してみるといいかも。俺は途中で飽きて挫折した。<br />
<br />
デザインパターンは、ソフトウェア開発をする中で、繰り返し現れるようなよく使われるパターンを抽象化してまとめたもの。英語でいうところの構文集みたいなもの。たぶんそう。こちらも同様に<a href="http://www.amazon.co.jp/gp/product/4797331623/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797331623&linkCode=as2&tag=tech.shuntak-22">下巻</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797331623" style="border: none !important; margin: 0px !important;" width="1" />があるので、もっとやりたかったら挑戦してみるといいかも。さらに先へ行きたい人は、<a href="http://www.amazon.co.jp/gp/product/4797311126/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4797311126&linkCode=as2&tag=tech.shuntak-22">GoF</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4797311126" style="border: none !important; margin: 0px !important;" width="1" />っていう難しい本もあるけど、最初からこれをやると火傷するから止めといた方がいい。俺は指一本失いかけた。<br />
<br />
ちなみに「アルゴリズムとデータ構造」はよく組みにして使われる単語で、両者は切っても切れない関係にある。<br />
<br />
<h2 class="entry-section">
おわりに</h2>
この中で1冊だけ薦めるとしたら、<a href="http://www.amazon.co.jp/gp/product/4873115574/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4873115574&linkCode=as2&tag=tech.shuntak-22">インタフェースデザインの心理学</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4873115574" style="border: none !important; margin: 0px !important;" width="1" />かなぁ。使い心地のいいサービス、人にやさしいサービスが世の中にもっと増えるといいな、そういう視点をもった技術者がもっと増えるといいなって思います。そして、自分もそうありたいなと思います。<br />
<br />
PerlやPHPはWeb公開の解説が充実してるから、入門書は必要ないんじゃないかなと思って載せてない。もうちょっと詳しく知りたいorしっかり勉強し直したいなってなってきたら、Perlの場合は<a href="http://www.amazon.co.jp/gp/product/4900900486/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4900900486&linkCode=as2&tag=tech.shuntak-22">ラクダ本</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4900900486" style="border: none !important; margin: 0px !important;" width="1" />を、PHPの場合は<a href="http://www.amazon.co.jp/gp/product/4774144371/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4774144371&linkCode=as2&tag=tech.shuntak-22">パーフェクトPHP</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4774144371" style="border: none !important; margin: 0px !important;" width="1" />をおすすめします。<br />
<br />
以上。まとめ終わり。<br />
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-29735145519086607782013-02-27T16:06:00.001+09:002013-02-27T16:07:08.909+09:00UbuntuにMongoDBをインストールする手順<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<a href="http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/">MongoDBのドキュメント</a>を読めばいいんだけど、自分用に日本語でメモしておく。</div>
<br />
<div>
<br /></div>
<div>
最新安定版のパッケージは</div>
<div>
<ul style="text-align: left;">
<li>mongodb-10gen</li>
</ul>
</div>
<div>
からインストールする。2013年2月27日現在にインストールしたところ、2.2.3がインストールされた。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<h2 class="entry-section">
1. パッケージ管理システム (APT) の設定</h2>
<br />
<div>
UbuntuはMongoDBのリポジトリへのアドレスを知らないので、それを設定ファイルに書いてやる。<br />
<br />
まず、リポジトリの公開鍵を手に入れる。以下のコマンドをコンソールで実行する。<br />
<pre class="brush: bash;">sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
</pre>
<br />
続いて、/etc/apt/sources.list.d/10gen.listをエディタで開き(存在しないはずなので新規作成)、以下1行を書き込んで保存。<br />
<pre class="brush: bash;">deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
</pre>
<br />
次のコマンドを実行して、リポジトリを更新する。<br />
<pre class="brush: bash;">sudo apt-get update
</pre>
<br />
次のコマンドを実行して、MongoDBをインストールする。<br />
<pre class="brush: bash;">sudo apt-get install mongodb-10gen
</pre>
<br /></div>
<h2 class="entry-section">
2. 設定ファイル</h2>
設定ファイルは /etc/mongodb.conf に、コントロールスクリプトは /etc/init.d/mongodb に置かれている。<br />
<br />
<h2 class="entry-section">
3. MongoDBの実行</h2>
以下のコマンドを実行して、MongoDBのプロセスを開始する。<br />
<pre class="brush: bash;">sudo service mongodb start
</pre>
<br />
以下のコマンドを実行して、MongoDBのプロセスを停止する。<br />
<pre class="brush: bash;">sudo service mongodb stop
</pre>
<br />
以下のコマンドを実行して、MongoDBのプロセスを再起動する。<br />
<pre class="brush: bash;">sudo service mongodb restart
</pre>
<br /></div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-89354330223899225002013-01-08T15:29:00.002+09:002013-01-08T15:30:29.539+09:00nvmを使ってUbuntuにNode.jsとnpmをインストール<div dir="ltr" style="text-align: left;" trbidi="on">
Nodeのバージョン管理システムであるnvmを使って、UbuntuにNodeとnpmをインストールする。<br />
<br />
<script src="https://gist.github.com/4481702.js"></script>
<noscript>$ sudo apt-get install git curl build-essential libssl-dev
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ . ~/.nvm/nvm.sh
$ nvm install v0.8.16</noscript>
<br />
.bashrcに '. ~/.nvm/nvm.sh' を追加しておくと便利。<br />
<br />
nvm lsでインストールしたバージョンの一覧が表示される。<br />
nvm useでバージョンの切り替えができる。<br />
'nvm use 0.8' のように使う。</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-26825467458654998232012-12-17T01:22:00.000+09:002012-12-23T00:16:25.078+09:00リファクタリングとかで作業ブランチを分けて作業して後でmasterにmergeするにはGitではどうやればいいかの説明 - branch, checkout, merge<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_jlR2V79Mp-PS8RCBQMzSvsL-qCqCnN5vsnzNB3Nh85IC58r7gFB2WU96zqcsMtM0m0YsbvbA_HEtTStTJQhxT7H4usn6E9awxFOyDUyVZSmEHFR-02-T5AOgN6-63xKZd-MOeqN0qUd/s1600/logo_at_2x.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_jlR2V79Mp-PS8RCBQMzSvsL-qCqCnN5vsnzNB3Nh85IC58r7gFB2WU96zqcsMtM0m0YsbvbA_HEtTStTJQhxT7H4usn6E9awxFOyDUyVZSmEHFR-02-T5AOgN6-63xKZd-MOeqN0qUd/s1600/logo_at_2x.png" /></a></div>
7ヶ月前に、<a href="http://tech.shuntak.net/2012/05/5git.html">たった5つのコマンドで今すぐGitによるバージョン管理を始める方法</a>なんて記事を書いた。この記事ではgit init, status, add, commit, logを紹介した。<br />
<br />
今回は<b>branch</b>, <b>checkout</b>, <b>merge</b>を紹介しようと思う。利用シーンの想定としては、リファクタリングや新機能の開発などでブランチを分けて作業し、一通りうまくいったらmasterブランチにmergeするというイメージ。<br />
<br />
<h2 class="entry-section">
バージョン</h2>
筆者のMacで使ってるGitは1.7.12.1で、最新安定版は1.8.0.2あたりだったはず。持ってない人は<a href="http://git-scm.com/">git-scm</a>からダウンロードしてインストールしてください。<br />
<h2 class="entry-section">
はじめに</h2>
<br />
まずmasterブランチ(最初からあるブランチ)で適当なファイルを作成してコミットしておく。<br />
<script src="https://gist.github.com/4308292.js"></script>
<noscript>$ echo 'puts "Hello, World!"' > test.rb
$ git add test.rb
$ git commit -m "test.rb on master"
[master 1485800] test.rb on master
1 file changed, 1 insertion(+)
create mode 100644 test.rb</noscript><br />
<h2 class="entry-section">
branch</h2>
いわゆるブランチを一覧したり、新規作成したり、削除したりするためのコマンド。<span style="color: red;">Subversionなどと違って、ブランチを切るたびに新しくディレクトリが作成されずに、同じディレクトリ内でGitが自動的に切り替えをしてくれる。</span><br />
<br />
新しくtestingブランチを作成する。引数なしでgit branchとすればブランチの一覧が見れる。<br />
<script src="https://gist.github.com/4308336.js"></script>
<noscript>$ git branch testing
$ git branch
* master
testing</noscript>
現在選択中のブランチには*が付く。<br />
<h2 class="entry-section">
checkout</h2>
ブランチを移動するコマンド。<br />
<script src="https://gist.github.com/4308528.js"></script>
<noscript>$ git checkout testing
Switched to branch 'testing'
$ git branch
master
* testing</noscript>
-bオプションを付ければブランチの新規作成と移動が同時に行われる。<br />
<h2 class="entry-section">
merge</h2>
ファイルの内容を変更してコミットする。<br />
<script src="https://gist.github.com/4308610.js"></script>
<noscript>$ echo 'puts "Hello, testing!"' > test.rb
$ git diff
diff --git a/test.rb b/test.rb
index 5de78a4..cf64c4b 100644
--- a/test.rb
+++ b/test.rb
@@ -1 +1 @@
-puts "Hello, World!"
+puts "Hello, testing!"
$ git commit -a -m "testing"
[testing 030674b] testing
1 file changed, 1 insertion(+), 1 deletion(-)</noscript>
testingブランチに移動していたので、このコミットはmasterブランチではなくtestingブランチで行われた。masterブランチに戻ってソースを確認してみれば、変更が元に戻っていることが分かる。<br />
<script src="https://gist.github.com/4308667.js"></script>
<noscript>$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
$ cat test.rb
puts "Hello, World!"</noscript>masterブランチへtestingブランチをmergeさせる。<br />
<script src="https://gist.github.com/4308841.js"></script>
<noscript>$ git merge testing
Updating 1485800..030674b
Fast-forward
test.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
$ cat test.rb
puts "Hello, testing!"</noscript>
mergeによってファイルがtestingブランチの最新コミットに更新された。<br />
<br />
git logしてみれば分かるように、masterのコミットにはマージコミットが作成されずにtestingのコミットがそのままつなげられる。これを<b>fast forwarding</b>といい、変更が競合(衝突、コンフリクト)しない限り、最新のコミットが適用される。<br />
<br />
mergeのオプションを付ければ、必ずマージコミットを作成したり、コミットを一つにまとめてmergeしたりすることもできる。<br />
<h2 class="entry-section">
おわりに</h2>
人に質問されてブランチやマージについて答えたので、そのついでにブログを書いてみようと思ったけど、やっぱり文章だけで説明するのは難しかった。もっと分かりやすい説明をしている記事やスライドがあるので、それを紹介して終わります。<br />
<ul style="text-align: left;">
<li><a href="http://git-scm.com/book/en/Git-Branching">Git Branching</a></li>
<li>こわくない Git<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="356" marginheight="0" marginwidth="0" mozallowfullscreen="mozallowfullscreen" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/15276118" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="webkitallowfullscreen" width="427"> </iframe> <div style="margin-bottom: 5px;">
<strong> <a href="http://www.slideshare.net/kotas/git-15276118" target="_blank" title="こわくない Git">こわくない Git</a> </strong> from <strong><a href="http://www.slideshare.net/kotas" target="_blank">Kota Saito</a></strong> </div>
</li>
</ul>
<br />
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-47325025434021343752012-11-18T23:43:00.000+09:002012-11-19T00:15:37.801+09:00東京Node学園祭2012に参加して<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkIR57Sz9q1vrI5es-FyDZSquoL0DOzARrpLmHUFUimD2wg70VgAua0uek4BreHFTPuj5L6CtLPDWYkq5jFgNFvRgwbgMNToEtkbjpeKu5yk507BvTsEAb2TbKVKoVzWb-y9B_Op-9pWAk/s1600/nodefest2012.png" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
今日は<a href="http://nodefest.jp/2012/">東京Node学園祭2012</a>に参加してきた。講演者や運営の皆様、お疲れさまでした。<br />
<br />
プログラミング言語やライブラリなどのカンファレンスに参加したのは実は初めてで、とても刺激的な一日だった。今後勉強したい課題もできたし、がんばらねば。<br />
<br />
意外だったのは、ハードウェアを利用したアプリケーションの発表が複数あったこと。脳波でミニ四駆的なものを走らせたり、音声認識したり、LEDを光らせたり、風船を膨らませたり。自分もやってみたい。<br />
<br />
もし来年もあるなら、今度はもっと実力を付けた上で参加したい。そもそもNode.jsはほとんど触ったことがなかったので、Nodeでアプリケーションを作ってみた上で参加すれば学びもより大きかったのかもしれない。最近本業で忙しかったとはいえ勿体無いことをした。<br />
<br />
ま、Nodeで何かをつくりたいという意欲が増しただけでも一日投資した価値があったかもしれない。やるぞー!<br />
<br />
<br />
んで、当面の学習の方向性としては、Node.jsをしっかりと自分のものにしたい。特にアプリケーションの分散や、Stream周りの効率化など。<br />
<br />
もう一つはNoSQLで、前々から勉強しようと思いつつも後回しになってしまっていた。特にJSON形式のドキュメント指向データベースを勉強したい。<br />
<br />
勉強に役立ちそうなリンクもまとめておく。<br />
<ul style="text-align: left;">
<li><a href="http://nodejs.jp/">Node.js 日本ユーザーグループ</a><br />メーリングリストや有志の書いたドキュメントへのリンクなど</li>
<li><a href="http://nodejs.jp/nodejs.org_ja/docs/v0.8/api/">Node.js v0.8.14 マニュアル & ドキュメンテーション</a><br />最新安定版のマニュアル(まもなく次の安定版v0.10がリリースされるらしい)</li>
<li><a href="http://atnd.org/events/33022">東京Node学園祭2012 アドベントカレンダー</a><br />日替わりでNode.js開発者の方々が書いたブログ</li>
<li><a href="http://www.nodebeginner.org/index-jp.html">Nodeビギナーズブック</a><br />入門向け(日本語訳)</li>
<li><a href="http://oss.infoscience.co.jp/couchdb/main/index.html">CouchDB プロジェクト</a><br />公式</li>
<li><a href="http://guide.couchdb.org/">CouchDB The Definitive Guide</a><br />動物のEブック</li>
<li><a href="http://jp.docs.mongodb.org/manual/">MongoDBマニュアル</a><br />公式</li>
</ul>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-68632249204835937702012-09-20T13:00:00.001+09:002012-09-21T13:34:52.131+09:00インターネット概論 〜どうしてつながるの?〜<div dir="ltr" style="text-align: left;" trbidi="on">
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-composition-frame-color: rgba(191, 107, 82, 0.496094); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); font-family: Helvetica; font-size: 18px; line-height: 24px;">あなたのスマホ、PCどちらを使っても構わないので、アメブロにアクセスしてみてください。</span><span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.09375); -webkit-composition-frame-color: rgba(191, 107, 82, 0.496094); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); font-family: Helvetica; font-size: 18px; line-height: 24px;"><div>
<br /></div>
<div>
どうやってアクセスしましたか?<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">ブラウザのお気に入りから?検索して結果からアクセス?アプリを使いました?URLを入力して直接アクセスした人もいるかもしれません。</span></div>
<div>
<br /></div>
<div>
ここでちょっと考えてみてください。<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">当たり前すぎて気付いてないかもしれませんが、今起こったことは簡単に説明できることではありません。</span></div>
<div>
<br /></div>
<div>
どうしてつながるの?</div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);"><br /></span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">なぜブラウザやアプリで、求めていたものが表示されるの?</span></div>
<div>
<br /></div>
<div>
今回は<b>インターネットを支える基本の考え方、インターネットで商売をしていく上で最低限の知識となるもの</b>を紹介していきたいと思います。</div>
<div>
<br /></div>
<div>
いきなり結論を書いてしまいますが、今日のインターネットを支えるものは次の3つです。</div>
<div>
<br /></div>
</span><span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.09375); -webkit-composition-frame-color: rgba(191, 107, 82, 0.496094); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); font-family: Helvetica; font-size: 18px; line-height: 24px;"><ul style="text-align: left;">
<li>サーバー</li>
<li>クライアント</li>
<li>ネットワーク</li>
</ul>
<div>
<br /></div>
<div>
サーバーはユーザー情報や画像など、あらゆる情報を持っています。サーバーにはたくさんの種類があり、メールを受け取ったり、ブログのサーバーならユーザーの投稿を管理したり、情報を持つだけでなく<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">それぞれが様々な役割を担っています。</span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);"><br /></span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">クライアントはWebサービスにアクセスするためのデバイス(パソコンやスマートフォン、タブレットなど)です。ブラウザ(SafariやFireFoxなど</span><span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">)からサーバーにアクセスし、サーバーとうまくやり取りをしつつ、受け取ったデータから画面を構築していく役割を担っています。</span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);"><br /></span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">ネットワークはインターネットそのものといっても過言ではありません。サーバーどうしをつなぎ、クライアントが目的のサーバーにたどり着く手助けをします。</span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);"><br /></span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">来週社内で非エンジニア向けにインターネット概論の講座を開講しますが、質問やワークを交えながら、こういった話をしていこうと考えています。</span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);"><br /></span></div>
<div>
<span class="Apple-style-span" style="-webkit-composition-fill-color: rgba(130, 98, 83, 0.0898438); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969);">内容をもっと噛み砕いて、分かりやすく詰めていかないと。</span></div>
</span></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-56222888791187843512012-08-25T19:11:00.000+09:002012-08-25T19:17:36.458+09:001行で動くFizzBuzzコード.rb<div dir="ltr" style="text-align: left;" trbidi="on">
研究が進まなくて気付いたらFizzBuzz書いてた。<br />
<br />
<script src="https://gist.github.com/3301967.js?file=fizzbuzz.rb"></script>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRyiqQk07eoA5wWziZi_jDGkZksyRwx6e9UsUK030QipmaILI0lmX9Y_fv75CKX8Os-rgLT2jDbeNOl15uE0MPT1AvurJ88ugTS65i0-f_SK_FOOEOVqsOJvGLZQXnQE7IOpxJCMDBw10A/s1600/FizzBuzz.png" imageanchor="1"><img alt="FizzBuzz" border="0" height="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRyiqQk07eoA5wWziZi_jDGkZksyRwx6e9UsUK030QipmaILI0lmX9Y_fv75CKX8Os-rgLT2jDbeNOl15uE0MPT1AvurJ88ugTS65i0-f_SK_FOOEOVqsOJvGLZQXnQE7IOpxJCMDBw10A/s640/FizzBuzz.png" title="FizzBuzz" width="640" /></a>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-13651879859042714422012-08-25T12:44:00.002+09:002013-06-10T13:28:08.807+09:00これからWebデザインの勉強を始めるのに役立つ書籍・資料まとめ 2012年度前期版<div dir="ltr" style="text-align: left;" trbidi="on">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3GPnLNLWh3-7ehG7dsDH30owzd-vfKkvmm0IWO4mprN0WIuUda1G9WKQi4d0P3qz9-_OCm3_hbHrz4VkVRPogNcD5tlfwQIqs6E7M8jzpijF0Rm6p1nnVndMRE7J8w6uYh-FmkMba1YS4/s1600/small_3738107746.jpg" style="margin-left: auto; margin-right: auto;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.flickr.com/photos/patrickgage/3738107746/">Patrick Gage</a> <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">cc</a></td></tr>
</tbody></table>
Webデザインの経験がない同期のデザイナーに、これからどうやって勉強していけばいいのかを聞かれ、良さそうな本を紹介してほしいといわれて紹介した本のまとめです。<br />
<br />
そのときには紹介していなかった、オンライン学習サイトやモバイルUI/UXに関する書籍も追加しました。<br />
<br />
プログラマ・エンジニアの人はこちらもどうぞ<br />
→ <a href="http://tech.shuntak.net/2013/04/2013web.html">2013新卒のWeb系エンジニアが実際に読んでいるプログラミング入門書籍まとめ</a><br />
<br />
<h2 class="entry-section">
1. よくわかるHTML5+CSS3の教科書</h2>
Webに関わるなら、どんな職種であろうと絶対に避けて通れないのがHTMLとCSSに関する知識。この本は決して網羅的ではないけど、全体を把握するには十分な情報量で、よく整理されているので初めて勉強するには非常にオススメしています。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4839943486/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4839943486&linkCode=as2&tag=tech.shuntak-22">よくわかるHTML5+CSS3の教科書</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4839943486" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4839943486" style="height: 240px; width: 120px;"></iframe>
<br />
<h2 class="entry-section">
2. すべての人に知っておいてほしいスタイルシートデザインの基本原則</h2>
よくわかる~でHTML+CSSの基本に目を通しただけだと、たぶん自分の作りたいイメージ通りのデザインを表現するのは難しいと思います。<br />
この本にはパターン的に実際に現場で使われるようなデザインの表現方法が説明されているので、CSSをさらに詳しく丁寧に学びたいならオススメです。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4844362674/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4844362674&linkCode=as2&tag=tech.shuntak-22">すべての人に知っておいてほしい スタイルシートデザインの基本原則</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4844362674" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4844362674" style="height: 240px; width: 120px;"></iframe>
<br />
<h2 class="entry-section">
3. Web標準の教科書</h2>
次に紹介するのは、まさにスタンダードというような本。かつて、これを読んでないHTMLコーダーは素人といわれた(嘘)。<br />
2008年の本で情報が古い部分もあるのでざっと目を通すくらいでいいと思いますが、Web技術者(クリエーター含む)は教養として読んでおいた方がよいです。辞書的に使うのがいいのかな。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4798010928/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4798010928&linkCode=as2&tag=tech.shuntak-22">Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4798010928" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4798010928" style="height: 240px; width: 120px;"></iframe>
<br />
<h2 class="entry-section">
4. Codecademy</h2>
HTMLをCSSを使いこなすと、いわゆる静的ページというものを作ることができるようになります。マウスを乗せると色が変化したり、レイアウトを整えたり、ボタンのデザインをかっこよくしたり、といったことですね。でも、フォームなどからの入力を受け付けて、サーバーで処理をして、データベースとやりとりをして…というような動的に変化するページを作ろうとするとプログラミングが必要になってきます。<br />
<br />
クリエーターはサーバーサイドプログラミングはしないにしても、フロントサイドのJavascriptプログラミングくらいはすると思います。Javascriptを使えばCSSだけではできなかったような表現もできるようになります。(ブラウザゲームとか、フォームの入力チェックとか)<br />
<br />
Codecademyというオンライン プログラミング学習サイトを使えば、Javascriptというプログラミング言語の学習をすることができます。無料です。<br />
最近ではPythonやRubyのベータテストも始まっているので、少しずつほかの言語も対応してくと思います。<br />
<br />
Webに関わるならHTMLやCSSを避けて通ることはできないと言いましたが、JavascriptもWebプログラミングをやっていくなら避けては通れない言語です。<br />
<br />
<a href="http://www.codecademy.com/">Codecademy</a><br />
<br />
<br />
<h2 class="entry-section">
5. JavaScript本格入門</h2>
Javascriptの入門書。Javascriptの入門書でいいのはあんまりないんだけど、しいていうならこれかな。でも、プログラミングをまったくやったことないという人には難しい気がするし、結構プログラム書いてきてる人には足りない感じです。プログラミング経験者でJSを始める人は下のパーフェクトJavascriptがいいかもしれません。<br />
JS初学者向けの良書がないかと薦められたので追記しました。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4774144665/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4774144665&linkCode=as2&tag=tech.shuntak-22">JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4774144665" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4774144665" style="height: 240px; width: 120px;"></iframe>
<br />
<h2 class="entry-section">
6. パーフェクトJavascript</h2>
これは良書です。このブログでも既に何度か紹介していますが、Javascriptの勉強をしっかりやるなら最良だと思いました。一番のお気に入りの本です。サイ本より好きです。この本を読んでJavascriptが大好きになりました。<br />
<br />
…プログラミング初学者には薦めませんが一応紹介。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/477414813X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=477414813X&linkCode=as2&tag=tech.shuntak-22">パーフェクトJavaScript</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=477414813X" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=477414813X" style="height: 240px; width: 120px;"></iframe>
<br />
<h2 class="entry-section">
7. iOSヒューマンインターフェイスガイドライン</h2>
PDFです。Appleが無料で公開しています。iOSアプリケーション向けですがモバイルUI/UXについて勉強になる資料で、iOSに限らず他のモバイルアプリケーションの開発にも役立つと思います。無料なので読みましょう。<br />
<br />
<a href="https://developer.apple.com/jp/devcenter/ios/library/documentation/MobileHIG.pdf">iOSヒューマンインターフェイスガイドライン[PDF]</a><br />
<br />
<h2 class="entry-section">
8. すべての人に知っておいてほしい スマートフォンサイトデザインの基本原則</h2>
これもスマートフォンデザインのUI/UXに関する書籍です。2で紹介したスタイルシートデザインの本と同じシリーズですね。最近出たばかりです。Web系のIT企業各社の開発最前線で活躍しているクリエイターたちが執筆していて、実際に直面する事例を基にした内容になっています。スタイルシート編と同様、良書です。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/4844362844/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4844362844&linkCode=as2&tag=tech.shuntak-22">すべての人に知っておいてほしい スマートフォンサイトデザインの基本原則</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=tech.shuntak-22&l=as2&o=9&a=4844362844" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=tech.shuntak-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=4844362844" style="height: 240px; width: 120px;"></iframe>
<br />
<h2 class="entry-section">
まとめ</h2>
一番最初に勉強すべきは、HTMLです。HTMLが一番重要です。これが分からなかったら文字通り話にならないです。その次がCSSで、CSSをある程度勉強したら(1と2の本を読破するくらい)、HTMLとCSSだけを使って世の中にあるWebサイトをそっくり真似して作ってみるのが良いと思います。(Webデザイン講座とかでも行われたりしています)<br />
<br />
俺もJavascriptとUI/UXの勉強がんばろう!<br />
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-39237613332775207312012-07-22T00:54:00.000+09:002012-07-22T01:05:55.933+09:00Windowsのコマンドプロンプトでlsコマンドを使えるようにするための最も手っ取り早い方法 ※ただしCygwinは除く<div dir="ltr" style="text-align: left;" trbidi="on">
Windowsはクソですね。いや、WindowsもすごくいいOSだと思いますよ。<br />
ただ、この環境で開発しろと言われるとがっかりしちゃうのも事実。<br />
<br />
Eclipseは最強のIDEだし、気に入らなければNetbeansというIDEもなかなか素敵です。<span style="background-color: white;">(自分はNetbeans派です)</span><br />
<br />
ただ、Windowsの最もクソたらしめている要因は2つあると思っていて、1つはコマンドプロンプトの貧弱さにあると思っています。<br />
もちろんCygwinもありますが、これ、微妙じゃないですか?/cygdrive/c/ってなによ。<br />
<br />
Cygwinを使うくらいならVMでLinux MintなりUbuntuを使う方がマシです。メモリさえ許せば。<br />
<br />
<br />
<h2 class="entry-section">
本題。</h2>
<br />
コマンドプロンプトでlsコマンドを使うにはどうすればよいか。<br />
自分がやったのは、cygwinのバイナリファイルが置いてあるところへパスを通しただけです。<br />
こうすることで、コマンドプロンプトでもlsや他のUNIXコマンドが使えるようになります。<br />
<br />
CygwinでUNIXコマンドを手に入れて、コマンドプロンプトを使うのが現状ではベターかなって思ってます。<br />
<br />
Windowsのコンソールについて、他により良い案があれば教えてください。(切実です)<br />
コメントでもtwitterでも意見お待ちしてます。</div>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2764315556584061984.post-91964082167342553752012-07-09T20:38:00.002+09:002013-06-10T13:32:34.256+09:00変数の存在とプロトタイプ: Javascriptを本格的に勉強し始めて驚かされたこと その2<div dir="ltr" style="text-align: left;" trbidi="on">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzcWFzJowKSNiedUZyQb2zy4eYwv9NMPsZ8ARcTT1z2kVMpyHJix45MR7fJyRZS66RSAymc6Cwrq8h7z7m-bqb2RBXq-_rQ2rmO1Pmnau6hj6e7J361JtwrfSS0W1Aq_1DUjQbFn4tZYu0/s1600/small_4443886636.jpg" style="margin-left: auto; margin-right: auto;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://www.flickr.com/photos/nyuhuhuu/4443886636/">nyuhuhuu</a> <a href="http://creativecommons.org/licenses/by/2.0/">cc</a></td></tr>
</tbody></table>
Javascript (JS) の勉強会に行ってきました。今週で4週目(第4回)です。<a href="http://tech.shuntak.net/2012/06/javascript-1.html">第2回</a>のときもそうでしたが、今回も驚きや新しい発見があったのでブログにまとめておこうと思います。テキストは引き続きこれを使っています。<br />
<br />
<a href="http://www.amazon.co.jp/gp/product/477414813X/ref=as_li_ss_il?ie=UTF8&tag=shuntak-22&linkCode=as2&camp=247&creative=7399&creativeASIN=477414813X"><img border="0" src="http://ws.assoc-amazon.jp/widgets/q?_encoding=UTF8&Format=_SL160_&ASIN=477414813X&MarketPlace=JP&ID=AsinImage&WS=1&tag=shuntak-22&ServiceVersion=20070822" /></a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=shuntak-22&l=as2&o=9&a=477414813X" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<a href="http://www.amazon.co.jp/gp/product/477414813X/ref=as_li_ss_tl?ie=UTF8&tag=shuntak-22&linkCode=as2&camp=247&creative=7399&creativeASIN=477414813X">パーフェクトJavaScript (PERFECT SERIES 4)</a><img alt="" border="0" height="1" src="http://www.assoc-amazon.jp/e/ir?t=shuntak-22&l=as2&o=9&a=477414813X" style="border: none !important; margin: 0px !important;" width="1" />
<br />
<br />
<h2 class="entry-section">
1. 変数の存在チェック(ReferenceError例外の発生を修正する)</h2>
宣言していない変数から値を取り出そうとするとReferenceError例外が起きる。この例外を回避する方法を挙げていく。<br />
<pre class="brush: js">// 遅延評価を利用する
var a = a || 7; // aが既に値を持っていれば変数aの値を使う(イディオム)
// aが厳密にundefiendかどうか調べる その1
var a; // 既に定義されている場合は値はそのまま変わらない
var b = a !== undefined ? a : 7; // aが既に値を持っていれば変数aの値を使う
// aが厳密にundefiendかどうか調べる その2
if (typeof a !== 'undefined') {
var b = a;
} else {
var b = 7;
}
// aが宣言済みか(存在するか)を調べる
if ('a' in this) {
var b = a;
} else {
var b = 7;
}
</pre>
<br />
<h2 class="entry-section">
2. new式の挙動</h2>
コンストラクタは以下のように書く。<br />
<pre class="brush: js">function MyClass(x, y) {
this.x = x;
this.y = y;
}
</pre>
<br />
これをnewしてオブジェクト(インスタンス)を生成する。このときのnew式の動作は以下のようになる。<br />
<ul style="text-align: left;">
<li><span style="background-color: white;">空のオブジェクト{}を生成する</span></li>
<li><span style="background-color: white;">new式で指定した関数(コンストラクタ)を呼び出す</span></li>
<li><span style="background-color: white;">this参照がオブジェクトのプロパティとなる</span></li>
</ul>
この挙動はあたかもクラス定義からインスタンスを生成しているように見えるが、Javascriptにはクラスという概念はない。ただ、コンストラクタ(関数)からnew式によりオブジェクトを生成しているだけである。ただ、Javaなどのクラスベースの言語を使っている人からすると、クラスを定義してインスタンスを生成していると考えた方が分かりやすいかもしれない。<br />
<br />
<h2 class="entry-section">
3. フィールドとメソッドを持つクラス定義</h2>
Javascriptにはクラスはないけれど、コンストラクタ(関数)によりフィールドとメソッドを持つクラスのようなものを定義できる。<br />
<pre class="brush: js">// クラス定義に相当
function MyClass(x, y) {
// フィールドに相当
this.x = x;
this.y = y;
// メソッドに相当
this.show = function() {
print(this.x, this.y);
}
}
js> var obj = new MyClass(3, 2);
js> obj.show(); // => 3 2
</pre>
ただしこのコードには以下の問題がある。<br />
<ul style="text-align: left;">
<li><span style="background-color: white;">このコンストラクタをnewして生成されるインスタンスにはすべて同じshowメソッドが定義されるため、メモリ効率と実行効率がよくない</span></li>
<li><span style="background-color: white;">プロパティ値のアクセス制御(privateやpublic)ができない</span></li>
</ul>
<span style="background-color: white;">このうち前者は以下の方法で解決できる。</span><br />
<h2 class="entry-section">
4. プロトタイプ継承</h2>
上のコードには共通するshowメソッドをすべてのインスタンスのプロパティにコピーしてしまうため効率が悪かった。これをプロトタイプ継承を使って書き換えると以下のようになる。<br />
<pre class="brush: js">function MyClass(x, y) {
this.x = x;
this.y = y;
}
MyClass.prototype.show = function() {
print(this.x, this.y);
}
js> var obj = new MyClass(3, 2);
js> obj.show(); // => 3 2
</pre>
このとき生成したインスタンスオブジェクトobjはプロパティにshowを持たないが、prototypeオブジェクトのプロパティshowを継承している。<br />
<br />
<h2 class="entry-section">
5. プロトタイプチェーン</h2>
パーフェクトJavascriptの138ページにいろいろ説明があるけど、要約するとメソッド呼び出しの優先順位は<br />
<ol style="text-align: left;">
<li><span style="background-color: white;">オブジェクト自身のプロパティ</span></li>
<li><span style="background-color: white;">コンストラクタのprototypeオブジェクトのプロパティ</span></li>
<li><span style="background-color: white;">さらにprototypeをたどって得たプロパティ</span></li>
</ol>
という風になり、最終的にObjectの持つプロパティが実行される(Objectも持たないプロパティの場合はundefinedになる)<br />
<br />
<br /></div>
Unknownnoreply@blogger.com