よこなのへたのよこずき

noteもよろしくね

Git for BeginnersでGitキホンを説明した #javajo #PyLadiesTokyo

昨日5/23(土)はGit for Beginnersに参加しました。

PyLadies Tokyo(PyLadies公式はこっち)・Java女子部協賛イベントで、40人弱集まってかなり盛り上がったのですが、
女子を集めた運営者たちも、集まった女子たちも、女子が多くて戸惑うという面白い勉強会でした。

ツイートもいっぱいとんでいて、まとめも出来てます〜ありがとうございます! togetter.com

30分×4コマあって、今回は私も登壇する機会をいただきました!
発表順に、資料貼りつつコメントしていきます!


2ヶ月前にGitを始めた私からこれから始める皆さんへ


私のです〜! バージョン管理って何かなーというところから、Gitの基本、そして2ヶ月使ってみた感想を話しました。
Git、使ってみたら意外と混乱したので、これから使う方が分かりづらいだろうと思うことを中心に説明したつもりです。
バージョン管理らしきこと一切やったことがない、という方もいらっしゃったので前半の説明し甲斐ありました!!

準備しながら思っていたこと、目指していたことを書き残してみます。

  • コミットとかプルとか基本的なことを最初に一枚絵で示したい!
    私がこれまで調べて出会ったことのある情報は、コミットとは〜、プッシュとは〜、って感じで
    順番に説明していくものが多かったんですよね。
    なので、全部読めば分かるんだけど、本っ当に何が何だか分からない状態だと
    全体の流れを理解するまでが結構骨折りだと思います。
    細かいことは使いながら必要に応じて分かっていけばよいわけで、
    まずは"リポジトリに対して何するの?"そのために"どういう順番でどういう操作をするの?"
    ってことをざっくり伝えたいなぁなんて考えてました。

  • ローカル操作における状態の移り変わりを理解してもらいたい!
    SVNCVS使いからGit使いに変身したあとの私は、最初の頃「add」が何なのかよく分かりませんでした。
    (集中型のコミットと同じような感覚でいたからかな?)
    というわけで(?)、ファイルを編集してからコミットするまでどういう変化があるのか、
    最初に知っておく必要があると感じ、そこにも時間を割きました。
    もちろん集中型から移ってきた人じゃなくてもこのへんは大事な話ですね〜。

ちなみに@backpaper0さんにオススメしていただいたPro Gitが分かりやすくて、理解するにあたって大変助けられました!
無料でこれを閲覧出来るなんてすごい!みなさんも是非!

で、で、で、嬉しいことに、ホットエントリ入りしましたー。

あと、

f:id:ihcomega:20150524172148p:plain:w600
ありがたい(ง ´͈౪`͈)ว

それにしても緊張しました・・・。
Java女子部の説明とLT以外で人前に立つのは初めてだったので、伝わるかなーとか楽しんでもらえるかなーとか
(ちょっと身の程知らずな)心配をしてしまいました。慣れたいもんじゃ〜。
でも皆さん、問いかけに反応してくださったからとってもやりやすかったです!ありがとうございました\\\(۶•̀ᴗ•́)۶////

あともうひとつ反省点としては資料作り時間かけすぎたwえへへ。


他の方はみなさんGit使い慣れてて、ハンズオンとか実践的なおはなしとかだったので、勉強になりました!

[ハンズオン] はじめてのGithub

@YuryuさんによるGitHubつかってみようハンズオン!
隣の人と、GitHubフローを回してみるというもの。ブラウザからの操作よく知らなかったー色々出来るんですね。
f:id:ihcomega:20150524162927p:plain:w600
ようす。README更新して遊んでました。

私が複数人開発・業務で感じているGitのうまみ


@sinamon129さんが実務でGit使って感じたことを教えてくれました!
開発を楽しく進めているように見えて、いいなぁ〜。LGTMの画像貼って楽しむ遊びがあったんやなー。

DevOps分野でのGit活用事例

github.com

@_zooさんも、業務寄りのおはなし!資料がぎっはぶ管理!
インフラエンジニアなんですってー。分からない部分もあったけど(ウッ)
私ももっと会社でGit活用出来る気してきました。って雑か。ほんとに思ったんですけど・・・(;´༎ຶ_༎ຶ`)
ていうか@_zooさん会社近い(物理・論理)。


はい、こんな感じ!みんな楽しそうでしたね〜。

うーん全体を振り返ると、PyLadiesと共催出来たことはとてもよかったですね。
Java女子部とは違う雰囲気で、交流楽しい!懇親会行けなかったのは残念です。
また何か一緒にやりましょうー!!!

あとは登壇者を全員女子部から出せたの、これもよかったです。
登壇してくださるJava女子部メンバーの方募集〜!おねがいしまーす!テーマなんでもいいです〜!

最後に。PyLadiesとJava女子部をつないでくださった@maaya8585さん(ぼっち)、ありがとうございました!!!

よこなTwitter1周年

1年経ってました。最初の頃、何つぶやくにもキンチョーしていたのが今ではあほらしいです。

それにしてもあっという間だなぁ。つぶやき過ぎだなぁ。

GitHubにスパムだと思われた・・・

タイトルの通りです。貴重な経験なのか、よくあることなのかは分かりません。
昨日Gist見ようと思ったらこうなったんですよ。

f:id:ihcomega:20150512122051p:plain

見られない・・・
そのときは全然よく確認しなくて、まぁ時間経てば直るやろと思っていったんGitHubを離れました。

 

 しかし、今日になっても直っていないし、Twitterで「GitHub見られない」って言っている人他にいないし、
おかしいなと思ったらこんな警告が出ていました。画面上部の赤いところ。

f:id:ihcomega:20150512122055p:plain

One of our mostly harmless robots seems to think you are not a human.
Because of that, It's hidden your profile from the public.
If you really are human, please contact support to have your profile reinstated.
We promise we won't require DNA proof of your humanity.

 

うちのロボットが、お前人間ちゃうやろ言うてる。
というわけで、君のプロフィールは非公開にさせてもらったよ。
もし君が人間だというなら、アカウントを元に戻すので連絡してください。
人間のDNAよこせとまでは言わんよ。

 

 衝撃。

f:id:ihcomega:20150512122103p:plain

というわけで、元通りにして貰うべくメールしたら1時間もたたずに直してくれました。
適切か心配だけど、送った文面。同じ状況に陥ったらご利用ください。

Hi,

Could you unlock my account please?
I became unable to use my Gists and the display says "Whoops" because I do not seem to be a human.

Thanks,

ちなみに次のようなお返事をいただきましたよ(一部抜粋)。

We have corrected our spam seeking robots and reinstated your account's profile page.

スパム発見用のロボットを修正してプロフィールページ復活させといたぜ!

お礼のお返事もしておきました。

Hi ◯◯(メールくれたひとの名前),

 

Thank you for solving it such quickly!

 

Best Regards,

◇◇(自分の名前)

 

なお、こんな疑問が湧いた。↓ 

ゆうすけさん、ありがとうございました。

帰国子女フレンドも書くと言っていた。

ふぅ。GitHubさん、お忙しいところお手数おかけしました!

JavaFXでこんしんカウンターつくった

アプリのネーミングセンスのなさがいいと思います!
コミュニティの懇親会でつかう人間アンドお金カウンター作りたかったんや。
きっかけはJJUG CCCのゴミLTね(なんと資料アップロードしましたコチラです)。

動かすとこんな感じです↓
※なお、仕変により平和的メッセージのみを出力することになりました。

f:id:ihcomega:20150502101425g:plain

ソースは一応ココにあげた。例によっていっぱいつっこみたくなりますよね、ふ、ふふ・・・
計算に使ってる設定値とかは結構適当(意味ない)。

 

f:id:ihcomega:20150421203119p:plain躓いた点f:id:ihcomega:20150421203119p:plain

f:id:ihcomega:20150421203623p:plainラベル内改行できない問題

これは思わぬ学びに結びついたのでトゥギャりました。 

togetter.com

 

f:id:ihcomega:20150421203623p:plainインポートするクラス間違えた問題 

ボタン押したときに走らせたいとメソッドがボタンと全く紐づかなかった。
メソッドないって言われて。
かなり、ハマったんだけど、なんと、メソッドに、渡してる、
ActionEventクラスの、インポート、間違ってた。

正:javafx.event.ActionEvent

誤:java.awt.event.ActionEvent

 

f:id:ihcomega:20150421203623p:plainタブでカーソル移動すると四方八方に動き回る問題

レイアウトをScene Builderにまかせていたのだけど、
タブを押していくとカーソル移動の順番がおかしかった。TextField1→TextField2→Button1→Button2→TextField3みたいな。ちゃんとFXML見たら、数値入力用TextFieldのrowIndexがいけてなかったので、上から0, 1, 2と振りなおしたところ改善した。

 

f:id:ihcomega:20150421203119p:plain分からない点f:id:ihcomega:20150421203119p:plain

f:id:ihcomega:20150421203623p:plainクラスの分け方とメソッドの分け方

そう、絶望的である

judgeっていうメソッドひとつとっても、色々つめこみすぎな感じがするし
メソッド名とやっていること違う感じするし。
デザインパターンみたいなの勉強した方がいいんです?

 

f:id:ihcomega:20150421203623p:plainテストの仕方

JUnitの勉強しますごめんなさい。疑問だらけ。
「テストコードとは」も理解してないし、単純にコードの書き方も不明でしたね。
謎代表として可変長引数どうするの問題のようすです↓


ありがとうございます!!!

最後に、頭抱えつつやりましたが、とっても面白かったです。
サーバ立てなくても、なんちゃらかんちゃら.confいじらなくてもさくっと動くから。
IntelliJ IDEAありがとう(結局)。

Gitで、親リポジトリに子リポジトリをヒストリーごと吸収する

やっと仕事でGit始めました。まぁ普段ほとんどIDEから操作してるけど。今日は、
バラバラのリポジトリたちを、ヒストリー保持したまま1ヶ所に集めるときはこうやるよ
のメモ。

Githubさん,ごめんなさい!複数リポジトリを一つにまとめる方法 - Qiita
git リポジトリを歴史も含めて親に取り込んでまとめる | deadwoodをがっつり参考に真似しただけ。


まず、やりたいことのイメージはこんな感じで合っているはず・・・↓

f:id:ihcomega:20150415210715p:plain2つを1つに!親子みたいな関係で。

 

ということで淡々とコマンドを並べます。
なお、コマンドとコマンドの間にちょいちょい出てくる引用部は、
「叩くと大体こんなお返事が返ってくるよ~」という参考です。

環境はCentOS 6.5!ユーザのログインシェルは/bin/bash
ここではGitHub使ってます!別に何でもいいです。
【要読み替え】 SUPER:親リポジトリ名、SUB:子リポジトリ名、
ihcomega56GitHubアカウント名、master:ブランチ名

 

$ git clone https://github.com/ihcomega56/SUPER.git

Cloning into 'SUPER'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 33% (1/3) Unpacking objects: 66% (2/3) Unpacking objects: 100% (3/3) Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

$ git clone https://github.com/ihcomega56/SUB.git

Cloning into 'SUB'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 33% (1/3) Unpacking objects: 66% (2/3) Unpacking objects: 100% (3/3) Unpacking objects: 100% (3/3), done.
Checking connectivity... done.

$ cd SUPER/
$ git remote add SUB https://github.com/ihcomega56/SUB.git
$ git remote -v

SUB https://github.com/ihcomega56/SUB.git (fetch)
SUB https://github.com/ihcomega56/SUB.git (push)
origin https://github.com/ihcomega56/SUPER.git (fetch)
origin https://github.com/ihcomega56/SUPER.git (push)

$ git fetch SUB
$ git checkout -b SUB SUB/master

Branch SUB set up to track remote branch master from SUB.
Switched to a new branch 'SUB'

$ git branch -a

!* SUB
master
remotes/SUB/master
remotes/origin/HEAD -> origin/master
remotes/origin/master

$ git filter-branch -f --tree-filter "mkdir SUB && bash -c 'git mv -k {,.[!.],..[!.]}* SUB/'"

Rewrite abcdefghijklmnopqrstekitou12345 (1/1)
Ref 'refs/heads/SUB' was rewritten

$ git checkout master

Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

$ git merge SUB

  ---エディタでコミットコメント入力、という操作をはさむ---

Merge made by the 'recursive' strategy.
SUB/README.md | 2 +
1 file changed, 2 insertions(
)

create mode 100644 SUB/README.md

$ git push origin master

  ---対話式にGitHubユーザ名・パスワード入力、という操作をはさむ---

Counting objects: 7, done.
Compressing objects: 33% (1/3) Compressing objects: 66% (2/3) Compressing objects: 100% (3/3) Compressing objects: 100% (3/3), done.
Writing objects: 16% (1/6) Writing objects: 33% (2/6) Writing objects: 50% (3/6) Writing objects: 66% (4/6) Writing objects: 83% (5/6) Writing objects: 100% (6/6) Writing objects: 100% (6/6), 522 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/ihcomega56/SUPER.git
fe2b037..57b909d master -> master
簡単な解説
  • filter-branchオプション:ヒストリーを一括書き換えする
  • tree-filterオプション:引数として指定したコマンドを実行し、再コミットする

     :ここでは、ヒストリーを一番上のディレクトリから再帰的に移動しているのだと思う。

理解に苦しんだところ

     :ファイル名の指定、*じゃだめなのか?と思ったけど、
       「.git」とか、ドットで始まるようなファイルを適切に移動するために、
       上記のように記載しているものと理解している。

JJUG CCC 2015 Springで一応LTした #jjug_ccc

昨日、4/11(土)はJJUG CCC 2015 Springに参加しましたよ〜。

f:id:ihcomega:20150412162546j:plain

CCC、3回目(JJUG幹事としては2回目)の参加でしたが、とても充実した1日でした。
勉強になりました。多くの方にお会い出来ました。
あと中野坂上という噂によく聞く街と西新宿の位置関係および周辺のスーパーマーケット事情が
少々分かりました(買い出しは任せてッッッ)。

前回は受付をしていたのですが、今回はほぼ1日部屋にはりついておりました。
Room Mにおりまして、頭がちゃんと働いていたのは最初のハンズオン2つですね(体力のなさよ)。

そして感想:

  • 子供とプログラミング、よい時間だ!皆が夢中でとっても幸せな気持ちになった!
  • HeapStats、明日入れてみようかな(rpmインストール・起動オプション追加で楽ちんという魅力〜)!

MQTTもかなり気になるけど今まだ何なのかよく分からないですねてへ。
いやーしかし、なんかセッションで色々なモノ使われていて面白かったなぁ。
作ったものが目に見える、触れられる、実際動くというのは分かりやすくていいですね。
写真は3Dプリンターマインドストーム

f:id:ihcomega:20150412162715j:plain f:id:ihcomega:20150412162720j:plain

夜の懇親会も楽しかったです。
突如LTすることになったため1.5時間くらいでクソみたいなスライドとプログラム作ったのだけど、
(どこにもアップロードしないでいいかな?)
3分しか話す時間ないという嬉しい制約によりデモ出来なかった(安堵)。
今から直そうっと〜。

懇親会が終わる頃にOracleのStephenさん(Steveと呼ばせて貰っていた)とも
結構おはなし出来てハッピーでした。

あと今回、セッション真剣にがっつり聞いたわけではないけれど、こんなことを思いました。

 とは言えやっぱり馬鹿すぎ使えなすぎで消えるべき(以下参考です)というのは否定出来ないので精進します!!

終わって寂しい。関東以外の方帰ってしまって寂しい。以上、ただの日記でした。

改行コードよく分からんから一括置換すればいい

Linuxの話ね。前職ではtailコマンドくらいしか打ったことなかったんだけど(ちょっと嘘)
普通に日々本番機を触るお仕事にかわった。で、Windowsも使いつつごちゃごちゃやってたら

案の定「改行コードあかーん!」ってギリギリのタイミングで気付くという事態が起きた。

そして一瞬で変換できることを知ったのでメモ。

環境:CentOS 6.5
確認に使ったファイル:雑極まりない"Windows.txt" ※カレントディレクトリにある設定

f:id:ihcomega:20150410193352p:plain

ほーらdosやで!(Vimはろくに使えないけど使ってるフリ)

①改行コードを確認する

odコマンドを使います!
オプションは色々あるので--helpに助けてもらおう。
たとえば・・・
od -a Windows.txtと叩くと

0000000 H e l l o cr nl E v e r y o n e cr
0000020 nl : ) cr nl
0000025

od -c Windows.txtと叩くと

0000000 H e l l o \r \n E v e r y o n e \r
0000020 \n : ) \r \n
0000025

っていうふうに返ってくる。一目で怪しいと分かるのだ。


ここで改行コードメモ(なお一生覚えられない病である)

Windows \r\n(CR+LFというやつ)
UNIX \n(LFというやつ)
OS X \r(CRというやつ)
②改行コードを一括置換する

dos2unixコマンドを使います!
dos2unix Windows.txtとするだけだよ。
od -a Windows.txtで確かめてみよう~

0000000 H e l l o nl E v e r y o n e nl :
0000020 ) nl
0000020

置換されている!
逆がやりたかったら、unix2dosだ~。
コマンドが見つかりませんと言われてしまっても
yum install dos2unix
すればOKよん。


参考(というかただの引用です。ありがとうございます。)

Linux上のファイルの改行文字を確認する方法 - Miuran Business Systems

備忘録: 【LINUX】テキストファイルの改行コード変換【unix2dosと、dos2unixコマンド】

正規表現サンプル(正規表現Tips その1)