まなびやりはく

ついにはじめましたゆるめにいきます

zshのプロンプトにお天気表示してみた

どうもみなさんこんにちは、@kanu1102です。

今日はきっとエンジニアのみなさんが
一番目にする場所であろうシェルをいじろうと思います。

プロンプトに天気でてきたらかわいい気がする。
うんきっとかわいいに違いない。

f:id:kanu1102:20150111023205p:plain

お天気を調べる

天気調べるなにかがあるはず
さくっとgoogle先生に質問したら、curl使ってlivedoorのお天気とってくるAPIしばいてる記事があったので参考に。

shell - シェルで今日の天気予報表示 - Qiita

上記より

$ curl -s http://weather.livedoor.com/forecast/webservice/json/v1\?city\=XXXXXX | jq -r '.forecasts[] | select(.dateLabel == "今日").telop'


でお天気が表示されることが判明。

JSON見づらい

jqいれます。

brew intall jq

でサクッとインストール。
jqJSONパーサーで結構フィルタリングいっぱいできて便利です。

  • jq公式リファレンス

  jq Manual (development version)

  • ざっくり日本語訳してくれた記事

  軽量JSONパーサー『jq』のドキュメント:『jq Manual』をざっくり日本語訳してみました | Developers.IO

お天気をだす

無事jqコマンドが使えるようになったので
curlするとこんなのが返ってきます。

f:id:kanu1102:20150111030413p:plain

曇時々晴...まてよこれって天気の種類めっちゃあるやつじゃ...

お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報

仕様に天気の種類のってないってことで
適当にいろんな都道府県の天気しらべてみて
こんくらいあったらなんとかなるでしょーくらいまででやめた(18種類くらい

返ってきた天気をシェルスクリプトの変数にぶちこむ。

WEATHER=$(curl -s http://weather.livedoor.com/forecast/webservice/json/v1\?city\=260010 | jq -r '.forecasts[] | select(.dateLabel == "今日").telop' );

ちなみにcityは260010は京都南部です。
東京は130010で滋賀は250010。
これもlivedoor天気の各都道府県の天気調べたらURLにかいてあるのでそれを参考に。
(一覧でだしてよねとかもちろん思ったり。)

この天気によって case文 で場合分け(めんどくさい)
時々は / 使って、のちは -> で表現してみました。

case $WEATHER in
   曇時々晴) WE="☁ /☀";;
   曇時々雨) WE="☁ /☂";;
   曇時々雪) WE="☁ /☃";;
   晴時々曇) WE="☀ /☁";;
   晴時々雨) WE="☀ /☂";;
   雨時々曇) WE="☂ /☁";;
   晴のち曇) WE="☀ ->☁";;
   晴のち雨) WE="☀ ->☂";;
   曇のち晴) WE="☁ ->☀";;
   曇のち雨) WE="☁ ->☂";;
   雨のち晴) WE="☂ ->☀";;
   雨のち曇) WE="☂ ->☁";;
   雪のち曇) WE="☃ ->☁";;
   曇のち雪) WE="☁ ->☃";; 
   雨) WE="☂";;
   晴れ) WE="☀";;
   曇り) WE="☁";;
   雪) WE="☃";;
   *) WE="♡";;
esac

これでだいたい準備はおっけーです。
登録されてない天気がでると♡がでるので
そんなときは

echo $WEATHER

なりして調べて追加してください(糞設計でごめんなさい)

プロンプトに表示させる

天気を $WE に入れたので、プロンプトに入れます。

tmp_prompt="%{${fg[cyan]}%}%n%{${reset_color}%} %{${fg[red]}%}${WE}%{${reset_color}%} %{${fg[magenta]}%}>%{${reset_color}%}"  


私の場合、kanae 天気 >にしてるので、ユーザ名 %n をシアンではさんでます。
%{${fg[cyan]}%}%n%{${reset_color}%}ここまでで1つ。
色は%{${fg[cyan]}%}でつけて%{${reset_color}%}で色を戻す。
天気毎に色変えたかったんですがすごくめんどそうだったので諦めて全部赤色に。
%{${fg[red]}%}${WE}%{${reset_color}%}の部分ですね。
ちなみに色つけるためにはautoload -U colors; colorsをかかないとダメです。

f:id:kanu1102:20150111023205p:plain


さてこれでプロンプトにお天気がでたはずです!
確認はコマンドライン

exec -l $SHELL

つかうとシェル再起動できるので
あたらしく開いてたしかめなくていいので便利です。

ついでにシェルスクリプトについても調べたりしてたので参考に。

シェルスクリプト入門 書き方のまとめ | Memo on the Web


以下私の.zshrcのお天気部分とプロンプト表示部分抜粋

ネットで漁った.zshrcをベースにしてます。
ちなみに右プロンプトにはカレントディレクトリだしてます。
明日の天気とかにしたければcurl(.dateLabel == "今日")を明日にするとできます。

[お天気をzshのプロンプトに表示させる部分の.zshrc](https://gist.github.com/63d3e899face3677f781)

2014年の振り返り

みなさんあけましておめでとうございます。
年越しは雪山でした、@kanu1102です。

今日はやろうとおもっていたけど、年末忙しくてできなかった 2014年の振り返りをしようかと思います。

1月

  • 八方に冬ごもり
  • 研究室スノボ
    初めてスノボデビュー

2月

  • Tech Kidsとの出会い
  • ハイカラな言語を知る
  • 死を覚悟した卒論

3月

  • 岩岳大会
  • CATKキャンプ

4月

  • 名古屋

5月

  • 連日BBQ
  • ごはん会多々
  • アナ雪

6月

7月

8月

9月

10月

  • DMTCガールズハック
  • 焼き肉
  • セキュリティインターン
  • 学会
  • アゴを3針縫う
  • 突然のハロウィンの特殊メイク

11月

12月

  • YUKI LIVE
  • お腹壊す魔の一週間
  • 就活
  • 絶叫合宿
  • ギークフェスタ
  • 東京観光
  • iPhone 6に変えてエージェントデビュー
  • 雪山雪山雪山

結構充実した1年だったなーー。
さて、2015年ですが、後悔のない年にしたいですね。
いろいろ全部含めて、未来の自分が後悔しないように今を生きたい。

【Tech Women Advent Calendar 2014】この夏わたしはGitに出会い、恋をした

こんにちは、そしてはじめまして
@kanu1102です。かぬーと呼ばれてます、カヌーはやったことないです。
情報系女子大学院生M1です。画処理とかとか。

Tech Women Advent Calendar 2014の7日目として インターン先の会社で出会った女子エンジニアの先輩
@sinamon129さんに誘われ、わたしなんかでいいのかと思いつつ、
恐れながら参加させていただくことになりました!

最初は研究のこととかも考えたのですが、なんもいい案浮かばなかったのと、 インターンで学んだまとめみたいなのも違う気がして、 今日はこの夏のインターンを通して出会ったGitという素晴らしい何か(笑) との壮大なラブストーリー(思い込み) 的なものをだらだら綴ってGitの素晴らしさを伝えられればと思います。 Gitに初めて触れたときのことを思い返してくだされば幸いです。

この夏わたしはGitに出会い、恋をした

1. 出会い

出会いは某IT会社のインターンでした。5日間でiOSアプリ作るでー! アイデアソンは事前にチームでやってきてねー!って感じのものでした。 開発は主にGitHubを使って、プライベートリポジトリにあげてうんぬんかんぬん。 (我がチームメンバーは全員Git初心者だった)

え、なんなんそもそもGitってなんなんバージョン管理?なにそれ←

的な状態でした。 わたしの研究室ではWebやネイティブ系のものに全く触れない環境で、 大規模開発とかもないので、個人主体で、ソースコード管理とか別にみたいな(笑)
そもそもそういうハイカラな言語にちゃんと触れたのが今年からだったw(いつもC/C++とか)
1日目は各自とりあえずローカルブランチ切って作業(pushとかとりあえずしない←)

その夜、一回統合したほうがいいと教えられる  
↓  
よくわからんけどリモートのマスターとってきてローカルのマスター新しくする  
↓  
ローカルでマージ!えいっ  
↓  
2人目以降ぎゃああああああ  
(コンフリクトの嵐)  

まあそりゃそうですよね。まず初心者すぎるわたしたちは.gitignoreを無視していた(というより知らんかった)
とりあえず色々無駄な労力なので新しくリポジトリ作りなおしてignoreファイル作ってあれやこれやして(メンターさんほんとにありがとう) その夜はまあなんとかなりました。第一印象は本当に最悪で、なんでこんなややこしいの使うのかさっぱりわからなかったです。

2. いがみ合う日々

2日目から順調に開発。ブランチも切る(たまにマスターで作業しててぎゃーってなることもしばしば)
でもGitHubのissueとか知らない。ブランチ名と全く違うことしてたりする。細かくブランチ切れてない。コミットも適当(笑) でも定期的に統合!よっしゃ!うわ、コンフリクトや...。
いろいろ他にもあったんですが、メインはこいつ。 xcodeの.pbxprojがそりゃあもうコンフリクトしまくる。

Xcodeのプロジェクトファイル(pbxproj)がコンフリクトしまくるのをなんとかしたい! - TOKOROM BLOG

ignore書いててもコンフリクトしまくる。ヤダもうなんで!
(ストーリーボードちょっとでもいじりあうとダメみたい)

3. 好きになりかける

あんまりにもコンフリクトしまくるので、vimでコンフリクト直すのに慣れてしまった。 はいはいとりあえず/HEADで検索検索ぅ。 なんかわたしの時だけどんどん素直になっていくGit(勘違い)
相変わらずコンフリクトを起こすメンバーのコンフリクトも直しつつ、 あれ、わたしもしかしてコイツ好きかも?

4. 喧嘩する

二人の距離がだいぶ近づいた気がする中、次のインターン先へ。
今回は3週間でWebサービスを作るぞ!フロントからサーバ、DBまでがんばるぞ的なものでした。 ここでもWebサービス作ったことない初心者だったので、講義で学びが多い多い。 そしてここでも登場するGit。
ふふーん、わたしだいぶ仲良くなったもんね!とか思ってたけど、 事前課題でGit学ぼうのコーナーがあり、やってみるものの何cherry-pickって何。 reset?なんか怖い。

Gitってとっても奥が深いんだなあ、
わたしが見てたのはアイツのほんの一面だったのね、と。

でもまあなんだかんだここでも、 コンフリクトは起こるので、唸ったりしながら直しつつ、 チームメンバーのコンフリクト直したり Git手順表書いたりして円滑にチーム開発できました。 wikiやissueを効率よく使うことも覚えたり。

でもなんていうかまあ、この時のわたしはGitの素晴らしさをまだ分かってなかった。

5. 離れて気づいた愛しい存在

無事インターンも終わり、台風がやってきたころ、 初心者向け女の子Webサービスハッカソン的なものに参加することになりました。 サーバの勉強したいなと思ってたのでサーバ側をやることになり、 チーム開発が始まった。

あれ、アイツがいない。

初心者向けということで、Gitを使わない開発スタイル。 たしかに初心者にGit導入させたら、なれるのに1日じゃ厳しい感じがぷんぷんする。 (自分もまだまだ全然初心者)

とりあえず担当わけて開発。

ただし時間がぜんぜんなく、最終日朝にやっと統合!!
(いまになって思えば恐怖でしかない)

統合手段は、完全手作業マージです☆

ローカル環境下での開発なのでDBがわたしのローカルにしかない。
(仮想環境ってなんて便利なのかしら)(遠い目)
すなわちわたしのローカル下で統合する他ない。 みんなAirDropで送ってー!
うおおこのページとこのページつながってない! リンクさせとかなきゃ!あーそっかjsの方でサーバに渡す部分ないわ!(気づくの遅い) そもそも統一したはずのファイル構造がちょっと違ったりしてパスがおかしい。 直したらなんかおかしい、あれ、前の状態からどこ変えたんだっけ?? ってなりながら必死で作業。そしてページのCSSが、個人のPCの解像度に最適化されすぎて 崩れまくる事態でぎゃー(間に合わないのでここは諦めた。解決できなくてごめんね;_;) 今思えば自分のローカルだけGit管理させときゃよかった。

こんなに、こんなにもGitが恋しくなったのは初めてでした。 初めて愛しいと思えた瞬間でした。 同時にGitの凄さを身にしみて感じました。アイツいつも小洒落た作業をサクっと短時間でやってるんだなーと。 こまめにコミットしてこまめにプッシュして不足部分確認して直してマージ...とかやってたら 最終日の朝にここまで大変な思いすることなかったんだろうなあ(遠い目)

手作業マージ、ダメ、絶対。 (もう絶対イヤだと心に刻んだ)

そして最初の設定大事(ignoreとか)
そーいうの勝手に作ってくれる便利なサービスもありますし。

初心者の私が主に使用したGitコマンド

実際にメインで使ってたコマンドです。これ以外も使うと思うんですが、変なことしない限りわりとこれでなんとかなる気がします。変なことしちゃった場合はcherry-pickなりrevertなりでよしなに頑張る(笑)

  • git init
    使うディレクトリをgitに管理させリポジトリをつくる

  • git add (ファイル名) / git add .
    作業の変更をステージングエリアに追加する

  • git commit -m "(コミットメッセージ)"
    ステージされたスナップショットをコミットメッセージ付きで1行でコミットする
    いちいちエディタ開かなくていいので便利

  • git status
    ファイルの現在の状態を一覧表示する

  • git log
    コミット履歴を確認する

  • git diff
    ステージングエリアとワーキングツリーの差分を表示
    オプションつけるとファイル間の差分なども見れる

  • git clone git@(アドレス)
    レポジトリgit@(アドレス)を複製する

  • git branch
    現在あるブランチをの一覧を表示する
    (*がついてるブランチがチェックアウト中のブランチ)

  • git branch -d (ブランチ名)
    ブランチを削除する
    要らなくなったブランチは削除したほうがスッキリします

  • git checkout -b (ブランチ名)
    ブランチをつくってチェックアウトする
    (git branch (ブランチ名)+ git checkout (ブランチ名))

  • git checkout -b (ブランチ名) (既存ブランチ名)
    既存のブランチから引き継いで新しいブランチをつくってチェックアウトする

  • git pull origin master
    ローカルとリモートのマスターを同期する
    (git fetch + git merge)

  • git rebase / git rebase -i master
    ブランチをマージする / マスターと現在のブランチをマージする
    pushする前にrebase使うとコミット履歴が綺麗になります -i(interactiveの略)つけることで、各コミットについて処理(歴史の改ざん)ができる
    ※リモートのコミットはrebaseしないこと

  • git rebase --continue
    修正したあとに再びrebaseし直す

  • git push origin (ブランチ名)
    リモートにローカルブランチをプッシュする

まとめ

思ってた以上にだらだらと長くなりましたが、
何が言いたいかというと出会って半年も経ってないけど、

  • Git(GitHub)っていいよね!
  • バージョン管理大切
  • 基本コマンドは頭に叩き込む
    (GitのAdvent Calendarとかも参考に)
    Git Advent Calendar 2014 - Qiita
  • masterで作業しない
  • 初心者だからこそissueやwikiを使った方がいい
    (チームで決めたことはちゃんとwikiに書いて確認しあう)
  • issue以外のことをするならまたissueきる
    (誰が何やってるのか言葉にしなくてもわかる)
  • プルリク貰ったらちゃんと確認する
  • 手作業の統合は愚か
  • 設定ファイル系は一番最初にちゃんとしよう

複数人で開発するならGitHubなりSubversionなりなんらかのツール使ったほうがいいですいやほんとに←
関西的にいうと551の豚まんがあるとき\(^o^)/とないとき/(^o^)\くらい差があります。

明日は@aa7thさんです!おたのしみに!

雑にブログはじめました。

こんにちは、そしてはじめまして
@kanu1102です。

情報系女子大学院生M1で画処理とかやってます。
Web系は最近はじめました。
ブログタイトルに深い意味はあったりなかったりするんですが
李白好きです。李白リスペクトしてます。

ちょっとIT系のアドベントカレンダーに参加することになり
ついでだから前から始めようと思ってた
自分用の技術めも的なものの整理も兼ねつつ
李白を小出しにしつつ
このタイミングでブログはじめました。笑

Tech Women Advent Calendar 2014 - Qiita

7日にゆるめの記事をゆるく書く予定です。