SourceTreeでgit-svnのリモートが表示されなくなった問題
現場ではSourceTreeを用いてgit-svnでバージョン管理を行っています。
そんなある日、リモートにあるSubversionの名前の横にある▷が表示されなくなっていました。
以下加工画像によるイメージ
before:
after:
これではサーバからプルもプッシュ何もできません。
設定も環境も弄っていないのに、突然こんな状態になっためサーバ側が何かやったのだろうー
と思い、問い合わせるも何もしていないし、アカウントも正常に許可されているとのことでした。
結局原因も不明な上、調べても情報が何も出てこなかったですが、
現場の他の方が解決方法を見つけてくださったので
他に遭遇した人がいた時のために残しておきます。
【解決方法】
1. SourceTreeの設定 > リモートタブ > Config がいるを編集… の順に選択
2. ConfigファイルのSVN関係の箇所で branches の末尾を/branches/*
に変更して保存
// 例1 branches = branches/*:refs/remotes/svn/* を↓のように書き換える branches = branches/*:refs/remotes/svn/branches/* // 例2 branches = branches/*:refs/remotes/origin/* を↓のように書き換える branches = branches/*:refs/remotes/origin/branches/*
3. リモートのSubversionをフェッチ。
    これで▷が復活してリモートのSubversionが使えるようになります。
4. 手順「2.」でやった書き換えを元に戻す。(重要)
    最後の書き換えた内容を元に戻さないと、
    プッシュ時に謎のコンフリクトが発生するようになり、正常にコミットされなくなります。
Slackでアンケート機能を使う
現場の作業で、ルールを決めたり、コードの書き方に迷った時にこういう書き方はありかなしか
というのを聞きたいなーと思うことがしばしばある。
チームでSlack使っているし、アンケート形式で聞けたら解決できそうかなと思い、
Slackでアンケート機能を使うための方法をまとめておく。
バニラなSlackにはアンケート機能がないため、Pollyという連携機能を使用します。
www.polly.ai
【手順1.】
上記のSlackのPollyサイトから"Add Polly to Slack"をクリックして、使用しているSlackチームに追加する。
【手順2. 】
Authorizeをクリックしてpollyのbotやコマンドの追加を許可する
【手順3.】
アンケート機能を使いたいチャンネルで、下記コマンドを入力する
/invite @polly
【手順4.】
下記形式で入力するとアンケートが作成できます。("は半角のダブルクォーテーションです。)
/poll “質問” “選択1” “選択2” “選択3"
誰かが選択支を選ぶとこんな感じで表示されます。
1人1票で、何度でも選び直すことができます。
【削除方法】
割と場所をとるため、不要になった時に削除したいこともあると思います。
そんな時は、/poll delete
と入力すると、
のように、消すためのアンケートのkeyを表示してくれますので、
該当する質問のkeyを含んだコマンドをコピペして入力します。
【おまけ】
Pollyのサイトで異なった内容のアンケートを作れるようです。
(試していないため、具体的には把握していません。)
UIImageViewを継承しているCustomViewはdrawRectを通らない
うっかり忘れるので書いておく。
タイトル通り。
UIViewを継承しているUIImageViewなので、
LifecycleとしてdrawRectを通りそうなものの、
UIImageViewを継承しているCustomViewは通らないため
処理を書いても意味がない。
あると便利なextension"find"
Swiftで色々便利になったり、融通が効きやすくなったけど、
個々の状況では不便だな〜とか、こういうメソッドあったらいいのに〜と
思うことも多々ある。
そんな時はextensionして使い勝手良くしてしまえばいい。
現場で教えて貰ったextensionで便利だなーと思ったのがあったので書いておく。
"find"は、filterで条件絞って、その中から先頭を抜き出すのに少し手間がかかるので、
条件に合った先頭を最初から返すようにしたもの。
// Swift2 extension SequenceType { func find(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element? { for element in self { if try predicate(element) { return element } } return nil } }
// Swift3 extension Sequence { func find(predicate: (Self.Iterator.Element) throws -> Bool) rethrows -> Self.Iterator.Element? { for element in self { if try predicate(element) { return element } } return nil } }
教えて貰ったコードが、Swift2だったのでそれをそのままと
主流がSwift3になりつつあるのでSwift3のコードも併せて記載。
// 使用例 let array = [1, 20, 321, 77, 900] let extract1 = array.find { $0 >= 50 } print(extract1) // "Optional(321)\n" let extract2 = array.find { $0 >= 10 } print(extract2) // "Optional(20)\n"
Swift3.0で繰り返し処理の速度比較
処理速度の速い今となっては意味があるかわからないが、
とりあえず気になったから検証してみる
(計測方法が合ってるか不安あり)
比較項目
- for-in (単純列挙)
- forEach (単純列挙)
- enumerated (index付列挙)
- enumerated.map (index付列挙)
実験環境
- Xcode8.0 (8A218a)
- Swift3.0
- Playground
結果
処理 | 時間 |
for-in | 0.000577032566070557 |
forEach | 0.000515997409820557 |
enumerated | 0.000134050846099854 |
enumerated.map | 0.000425994396209717 |
enumeratedが最速ってことで本当にいいんですかね?
(さりげなくSwift2.0でenumerateだったのが、enumeratedに変わってるのね。コメントは綴り間違えてるし)
実験前はindexとか余計なものが付かないfor-in
かforEach
が最速と思っていたんですけど・・・。
納得いく理由が思いつかないから、計測の仕方間違えてるんじゃないかとさえ思える・・・何か理由わかる人いたら教えてください。