分類
React Native

[React Native] ERROR Metro Bundler can’t listen on port 8081

Situation

在Terminal輸入 npm start ,Console回應 ERROR Metro Bundler can’t listen on port 8081

Action

在MAC上先使用 sudo lsof :8081 查詢哪些服務使用8081,接著再輸入 kill -9 PID 號碼 來終止該服務,如下

%sudo lsof -i :8081
COMMAND   PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    20537       user   40u  IPv6 11ae1baafc8ed7aa87      0t0  TCP *:sunproxyadmin (LISTEN)
%kill -9 20537

Result

輸入 npm start 之後可重新啟動

分類
React Native

[React Native] build failure : DeviceException: No connected devices!

Situation

在編譯 Android 版本時,輸入 npx react-native run-android,console 回應 com.android.builder.testing.api.DeviceException: No Connected devices,如下

Action

透過 Android Studio – AVD Manager 啟動虛擬裝置或將直接連接實體裝置皆可

Result

錯誤不再出現

分類
React Native

[React Native] build failure : The SDK directory ‘xxx’ does not exist

Situation

輸入 npx react-native run-android,console 回應 The SDK directory ‘xxx’ does not exist,如下

Action

到專案根目錄/android/ 找 local.properties 檔案,如果沒有就建立一個。

接著開啟該檔案並查找sdk.dir,確認sdk.dir是否正確對應到已安裝的Android SDK path。

Result

該錯誤不再出現

分類
Web

[Web] 強化 ASP.NET Web Form 網站安全性 Content Security Policy(CSP) 和 HTTP Strict Transport Security(HSTS)

Situation

因為公司有和 2330 合作,2330 偶爾會稽核公司底下的外部網站。

這次輪到小弟負責維護的網站被稽核,抓出兩項安全性缺失分別為 CSP(Content Security Policy) 和 HSTS(HTTP Strict Transport Security)。

關於這兩項安全性問題可以從 https://www.ithome.com.tw/voice/130302 或自行Google看看。

簡單的說這兩項都和 HTTP 的 Header 有關,而透過強化 HTTP Header 設定可以有效的提升網站安全性。

Action

首先我們必須找出如何偵測網站的安全性,可以很簡單的在 https://securityheaders.com/ 輸入要測試的網址來檢測。

以下是檢測網站修改前的狀態

修改前檢測結果

如上圖可以看到 Strict-Transport-Security / Content-Security-Policy / X-Frame-Options / X-Content-Type-Options / Referrer-Policy / Permissions-Policy 都是不合格的。

如果你使用的剛好是 ASP.NET 的 Web Form,可以很簡單的透過設定 web.config 來強化安全性。

請打開 web.config 並在 <customHeaders></customHeaders> 輸入下列設定

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="no-cache" />
                <!-- Try your URL in this Scen WebSite : https://securityheaders.com/  -->
                <!-- Good Solution ref https://blog.elmah.io/improving-security-in-asp-net-mvc-using-custom-headers/ -->
                <!-- 1. Enable HSTS (HTTP Strict Transport Security) -->
                <!-- ref : https://sdwh.dev/posts/2020/10/Cyber-Security-Web-Config-Configuration/#Contentt-Security-Policy-CSP  -->
                <!-- Hide Server Information -->
                <remove name="X-Powered-By" />
                <remove name="X-AspNetMvc-Version" />
                <!-- Referrer Policy -->
                <add name="Referrer-Policy" value="No-referrer-when-downgrade" />
                <!-- Anti-Clickjacking-->
                <add name="X-Frame-Options" value="DENY" />
                <!-- Anti-XSS for IE -->
                <add name="X-Xss-Protection" value="1; mode=block" />
                <!-- HSTS -->
                <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
                <!-- 1. Enable HSTS (HTTP Strict Transport Security) -->
                <!-- 2. Enable Http Header Content Security Policy(CSP) -->
                <!-- ref :https://stackoverflow.com/questions/35851651/content-security-policy-in-asp-net-webforms  -->
                <add name="Content-Security-Policy" value="default-src 'self'" />
                <!-- 2. Enable Http Header Content Security Policy(CSP) -->
                <!-- 3. Enable X-Content-Type-Options -->
                <!-- ref : https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff -->
                <remove name="X-Content-Type-Options"/>
                <add name="X-Content-Type-Options" value="nosniff"/>
                <!-- 3. Enable X-Content-Type-Options -->
                <!-- 4. Enable Permissions Policy -->
                <!-- ref https://blog.elmah.io/improving-security-in-asp-net-mvc-using-custom-headers/ -->
                <add name="Permissions-Policy" value="accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" />
                <!-- 4. Enable Permissions Policy -->
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


Result

更改完成後再到 https://securityheaders.com/ 重新檢測,結果如下,完成 Header 的安全性設定


分類
工作哲學 書摘

[書摘] 原子習慣:細微改變帶來巨大成就的實證法則

若說大多數成功人士共通的要素是什麼,我想好習慣絕對是其中之一好習慣很重要,但要保持好習慣也很困難

很多人以短暫的衝勁,熱情來激勵自我。常見的說法就是『今年要減肥』,『這禮拜要戒菸』。

另一些人會製作計劃表,期許透過嚴謹且完美的計畫,達成目標。

可惜,熱情抵不過人性,計劃趕不上變化

好習慣的養成真的如此困難嗎?

在《原子習慣》中作者以行為學為基礎,提出四大法則與實際例子來說明如何保持好習慣,戒除壞習慣。

培養習慣的四大法則為 ”明顯的提示”,”吸引的習慣”,”簡單的行動”,”滿足的獎賞”,具體來說

  • 明顯的提示:建立週遭提示及環境因素來養成習慣
  • 吸引的習慣:藉由模仿目標和正面心態來養成習慣
  • 簡單的行動:依據簡化步驟的行動因素來養成習慣
  • 滿足的獎賞:透過立即賞罰和問責機制來養成習慣

特別是最後一章 “如何從A到A+“,詳細說明如何在養成好習慣之後持續精進,更是推薦給想更上一層樓的讀者們。

今年又快到尾聲,各位朋友還記得您的今年新希望嗎? 若不想讓每年的新希望無限輪迴,請仔細,好好的閱讀本書。

方格子 – 同步發文

Matters – 同步發文

分類
Uncategorized

[Delphi] 使用 OutputDebugString 輸出訊息

Situation :

在某些情況下無法或不想使用 ShowMessage 來輸出訊息,其實還可以選用 OutPutDebugString 來輸出訊息。

Action :

調用 OutputDebugString 方法,如下

OutputDebugString(PChar('call outputdebugstgring to output message'));

記得要呼叫 PChar 處理要輸出的內容!

輸出的視窗在 Delphi -> View -> Debug Windows -> Event log

Result :

在 Event Log 視窗會出現想要輸出的訊息

分類
工作哲學 書摘

[書摘] 大局思維 : 教你如何放大格局、掌握關鍵,達成最有利的職涯擴張目標

當我們胸懷大志,勇往直前時,最大的阻礙往往來自本身或他人的非理性思考。這些非理性思考常讓人自我懷疑,中途放棄。

要如何免於自我設限的思維?

大局思維透過行為科學揪出人們的非理性思考並透過一步步設定具體目標和規律步驟達成自我理想的實現,翻轉人生

大局思維可以分為六大面向

1.目標:透過自我認知確定目標方向

2.時間:利用時間檢查規劃步驟時程

3.內在:尋找內在認同消除認知偏誤

4.外在:發現外在回饋避免偏見影響

5.環境:改變環境結構增加任務效率

6.韌性:強化個人韌性克服挫折壓力

六大面向的具體內容說明和行為科學實證

目標

首先我們必須先了解自我,探討自我的本質來確定未來目標

時間

把未來目標分割成小型步驟排定這些步驟的優先順序

內在

執行步驟的過程中,第一個阻礙就是自我認知偏誤,必須透過尋找內在認同來解除自我認知偏誤。否則這種偏誤會不斷地讓我們自我懷疑而打消念頭,中斷計畫。

外在

第二個阻礙就是來自其他人的外在偏見,如性別,種族等等根深蒂固的概念。也有可能是他人對我們自己的不了解所做出的判斷。我們必須主動發現並消除外在偏見。

環境

第三個阻礙為環境的具體條件或限制,適度改善這些限制,對於執行步驟的效率也有相當程度的幫助。

韌性

在通往目標的路上不可能一帆風順,我們必須強化韌性不被挫折打倒,以面對大大小小的困難。

本書作者 Grace Lordan 為倫敦政經學院教授,不僅專職於行為科學,也結合科學研究和自身經驗改變其生涯低潮。

如果想放大格局,穩定朝向理想目標前進,本書絕對是必須參考的著作之一。

方格子 – 同步發文

Matters – 同步發文

分類
小技巧

[小技巧]查詢 Windows 上所有的共享資料夾

第一個方式是透過指令
1.按下win-Key 輸入cmd
2.輸入 net state
3.觀察輸出視窗的項目,若有資料夾加上特殊路徑的項目通常就是共享資料夾,另一個觀察點在項目的說明欄位,這個說明欄位是對應設定共享資料時的註解,預設為空白
 
另一個查詢共享資料夾方式是透過檔案總管
1.開啟檔案總管
2.點擊左側的網路並雙擊自己的電腦名稱
3.在自己的電腦名稱顯示的資料夾就是共享資料夾 

分類
Telerik

[Telerik] The control with ID ‘xxx’ requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

Situation

在.aspx 宣告 telerik:RadAjaxManager 前未先建立 telerik:RadScriptManager
Source Code 如下

    <!--RadScriptManager應該在RadAjaxManager前建立
    <telerik:RadScriptManager ID="RadScriptManager_Main" runat="server">
    </telerik:RadScriptManager>
    -->
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadButton1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadLabel1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>

Action

在建立telerik:RadAjaxManager之前先建立telerik:RadScriptManager

    <telerik:RadScriptManager ID="RadScriptManager_Main" runat="server">
    </telerik:RadScriptManager>
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadButton1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadLabel1" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>

Result

不再出現
The control with ID ‘RadAjaxManager1’ requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

分類
Script

[Script] 搜尋具有指定內容的檔案

Situation

在Command line 想搜尋具有指定內容檔案

Action

有兩個做法
1.
grep -inr “要搜尋的內容” ./src
note: ./src 表示要搜尋的路徑
2.
grep -R -win –include=’*\.java’ ” * | grep ‘specify context in .java’

Result

列出具有指定內容的檔案清單