被學長推坑,晃了兩個禮拜才去下單買了兩組輕薄筆電架。沒想到今年下半年起,終於開始在眾籌網站在購物了 XD 其實眾籌網站已經不是眾籌,而是行銷用途,所有的新品幾乎都靠眾籌在推銷。這款大概是...今年花最少錢的眾籌案子,還有兩個稍貴的還沒發貨。
之前看非 coding 的同事用個高高的筆電架,總覺得要打字不會因為高度而很難打很快嗎?這次換我來體驗一下,究竟長久用下去到底有什麼變化。
$ cat /tmp/api.json | jq '.["data"]'
[
{
"field": "hello"
},
{
"field": "world"
}
]
$ cat /tmp/api.json | jq '.["data"] | .[] '
{
"field": "hello"
}
{
"field": "world"
}
$ cat /tmp/api.json | jq '.["data"] | .[] | select (.field | index("e") > 0) '
{
"field": "hello"
}
$ cat /tmp/api.json | jq '.["data"] | .[] | select (.field | index("e") > 0) | .field '
"hello"
$ cat /tmp/a.log
1
2
3
4
5
$ cat /tmp/b.log
3
5
8
9
$ comm -23 /tmp/a.log /tmp/b.log
1
2
4
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
GAEvent(trackingID: "UA-########-#", clientID: getClientID(), eventCategory: "TestEC", eventAction: "TestEA", eventLabel: "TestEL", eventValue: 0)
GAPageView(trackingID: "UA-########-#", clientID: getClientID(), path:"/")
}
func getClientID() -> String {
// example
return UUID().uuidString
}
func GAPageView(trackingID:String, clientID:String, path:String ) {
var url = URLComponents(string: "https://www.google-analytics.com/collect")!
if trackingID.isEmpty || clientID.isEmpty || path.isEmpty {
return
}
url.queryItems = [
URLQueryItem(name: "v", value: "1"),
URLQueryItem(name: "tid", value: trackingID),
URLQueryItem(name: "cid", value: clientID),
URLQueryItem(name: "t", value: "pageview"),
URLQueryItem(name: "dh", value: "example.com"),
URLQueryItem(name: "dp", value: path),
]
//#if DEBUG
//url.queryItems?.append(URLQueryItem(name: "cd1", value: "DEBUG"))
//#endif
//if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String, appVersion.isEmpty {
// url.queryItems?.append(URLQueryItem(name: "cd2", value: appVersion))
//}
let request = URLRequest(url: url.url!)
let task = URLSession.shared.dataTask(with: request) {(data, response, error) in
//guard let data = data else { return }
//print(String(data: data, encoding: .utf8)!)
if let httpResponse = response as? HTTPURLResponse {
print("GAPageView: \(httpResponse.statusCode)" )
}
}
task.resume()
}
func GAEvent(trackingID:String, clientID:String, eventCategory:String, eventAction:String, eventLabel:String, eventValue:Int) {
var url = URLComponents(string: "https://www.google-analytics.com/collect")!
if trackingID.isEmpty || clientID.isEmpty || path.isEmpty {
return
}
url.queryItems = [
URLQueryItem(name: "v", value: "1"),
URLQueryItem(name: "tid", value: trackingID),
URLQueryItem(name: "cid", value: clientID),
URLQueryItem(name: "t", value: "event"),
URLQueryItem(name: "ec", value: eventCategory),
]
//#if DEBUG
//url.queryItems?.append(URLQueryItem(name: "cd1", value: "DEBUG"))
//#endif
//if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String, appVersion.isEmpty {
// url.queryItems?.append(URLQueryItem(name: "cd2", value: appVersion))
//}
if !eventAction.isEmpty {
url.queryItems?.append(URLQueryItem(name: "ea", value: eventAction))
if !eventLabel.isEmpty {
url.queryItems?.append(URLQueryItem(name: "el", value: eventAction))
if eventValue >= 0 {
url.queryItems?.append(URLQueryItem(name: "ev", value: "\(eventValue)"))
}
}
}
let request = URLRequest(url: url.url!)
let task = URLSession.shared.dataTask(with: request) {(data, response, error) in
//guard let data = data else { return }
//print(String(data: data, encoding: .utf8)!)
if let httpResponse = response as? HTTPURLResponse {
print("GAEvent: \(httpResponse.statusCode)" )
}
}
task.resume()
}