ししちにじゅうはち 4x7=28

よんたったー https://twitter.com/keita44_f4

俺がgithubを使うにあたってgitを理解しようとした話3

そもそもなんでgitを理解せねば、というかこんなトラブルをことが起きてしまったのか、というお話。

何をしようとしていたか

https://github.com/smlsharp/smlsharp:githubのSML#レポジトリ]のバージョンが1.1.0だったので1.2.0と2.0.0にアップデートしようとしてました。

理想はこんな感じ。

何をやらかしたか

バージョン1.2.0のアップデートは素直にいき、githubへ反映できました。
しかしその次が問題。
間違えて2.0.0の変更を1.1.0にかけてしまい、手元のmasterがリモートのmaster(oring/master)と別ブランチ状態に。
詳細は、いらないファイルを消し忘れたり、README.mdを消してしまったりをして、何度かやり直してパニックになっているうちに、こんな間違ったpush状態に陥っていました。

解決法

解決方法はいろいろありますが、今回は手元のmasterをresetしてv1.2.0に指し直してから、2.0.0をコミットしました。*1
図とコマンドは下記。
ちなみにこの時の自分ではどうしていいかわからずに*2、mzpさんとbleisさんにご指導を仰ぎました。
結果としてgitについていろいろ知ることになりました。

$ git reset --hard v1.2.0   # masterのHEADとファイル内容をv1.2.0へセット


あとはv2.0.0をコミットしなおせば目的のコミットツリーのできあがり。
ちゃんちゃん。

反省

  • gitはコマンドのコピペじゃなくて中身を理解してつかう
    • たいていは痛い目を見てから覚える
  • git reset --hardはファイル内容も書き換えるので慎重に
  • rebase -iでHEADが指してるコミットは消せないっぽい
    • gitのコミットはrebase等で消しても見えなくなるだけで、タグ・ブランチなどで差されていないとそのうちGCされて本当に消えるらしい

*1:わけもわからずmzpの言うとおりにしたらうまくいった、mzpすごいなー!

*2:rebase -i HEAD^^で間違ったv2.0.0を消そうとして消せなくて悩んでました。今思うと、masterのHEADが指してるところを消せるわけがないですね。

ロードバイクを買うときに必要なものリスト

去年の11月にロードバイクを買いました。
先々週、鈴鹿サーキットで走ってきました。
自転車購入を迷っている人のために、何が必要になるかをまとめたくなった。

  • ◎:必須
  • ○:あった方が良い
  • △:人による

ロードバイクを買うにあたって必要なものリスト

  1. ロードバイク
    • もちろん必須ですね。僕は8万クラスの入門モデルを。スペックよりも色で選びました。この値段だとスペックなんて対して変わらないっていうのが結論です。
  2. ◎仏式空気入れ
    • ロードバイクはタイヤのバルブが特殊+圧力計が必要なので専用の空気入れを買いましょう
  3. ◎工具(ドライバ、六角レンチ)
    • 追加パーツをつけたりサドル調整をしたり、何かと必要です。
  4. ◎カギ
    • お高いものですので、カギがないとコンビニに入るのも安心できません。自転車単体のロックだと持ち上げて持っていかれる可能性もあるので、木やフェンスなどに引っ掛けられる長いチェーンロックがオススメです。
  5. ◎ライト
    • 道交法上で必須です。夜に田んぼ道など真っ暗な道を走ることが多いのなら大きくて明るいライトがいいです。そうでもないなら、単3電池1本くらいで済むライトでいいでしょう。
  6. ◎ヘルメット
    • ロードバイクはスピードが出ます。死にたくないなら買うべきです。
  7. ○自転車スタンド
    • スタンドがついていないので、壁に立てかけるか専用スタンドを買いましょう
  8. サイクルコンピューター
    • 安いものでも速度・距離・タイムがわかるのは楽しい。距離を走る人ほど楽しみが増します。街乗りだとそうでもないかな。
  9. △メンテナンスオイルとクリーナー
    • ガッツリメンテして自転車のピカピカ度を楽しみたい人にはいるかと。面倒な場合はお店でお金を払ってメンテしてもらうという手も。
  10. △ズボンの裾止め
    • ジーパンなど普通の長ズボンで乗る場合は、チェーンでズボンが汚れるので必須。反射板がついてるタイプが安全面も増してよいかな。

レースに出るにあたって必要なものリスト

  1. ◎日焼け止め
    • 基本的によく焼けます。ヒリヒリになるので塗っておくべき。
  2. ビンディングペダル
    • あると楽しいらしい。自分はまだ持っていない。
  3. 輪行袋
    • 集合場所まで電車を利用する場合に必須。
  4. △自転車用レースジャージとレースパンツ
    • 普通のジャージやカジュアルな服、さらにコスプレの人もいたので必須ではありません。しかし暑いのであったほうがいいです。あと派手でも周りはもっと派手なんで恥ずかしく無いです。
  5. △手袋
    • 雰囲気が出ます。手も若干楽に。

まとめ

  • ロードバイクを買おうと思うなら、自転車本体(n万)+2〜3万はなんだかんだ必要
  • レースに出る場合の必須な物は少ないけど、あればあるほど楽しめる。
    • mzpさんがおっしゃられた名言「せっかくのレース、やりたいことをやる」
  • 自転車楽しい(^ω^ 三 ^ω^)

俺がgithubを使うにあたってgitを理解しようとした話2

追記:
bleisさんによると「HEADはなんらかの参照を指すもので、コミットそのもを指すものではない」との指摘をいただきました。
図ではコミットを指していますが正しくはコミットのポインタを指します。
ただし、図の修正がめんどい*1のでご了承ください。

追記その2:
すばらしい図解をされているサイトを発見したので掲載させていただきます。コミットとコミットのポインタとHEADの位置などが参考になるだけでなく、各コマンドについてを図でひじょうにわかりやすく説明してくれています。
図解 Git


git話2回目。
hgを使っていた経験からpullやpushなど基本の意味はわかる。
しかしgitを使っていると概念の違いや謎のワードがたくさん出てくる。
今日はそれについても書き留めとく。

gitのポインタ

gitはコミットのポインタとして親コミットを指している。
よって図のように、各コミットの表す矢印はコミットの時系列と逆向きになる。*2
図はA→B→Cと変更していき、途中のBからbranchを作った状態。

HEADって何

今、手元のファイルがどこのコミットにいるのかを示す。
例えば上図だとCのポイントが現在のgitの状態。
もちろんそこから変更点があれば`git status`や`git diff`で確認できる。

HEAD^とかHEAD~って何者

HEADからコミットのポインタをいくつか辿った状態。
HEADはHEADポインタが指すそのもの。
HEAD^やHEAD~はHEADからポインタを1個辿ったもの。
HEAD^^は2個辿ったもの。。。。以下続く。
例えば上図の状態で`git checkout HEAD^`を行うと下図のような状態にHEADが移動し、ファイルを古い状態に戻すことができる。

masterって何

branchの1つでメインブランチに付けられる名前。
ブランチ名なのでcheckoutやpush・pullなどで指定ができる。
たとえばmasterブランチだけをとあるGithubレポジトリにpushしたければ、以下のようなコマンドになる。

$ git push git@github.com:hoge/fuga.git master 

branchって何

枝分かれ。
途中で違った変更を行いたいときに支流として存在する変更点。
`git branch `で指定した名前のブランチが作れる。
`git branch`で現存のブランチの一覧を確認できる。
`git branch -d `でブランチを削除できる。
もちろん、`git chekcout `で指定のブランチへ移動できる。
例えば`git checkout branch_name`をすると、下図のようにHEADが移動する。

まとめ

  • git checkout で特定のブランチへ
  • git branch
    • ブランチの一覧表示
    • でブランチの作成
    • -d でブランチの削除
  • HEADは現在の状態を指すポインタ
  • この程度のことすらわからないgit力に絶望した!

*1:もとい元の図を消してしまった

*2:人間は変更点を管理したいのに、変更点と逆向きのコミットのポインタを意識して操作しなくてはならないところが気に食わない

俺がgithubを使うにあたってgitを理解しようとした話1

最近githubを使う機会が多いです。
まったくコードを書かなかった俺にとっては天から矢がふるレベルの珍しさ。
そこでこのシリーズでは、gitやGithubを使うにあたってのtipsをメモしていこうと思います。

問題点:pushしたcommitとGithubアカウントが関連付けされない

画像のようにGithub上でGithubアカウントの画像が表示されればOKです。
最初はなぜかこの関連付けがされずに、commit時の名前の名無し画像が出るだけでした。

解決法

Githubはアカウントとの関連付けを、Githubアカウント登録メールアドレスとcommitメールアドレスで行っているようです。
この2つを同じメールアドレスに設定しましょう。

.gitconfigへの設定

下記コマンドを叩くか、~/.gitconfigを編集し[user]を追記します。
この方法では全gitコマンドへ影響します。
レポジトリごとに設定を変えたい場合は--globalオプションを外したり。/.git/configに設定します。

$ git config --global user.email hoge@gmail.com
[user]
	email = hoge@gmail.com
Githubの設定

[Account Setting] -> [Emails] -> [Add another email address]で追加し、その後に認証を行います。
[Profile]を編集しても意味がありません*1

Thanks

  • @mzp
  • @bleis

*1:何度もProfileのPublic Email Addressを編集してはまっていたバカがこちらの日記の主になります

金沢旅行に行ってきました

@athos0220が写真を撮りにどこか行きたいと言い出したので、@athos0220、@mzp、@momocusと金沢旅行に行ってきました。
2泊3日の楽しい旅行でした。

1日目

しらさぎにて金沢へ

初めて特急しらさぎに乗りました。
名古屋から金沢まで約3時間ほどの長旅。

  • mzpはコンセントが無い席でそわそわしながら金沢駅周辺のコンセントカフェを探していました。
レンタカーを借りて近江町市場

よんたの1年ぶり運転で移動。
駐車やら怪しくて他メンバーがヒヤヒヤしてました。
市場ではコロッケや海鮮丼を食べました。

夜のおつまみも購入。
予想以上に外人が多くて驚きました。
金沢も観光スポット化してるのかー。

  • mzpは電源のあるカフェに行きましょうと言ってたけど、却下しました。
メイン目的の兼六園

さすがに日本三大庭園だけあってすごかったです。
各地の名梅を集めた梅林や各種を揃えた松など。
金沢城のお殿様、贅沢すぎる。

途中のお茶屋で茶巾絞りの和菓子を。
うますうます

  • mzpは道の雀を追いかけて走ってました。
湯涌温泉のお宿へ

夕食・朝食とも品数が多いしおいしいしで大変よい宿でした。
温泉も気持ちよかった。
蟹・能登牛が出てたいへんよかった。

  • mzpは電源を得て夜遅くまでコードを書いてました。

2日目

忍者寺・東茶屋街

妙立寺(忍者寺と呼ばれている)へ行きました。
入り組んでるわ、落とし穴あるわ、隠し階段あるわ、ニンジャああいえええ。

  • mzpは充電できたので移動の車内でコードを書いてました。
お昼はお寿司を

おいしいです。
初めてカウンター席で1つずつ出る形式を経験した気がする。
GWはサービスランチがやってなかったのがしょんぼり。
でもうまかった。

東茶屋街

いい感じの街並みすごい。
でも中のお店は入れ替わりが激しいようで、「祝3周年」とか書いてた。

  • mzpは漆と金箔を見てました。

3日目

やることがなくなったので日本海

迷いながら砂浜へ。
天気も良く、綺麗な海でした。

  • mzpは海を見ながらコードを書いていました。
帰りは和菓子手作り体験と海鮮丼

おみやげ館なるところで和菓子体験しました。
和菓子作成には手にくっつかないよう潤わせながらつくることが大事で、
乾燥肌の自分には和菓子職人は無理だと感じました。
そこで2杯目の海鮮丼を食べて帰路へ。

  • mzpは帰りの電車内はいきいきとコードを書いていました。

まとめ

  • 石川県の海の幸はうますぎる
  • 金沢周辺、運転は荒い人多かったけど車の絶対数が少なくて運転しやすい
    • 久しぶりに運転したけど事故なく旅行を終えれてよかった
  • mzpの進捗よかったそうです

Xubuntu 64bitにおけるSML# 2.0.0のビルド

SML#2.0.0がリリースされました.
せっかくなのでパッケージではなくソースからビルド.*1
というわけでクリーンなXubuntu 12.04LTSでSML#をビルドしたときの経験まとめです.*2

32bit環境の整備

C/C++の32bitライブラリを用意しておきます.
GMPLLVM,SML#のビルドに必要.
たぶんこれで依存するg++も入ってくれる.

# aptitude install gcc-multilib g++-multilib

GMPライブラリのビルド

通常のGMPライブラリパッケージ(libgmp-dev)は64bitビルドされているので,SML#用に32bitでビルドする.*3
configureを走らせるときにABI=32オプションをつけて,32bitビルドを指定.

$ wget https://gmplib.org/download/gmp/gmp-6.0.0a.tar.lz
$ lzip -d gmp-6.0.0a.tar.lz
$ tar xf gmp-6.0.0a.tar
$ cd gmp-6.0.0a
# mkdir /opt/gmp32-6.0.0
# ./configure ABI=32 --prefix=/opt/gmp-6.0.0
$ make && make check
# make install

追記:runtimeでロードできるようにldconfのパスに加えて、リロードする。

# echo '/opt/gmp32-6.0.0/lib' > /etc/ld.so.conf.d/gmp32.conf
# ldconf

LLVMのビルド

配布されているUbuntu系用のLLVMバイナリは64bitビルドです.*4
なので自力で32bitビルド.
また,SML#は現時点での最新版であるLLVM3.4 32bitを必要としますので,多くのディストリビューションで自力ビルドが必要かと思います.

$ wgetやら解凍やら省略
# mkdir /opt/llvm32-3.4
$ ./configure CC='gcc -m32' CXX='g++ -m32' \
     --build=i686-pc-linux-gnu \
     --prefix=/opt/llvm32-3.4
$ make
# make install

*5

必要なライブラリ郡その他

なんか知らないけど./configure中に怒られたので,libzやlibinfoをいれる.
INSTALLとかの説明には書いてないけど必要なら仕方ない.

# aptitude install libz-dev
# aptitude install libinfo-dev

SML#のビルド

ここまでくればSML#をビルドするだけ!
fast-buildオプションが行方不明なのでコーヒーでも飲みながらまったり待ちましょう.
必要なオプションは32bit・GMPLLVMの指定です.インストール先のprefixはお好みで.
オプション長すぎぱない.

$ wgetやら解凍やら省略
# mkdir /opt/smlsharp-2.0.0
$ ./configure CC='gcc -m32' CXX='g++ -m32' \
    LD='ld -m elf_i386' \
    LDFLAGS='-L/opt/gmp32-6.0.0/lib' \
    CPPFLAGS='-I/opt/gmp32-6.0.0/include' \
    --with-llvm=/opt/llvm32-3.4 \
    --prefix=/opt/smlsharp-2.0.0
$ make
# make install

まとめ

  • 必要が無い限りSML#はビルドパッケージを使うと楽
  • SML#をビルドするなら32bitOSが楽
  • やれるものならやってみろ

*1:コンパイラ改造とかしたくなると必須ですし

*2:今まで使ってたUbuntu10.03はSML#のビルド準備中にlibcが壊れたなんて言えない

*3:libgmp32-devパッケージをいれて,そっちをオプションで指定すればよかった気もする

*4:SML#のビルド中に大量の-lLLVMhogehogeに関するエラーが出て泣いた

*5:LLVMのビルド長いとの噂だったけど,SML#に比べれば短かっt

Functional花見2014に参加してきまし

これに,前日の場所取りからお花見まで参加してきました.

なやばし夜市

なやばし夜市という日本酒祭りがあったのでとりあえず行ってみる.
すでに日本酒で酔っ払う.

夜の部

開始

桜の下は半分くらいしか埋まっておらず,無事にブルーシートを広げる.
夕方から花見してたグループと,泊まって場所取りするグループが半々くらいでした.

早速コンビニ買い出しとピザ注文を実行
ピザハットは22:30注文で23:00受け取りができました.
プロのラブライバーの方はラブライブコラボの箱が切れてても注文するし,ガチャで数秒1万円を溶かすし,すごいと思いました.

差入の泡盛の飲み比べをしたり,ドミニオンをしたり.

夜更け

寝袋で就寝.
寝転がって見る夜桜が綺麗でした.
銀シートがあれば外でも暖かいし背中もいたくなかったです.
首が痛くなり枕を持ってくればよかったと後悔.

あと隣の大学生グループの人狼が一晩中うるさくて,寝るのに邪魔でした.
そうでなくとも酔っぱらいばかりなのでうるさいです.
耳栓があったほうが良かったなと後悔.

夜明け

朝日が綺麗だったみたいですが寝てて見逃しました.
皆は朝ごはんはコンビニでカップ麺やおでんを食べてました.

早朝

早めにきた花見参加者が合流.
なぜか東北から来た人がめちゃくちゃ早く着きました.

あとティッシュソムリエとかシャンプーのお湯割り・水割りとか,皆が順調に壊れていた感がありました.

花見

昨晩から飲み続けてたので記憶が曖昧です.

  • 桜綺麗でした
  • イオン買い出しは遠くて時間かかる
  • ドミノピザは公園に配達してくれた
  • ころこる,してた
  • ころくんがでこちゃんとあすてに絡まれてた

その後,昨晩からの疲れで途中離脱しました.
お疲れ様でした.