發表文章

目前顯示的是 2019的文章

2019 創業之路

2019年的12月就這樣來了~~~目前手上的案子會一路忙到過年,在開始超忙之前把今年的心得做個記錄。 在2019以前 其實在今年之前,從生小孩之後,5年內已經陸陸續續接了幾個案子。真正決定創業接案當正職是從2018年搬家搬到宜蘭開始。為了小孩的生長環境還有負擔不起的台北房價搬到宜蘭,宜蘭這個地方,工作機會少、勞工薪水低,唯一的優點就是好山好水(好無聊?),如果要找工作,勢必是每天要往返台北通勤(小孩同學的家長就有很多是這樣),那小孩就會很晚下課,安親、課托…,回家就是洗澡睡覺的悲哀人生。 總之,搬到宜蘭後,把小孩上學問題安頓好,把房子該弄的雜事弄好,就到了2019了 2019創業元年 剛開始覺得接案好像不難,外包網看起來超~多案子,但買了外包網的帳號之後才發現,你提案了之後,大部份都是石沉大海,不然就是很低很低的金額, 外包網99%都不是什麼好案子 。後來在農曆過年前接了一個很小金額的案子,真的是萬事起頭難啊,根本就是賠本做。當初設定了一個目標,假設在6月之前,接到的案子沒辦法應付家計的話,老闆就要去找工作。還好,在這個小案子之後,案主覺得做的不錯,後面就陸陸續續有丟一些案子過來。我也接了一些手機、網站開發的案子,勉勉強強還過的去。 這中間因緣際會下,接觸到「蘭青庭」,得知這是一個輔導宜蘭創業青年的地方,但進駐需要 通過新竹科學園區管理局的審核 ,老闆經過了一番準備審核通過(而且我們還是那批審核廠商/團隊裡最高分通過的)。可以進駐是超級開心的事,因為每次去接案,說我們人在宜蘭就會被嫌棄,第一是個人身份,無法開發票;第二,案主都會質疑你的配合態度;第三,覺得你住五結到底是什麼鳥地方。 進駐之後當然享有一些青創的輔導資源,透過蘭青庭,也和宜蘭當地的產、官、學建立起關係, 這也是我們創立的目標之一,提供宜蘭、東部地區優質的資訊軟體整合服務 。 每件事都是累積 從工程師的角度來看,我的第一份工作有幸開發了一個平台,可以讓工程師快速開發功能,從系統架構設計、身份驗證、權限管理、共用物件設計、開發規範制定、文件撰寫,到從把一個技術摸的滾瓜爛熟,這一段路真的對日後幫助很大。不管後面要學什麼新技術都可以快速上手(畢竟換湯不換藥) 每個專案的點點滴滴的累積也很重要,盡量少做為了錢多,但是對本身沒有太多累積的專案。在資訊爆炸的年代,參與研討會可以...

iOS APP 在背景取得使用者位置(Get location at background)

圖片
簡單整理一下iOS如何在背景持續取得使用者位置,本例在收到新定位後會發送一個local notification給自己 在專案中的設定 Target => Capabilities => Background Modes,Switch to ON 選取Location updates 在plist中加入描敘(這會在提醒使用者同意使用定位時出現) Privacy - Location Always and When In Use Usage Description Privacy - Location Always Usage Description Privacy - Location When In Use Usage Description 實作 1. 在AppDelegate中加入import import CoreLocation import UserNotifications 2. AppDelegate實作CLLocationManagerDelegate class AppDelegate: UIResponder , UIApplicationDelegate , CLLocationManagerDelegate { 3. 加入location manager相關實作 使用locationManager.startMonitoringSignificantLocationChanges(),而非locationManager.startUpdatingLocation。使用方法可參考 官方文件 ,要特別注意的是這個方法取得新定位的觸發時間點在這份 官方文件 裡有說明如下,大意大概是移動距離500公尺以上才會觸發,且觸發間隔大於5分鐘(我的解讀及實際測試是在行進中,大約每5分鐘觸發一次) Note Apps can expect a notification as soon as the device moves 500 meters or more from its previous notification. It should not expect notifications more frequently ...

DispatchGroup操作

最近一個案子有個需求,需要call 2隻API,並且得到2隻API回傳的結果後,才做資料處理及UI顯示。 做法1: 2隻API沒有前後順序 Code: print ( "Group created" ) //產生兩個task let task1 = DispatchQueue (label: "task1" ) let task2 = DispatchQueue (label: "task2" ) //產生DispatchGroup let group = DispatchGroup () group . enter () task1 . async (group: group , qos: . default ) {     print ( "task1 start" )     sleep ( 10 )     print ( "task1 end" )     group . leave () } group . enter () task2 . async (group: group , qos: . default ) {     print ( "task2 start" )     sleep ( 5 )     print ( "task2 end" )     group . leave () } group . notify (queue: . main , execute:{     print ( "All task is done" )     //self.reloadUI() }) Result: Group created task1 start task2 start task2 end task1 end All task is done 可以看到task1執行10秒,task2執行5秒,所以task2先結束了,並沒有按照順序執行 做法2: API有先後順序,加入...

iOS 強制螢幕轉向(force view orientation)

圖片
最近一個專案的需求,在整個專案裡的某一個View要強制轉成橫的,Google了好久,卡了1天才解決這個需求 1. 在Targets裡面要記得設定App支援的螢幕方向,Targets->Deployment Info->Device Orientation 2. 在要被強制轉向的View裡加入以下的code,做法就是進入viewDidLoad的時候把原本的螢幕方向記下來,然後轉成你要的方向,在viewWillDisappear的時候轉回來,override var shouldAutorotate, supportedInterfaceOrientations, preferredInterfaceOrientationForPresentation      //記錄原本的螢幕方向     var oldOrientation: Int = 0          override func viewDidLoad() {         super . viewDidLoad ()                  //記下原本的螢幕方向         oldOrientation = UIDevice . current . orientation . rawValue                  //強制landscapeRight         UIDevice . current . setValue ( UIInterfaceOrientation . landscapeRight . rawValue , forKey: "orientation" )     }        ...