Images

Google Chrome 63存取.dev網域強制使用HTTPS

前陣子一直困擾我的問題

明明本機的開發環境沒有設定錯誤卻一直連不到網站

但換個瀏覽器(從Chrome改用Firefox)或是掛上SSL使用HTTPS就可以

其實以前也有發生過,後來換個網域名稱就可以所以就沒有深究原因了

原本我的開發環境的網域名稱是:

myweb.dev

基本上在開發環境中我不常使用HTTPS,照裡來說用以下的URL應該要可以連到:

http://myweb.dev

實際上確不行,而且Chrome會擅自幫我導到

https://myweb.dev

經過幾次測試後我發現一個輪廓

Chrome + HTTP (X)

Chrome + HTTPS(O)

Firefox + HTTP (O)

Firefox + HTTPS (O)

wget + HTTP (O)

從以上的測試結果來看應該可以確定是Chrome的問題

其實,從Google Chrome 63開始會強制將.dev網域的網站導入https存取

如果你使用Google Chrome連到http://xxx.dev,Chrome會強制幫你導到https://xxx.dev

source code

至於為何會有這樣的機制?其實就是為了防止中間人攻擊的駭客手法

有興趣更深入瞭解的話可以搜尋一下HSTS

 

解決方案

1.放棄使用.dev domain改用.lh或.localhost

2.到chrome://net-internals/#hsts > Delete domain security policies 輸入你的開發網域 ex: myweb.dev 刪掉它

 

參考來源:

Chrome & Firefox now force .dev domains to HTTPS via preloaded HSTS

Preload HSTS for the .dev gTLD

Advertisements

[GNOME] putting your application in the menus

這類型的Menu呈現方式,是我愛用GNOME的原因之一

但如果要將自己的application加入到這個menu要怎麼做呢?

身為一個開發者經常需要執行各種程式,有些常用的程式我會希望可以放在menu中

那麼,要如何將程式放在menu中呢?

首先,你需要寫一個GNOME desktop file,內容看起來會像是這樣:

[Desktop Entry]                                                                                                                        
Encoding=UTF-8
Name=MyApplication
Exec=/home/tony/an-executable-file 
Icon=/home/tony/a_icon.png
Terminal=false
Type=Application
  1. [Desktop Entry] 基本上每個gnome desktop file的第1行一定要是這個
  2. Encoding 設定這個desktop file實際的編碼
  3. Name application的名稱
  4. Exec 你希望這個application執行的檔案
  5. Icon application的圖示
  6. Terminal 是否要在terminal中執行
  7. Type 告訴gnome這個desktop file是一個application,也可以是Link or Directory

完成後,我們可以將這個desktop file放在以下兩個路徑其中一個:

放在系統目錄下,可以讓每個使用者都能看見

/usr/share/applications

或是放在家目錄,只有自己可以看見

~/.local/share/applications

 

參考來源:

https://developer.gnome.org/integration-guide/stable/desktop-files.html.en

[Debian]升級Debian 9後無法使用觸控版

趁這週末有空趕緊把我的筆電從Debian 8升到Debian 9

升級的過程都還算滿順利的,但升級後觸控版沒辦法使用

稍微查了一下發現是因為Debian 9預設改用新的 libinput driver

雖然它不支援一些舊的driver提供的功能

但如果你的筆電是新的應該就沒有這個問題

解法1:

直接把舊的driver移除

sudo apt-get remove xserver-xorg-input-synaptics

解法2:

sudo mkdir /etc/X11/xorg.conf.d
sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d

以上兩種方式都需要重新登入才會生效

雖然這兩種都可以解決觸控版無法正常使用的問題

但我比較建議使用解法1畢竟synaptic Xorg會漸漸被libinput取代

直接移除掉以後升級應該就不會遇到類似的問題了

 

參考來源:

https://wiki.debian.org/SynapticsTouchpad#Debian_9_.22Stretch.22

[PHP] 為什麼應該使用MySQL Native Driver(mysqlnd)來取代MySQL Client Library(libmysqlclient)

還記得以前第一次自己架設LAMP開發環境的時候,就已經注意到安裝有這兩個package了

但那時候還不曉得有何差別,只記得書上叫我裝php5-mysql就照著裝XD

前陣子碰到一個需要安裝mysqlnd才能解決的問題,正好趁這個機會來瞭解一下差別

MySQL Native Driver is a replacement for the MySQL Client Library (libmysqlclient)

在PHP文件的myslqnd章節內一開頭就說明了mysqlnd是用來取代libmysqlclient

為何PHP官方會建議使用mysqlnd?

 

mysqlnd是屬於PHP Project的一部份

不像libmysqlclient是使用MySQL license,mysqlnd是使用PHP license這也避免了一些因為license所衍生的問題(看看前陣子Oracle告Google的新聞就知道為什麼了!)

mysqlnd的功能比libmysqlclient還多

從PHP 5.3.0開始mysqlnd library 已經是內建在PHP的library,mysqlnd提供的一些功能像是query caching、lazy connections、SSL這些在libmysqlclient的沒辦法用的

詳細差異請參閱Library feature comparison

mysqlnd的效能比libmysqlclient還好

由於mysqlnd是用C寫的PHP extension,所以它是使用PHP memory management system也支援PHP memory limit和memory_get_usage(),安裝mysqlnd可以使用memory_get_usage()來追蹤記憶體的使用情形,而是在libmysqlclient是不可能的,因為libmysqlclient要使用C語言的function malloc(),在官網有舉一個例子

One example of the memory efficiency is the fact that when using the MySQL Client Library, each row is stored in memory twice, whereas with the MySQL Native Driver each row is only stored once in memory.

libmysqlclient在儲存每一筆資料row到memory的時候會存兩次

而mysqlnd只會存一次

 

參考來源:

http://php.net/manual/en/mysqlnd.overview.php

http://php.net/manual/en/mysqlinfo.library.choosing.php

http://php.net/manual/en/intro.mysqlnd.php

https://dev.mysql.com/downloads/connector/php-mysqlnd/