有時候我們想要用第三方程式,快速建立多個 mysql 資料庫或是 table,這時你也許會使用類似以下的複製語法:
CREAT Table XXX LIKE ABC
但你會發現,就算在創造 ABC 時已經選擇 utf8_unicode_ci ,複製過來的 XXX Table 仍然會是latin1的編碼。
網路上有很多人都有提供方法,我這邊也提供我成功的方式。
我的設備和環境:
2018 mac mini
OSX 10.14.4
mysql 5.6.21
有時候我們想要用第三方程式,快速建立多個 mysql 資料庫或是 table,這時你也許會使用類似以下的複製語法:
CREAT Table XXX LIKE ABC
但你會發現,就算在創造 ABC 時已經選擇 utf8_unicode_ci ,複製過來的 XXX Table 仍然會是latin1的編碼。
網路上有很多人都有提供方法,我這邊也提供我成功的方式。
我的設備和環境:
2018 mac mini
OSX 10.14.4
mysql 5.6.21
最近寫了幾隻爬蟲,爬一些網站,然後存到 mysql 裡面,在使用 crontab 排成執行時,發生了錯誤。
在終端機或是 spyder 上執行都是沒問題的,但是 crontab 就是跑不出來,於是使用了我在另一篇文章提到的:用 crontab 安排作業排程後,如何知道裡面發生了什麼事?
顯示出這個錯誤:UnicodeEncodeError: ‘ascii’ codec can’t encode character
繼續閱讀 “crontab 執行有中文編碼的程式時,出現錯誤 : UnicodeEncodeError: ‘ascii’ codec can’t encode character"
當然,你可以寫在程式裡面,在進行的當下就產出文字檔、報表,或甚至圖片檔都行。
但有時候我們並不想要有這麼多的記錄檔,或是我們在測試的時候,程式都會動,但排入 crontab 之後,它就不動或是產出錯誤訊息了,就像我在另一篇裡面寫到的問題,中文編碼與 crontab 產生衝突,這是你怎麼測都測不出的吧。
這時候可以用一個很簡單的方法,也就是在你的 crontab 語法後面,加上一個 > 然後指派一個空的 .txt 檔給它,它就會把你程式裡面寫的 print 印在裡面,或是如果有錯誤,也會顯示在檔案裡。 繼續閱讀 “用 crontab 安排作業排程後不動,該如何找錯?"
windows 電腦目前唯一讓我懷念的就是「光影魔術手」這個 app,批次改檔名、改亮度等等的都超好用 der。
最近有個需要,要一次改一個檔案內的照片名稱,查了一下用 Python 寫了小程式,分享給大家。 繼續閱讀 “用 Python 批次修改資料夾內的所有照片檔名"
如果你的預覽圖是 .png 檔案,很容易出現這個錯誤訊息:
圖像不能包含通道或透明度 ( Images can’t contain alpha channels or transparencies.)
在上傳 iOS App 專案到 iTunes connect 之後收到一封信,內容如下:
Dear Developer,
We identified one or more issues with a recent delivery for your app, “xxx". Your delivery was successful, but you may wish to correct the following issues in your next delivery: 繼續閱讀 “iOS App上傳後收到:Missing Push Notification Entitlement"
這邊用的是 Xcode 9.4,開發一個 iOS 11.3 的 App。
這是一個當你開發完一個 App 要上傳到 App Store 的時候,會遇到的問題。
我是根據這一篇修改成功的。
到 general 那邊去把 App Icons and Launch Images 的選項修改一下,再重新打包上傳,就成功了。
這邊用的是 Xcode 9.4,開發一個 iOS 11.3 的 App。
這是一個當你開發完一個 App 要上傳到 App Store 的時候,會遇到的問題。
我是根據這一篇的解法去解開的。
我的做法是,去 info.plist 裡面,找到一個 key 是 UILaunchStoryboardName 的項目,然後修改它的 value。 繼續閱讀 “iOS App 上傳回報問題:ERROR ITMS-90705: “Launch storyboard not found."
原來想要在最近開發的 App 裡面放廣告,後來覺得有點醜,就先不放了,不過還是做個筆記。
打開你的專案,找到下面圖片的地方,修改 Product Name 之後重新 run 一次,就會發現你的模擬器上面顯示名稱已經改變了。
另外,如果要顯示空格的話,例如:加 空格。
在「加」跟「空格」之間,要按三次空白鍵 (space) 才會顯示出空格。
在前面第四篇的時候,提到有一個項目是 photo,裡面通常有10個項目,我們可以透過這 10 個項目取得該地點的圖片,這一篇就來看看如何透過這個項目取得圖片。
首先我們來看看,photo 裡面的 10 個項目長怎樣。
photo 裡面會有一個項目是 photo_reference,它的value大概是長這樣:CmRaAAAAMRw3rMQekkw1vt8BISl4OdOzt4Hl-9bNqpAL8XRA9iPlY5zzTptLIty32cIcNnCh0GXK8-gLZx0cjG9Xa1l8tzVNiZRLr0DXWyuAjBzztWKzrlYpaWWTHVnjcpoBotr3EhC553Dy95yqdZ2qhyeMRhmSGhSHXqw_4Wsl8V9V4fYH3hwqanK95A
這篇文其實是寫給自己的筆記,因為每次都要去查別人的範例,想想不如自己寫一篇。 繼續閱讀 “複製Xcode專案並且改專案名稱"
原本(自)以為關於 app 生命週期,透過上次測試就已經大概掌握了,直到最近某個專案練習到一半才發現,原來在不同情況下,viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear 的執行時機與次數,還有另一種模式。
原因在於,上一個文章裡面的範例,我們是在兩個 view 之間移動,所以當我們從第一個 view 轉換到第二個 view 的時候,理所當然第一個 view 會需要經歷 viewWillDisappear、viewDidDisappear ,而我們從第二個 view 回到第一個 view的時候,第一個 view 會需要再一次經歷 viewWillAppear、viewDidAppear。
本篇分享關於iOS開發中,定位功能的一些心得。
版本:swift 4
介面:Xcode 9
這一段的程式碼寫在 AppDelegate.swift 檔案的 didFinishLaunchingWithOptions 區塊內。
這個區塊內的動作,是在使用者下載後第一次打開 app,或是把 app 整個關掉,再重新打開的時候執行。如果只是放到background中,再打開,是不會執行這一段。
事情是這樣的:
今天早上在測試一段關於定位的程式碼,看著模擬器的畫面上的小藍點模擬開車跑動,然後 print 出經緯度,覺得非常有成就感 XDD。
做了一些修改之後不知道發生什麼事,小藍點還在跑動,但原本該 print 出來的東西不見了。
對於 View Controller 的各個執行週期,很多前輩都有詳細的介紹。
不過我想實作一次,還是最能夠記住的,以下是我的實作方法分享。
上一篇我們用place(place_id)函數,拿到了 12 家:以台北 101 為中心,半徑 100 公尺內,被 Google 標記為 “cafe" 的地點 (店家) 名稱。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import googlemaps | |
google_key = “xxx” | |
gmaps = googlemaps.Client(key = google_key) | |
radar_results = gmaps.places_radar(location = (25.034195, 121.564467), radius = 100, type = “cafe”) | |
print(radar_results) |
最後得到的 radar_results 是一個 dict,裡面有三個根元素,分別包含三個 dict。
我們要用到的是 [‘results’] 這個 key。
上一篇 Python – 使用Google Map API(1) – 雷達搜尋 中最後提到,將回傳的內容print出來後得到下方的結果:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{'html_attributions': [], 'status': 'OK', 'results': [{'place_id': 'ChIJSTLZ6barQjQR7OeldE1QDsU', 'id': '09bd306d8a6fff4ed4920a843bfffb77405c4dbc', 'reference': 'CmRSAAAAbulvhVx0YEexX2M3Fi3BtxLea2U8_7Ruq1HnivcsnhQfnbur1TxVfdKCFSICFQeUyoOsGnvZLDHHHzNaP7QN__fJ4LL9WNdqW2pRPRhqsUKG8ZAKYm7puNkundjgFlPTEhARhMUPDUPBbAqDYGP6G3ddGhSaoLSfPYT4cLtjcxW72QReaX93yw', 'geometry': {'location': {'lng': 121.5651166, 'lat': 25.0338119}}}, {'place_id': 'ChIJraeA2rarQjQRcsQVAszSNog', 'id': '24711f6d1d5600fb77e7fe680d251776da27bc56', 'reference': 'CmRSAAAACT67OQqRIlpQmduE4RAFWcqxSXhEbt3gZO4SYGTwLpKbZXZu30OBpb4C8D5ncJwDtMsE13xuEIqDAqAayuIOfRQSzDq3hFmdKnaWsKSI62s7LtEQSfCs1TXQO6OxehaVEhDG_WnFgjmK8QwaV_v8ZaDvGhSghBE7BlQ14yWAwQvaGYZy3oXriA', 'geometry': {'location': {'lng': 121.56481, 'lat': 25.033718}}}, {'place_id': 'ChIJSTLZ6barQjQRDNycA51cBq4', 'id': 'cdff9d8fc20ef48d0f10f3227e890d97ed3c8ce2', 'reference': 'CmRSAAAAm1FvUZQ0fWLwYXD4COXlRNfNS3KJqs9B7AdMbjthAfy0aHB6fut6Uf8MbLd9vpQoTlLr0JznkXjMRVQoMiGarDO-GHEh4DLAGOs66F8F5L5g6DU-_TgliEgsXQuyf9-tEhADSx7IIYzZGUEicpsO4CckGhT20WcmEFlbas7zM4eFHkGDvE1cjw', 'geometry': {'location': {'lng': 121.5645391, 'lat': 25.0334612}}}, {'place_id': 'ChIJ1S3Z6barQjQRKb4ubuIujDg', 'id': '5aec3fa9fee319e70950b8b265622a0adf51e8e2', 'reference': 'CmRRAAAAibD4kyOb2YztYpfYlSYiSnDYSjSgrjLL51cI0IbKHArB_dQUveca4MWIwaXxjR9D5lRxQStyZeuU2CazfKuv-3hjCejKJZuFG6lVIVryDY4mh8rvWgMOtgN80T8cCYJSEhB1BghYVb_PoZ17kPRgjxXJGhQ96erXB8xywkj9bEWtBPN0o-jkuw', 'geometry': {'location': {'lng': 121.5638627, 'lat': 25.0334962}}}, {'place_id': 'ChIJNzLZ6barQjQReRr0AwrDlfI', 'id': '64d339a0714893fa6879639e28828563ba9409de', 'reference': 'CmRSAAAAplF_qWllM9uLZU6Z8M_wgo_GHErDBYwXtAknAYtYQ-xgfQX_bLAWBBT9IVTxpUI-9BTN0xvxcBt-cHPGe5cDtNMqEGfN78sDJYKnPwvDKLNFmYNbsQaMm-fPWImw4eKXEhB3q8dK0bCg586TexrYSiEdGhRe2fDMyupgMccnLxCuTYNwiwg-uA', 'geometry': {'location': {'lng': 121.564101, 'lat': 25.033493}}}, {'place_id': 'ChIJrXJz7K2rQjQRis4azcE0bl0', 'id': 'b3055b2436ef8135d9ba12e8bb1abfcb0a07351a', 'reference': 'CmRRAAAAPC1Bv9Gw9B_IxUAL-ThPIV-E4G37rYJqWbw8TCTYQK1rN6yVacSS9sID2WdUtptvlXGziZcvtj7l_KLIOxCSnk78uJ3xWNwDlZXKD7ZSZYMPzktNyL8yA8cHHQth1_kjEhABPqmb0iD2LmijQI0MSkwXGhQJdueeyKUT3dMnhtOiwlT-escUmw', 'geometry': {'location': {'lng': 121.5648144, 'lat': 25.0335615}}}, {'place_id': 'ChIJO8RPJ7erQjQRK7lBH_vJJQs', 'id': 'e7038e4be482c4f18c7776a505999d3769c08015', 'reference': 'CmRRAAAAno6LB7BiEpmHILy7lMjvImr1_VpVQbonyJPduFaHoi50ZlLZvwdzDwjiuy4BHnIjE_D0095Lc_nGnHQln2ApukT4jug00vlEsNW1OTIftTwVdsybe0kWx6eLDpBM4JiaEhCsx61tHrcilHVrw0gPKGoXGhQrR3niCYNznqbK4Qn6JpqG1tCkEg', 'geometry': {'location': {'lng': 121.564461, 'lat': 25.0338915}}}, {'place_id': 'ChIJUwMfwrarQjQRTg3KGHwh1gU', 'id': '5fc15ea7ded0cbf6c450e61eb60ac30bd19aaf92', 'reference': 'CmRRAAAAfrv4l4ihJEuwyq9ducmmdt0RH_Z5bJJTJQgGYHTefmZSOjl7_ti7iNeZJjzFc5gLabIdzkvdXhf4TARUf4w1OR7o1Tmlsh4E-PWC6koTwZNiivnaPxOIpDa50MDLDmGsEhBbp0wWEea6Z6fIIVg0gDp2GhSBXaaHeiWIVcquFsGXTZ02ZaTfWw', 'geometry': {'location': {'lng': 121.5641948, 'lat': 25.0333792}}}, {'place_id': 'ChIJN6uq3rarQjQR12G5vIYbHAw', 'id': 'c89fd501af56ddeb6844e3f23e65c1c9120c2d49', 'reference': 'CmRRAAAAPlbRsZY1Thk7MuD1m_Dluyzs0F_RSDcrcNtDBnrfZJyhItZF4NqR6AhbEy4IX_LQumwh8vvYMUscTBGttQT2zIYRpLWeNI0XHk1FCyIbyCiNyT5jQ7n0azWDQeC2YQiVEhDoKE6X68MsDYGPuCV8P02LGhSKiN_W_GTMfU1u64plzzL_JjVNmQ', 'geometry': {'location': {'lng': 121.5644721, 'lat': 25.0339649}}}, {'place_id': 'ChIJoSJTw7arQjQRnCc70GtKTNs', 'id': 'c6423bce8f2d8f984e621fd0086981ad4aaceea2', 'reference': 'CmRSAAAAsEeZIt1HTM3L8WPFHaCemTLwzObpXdNKXcU1tAGXoupq7ZK1Eky2oINI07uXNd–55f_HI_EcvLuV1PCDIeXieOjjJKjgWTsx4ek6J4u6Zcqb0xhP_yj63u8LScN01AvEhBgjKn_0EpKjlJAyfn8RXq9GhS6WNbtnJGTXCQOd3mUkUhbPZTaBg', 'geometry': {'location': {'lng': 121.5644412, 'lat': 25.0336347}}}, {'place_id': 'ChIJsVahxLarQjQRfkqE8XAR_9E', 'id': '80142f8b863f944054639597685da4dc180b60cb', 'reference': 'CmRSAAAA9DofkcecvBbsXclrzD9TrguQsl7Fw43GZGSNQlBdOuyHx6eZUceo8hfUEImoq7JQKCeovDd_29SrNGzCCy-Jp2dKYAol8TRfLfX1SjcPzQAL93wVEgkBPu-Nh6hb_tkpEhCpBhVcasoveJ7Qc6ytTq28GhQI2mSe_IzEIw8cedGIVFPoXAvXog', 'geometry': {'location': {'lng': 121.5644932, 'lat': 25.0335639}}}, {'place_id': 'ChIJMQANxbarQjQRtrPUHgvc_F4', 'id': '46000da8d74a1f3e7269e9b257f05b7077c95e79', 'reference': 'CmRRAAAA1W-e2Pjy2RElOjCoPtnyguJotI_iHaqzGDex8fJEp0sOgybjphCn-PkwJVsxb7I4CM-iZpI75L5sQGXwpaaL3twFBritvq1eHC7fkBcLMTmdGdvK4QevISPS5chmJFSpEhAErtzFHR93_hcWNNM6vgfNGhRDDW6WOy2Y1WpBHrwT_L7rm44f8A', 'geometry': {'location': {'lng': 121.5647292, 'lat': 25.0334375}}}]} |
*線上 json editor 的版本很多,我就用我習慣的平台來做。