blog.textfile.org結城浩のブログ

blog.textfile.org

コマンドラインからgistを作る

gist はコマンドラインからgistを作ったり更新したりするコマンド。

インストール

$ brew install gist
$ man gist

ログイン

$ gist --login

新しいgistを作る

$ gist yourfile.markdown

説明付きで新しいgistを作る

$ gist -d "説明文" yourfile.markdown

gistを更新する(idかurlを指定する)

$ gist yourfile.markdown -u 34179ab830a5574f79ee

(抽選終了)ハングル版「数学ガールの秘密ノート」シリーズ《サイン本無料プレゼント》

一名様への当選メール発送が遅れました。2015年7月18日朝に送っております。ご確認ください。

抽選はすでに終了しています

こんにちは、結城浩です。いつも応援ありがとうございます。

「数学ガール」シリーズは世界各国語に翻訳されています。

みなさんの応援に感謝をこめて《サイン本無料プレゼント》の企画をお送りします。

  • ハングル版「数学ガールの秘密ノート」シリーズ

応募要項

  • お送りするサイン本
    • NOTE1: 『数学ガールの秘密ノート/式とグラフ』(ハングル版)
    • NOTE2: 『数学ガールの秘密ノート/整数で遊ぼう』(ハングル版)
    • NOTE3: 『数学ガールの秘密ノート/丸い三角関数』(ハングル版)
    • NOTE4: 『数学ガールの秘密ノート/数列の広場』(ハングル版)
  • 応募〆切: 2015年7月13日(月)
  • 応募方法:
    • 応募はメールになります。
    • 表題は プレゼント応募 にしてください。
    • 送り先は hyuki.present+20150713@gmail.com です。
    • 応募メールに住所を含める必要はありません。
    • メール本文には、上記のNOTE1からNOTE4までの中から「欲しい順番」をお書きください。
    • 「整数で遊ぼう」が一番欲しいときにはたとえば「NOTE2, NOTE3, NOTE1, NOTE4 の順番で希望」のようにお書きください。

抽選

  • 2015年7月14日(火)に抽選を行い、当選者あてに直接メールをお送りして送付先をおたずねします。
  • 抽選で当選した順に希望する本を割り当てていき、もしも希望する本がすでに割り当て済みなら次の希望する本を割り当てるようにします。

発送

  • プレゼントの発送は当選者から送付先が届いてから一週間後くらいになる予定です。

注意

  • 当選者は10名の予定です。
  • 当選者に送られる冊数は1冊です。
  • おひとり様メール1通でご応募ください。
  • お送りするのは日本国内限定です。
  • お送りするのは結城のサイン本です。
  • お送りいただいたメールアドレスには今後、結城からのお知らせがときたま届くことがあります。
  • この企画は結城が個人的に行っているものです。出版社へのお問い合わせなどはご遠慮ください。

お願い

応募の際にはメールの中に、以下のような内容を自由にお書きください。

  • 結城浩の活動に対する感想
  • 今後結城に書いてほしい本
  • 最近読んでいる本
  • 興味を持っていること
  • 興味を持っている技術
  • よく見るWebサイト
  • 毎月のおこづかい
  • 将来の夢、中学・高校時代の思い出など

感想の有無や内容は、当選するかどうかにはまったく無関係ですが、いろいろ書いてくださると、私はとてもうれしいです。

みなさんからのお手紙を読むのは、大きな楽しみなんです。長いメールでもかまいません。

そうそう、結城メルマガをご購読なさっていたらその旨も書いてください。

履歴

  • 2015-07-04 12:00 募集を開始しました。
  • 2015-07-14 05:10 応募を〆切、抽選を実施し、当選者全員にメールをお送りしました。応募総数は30通、当選者は1名増やして11名としました。書籍の発送は2015年7月21日以降になる予定です。
  • 2015-07-14 23:56 当選者4名さまからお返事をいただきました。残り7名さまです。
  • 2015-07-18 08:59 当選者10名さまからお返事をいただきました。残り1名さまです(この方には結城からの連絡が遅れました。すみません)。10名さま分のサイン本を作り、梱包準備を行い始めます。

Ruby on Rails Tutorial 自分用メモ

Ruby on Rails Tutorialの要点を短時間で振り返るための「自分用メモ」です。

Install RVM.

$ curl -L https://get.rvm.io | bash -s
$ rvm get stable
$ rvm requirements
$ rvm list
$ rvm list known

Install Ruby 2.0.0.

$ rvm install 2.0.0 --with-openssl-dir=$HOME/.rvm/usr

Create gemset for this tutorial.

$ rvm use 2.0.0@railstutorial_rails_4_0 --create --default

Update gem.

$ gem update --system 2.0.3

Install Rails.

$ gem install rails --version 4.0.5

Create my first app.

$ rails new first_app
$ cd first_app
  • Gemfileでバージョンを明示的に指定するとよい。
  • gemsetを指定するコメントあり

Gemfile更新後

$ bundle update
$ bundle install

Rails server http://localhost:3000

$ rails s

.gitignore をすげ替える

$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-gitignore

Git最初だけ

$ git config --global user.name "MY NAME"
$ git config --global user.email my.mail@example.com

Gitリポジトリ最初だけ

$ git init
$ git add .
$ git commit -m "Initial commit."

(GitHubにMYAPP用のリポジトリ作っておく)
$ git remote add origin https://github.com/MYUSERNAME/MYAPP.git
$ git push -u origin master

(BitBucketの場合、BitBucketでMYAPP用のリポジトリ作っておく)
$ git remote add origin git@bitbucket.org:MYUSERNAME/MYAPP.git
$ git push -u origin --all
$ git push -u origin --tags

Git日々の作業

$ git checkout -b BRANCH-NAME
$ git branch
$ vi something
$ git add .
$ git commit -m "Change something."
$ git checkout master
$ git merge BRANCH-NAME
$ git branch -d BRANCH-NAME
$ git push origin master

Herokuで使っているデータベースはPostgresSQL

$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-gemfile_pg_gem
$ bundle install --without production
$ heroku login
$ heroku create
$ git push heroku master
$ heroku open

Herokuでカスタムドメイン使う場合

$ open https://devcenter.heroku.com/articles/custom-domains
$ heroku domains:add myapp.example.com
(DNS Providerで myapp.example.org のCNAMEを xxxx-xxxx-1234.herokuapp.com にする)
$ host myapp.example.com

メモ

$ cd rails_projects
$ rails new demo_app
$ cd demo_app
$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-demo_gemfile_sqlite_version_redux
$ vi Gemfile
$ bundle install --without production
$ bundle update
$ bundle install
$ git init
$ git add .
$ git commit -m "Initial commit"
$ (リポジトリを新規作成)
$ git remote add origin https://github.com/MY-NAME/MY-APP.git
$ git push -u origin master

ScaffoldでUser, Micropost作る

$ rails generate scaffold User name:string email:string
$ rails generate scaffold Micropost content:string user_id:integer
$ bundle exec rake db:migrate

関連ファイル

  • config/routes.rb
  • app/controllers/users_controller.rb
  • app/views/users/index.html.erb
  • app/models/micropost.rb

データモデル同士の関連づけ

  • has_many :microposts
  • belongs_to :user

検証

  • validates :content, length: { maximum: 140 }

テスト

$ rails console

$ heroku create
$ git push heroku master
$ heroku run rake db:migrate

$ cd rails_projects
$ rails new sample_app --skip-test-unit
$ cd sample_app
$ git init
$ git add .
$ git commit -m "Initial commit."
$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-final_gemfile
$ vi Gemfile
$ bundle install --without production
$ bundle update
$ bundle install

秘密トークンの動的生成

$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-secret_token
$ vi config/initializers/secret_token.rb

RSpec

$ rails generate rspec:install
$ git mv README.rdoc README.md
$ git commit -am "Improve the README"
$ git remote add origin https://github.com/USERNAME/sample_app.git
$ git push -u origin master

$ heroku create
$ git push heroku master
$ heroku run rake db:migrate

$ git checkout -b static-pages
$ rails generate controller StaticPages home help --no-test-framework

ファイル

  • config/routes.rb
  • app/views/static_pages/home.html.erb
  • app/views/static_pages/help.html.erb

テスト

$ rails generate integration_test static_pages
  • spec/requests/staticpagesspec.rb

テスト

$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-capybara_dsl
  • spec/spec_helper.rb

テスト

$ bundle exec rspec spec/requests/static_pages_spec.rb
  • app/views/layouts/application.html.erb
  • app/controllers/staticpagescontroller.rb
  • config/routes.rb
  • app/views/static_pages/help.html.erb
  • app/views/static_pages/home.html.erb
  • app/views/static_pages/about.html.erb
  • app/helpers/application_helper.rb

Asset Pipeline互換の行を追加する。

$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-bootstrap_config
$ vi config/application.rb
$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-bootstrap_css
$ vi app/assets/stylesheets/custom.css.scss

パーシャル

$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-layout_with_partials
$ vi app/views/layouts/application.html.erb
$ open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-stylesheets_partial
  • app/assets/images/rails.png

カスタムドメイン

$ heroku apps:rename sample-app-XXXX
$ heroku domains:add myapp.example.com
(DNS Providerで myapp.example.orgのCNAMEを sample-app-XXXX.herokuapp.com にする。
$ host myapp.example.com

新規にメモアプリを作る

cd rails_projects
rvm list
rvm use 2.0.0@railstutorial_rails_4_0 --create --default
rails new memo_app
cd memo_app
git init
git add .
git commit -m "Initial commit."
git remote add origin git@bitbucket.org:MYNAME/MYAPPNAME.git
git push -u origin --all
git push -u origin --tags

open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-gitignore
vi .gitignore
git status
git add .
git commit -m "Ignore more files for git."
git push

open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-final_gemfile
vi Gemfile
git diff
git add .
git commit -m "Include Bootstrap in Gemfile."
git status
git push

bundle install --without production
bundle update
bundle install

git checkout -b scaffold
git branch
rails generate scaffold Memopost memo_title:string memo_content:text
bundle exec rake db:migrate
rails s &
open http://localhost:3000/memoposts
git status
git add .
git commit -m "Create Memopost."
git checkout master
git merge scaffold
git branch
git push origin master
git branch -d scaffold

git checkout -b static-pages
rails generate controller StaticPages home help --no-test-framework
rails destroy controller StaticPages home help
rails generate controller StaticPages home about --no-test-framework
vi app/assets/stylesheets/custom.css.scss
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-bootstrap_config
vi config/application.rb
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-layout_with_footer
vi app/views/layouts/application.html.erb
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-stylesheets_partial
vi app/views/layouts/_shim.html.erb
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-header_partial
vi app/views/layouts/_header.html.erb
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-footer_partial
vi app/views/layouts/_footer.html.erb
rails s &
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-title_helper
vi app/helpers/application_helper.rb
git status
git add .
git commit -m "Add Custom CSS, Static Pages, header, footer."
git checkout master
git branch
git merge static-pages
git push
git branch -d static-pages

git checkout -b secret
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-secret_token
vi config/initializers/secret_token.rb
git status
git add .
git commit -m "Use dynamic secret token."
git checkout master
git branch
git merge secret
git branch -d secret

git checkout -b route
open http://railstutorial.jp/book/ruby-on-rails-tutorial?version=4.0#code-root_route
vi config/routes.rb
git status
git add .
git commit -m "Fix root."
git checkout master
git branch
git merge route
git branch -d route

heroku login
heroku create
git push heroku master
heroku run rake db:migrate
heroku open
heroku domains:add memo.textfile.org
# Setup CNAME at DNS provider.
heroku domains:remove memo.textfile.org
heroku domains:add memoapp.textfile.org
open http://memoapp.textfile.org/

git pushでパスフレーズを入力せずにすませる方法(remote origin urlを変更する)

背景

  • GitHubやBitBucketを使っている。
  • remote origin urlが https://... になっている。

問題

  • git pushするとログインパスフレーズを入力しなければならない。

解法

  • SSHを使えるようにしておく。
  • remote origin urlを git@... に変更する。

手順

対象ディレクトリへ移動する。

$ cd ~/myrepo

remote origin urlを確認する。

$ git config remote.origin.url
https://YOURNAME@example.com/YOURNAME/myrepo.git

remote origin urlを変更する。

$ git remote set-url origin git@example.com:YOURNAME/myrepo.git

SSHに関しては以下を参照。

参照

githubのリポジトリにアクセスするとパスワードを求められる時の対処

GitHub Help: Categories / SSH

Use the SSH protocol with Bitbucket

追記

スクリプトにした。

https://gist.github.com/hyuki0000/e066a4cca2d1952b4c88

Vimでモードラインを設定すれば拡張子とは関係なくファイルタイプを指定できる

背景

  • Vimを使っている。
  • ~/.vimrcの中で:set filetype onとしておけば、file.htmlならHTMLとして、file.cssならCSSとしてファイルタイプが認識される。

問題

  • トランスレータで変換を掛けるような場合、内容はHTMLだけどfile.sourceのように拡張子が.htmlじゃない場合がある。

解法

  • 以下のようにファイル中に「モードライン」を指定する。

ファイルをHTMLとして認識させる場合

<!-- vim: set filetype=html: -->

ファイルをCSSとして認識させる場合

/* vim: set filetype=css: */

参照

http://vim-jp.org/vimdoc-ja/filetype.html

http://vim-jp.org/vimdoc-ja/options.html#modeline

自分の作業をざっくり把握するための工夫(JSON + SVG)

背景

  • 自分が今日どんな作業をしたかをざっくりとらえるために「色つき星取表」というものを作っている。

問題

  • 自分でいちいち「今日何をやった」を入力するのがめんどうである。

解法

  • 自分の作業で必ず実行するコマンドに、以下のようなJSON形式で作業記録を付ける処理を混ぜ込む。
  • pwd は作業ディレクトリで、dateは今日の日付。
work.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
  // (省略)
  {
    "pwd": "/Users/hyuki/girl",
    "date": "2014-11-14"
  },
  {
    "pwd": "/Users/hyuki/private",
    "date": "2014-11-12"
  },
  {
    "pwd": "/Users/hyuki/girl/note",
    "date": "2014-11-14"
  },
  // (省略)
]
  • そのファイルを読み込んで、自作スクリプトでHTMLに変換する(実質はSVG)。
work.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
<body>
<svg width="1000" height="500">
(省略)
<rect x="0" y="0" width="16" height="16" fill="#f0f0f0"/>
<rect x="18" y="0" width="16" height="16" fill="#6666ff"/>
<rect x="36" y="0" width="16" height="16" fill="#f0f0f0"/>
<rect x="54" y="0" width="16" height="16" fill="#6666ff"/>
<rect x="72" y="0" width="16" height="16" fill="#6666ff"/>
<text x="92" y="14" fill="black" font-family="Verdana" font-size="16" stroke="black">girl</text>
<rect x="0" y="18" width="16" height="16" fill="#f0f0f0"/>
<rect x="18" y="18" width="16" height="16" fill="#f0f0f0"/>
<rect x="36" y="18" width="16" height="16" fill="#f0f0f0"/>
<rect x="54" y="18" width="16" height="16" fill="#6666ff"/>
<rect x="72" y="18" width="16" height="16" fill="#f0f0f0"/>
<text x="92" y="32" fill="black" font-family="Verdana" font-size="16" stroke="black">girl/note</text>
<rect x="0" y="36" width="16" height="16" fill="#f0f0f0"/>
<rect x="18" y="36" width="16" height="16" fill="#f0f0f0"/>
<rect x="36" y="36" width="16" height="16" fill="#6666ff"/>
<rect x="54" y="36" width="16" height="16" fill="#f0f0f0"/>
<rect x="72" y="36" width="16" height="16" fill="#f0f0f0"/>
<text x="92" y="50" fill="black" font-family="Verdana" font-size="16" stroke="black">private</text>
(省略)
</svg>
</body>
</html>

結果

  • 以下のようなグラフができる。

参照

  • 以下の連続ツイートは作業のメモです。

work_hereを作る。

もう少し考えを進める。

work_mapを作る。

追記(2014-11-20)

  • 具体的なスクリプトはYukiTaskで公開。

iPhone 5からiPhone 6にバージョンアップ

iPhone 5をiPhone 6にバージョンアップした。

  • どちらもSoftbank
  • どちらも64GB
  • どちらもオンラインショップで購入し、自分でセットアップ。

iPhone 5をバックアップする

  • iPhone 5をiOS 8.1にバージョンアップする。
  • iPhone 5をMacBookにつないでバックアップする。
    • 「iPhoneのバックアップを暗号化」をオンにしておくとセキュリティ関連の設定までバックアップしてくれるので楽なはず。

iPhone 6を電話機にする

  • iPhone 6に同梱されているものを確認。
  • 同梱されている紙に「iPhone ご利用前のお手続き・設定」というページのURLがあるのでそこを表示して読む。
    • iPhone 6にUSIMカードを取り付ける。
    • 電話機切り替え手続きを行う。

iPhone 6を復元する

  • iPhone 6をMacBookにつなぐ。
  • iPhone 6をバックアップから復元しようとしたら「バージョンが違うから駄目」という主旨のことを言われて、少し焦る。
  • iPhone 6をiOS 8.1にバージョンアップする。
  • iPhone 6をMacBookにつなぎ直す。
  • iPhone 6をバックアップから復元する。
    • いくつかのアプリが「見つからない」と言われるけれど、使ってないアプリなのでとりあえず放置。

以上。

朝一番の自動書記

昨日、こんな記事を読んだ。

軽視できない素晴らしさ。「朝早く起きてすぐ書く」ことの驚くべきメリット

これはいいかもしれない。

起きてすぐ、自分の文章を書く。調べ物や推敲はしない。

明日(つまり今日)からやってみよう、と思ったのですぐにiPhoneのアラームに6:30をセットした。

そして、昨日の明日(つまり今日)、つい先ほどアラームがなって、寝ぼけ眼をこすりつつ文章を書いていたところ。

準備していなかったのでまずは思いついたことを文章にしていく「自動書記」を20分ほど行ってみた。

書くときに使ったのはもちろん、自作のエディタDraftである。自動書記には最高のエディタ。

テーマも何もなく好きなことを書いた。結果はEvernoteに保存することにした。

この活動に名前を付けようと思った。何がいいかな。

仮に「朝一番の自動書記」としてみた。

基本的には 6:35〜6:55 の20分間をあてようと思うけれど、あまりストリクトに時間も時刻も決めない。朝起きたらただ書くというだけ。

新しい習慣になるかな。

そうだ、朝のデボーションに結びつけてもいいな。