バージョン管理って何だっけの図

[http://www.git-scm.com/book/ja/v1/:title=Pro Git]の「バージョン管理に関して」の冒頭部分を図解してみました。

f:id:uokumura:20150414084214j:plain
なんかせせこましい。もっと余白が必要なのかな…

観測野帳の淡い青い線はちょっと調整するとすぐに飛ばせて便利でした。  
野帳が飛ばせるならツバメも飛ばせそう。次はツバメを試してみます。

ステートマシン図

 f:id:uokumura:20150307175825j:plain
久々に状態機械図を描こうと思って、UML2 Superstructureを眺めてみたら全然わからなかったので、書き写して日本語に書き換えて絵も入れてみた図。
絵にしたらだいたいわかったけどdeferrableTriggerだけは解らなかった。
状態の中に「ほげほげ / defer」て書くと、ほげほげイベントが発生した時に即座に処理されず、次の状態に遷移した後でその状態でそのイベントが処理されるらしい。ビジーな時にイベントがキューに溜まるイメージか、と思うことにした。

presentViewControllerで元の画面も見えるようにするのがうまくいかない

iPhoneのキーボードが表示されるように、自分の作ったViewControllerを表示させるやつです。

ViewControllerを作成し、そのViewControllerのViewのBackgroundをClearColorにしてpresentViewControllerすれば行ける…と思ったのですが、トランジション中は透けて見えるのに切り替わったとたんに画面が消えてしまいます。

https://developer.apple.com/jp/devcenter/ios/library/documentation/ViewControllerPGforiOS.pdf:title=iOS ViewController プログラミングガイド]を見ると、

View Controllerが表示される際、iOSは表示コンテキストを検索します。検索の最初の対象は、表示す る側のView Controllerで、そのdefinesPresentationContextプロパティを参照します。このプロパ ティ値がYESであれば、表示する側のView Controllerに表示コンテキストが定義されています。そうで なければ、View Controller階層を上に向かって順次たどり、YESを返すView Controllerが見つかるか、 ウインドウのルートView Controllerに到達するまで続けます。
あるView Controllerが表示コンテキストを定義する場合、これは表示スタイルも定義します。通常、 表示される側のView Controllerは、modalTransitionStyleプロパティで表示形態を判断します。 definesPresentationContextがYESであるView Controllerは、 providesPresentationContextTransitionStyleもYESとすることができます。 providesPresentationContextTransitionStyleがYESであれば、iOSは表示コンテキストの modalPresentationStyleを調べて、新しいView Controllerをどのように表示するか判断します。

となってるので、遷移元のViewControllerで

self.definesPresentationContext = YES;
self.providesPresentationContextTransitionStyle = YES;
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

とすればちゃんと透過してくれそう…なのですが。残念ながらこれはうまく行きませんでした。

色々はまったあげく、結局グーグル先生一押しの http://stackoverflow.com/questions/12736394/uimodalpresentationcurrentcontext-with-transition に答えが有りました。日本語の情報を優先して見てたのが敗因でした…

was able to accomplish this by setting modalPresentationStyle = UIModalPresentationCurrentContext on the rootViewController of my UIWindow, IF I haven't presented any new full screen viewControllers on top of this rootViewController. I did something like this:

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

rootViewControllerが放してくれないようです。そいつのmodalPresentationStyleを変えてやってみたらうまいこと行きました。

ただ、この方法だとうまくトランジションがかからないようです。。。
うーむ、もう一息。

[もう少し調査が必要そうです。

もう3年かぁ

3年間の進歩 - uehaj's blog

過去のブログを見ていて、"10分でコーディング"という記事があったので、かつ内容を完全に忘れていたので、あらためてチャレンジ。

問題はこちら

自分もやっていたのを思い出しました。
懐かしかったのでやってみました。

def deal(member, cards) {
    def result = (0..<member).collect{""}
    if (cards.length() < member) return result
    
    int rest = cards.length() % member
    cards = cards[0..-(1+rest)]
    
    cards.eachWithIndex{c, i->result[i%member]+=c}

    return result
}


assert deal(3, "123123123") == ["111", "222", "333"]
assert deal(4, "123123123") == ["12", "23", "31", "12"]
assert deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"]
assert deal(4, "111122223333") == ["123", "123", "123", "123"]
assert deal(1, "012345012345012345") == ["012345012345012345"]
assert deal(6, "01234") == ["", "", "", "", "", ""]
assert deal(2, "") == ["", ""]

また10分ぎりぎり、しかもなんか身に覚えが…
悔しいのでやり直しました。

String.metaClass.toMap = {->
    def map = [:]
    delegate.eachWithIndex{e, i->map[i]=e}
    return map
}

def deal(member, cards) {
    cards[0..<(((int)cards.length() / member) * member)].toMap().inject((0..<member).collect{""}){l,k,v->l[k%member]+=v;l}
}


assert deal(3, "123123123") == ["111", "222", "333"]
assert deal(4, "123123123") == ["12", "23", "31", "12"]
assert deal(6, "012345012345012345") == ["000", "111", "222", "333", "444", "555"]
assert deal(4, "111122223333") == ["123", "123", "123", "123"]
assert deal(1, "012345012345012345") == ["012345012345012345"]
assert deal(6, "01234") == ["", "", "", "", "", ""]
assert deal(2, "") == ["", ""]

30分もかかってしまった…

追記:
今回もgroupByは思いつきもしませんでした…やっぱり進歩無かったです

ファイル名の連番の桁数をそろえるスクリプト

Macは、連番の数字の桁数が違って

  • file1.txt
  • file2.txt
  • file3.txt
  • file101.txt
  • file102.txt

とかなっていても番号順に並べてくれるのだけれど、JavaのListFilesは文字列順に

  • file1.txt
  • file10.txt
  • file100.txt

とかと並べてしまうのでちょっと具合が悪かった。そこで、ファイル名の連番の桁をそろえて

  • file001.txt
  • file002.txt
  • file003.txt
  • file101.txt
  • file102.txt

と並べるスクリプトを作成。

new File('').listFiles({it.name ==~ /[^\d]*\d{1,2}\.[^\.]*/} as FileFilter).each {
    it.renameTo(new File(it.parentFile, it.name.replaceAll(/\d{1,2}/){('0'*(3-it.size())) + it}))
}

今回は3桁だったので1~2桁の数字の後に拡張子が来ているファイルについて、数字の長さが3に満たない分0を足したもので数字部分を置き換え。

クロージャ as インターフェイス」とか「replaceAll(正規表現){変換処理}」とか、groovyのかゆいとこに手が届く感が結構出た感じだったのでメモ。