ごらくらいふ

プログラミングしたりゲームしたり

WinMerge日本語版をSourceTreeのマージツールにセットした

結論

Diffコマンド

WinMergeまでのPath

引数

-e -u -wl -wm -fr -dl 'Base file [read only]' -dm ' Theirs fise [read only]' -dr 'Mine file' -ar $BASE $REMOTE $LOCAL -o $MERGED

想定

3ペイン方式。

ペイン 役割
左ペイン Base file
中央ペイン Theirs file
右ペイン Mine file

各オプション

-e

EscキーでWinMergeを閉じる

-u

左ペイン、中央ペイン、右ペインで開いたファイルが、 最近使用した項目リストに追加されるのを防ぐ

-wl

左ペインを読み取り専用で起動する

-wm

中央ペインを読み取り専用で起動する

-fr

起動時、右ペインにフォーカスする

-dl 'text'

左ペインのタイトルバーを設定する

-dm 'text'

中央ペインのタイトルバーを設定する

-dr 'text'

右ペインのタイトルバーを設定する

-ar

右ペインで自動マージを試みる

-o

マージ結果を出力先

$MERGED をセットしておけばいい

参考リンク

マニュアルとにらめっこした後に調べてみると先人の知恵がすぐ出てくる現象

好意をむやみに期待してはいけない

今朝はシンデレラガールズ4thライブの会場限定CDを求めてSSAに突撃した。 目的をまぁまぁ達成し、城とかぴにゃとかドールとか展示を堪能したんだけどやばい。この時点での多幸感がやばい。

さてLVに備えるだけだと息巻けば既にiPhone虫の息。

心許ない電池残量でちょいと調べると、LV現地周辺にはどうも電源カフェなるものがあるらしい。 これが恵みか、などとのたまいコンセント→USBを買って店舗に入ったところ、どうもコンセントが見当たらない。 正確にはコンセントユニットに換装出来そうなプレートしか無かった。

おそらくやめたのだろう。営業戦略あってこその好意は割に合わなければ続ける意味はない。

コーヒーをひとつ頼み、座席回転率に貢献した後は、乾電池式の充電器を買いに走ったのだった。

「コンセントを提供しているかも」とか「充電済みで売ってるモバイルバッテリーは満充電かも」とか、店側の好意をむやみに期待してはいけない。 いや、勝手に期待してもいいけど勝手に憂いておしまいよ、と。

お金で解決できること(浮いたお金)だから今回現地調達したけど、 そもそも備えあれば憂いなしだからな!!

朝からSSAに赴きバッテリーを切らしたPの備忘録

つーかtwitterのバッテリー消費激しい。

Swift環境で定義するIBAction

Swift環境になってちょいちょい書き方が変わってわからなくなった点が増えた。

IBActionのつなぎ方について

パターン

  • コードでIBActionを書いて、UI部品と繋ぐ
  • UI部品からコードに差し込む
    • こっちのほうが良さそう

コードでIBActionを書いて、UI部品と繋ぐ

  1. @IBActionを頭につけたメソッドを作成する
  2. メソッドからUI部品に向けて、Ctrl+ドラッグで接続する

f:id:yajamon:20161003175248p:plain f:id:yajamon:20161003180214p:plain

UI部品からコードに差し込む

  1. UI部品の右クリックメニューから、処理を実行したいイベントを確認する
  2. メニューのイベントからコード上にCtrl+ドラッグで接続する

f:id:yajamon:20161003181607p:plain f:id:yajamon:20161003181617p:plain

所感

後者のほうが良さそう

理由

  • senderを補完してくれるから
    • f:id:yajamon:20161003193902p:plain

StackViewで等サイズ等間隔で要素を配置する

stackviewを使って等サイズ等間隔に要素を配置したい。

パターン

  • StackView + Constraints
  • StackView
    • こっちのほうが好き

StackView + Constraints

  • StackViewに要素を配置し、要素同士をEqual widthsで揃える
  • 要素間の間隔はStackViewのプロパティSpacingで調整する

f:id:yajamon:20161003171207p:plain f:id:yajamon:20161003171415p:plain

StackView

  • StackViewに要素を配置し、StackViewのプロパティDistributionFill Equallyにする
  • 要素間の間隔はStackViewのプロパティSpacingで調整する

f:id:yajamon:20161003172309p:plain f:id:yajamon:20161003172325p:plain

所感

Constraintsを定義する必要がない後者の手法が好き。

putty形式の公開鍵をOpenSSH形式に変換してサーバにSCPアップロードする

(あーやべーなーパスワードログインできるままだなー)

個別に記事になってたのでひとまとめした

# Putty形式 -> OpenSSH形式
ssh-keygen -i -f id_rsa_putty.pub > id_rsa.pub
# scp [オプション] [ユーザ名]@[ホスト名]:[ファイル名] [ローカルパス (.)はカレント]
scp -P 22 id_rsa.pub user@hostname:~
余談
  • Putty形式の鍵をOpenSSH形式に変換する際、公開鍵からコメントが削げ落ちた
    • gglとSSH1ではコメントも鍵に含まれてたとか出て戦々恐々してたが、SSH2なので勝手に追記しても問題なかった
  • SCPについて、参考記事にある記法とMacにあるSCPのヘルプが異なっていて不安(うまくいったが…)

参考URL

puttyの公開鍵をOpenSSH形式に変換する | misty-magic.h

ssh でファイル転送(SCP コマンド) - Hidde’s Tips

ヤフオク!にて、ライブチケットなどに対する違反商品通報の対策

シンデレラガールズ4th live、楽しみですね。

http://idolmaster.jp/event/cinderella4th.php

チケットは無事入手できましたでしょうか。 私は無事会場チケット戦線に敗れ、いまライブビューイングチケットの抽選に祈りを捧げています。 (2016/08/22追記:ライブビューイングのチケット取れました( `ω')q)

もうひとつライブチケットに対して行っていることがありました。 オークションにおける転売チケットの違反通報です。

作業中、工夫して転売努力を注ぐ例に遭遇しました。

新着アラートに抗う

チケットが取れなかったプロデューサー(以下、P)の気持ちになれば、 買うPも通報するPも転売チケットを探すためにほぼ同じキーワードを指定します。

また、熱心に探すPはアラートを即通知するよう設定していますので、出品したらあまり間を置かずに発見されます。

通報されたら取り消し

出品者は、違反商品の申告通知を受けることができます。

ヤフオク!ヘルプ - 違反商品として申告があった場合

通知を受けたらオークションを取り消し、一旦静観したあと再度オープンします。 再オープンは新着アラートのように通知されないため、通知ベースで動く通報側から逃れることができます。

対策

オークションを取り消した段階で、通報側に通知メールが届きます。

私はGmailを使っていますので、このメールにスターを付け、定期的に再確認をしています。 再オープンされていたら再度通報し、メールからスターを外します。

出品したら即取り消し

出品したら即座にオークションを取り消し、しばらく寝かせたあと再度オープンします。 「もう通報されたかな?」という勘違いを狙う感じでしょうか。

対策

新着通知メールにスターをつけます。 通報後の再出品と方法は変わらないので、定期的に確認します。

宣伝

ヤフオク!での通報もなんだかんだ面倒なところがあります。 理由に「その他」を選んで、その他の中から適切なものを選んで……

ひとつふたつならまだ我慢できても、数が多ければ嫌気がさします。

なのでセミオートに通報できるChrome拡張を作りました。

github.com

個人の通報では限界があるので、ひとりでも違反商品の通報人が増えるといいんじゃないかな。

CocoaPods Linking error 「ld: symbol(s) not found for architecture i386」

環境

現象

CocoaPodsを導入して、いざdebug-buildしたら記事タイトルのエラーが発生した。

以下はそのログである。

Undefined symbols for architecture i386:
  "_FBSDKAppEventParameterNameContentType", referenced from:
      -[MyViewController viewDidLoad] in MyViewController.o
  "_FBSDKAppEventParameterNameCurrency", referenced from:
      -[MyViewController viewDidLoad] in MyViewController.o
  "_OBJC_CLASS_$_FBSDKAppEvents", referenced from:
      objc-class-ref in MyAppDelegate.o
      objc-class-ref in MyViewController.o
  "_OBJC_CLASS_$_FBSDKApplicationDelegate", referenced from:
      objc-class-ref in MyAppDelegate.o
  "_OBJC_CLASS_$_FBSDKGraphRequest", referenced from:
      objc-class-ref in MyClass.o
  "_OBJC_CLASS_$_FBSDKLoginButton", referenced from:
      objc-class-ref in MyViewController.o
ld: symbol(s) not found for architecture i386

結論

プロジェクト設定にて「Build Active Architecture Only」の項目が、Podsプロジェクトの設定と一致していなかったことが原因だった。

before

MyProject
  • Build Settings
    • Architectures
      • Build Active Architecture Only
        • Debug
          • NO
        • Release
          • NO
Pods
  • Build Settings
    • Architectures
      • Build Active Architecture Only
        • Debug
          • YES
        • Release
          • NO

after

MyProject
  • Build Settings
    • Architectures
      • Build Active Architecture Only
        • Debug
          • YES
        • Release
          • NO
Pods
  • Build Settings
    • Architectures
      • Build Active Architecture Only
        • Debug
          • YES
        • Release
          • NO

解決

Architecturesが「Standard architecures(armv7, arm64)」の状態で「Build Active Architecture Only」がYESの場合、 armv7, arm64だけを対象にビルドするっぽい。

Product>ArchiveではRelease設定を使うようにしているので、こちらでは「Build Active Architecture Only」をNOにしておこうと思う。

参考リンク