2021-02-25

tomcat 使用特殊字元網址或參數,造成400 bad request錯誤訊息

tomcat 使用特殊字元網址或參數,會造成400 bad request錯誤訊息,即使在web.xml設置error-page也無法禁止顯示系統報告(想不透...),需更改 server.xml,在<Host>加入:

<Valve className="org.apache.catalina.valves.ErrorReportValve" errorCode.0="conf/error.html" showReport="false" showServerInfo="false" />

其中 errorCode.0代表所有錯誤訊息,error.html 選擇使用$CATALINA_BASE相對路徑放在conf/error.html

ref:

https://stackoverflow.com/questions/794329/disable-all-default-http-error-response-content-in-tomcat

http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve

2021-02-19

新專案上git時的必要前置設定

一、先產生.gitignore再做git init
例如你用的是netbeans的話,可以裝gitignore plugin或到這個網站,在專案的根目錄產生適合的.gitingore檔案,把不需要做版本控制的檔案(如build, dist等資料夾)排除。
可參考以下更詳細的.gitignore說明:
https://www.pluralsight.com/guides/how-to-use-gitignore-file
https://git-scm.com/docs/gitignore


二、設定gitconfig:
若一個專案的開發人員,不同人有著不同的OS平台,那麼 ~/.gitconfig (個人設定) 或 .git/config (專案設定,會覆蓋個人設定) 務必設定filemode = false及ignorecase = true

[user]

        email = username@yourmail.com

        name = username

[core]

        filemode = false #windows跟linux/macos開發者避免檔案權限錯誤訊息

        ignorecase = true #windows跟linux/macos開發者避免大小寫錯誤訊息

        autocrlf = false #false為不要自動轉換作業系統間的CRLF斷行,應以編輯器設定斷行字元。若設為input則checkout時會自動依平台轉換斷行,但commit時在linux/win一律為LF,在mac為CR



三、設定 .gitattributes
還要在repo的根目錄新增一個 .gitattributes 才解決跨平台換行(crlf)的衝突問題:

* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
四、再做第一次的commit:
git commit -a -m "first commit, good luck!"

2021-01-21

iItelliJ 設定PHP XDEBUG環境

 一、安裝composer、php-cgi(注意,必須是cgi,不能用cli或fpm)、php-xdebug
sudo apt-get install php-cgi php-xdebug
sudo curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chown root.root /usr/local/bin/composer
sudo chmod 755 /usr/local/bin/composer

二、修改xdebug設定
sudo vi /etc/php/7.2/cgi/conf.d/20-xdebug.ini
加上
xdebug.remote_enable=1

php-cgi --version //須出現xdebug字眼
with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans

三、chrome或firefox安裝xdebug plugin
https://www.jetbrains.com/help/idea/2020.3/browser-debugging-extensions.html
擴充功能選項的IDE Key選擇PHPSTORM

四、修改IntelliJ的language & frameworks / PHP 設定
新增 /usr/bin/php-cgi

五、執行選單 Run / Web Server Debug Validation,看是否能正常debug

若使用intellij內建的web server + php-cgi,可能會沒有$_SERVER['SERVER_NAME'] 造成無法正常透過瀏覽器debug,下面的ref有解法但不一定有用,似乎是intellij的bug,似乎還是得換成nginx或apache才能解決,若用外部server,須到 language & frameworks / PHP / Servers及build,excution,deployment->Deployment去新增對應的server


ref:
https://www.jetbrains.com/help/idea/2020.3/configuring-xdebug.html
https://www.jetbrains.com/help/idea/2020.3/zero-configuration-debugging.html
https://youtrack.jetbrains.com/issue/WI-54542
https://stackoverflow.com/questions/23344106/php-storm-debugging-creates-empty-server-definitions
https://www.cnblogs.com/Renyi-Fan/p/9117895.html

2020-11-19

macos從El Capitain (10.11)升級到Mojave (10.14)

 用El Capitain撐了許久,不升級也不行了,一堆軟體或外掛套件的更新都要求要新一點的OS版本,像homebrew或VSCode一堆套件都要新的作業系統library才有辦法compile & install。

升級時注意事項:

1.先重置nvram跟smc再升級,不然很有可能升級過程中卡住,要是真的卡住就強制關機,再用command+r重裝。

2.重新安裝XCode及command line tools for xcode
https://developer.apple.com/download/more 下載即可,注意mojave支援的XCode最高版本為11.3.1,安裝Xcode前先把舊的Xcode刪掉再複製新的過去,不然會卡很久。

3.homebrew的話,先brew update-reset & brew update,重置repo資料庫,然後brew doctor看看有沒有什麼問題,有些已經不存在formula的可以 brew uninstall --force package-name & rm -rf /usr/local/Caskroom/package-name。

4.java的話,決定先移除oracle java,改安裝openjdk:

brew remove --ignore-dependencies java
brew remove --ignore-dependencies java8

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Java
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.8_xxx.jdk

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk/openjdk/adoptopenjdk8
brew cask install adoptopenjdk/openjdk/adoptopenjdk11

brew install jenv
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
<重開command window>
jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
jenv global 1.8 或 jenv global 11 設定其中一個預設java版本

ref:
https://www.java.com/zh-TW/download/help/mac_uninstall_java.html
https://www.jenv.be/
https://github.com/AdoptOpenJDK/homebrew-openjdk

2020-11-02

Ubuntu 18 + Nvidia 顯卡螢幕撕裂(screen tearing)問題

什麼叫screen tearing:




解決方法:

  1. 安裝nvidia-settings
    sudo apt-get install nvidia-settings

  2. 打開NVIDIA X Server Settings後,選擇左邊X Server Display Configuration/Advanced...,把Force Composition Pipeline或Force Full Composition Pipeline個別其中一個打勾試試

  3. 記得按Save to X Configuration File儲存設定到 /etc/X11/xorg.conf

  4. 選擇左邊nvidia-settings Configuration,按右邊Save Current Configuration儲存設定到 ~/.nvidia-settings-rc

如果是像在瀏覽器chrome上看影片的話,瀏覽器的硬體加速選項可能也要調整:
https://www.lifewire.com/hardware-acceleration-in-chrome-4125122


ref:
https://askubuntu.com/questions/1170247/how-do-i-solve-screen-tearing-on-ubuntu-18-04-with-nvidia

2020-05-01

Ubuntu上用Android手機作為Webcam


讓手機變webcam且支援跨平台/USB的目前找到這二套:

DroidCam: http://www.dev47apps.com/
Iriun WebCam: https://iriun.com/

因為我是要安裝在Ubuntu上,一開始是試iriun卻怎麼試也不成功,後來改用DroidCam就沒問題了。

安裝工具(Android Debug Bridge, gcc...等)
sudo apt-get install adb gcc make linux-headers-`uname -r`

安裝DroidCam:
wget https://www.dev47apps.com/files/linux/droidcam_latest.zip
unzip droidcam_latest.zip -d droidcam && cd droidcam
sudo ./install
lsmod | grep v4l2loopback_dc #檢查是否有掛上 v4l2loopback_dc 模組

(另外也有提供DKMS方式安裝,避免每次kernel更新後又要重新安裝droidcam client)

安裝webcam測試用GUI:
sudo apt-get install qv4l2

Android 5.0以上可以直接在Play Store安裝DroidCam
Android 4.x可以在這裡下載APK安裝。

手機安裝DroidCam後,記得在手機的「開發者人員選項」開啟「USB 偵錯模式」,
然後用USB連接手機跟電腦,再下指令看看找不找得到Android設備:
adb devices

如果出現 no permissions 之類的訊息,那麼就要加入udev rules了,讓一般使用者也能access到手機,先找出Android設備的id:
lsusb

找到手機的設備id為 18d1:4ee7:
Bus 001 Device 010: ID 18d1:4ee7 Google Inc.

新增udev rules:
sudo vi /lib/udev/rules.d/70-android.rules
=======
加入以下內容(注意依自已的設備id修改,如果有多台設備就多行):
SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",ATTRS{idProduct}=="4ee7",MODE="0666"
=======
然後重新載入udev rules:
sudo chmod 644 /lib/udev/rules.d/70-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger

重新插拔USB,再下 adb devices,確定可以找到裝置後,執行手機上的DroidCam,
再在電腦上執行 droidcam ,選擇USB並點擊Connect,
再執行 qv4l2,看看能不能看到手機上的視訊影像。

預設解析度是640x480,如果覺得解析度不夠高,也可以修改解析度(要先付費升級手機上的APP,否則即使電腦解析度調高也會像上了馬賽克),譬如先測看看720P:
sudo rmmod v4l2loopback_dc
sudo insmod /lib/modules/`uname -r`/kernel/drivers/media/video/v4l2loopback-dc.ko width=1280 height=720

如果確定修改解析度後顯示正常,可以直接修改 /etc/modprobe.d/droidcam.conf
這樣每次使用就會固定為修改後的解析度,
目前支援 640×480, 960×720, 1280×720 (720p), 1920×1080 (1080p).

要移除的話執行 sudo /opt/droidcam-uninstall 即可

ref:
http://www.dev47apps.com/droidcam/linuxx/

2020-04-29

安裝全字庫字型 & CNS11643 輸入法

安裝全字庫字型、cns11643 fcitx table:
sudo apt-get install fonts-cns11643-kai fonts-cns11643-sung fcitx-table-cns11643

TW-Kai-98_1.ttf         (第0/BMP字面)
TW-Kai-Ext-B-98_1.ttf   (第2字面)
TW-Kai-Plus-98_1.ttf    (第15字面)
TW-Sung-98_1.ttf        (第0/BMP字面)
TW-Sung-Ext-B-98_1.ttf  (第2字面)
TW-Sung-Plus-98_1.ttf   (第15字面)

(字型單獨下載:http://www.cns11643.gov.tw/AIDB/Open_Data.zip)

譬如要輸入「𪇅」這個字,查到CNS其碼表為11-446F:
https://www.cns11643.gov.tw/wordView.jsp?ID=738415

那麼就輸入「b446f」就能輸入「𪇅」這個字(16進位,a代表10,b代表11,以此類推)

另外像「󺞏」這個字要是無法在瀏覽器正常顯示,是因為瀏覽器(Chrome為例)不接受字碼在unicode第15字面的碼表(因為瀏覽器認為CJK字碼不應在私人造字區,只接受在BMP及第2字面的CJK中文):
https://www.cns11643.gov.tw/wordView.jsp?ID=739639

因此可以在瀏覽器的字型設字中,將「標準字型」設定為「全字庫宋體 Plus」或「全字庫楷體 Plus」,這樣瀏覽器就會第一個以該字型去尋找是否有對應字碼,但缺點是字形就是看起來不統一。

像WIN10的內建中文字型已有支援unicode第0面、第2面,除非罕見字不在其中,才需要去裝全字庫字型 (TW-Kai-Plus-98_1.ttf 或 TW-Sung-Plus-98_1.ttf )

ref:
https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC%A6%E5%B9%B3%E9%9D%A2%E6%98%A0%E5%B0%84
https://www.cns11643.gov.tw/downloadList.jsp?ID=1