面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

新年とっくに明けましておめでとうございます

🎍(遅くなりましたが)㊗️新年明けましておめでとうございます🎉

はてなブログを始めて1年経ったなーと感慨に耽ってみて、
最初の記事を見たらGW明けだったので、全く1年経ってませんでした。

今年の目標は、

1. はてなブログをもう少し細かく書く(目指せ週1ペース) [通年]

月1ペースになったりして、継続性も怪しかったので、
もう少し頑張らねばと・・・ネタは色々メモってあるので、
時間と自身のやる気があとは重要ですね。

2. 組織からの脱退 [目標: 6月中まで]

一部には身バレしてそうな気がするようなしないようなで、
ここに書いていいものかって感じですが、
会社員辞めて個人事業主になろうと思っているというのが早い話。
色々思うところがあり、話し出すと愚痴にしかならないので割愛。

3. 引っ越し [目標: 物件状態によるが3月中若しくは6月中まで]

毎年のごとく引っ越したいといいつつしていない。
でも、もう今の住まいはかなり限界。
上からの深夜の騒音、隣からのタバコ臭、
どこからともなく年々出現率UPの黒光りするヤツ、
隣家の子供の甲高い喚き声と、ここ2年耐えてきたものの限界デス。
駅まで徒歩5分以内、都心まで電車で40分、家賃4万ちょいと良物件なのだけど、
安かろう悪かろうじゃないが、住民の質という言い方していいのか
周囲に配慮できない人が多く精神を害してまで安さにしがみついていられない。


開発と関係ないものもありますが、大きくはこの3つを目指します。
細かいところではアプリ開発やWeb開発等々手を出したいけど、
色々あげても達成したい優先度高いもの3つを掲げました。

自分の備忘録が誰かの役にたつ情報になるよう、発信していきたいと思います。
本年もよろしくお願いいたします。

DS215jとMacの接続プロトコルはafpの方が速いかもしれない

環境

タイトル通りなのだが、うちの環境を晒すと下記な感じ。
・WindowとMacを併用
・SynologyのNAS「DS215j」を使用 (構成はWDのRed4TB×2でSynology Hybrid RAID)
NASは2台の橋渡し兼音楽や画像等のデータベース
Windowsからはネットワークドライブの割り当てで追加してアクセス(プロトコル不明、SMB2?)
MacからはSMBでアクセス(SMB2)
シンボリックリンクを用いてWindowsMacそれぞれからiTunesNASの音楽にアクセス可能
iPhoneiPadのデータ同期時は、Macから行なっている

結論

たぶんafp接続の方が速い (うち限定?)

smb接続で使用していた時とafp接続に変更した後

この環境でMacからiTunes経由でNASの音楽にアクセスするとカバーが表示されるまで
1アルバムにつき3、4秒程かかったり、曲をクリックして選択するだけでインジケーターが出て
iTunesがしばらく固まることが頻繁にあった。

iOS端末への同期も有線でやっていたが、転送が遅かったりしてとにかく不満しかなかったので、
どうにかして速くできないか調べた。

qiita.com
とか
MACとファイルサーバー間の転送速度が遅い場合の対処法 | ものづくりエクスペリメント
を参考にSMBで繋いでいても速くなるように設定を変えたが改善が見られなかった。

一部では、afpからsmbに変えたら爆速になったとかもあるので、smbにこだわっていたのだが、
捻くれていっそafpで接続してみるかと全て設定も戻して再起動後、afp接続したところ、
iTunesでアルバムカバーが瞬時に表示され、もたつくことを感じなくなった。

直前にMacNASを再起動しているからそのせいかもしれないので少し様子を見るが、
NASの設定でMacのファイルサービスを有効する際、afpでアクセスしますと書いてあるため、
afp推奨なのかもしれない。

こういうことは厳密に速度測って数値として出すべきだろうけど、面倒なのでやりません。
MacNASとのやりとりが遅いと感じる人はafpも試して見てということ。

JavaScriptでTextBoxに入力された内容からリンクを生成

仕事でURLSchemeのテストをする際、
TextBoxに入力された値からリンクを生成したかったので調べて作ったのを記載。

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <header>
    </header>
    <body>
    <form name="form1" id="id_form1" action="">
        <input name="textBox1" id="id_textBox1" type="text" value="" placeholder="文字列入力"/ size="45">
        <input type="button" value="リンク生成" onclick="onButtonClick();" />
    </form>
    <div id="link"></div>
    <script type="text/javascript" language="javascript">
    function onButtonClick() {
        var object = document.getElementById('link');
        var tag = document.createElement('a');
        tag.setAttribute('href','http://'+document.forms.id_form1.id_textBox1.value);
        tag.appendChild(document.createTextNode('リンク'));
        // 生成するたびにリンクが増えるのを防ぐため削除
        if (object.childNodes.item(0)) {
            object.removeChild(object.childNodes.item(0));
        }
        object.appendChild(tag);
    }
    </script>
    </body>
</html>

Swift2のguard let構文で順序を意識せずクラッシュする書き方をしていた話

Swift2のプロジェクトの話
NSTimerを扱う処理を書いており、userInfoにBool値を渡して、後から安全にキャストして取り出す処理をguard letを使って下記のように書いていた。

// Swift2
// before
func hoge(timer: NSTimer?) {
    guard let timer = timer, flag = timer.userInfo as? Bool where timer.valid else {
        return
    }
    print(flag)
}

しかし、timer.invalid()を呼んだ後だとreturnで返る前にクラッシュしていた。


修正後は下記のように記述。

// Swift2
// after
func hoge(timer: NSTimer?) {
    guard let timer = timer where timer.valid, let flag = timer.userInfo as? Bool else {
        return
    }
    print(flag)
}

自分の解釈ではwhereは末尾につけなければいけないと思い込んでいたがために、timer.invalid()でuserInfoがnilになっているにも関わらず、timerから取り出そうとしてクラッシュしていた。

なので、timerをOptional Bindingで取り出した後、whereで条件を判定させるように変更した。

PlaygroundでPage追加

小ネタ程度の話。
自分が知ったのは少し前だったので、
少数ながらも意外に知らない人もいるのでは?と思ったので、書いておく。


Playground自体Swiftの記述でテストや検証に簡易的に扱えることもあり、
頻繁に使うと思うのだけれど、色々書きすぎてプレビューの表示が遅くなることもしばしば。
そのたびに新しいPlaygroundを作るという無駄にファイルを生成する行為をしていたが、1Playground内にPageを追加できるので記載。

Page追加前

f:id:aryzae:20161204175914p:plain

Page追加 (XcodeのFile > New > Playground Page)

f:id:aryzae:20161204180111p:plain

Page追加後

f:id:aryzae:20161204180210p:plain

Playgroundの左カラムで右クリックから追加できたらいいんだけどな。
なぜかできない・・。