静的サイトジェネレーターについて調べた(1)

仕事で久しぶりにサイトのコーディングに勤しむことになったので、
最近流行っていると耳にした静的サイトジェネレーターとやらに挑んでみた。

静的サイトジェネレーターとは?

静的サイトジェネレータとは、静的サイトを効率的に制作するためのツール。 好みの言語で開発して納品用に HTML / CSS / JavaScript といった形式に変換してくれる。

これはいいですね。
gulpやgruntやらに取り残された私やそこのアナタにとっても、救世主になってくれそうです。

さあ、はじめよう。

まあ使ってみないと正直わからないところがあるので、
いろいろあるなかで「Hugo(http://gohugo.io/)」を選択して使ってみたいと思います。
読み方はヒューゴであってるのかな?プロレスラーみたいですね いまをときめくGo言語製で、色んな所をみたところ最も早いとのこと。 (この時点でなにが早いのかはわかっていないがおそらくビルド)

インストール

brew install hugo

Homebrewをいれてとっとこインストールしましょう。

サイトの初期化

適当なディレクトリに移動して、以下のコマンドを叩きます。

hugo new site サイト名

すると、サイト名のディレクトリが生成され、中には以下のファイルが含まれています。 ・archetypesフォルダ
・contentフォルダ
・dataフォルダ
・layoutsフォルダ
・staticフォルダ
・themesフォルダ
・config.toml

config.tomlファイルの編集

ファイルの中身は、以下のようになっています

baseurl = "http://replace-this-with-your-hugo-site.com/"
languageCode = "en-us"
title = "My New Hugo Site"

このままではアレなので、自分の環境に合わせましょう

baseurl = "公開するサイトのURL"
languageCode = "ja"
title = "公開するサイトのタイトル"

とりあえず今日はここまで。

Swift - Dictionaryを保存する

サーバーからのレスポンスをキャッシュしたい時なんぞに、
こういったことが必要になることがあります。

NSDictionaryをNSDataに変換

NSDictionaryをplistに変換しても良かったのだけれど、
何故か私が渡すDictionaryでは、writeToFileがfalseを返すばかりで失敗するため、
いろんなところを参考にして、NSDataに変換して保存する方法をとった。
まあplistだと中身を見ることができてしまうので、バイナリに変換するのがいいんでないかなと思います。

NSKeyedArchiverをつかってアーカイブ・アンアーカイブ

NSKeyedArchiverをつかってNSDictionaryをバイナリに変換します。

// アーカイブ
let data = NSKeyedArchiver.archivedDataWithRootObject(dictionary)

// アンアーカイブ
let dictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data)

NSFileManagerで任意のディレクトリに保存

あとは仕様にそった場所にNSFileManagerクラスで保存してあげればよい。

iOS - シュミレーター内のアプリディレクトリを確認する方法

NSFileManagerなんかでアプリ内ディレクトリに保存したものを確認したい時は、
以下のディレクトリを確認すれば良い。

/Users/(ユーザー名)/Library/Developer/CoreSimulator/Devices/(シュミレーターID)/data/Containers/Data/Application/(udid)

Developerフォルダ

Developerフォルダは不可視になっているので、
ターミナルで行きたい場所までcdして、$open . でファインダーを開いてやるとよいです。

その他

シュミレーターIDが分からなければWindow > Devicesを確認すれば問題なし。 udidはどこをみたらいいのかイマイチわからないため、 フォルダ内Snapshotsの中身をみて判断するしかなさそうです。

UIKit - tintColorについて調べた

本を読んでいたら、tintColorについて発見があったのでメモ。
単にUIの色を変えるという認識でした。

親のビューのtintColorを変更すると、子のビューのtintColorが変更される

let parentView = UIView()
let stepper = UIStepper()
stepper.tintColor = UIColor.yellowColor() // 黄色を設定
parentView.addSubview(stepper)

parentView.tintColor = UIColor.blueColor() // 子供すべてのtintColorが青色に変更される

さらに、tintColorにnilを代入すると、親のtintColorがあてがわれる。

let parentView = UIView()
parentView.tintColor = UIColor.redColor()

let stepper = UIStepper()
stepper.tintColor = UIColor.greenColor()

stepper.tintColor = nil //親の赤色がtintColorに設定される

tintColorを変更すると、変更したビューではtintColorDidChangeがコールされる

さらにtintColorを変更するとコールされるメソッドもあった。

let parentView = MyView()
parentView.tintColor = UIColor.redColor()

class MyView: UIView {
    override func tintColorDidChange() {
        print(tintColorを赤色に変更した)
    }
}

まだまだ知らないことがたくさんありますね〜。

絶賛ブランクを埋めるために、以下の本を読んでUIKitについて学び直してます。
小手先のテクニックではなくて、UIKitについてしっかり書かれているので学びがとても多いです。

CoreGraphics - CGRect, CGPointが短形内にあるかどうかを調べる

短形A、ポイントAが短形Bの範囲内にあるかどうか、
調べるには以下のメソッドを使うようだ。

// 短形を調べる場合
CGRectContainsRect(rect1: CGRect, _ rect2: CGRect) -> Bool

// ポイントを調べる場合
CGRectContainsPoint(rect: CGRect, _ point: CGPoint) -> Bool

知らなんだ。

Swift - 文字列の計算式を計算する

"3+5/2"のような文字列の計算式の答えを求めるには、以下のように書きます。

let expression = NSExpression(format: $計算式文字列$)
let result = expression.expressionValueWithObject(nil, context: nil) as? NSNumber

resultには、正確な計算式であれば答えとなるNSNumberが、計算式でなければnilが返ってきます。
Javascriptのevalのようなものですね。

"5/3"が計算式だとすると数字は全てIntなので、小数点の答えは出ません。
小数点まで求めるのであれば、計算式内の数字を正規表現かなにかで、
”X.0”としてやればDouble型になるので、小数点の答えも出るのではないかと思います。

参考:

spin.atomicobject.com