今天工作剛好要劃些少 ER 來告訴別人工程師,正在設計中的 Object 關係,所以記錄一下到這裏。 ### 什麼是 ER Diagram ER Diagram 可以用來描述 Database 內 Table (Entity) 和 Table 之間的關係 (Relation),當中有些符號是劃在連接線上的,用來表達關係。 ### 連接線 我們可以使用連接線把兩個 Entity 連起來,並依照他們的關連數量來加入符號到兩端的線頭。  而整個 ER Diagram 大約就是這樣的 !  > 參考網址 : https://softwareengineering.stackexchange.com/questions/345709/erd-many-vs-zero-or-many-one-or-many-crowfoot-notation
### How to read a text file in Java? In short, Scanner. ### Demo code Code below showing how to use `Scanner` class to read a text file line by line in Java. ```java try { // init file File mFile = new File("/root/example.txt"); // init scanner Scanner mScanner = new Scanner(mFile); // while has next line while( mScanner.hasNextLine() ) { // get line string String mLine = mScanner.nextLine(); // do something } } catch ( FileNotFoundException e ) { // trace error e.printStackTrace() } ```
又是 NetBean 的問題了 !!! 這次遇到的是 Unpacking index for Central Repository on Netbeans ... 等了很久沒完沒了。安裝個 Dependencies 等到天荒地老了,而且間中還會不段的重新來 Transfer Index !! 真是惡夢 !! 於是又找了 GOOGLE 大神求救 !! 找到了以下的提問 : https://stackoverflow.com/questions/50933665/unpacking-index-for-central-repository-on-netbeans 看來大家都有遇到這個問題,經過筆者的了解後,筆者遇到的是 Run out of disk spaces ... 應該是 temp folder 的 Disk 用完空間了。( 筆者用的是 4GB Ram Drive) 結果要把 temp folder 指回去 C Drive 才能完成過程 ...
今日遇到了一個有關於 NetBean 8.2 配上 Maven 的問題 ... 話說工作需要使用到 NetBean 8.2 ... 所以把原先有的 NetBean 11.2 砍掉了,找了個 NetBean 8.2 回來安裝,一切都很順利。直到要 Create Maven Web Application 就出事了。 ### 事件一 ```text Cannot run program "cmd" (in directory "C:\projects\open"): Malformed argument has embedded quote: "C:\Program Files\NetBeans-11.1\netbeans\java\maven\bin\mvn.cmd" ``` 每一次 Create Project 到了最後階段要 Finish 時,都會彈出這樣的問題。在網上查找了一會後發現都有很多人遇到了這個問題,大約是因為 Security Fix 所以有些動作變成不准許了,要解決的話可以修改一下 NetBean 的 Config 檔案。 1. 打開檔案 `<netbeans-dir>\etc\netbeans.conf` 2. 找出 `netbeans_default_options` 的設定 3. 把 `-J-Djdk.lang.Process.allowAmbiguousCommands=true` 加入到設定的後面 經過上面的動作,解決了上面的問題 !! > 參考網站 : https://stackoverflow.com/questions/58411279/java-with-maven-wouldnt-build-cannot-run-program-cmd-malformed-argument-has ### 事件二 完後成上的事件後,Maven 好像運作得不錯地下載相依的檔案,突然又出現了第二個問題 !! ```text [ERROR] No plugin found for prefix 'archetype' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\Documents and Settings\ccen\.m2\repository), central (http://repo1.maven.org/maven2)] -> [Help 1] ``` 又卡住了 !!! 這次的問題大約是因為 NetBean 在 Request http://repo1.maven.org/maven2 時出了問題。又在網上找了找看看有沒人遇到相同的問題,後快就找到了 ! > 參考網站 : https://stackoverflow.com/questions/6472782/mvn-archetypegenerate-does-not-work-no-plugin-found-for-prefix-archetype 內文有說到可能是因為 Firewall 等等因素,可以直接試試在 Browser 上貼上 http://repo1.maven.org/maven2 看看能否連上。筆者立即試一試,結果給了以下的回覆 !! ```text 501 HTTPS Required. Use https://repo1.maven.org/maven2/ More information at https://links.sonatype.com/central/501-https-required ``` 原因是因為改用了 HTTPS 了,舊有的 HTTP 服務終結了。正當想看看能否改變 Maven2 的 URL 由 HTTP 如何變為 HTTPS 時,看到有其他使用者留言 :  NetBean 8.2 或以下就會遇到這個問題了 ... 看來還是乖乖砍掉 NetBean 8.2 重新下載 NetBean 11.2 吧 ... 這文章就是在安裝 NetBean 11.2 時趁著等待的時間記錄下來 ...
### Android AsyncTask 今日收到一位同事問起,如果 HTTP Request 是多於一個時,要如何 Handle Progress 的生命週期 ? 雖然筆者沒有在網上再找找解決方法,不過以經驗去理解應該和處理一個 HTTP Request 也差不多,以下寫了一段 DEMO CODE 來實作這個事情 (沒有測試過能否運行的)。 另外也放到了 GIST : https://gist.github.com/19Site/39a6d1c40794de16dfd97f2da7ef9f16 ### Demo Code 以下是 Demo Code ```java public static void main(String... args) { AsyncTask<String, Integer, Boolean> task = new AsyncTask<String, Integer, Boolean>() { // loading dialog AlertDialog dialog = (new AlertDialog.Builder(context)).setCancelable(false).setMessage("loading").create(); @Override protected Boolean doInBackground(String... strings) { publishProgress(1); doHttp1(); publishProgress(2); doHttp2(); publishProgress(3); doHttp3(); publishProgress(4); return true; } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); // todo } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); switch (values[0]) { case 1: dialog.show(); case 2: case 3: dialog.setMessage("progress " + values[0]); break; case 4: default: dialog.dismiss(); } } private void doHttp1() { // do http request } private void doHttp2() { // do http request } private void doHttp3() { // do http request } }; } ```
Home Office 了一段時間因為有點 Server 問題回到公司去解決,但誰知道在沒有動 Server 一段時間後在連上 SSH 時發生問題 !! ### 發現問題 大約是因為這台 Server 的 Fingerprint 和先前連上時不同了,為了防止第三方的人士 "扮" 是連線目標的主機,所以引發這個問題。 ```sh $ ssh root@192.168.1.1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:HDjXJcb0VYXWF+MCBDjSGn6FQmg/+x7vV0ljJvIDas0. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /root/.ssh/known_hosts:46 ECDSA host key for 192.168.1.1 has changed and you have requested strict checking. Host key verification failed. ``` 說明了是 Host key changed ```sh ECDSA host key for 192.168.1.1 has changed and you have requested strict checking. Host key verification failed. ``` Host key Changed 可能有好多原因,最有可能是因為主網重新安裝了 ... 果然 ... 目標的伺服器是更新了。 ### 解決方法 針對因為 Host Key Changed 的問題,只需要把本機的 Host Key 記錄清除。 ```sh $ ssh-keygen -R 192.168.1.1 ``` 這樣就可以把 `/root/.ssh/known_hosts` 的有關 `192.168.1.1` 的 Key 記錄清除,這樣下次連線是就會重新查問是否連線到 `192.168.1.1`。之後回答 `yes` 便可以了。
進入 2020 年的最大單事情,暫是應該是武漢肺炎對全球的影響了。對香港這邊影響很大呢 ... 農曆年後完全停課到現在。很多公司也選擇 Home Office 來繼續工作,每天的新聞也是一個一個的確診個案,待在家中 Home Office 久了真的在懷疑人生。 Home Office 不斷找舊的 Project 出來番新一下,及維護一下現有的系統。寫 Script 進行 Automation Backup 等動作,多出來的時間就做下 OU 功課 ... 電視台還天天播著沒用的飛機歌唱 x x 加油,還不如播多一點教大家洗手注意衛生好過。 希望疫情快點可以受控,病者早日康復 ... 這病毒感覺已經到了化武級數。