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

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

Emacsのバッファ移動に便利なショートカットキー

問題点

C-xoでバッファ移動はできるけどバッファを3分割以上してると移動がめんどくなってきますよね。
自分は5画面(メイン1つ、サブ2つ、grep-find対象、grep-find結果)があるのでC-xoでは対処できなくなってきました。
そこでバッファをもっと便利に移動する設定を紹介。

よくある設定

Shift+カーソルキーでバッファが移動できるようになります。
めっちゃ便利!
しかし使っているとシフトを押すのがだるくなってきました。

(windmove-default-keybindings)
(setq windmove-wrap-around t)

今回の設定

そこでシフトすらいらないように設定。
そもそもEmacsではfbpn使うからカーソルキーなんて使わないって人におすすめ。
カーソルキーは全部バッファ移動に割り当ててしまいましょう.

(global-set-key (kbd "<left>") 'windmove-left)
(global-set-key (kbd "<right>") 'windmove-right)
(global-set-key (kbd "<up>") 'windmove-up)
(global-set-key (kbd "<down>") 'windmove-down)

やっぱりカーソルキーはほしい

手をカーソルキーまで移動するのもめんどいので、C-c+hjklを追加
手を移動させるのはとても面倒なことですよね。

;;; C-x oの代わりのバッファ移動
(global-set-key "\C-cl" 'windmove-right)
(global-set-key "\C-ch" 'windmove-left)
(global-set-key "\C-cj" 'windmove-down)
(global-set-key "\C-ck" 'windmove-up)

まとめ

今はこのC-c+vi操作が気に入っています。
まじ便利

C言語で非アスキー文字を使う方法

諸事情でArduinoを使っています。
さらにArduino ROBOTO LCDを組み合わせています。
さてこのLCDアスキー文字を表示できますが、実はアスキー外にも文字が定義されています。
その中で-9(unsignedだと247)*1を含んだ文字列を表示する方法で困ったのでまとめます。

無理やりキャストする

できるけどさっぱりクールじゃない。
コードも読みづらいです。

char* s = "a";
char[0] = (char)(-9);

16進数を使う

にあるように16進数の\xNNNNで指定できます。
ただしchar1文字しか使わないならN2文字で区切る必要があります。

char* s = "\xf7";

8進数を使う

なかなか使う機会がないけど\NNNで8進が使えましたね!

char* s = "\367";

まとめ

C難しい

*1:-9は上付き丸に割り当てており、℃を二文字使って表せる

俺が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の進捗よかったそうです