Thursday, June 16, 2022

Web GIS

ThreadPoolExecutor (embedded in TaskManager) 管理threads的新增回收

  • setCorePoolSize - available 
  • setMaximumPoolSize - max (2 x available)
  • setKeepAliveTime  - 10 secods (TimeUnit.SECONDS) - when thread number exceeding max, the idle ones are collected 
  • setRejectedExecutionHandler - 當workQueue滿了,池中的執行緒數又達到了maximumPoolSize,這個時候已經沒有多餘的資源處理請求了,需要RejectedExecutionHandler 來處理。
  • execute - 執行command

WebGISListener 做為一個listener, 多了兩個聽到了要做的函式動作

  • void onRegisterForItinerary(RegisterForItinerary data);
  • void onGetItineraries(GetItineraryResult data); 

                MainActivity 在此成為一位WebGISListener 

WebGISResponse 做為一個等待WEB動作的守門人,一旦結束動作立刻回報

  • public void addListener(WebGISListener listener)
  • public void removeListener(WebGISListener listener)
  • public abstract void notifyListeners();  
  • abstract void parseJSON(JsonReader reader) 
1. public class GetItineraryResult extends WebGISResponse 
    - 負責取得網傳的itn
2. public class RegisterForItinerary extends WebGISResponse
    - 負責註冊新的ID上到網址

以上兩者均各自override parseJSON與notifyListener的部分
GetItineraryResults在notifyListener處呼叫了onGetItineraries
而RegisterForItinerary在notifyListener處則呼叫了onRegisterForItinerary

public class WebGISClient {

public static final String TAG = "WebGISClient";
private static final String webgisUrl = "https://mapi.polstarapis.com/";
}
public static Runnable get(String uri, WebGISResponse result)
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("GET");
public static Runnable post(String uri, HashMap<String, String> params, WebGISResponse result)
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
WebGISClient 擔任interface角色提供MainActivity需要時建立的runnable
runnable透過TaskManager帶入執行,WebGISResponse帶入等結果,
一收到就NotifyListener,回傳給MainActivity做處理 :
private static void RequestItinerary() {
GetItineraryResult result = new GetItineraryResult();
Runnable r = WebGISClient.get("itinerary/api/getItinerary/" + SN, result);
result.addListener(MainActivity.mSingleton);
mTaskManager.execute(r);
}
private static void UploadUserIdForItinerary(String userid) {
   HashMap<String, String> params = new HashMap<>();
params.put("serialNo", SN);
params.put("label", userid);
RegisterForItinerary result = new RegisterForItinerary();
Runnable r = WebGISClient.post("itinerary/api/register", params, result);
mTaskManager.execute(r);
}
public void onGetItineraries(GetItineraryResult data) {
String toStr = String.format(Locale.getDefault(), "status=%d, message=%s", data.status, data.message);
if (data.status == -1) {
return;
}
int len = 0, i = 0;
for (ItineraryEntry e : data.itineraries) len++;
String[] titles = new String[len];
String[] subTitles = new String[len];
double[] longitudes = new double[len];
double[] latitudes = new double[len];
double[] navLongitudes = new double[len];
double[] navLatitudes = new double[len];
for (ItineraryEntry e : data.itineraries) {
titles[i] = e.title;
subTitles[i] = e.subTitle;
longitudes[i] = e.longitude;
latitudes[i] = e.longitude;
navLongitudes[i] = e.navLongitude;
navLatitudes[i] = e.navLatitude;
i++;
}
MainActivity.nativeSetItineraries(data.itineraryName, titles, subTitles, longitudes, latitudes, navLongitudes, navLatitudes);
}
HTTPUrlConnection 可用的methods :

Set the method for the URL request, one of:

  • GET (用到)
  • POST (用到)
  • HEAD
  • OPTIONS
  • PUT
  • DELETE
  • TRACE
are legal, subject to protocol restrictions. The default method is GET.

Wednesday, June 15, 2022

又一波梅雨來到

今年的雨勢較去年大多了,到了六月中旬仍因大雨溫度降低,這次的梅雨季節也讓我比往年穿上雨鞋套頻率增加許多。今早在出發前雨勢其實不強,但一個聲音讓我仍穿上雨鞋套,結果一離開地下室,雨勢就不斷增強,沒有白花時間去套了。

到了健身房,Eric剛結束他的運動,他表示他來的路上並未下雨,可見是到了接近八點才忽然下大雨的。今天的運動也完成了四公里(12公里/時),雖然中間有約100公尺是用6公里時速走的,稍為喘息一下,但去年大多都是這樣完成四公里的,所以有維持去年的水準,就OK了,往後再看能不能跑到五公里。

Tuesday, June 14, 2022

StarWars 不可少的元素

StarWars出了Mandalorian的第一季、第二季
深獲好評,至少在我心目中,我是覺得很好看的。
當然重點在於那隻小尤達的出現,可愛極了,想不續追在他身上發生的事都很難。

看到Obi-Wan Kenobi出的了電視劇,也毫不猶豫地就入坑追劇,小小年紀的Leia公主又吸睛了。
但我實在無法相信她有劇中描述的10歲,結果一查還真是2012出生的十歲小女孩。
當然她在不失孩童天真但又充滿成人的成熟思慮,讓人感受到她將來的重要性是從小培養的素質所然,或者說她與生具有的領袖特質,讓她在小小年紀就表現得與眾不同。

這時又發現自己錯過的The book of Boba-Fett,描述StarWars IV時Luke打敗Jaba the Hutt時,以為一同陪葬的bounty hunter竟然從地洞的大怪胃裏逃脫出來,並在Tusken族裏學習到他們用以打鬥的方式,被Tusken接納,也幫助他們打敗Spykes的火車,但卻在重新建立自己霸權的過程遭遇到多方試練,用自己多年的身手加上周攬的盟友們再加上Mandalorian的協助,與Spykes來個正面對決。

這三劇總是用一位能力有限,在許多關頭需要進行抉擇,面對的是很難推倒的敵人,但又總是能憑著本身化解危機的故事,然後不乏許多外星角色的元素,而最重要的就是有可愛的小孩。Mandalorian與Boba-Fett少不了小尤達,而Obi-Wan Kenobi則充滿了與小Leia的對話,就像Spy-Family裏的Anya一樣,可愛的元素是唯一不可或缺的元素。

MyPOI的規格筆記

MyPOI.dat儲存內容 :

[MyPOI]
// 1st -> Image/MenuIcon/x.png 2nd->UI title
Name1=Cargo,貨櫃場
Name2=Depot,Depot

因此在MyPOI裏頭可以看到兩個icon (最多可以有8個)



圖示的部分則要另外附才有
System.ini 裏 myPOIDataName原先要過濾掉不要顯示在search裏的myPOI
但對MyPOI.dat的不要作用, 因此有了MyPOI.dat
System.ini的myPOIDataName=Cargo也不會把Cargo過濾掉

如果在沒有MyPOI.dat的情形下
靠三個檔 : FUSO.mypoi(存有各FUSO據點的經緯度資料) FUSO.txt(敍述POI名稱) FUSO.png (地圖上的圖示) 外加 Image/MenuIcon/my_poi.png,可以在Find底下看到FUSO的myPOI選項

而System.ini裏的myPOIDataName=CargoFUSO則會把該選項給過濾掉
此設定直已被賦予新的功能,也就是隱藏其在Find之下的出現

位階的排序:
MyPOI.dat > myPOIDataName > mypoi/txt/png組合



WIN10 HDD -> SSD

以下為網路查找最實用的WIN10轉移至SSD步驟,很多網頁簡單帶過,然後開始推銷自家的好用套裝軟體,但是要$,所以本著WINDOWS本身就該提供的功能,不應該再要求使用者另外花錢再購買第三方軟體做一樣的事的精神,找到 WIN10移轉到SSD 這個網頁,並整理文字部分如下,以免哪一天該網頁又消失了。

(1) 進入「控制台」並選擇「系統及安全性」

(2) 選擇「備份與還原」

(3) 選擇「建立系統映像」

(4) 系統會選擇適合的儲存硬碟,或者也可以手動更換硬碟,並且點擊下一步,就會開始執行系統映像的建立。

◉接下來就要準備一個8GB以上的隨身碟,並製作新系統開機的隨身碟

(1) https://www.microsoft.com/zh-tw/software-download/windows10

(2) 下載 MediaCreationTool21H2.exe 檔案並安裝執行

(3) 選擇「建立另一部電腦的安裝媒體」

(4) 選擇使用的媒體為USB快閃磁碟機

(5) 選擇USB並且按下一步建立開機隨機碟

系統會需要10-20分鐘將Windows安裝至隨身碟內,等待讀秒完成代表開機隨身碟建立完成。

將系統轉移的SSD/HDD插入新電腦中,並且也要同時接上開機的隨身碟。

(1) 進入BIOS並預設讀取開機隨身碟

(2) 電腦進入Windows系統,選擇語言

(3) 選擇「疑難排解」

(4) 選擇「進階選項」

(5) 選擇「系統映像修復」,並選擇Windows系統

(6) 選擇「選取最新可用系統映像」,並點選下一步

(7) 決定是否要格式化並重新分割現有磁碟,就可以完成Win10/Win11系統轉移了!

屆時需要時,再來參閱實行一下了。

Monday, June 13, 2022

換匯記錄

(6/14)

1美元=133.648日円

1000美元 => 133648円

從2008至今未曾看到的匯率,但難說會不會再更高


(7/7)

1000美元=> 135027円

又見新高點

跑步機上再度跑出4公里

4公里跑步機距離終於在今天早晨運動又達標了,已經很久都是跑個2公里或3公里,剩下就用走的,因為會喘。不過今天用的台元一期左邊第二台跑步機,以前應該也遇到過,就是履帶的速度會忽然有減慢的瞬間,雖然不至於造成我向前跌倒,但可以明顯地感受到速度的改變。這個問題恐怕很難跟教練解釋,也不容易發生,在跑步的20分半的時間裏,也只約發生了5、6次。

總之能再次地跑出4公里距離,我已經很欣慰了,在這之前常常有上氣不接下氣的感覺,因而無法再跑下去,改用走路完成20分鐘運動的現象,讓我覺得似乎是體力不能再提升,但又想進步,今日終於在不勉強的情況下,得到激勵。