2015年10月15日 星期四

使用 Firefox 瀏覽器測試 DNS Round Robin 的方式

關於 DNS round robin 得設置可以把 ttl=0 來方便測試,單純測試 DNS record 有沒有正常顯示,可以單純不斷用 ping 查看 ip address 即可:

$ ping test.domain.name

接著想驗證 server site 有沒有 session 相關的問題,單純用 wget/curl 也可以啦,但如果有一些圖片資料是跟 session 有關的(例如驗證碼,產生的來源資料一樣,但輸出每次都不一樣),這時又頭痛了一下 XD 原先一直想用 Chrome browser,但最後反而跑去用 Firefox! 測試 DNS round robin 是否正常!

首先要驗證 web service 跟 dns round robin 的方式,必須先把 http client 關掉 keep-alive 機制,以 firefox 來說,就是在網址列輸入 about:config 後,搜尋 keep 關鍵字就能找到 network.http.keep-alive.timeout ,把它設成 0 即可,但千萬不要把 network.tcp.keepalive.enabled 設成 false ,那會導致上述的所有設定都無效 XD

接著問題就降低成 DNS round robin 的事了,嗯,沒有最佳解,因為 DNS round robin 本來就沒有每一次 requests 都配置不同的 IP,所以為了提升測試效率,只好自行去寫死 /etc/hosts 等類似的位置了 XD 雖然小蠢,但還是堪用啦。總之,最重要的是要先把 http client 的 keep-alive 關掉才能測試。

2015年10月13日 星期二

iOS 開發筆記 - 處理 Simulator 上 Keyboard 沒顯示的問題

原來 iOS 8 Simulator 操作習慣改了,預設對應到實體鍵盤,若需要顯示虛擬鍵盤有兩種方式:
  1. iOS Simulator -> Hardware -> Keyboard -> 取消 Connect Hardware Keyboard
  2. 在 iOS Simulator 操作環境上,使用快速鍵呼叫:shift + command + K

2015年10月12日 星期一

APC Back-UPS ES 500 / BE500TW 電池規格

APC Back-UPS ES 500

在 2009 年秋天買了一台 UPS 把玩,如今 6 年了,前陣子買了台立燈給他插上去,正逢颱風停電倒變成另類的用途 XD 由於習慣出門還是把它當延長線關掉,最近開啟時會出現長叫聲,雖然一開始經過幾次反覆開關可以避開,如今卻也無解了 XD 只要翻翻使用手冊啦

Troubleshooting and Battery Replacement:http://www.apcmedia.com/salestools/ASTE-6Z7V8R/ASTE-6Z7V8R_R0_EN.pdf?sdirect=true

原先想說電池很重要,上個官網買好了,但...沒有台灣 XD 翻出電池想找 spec 倒是一直沒找到,最後才發現被陰了,原因是被貼子蓋掉啦!

這幾年跟越南真有緣 :P 總之,上個露天逛一下,應該加運費 400 可搞定。

規格紀錄一下:

  • 12V 7.2AH
  • 長 151 mm、寬 651 mm、高 94 mm,總高 97mm

2015年10月6日 星期二

[PHP] 處理 PHP CodeIgniter 與 apache web server、nginx 的 Rewrite Rules

之前比較常用 Apache Web server ,在使用 PHP CodeIngiter 時,常常設定 Rewrite Rules 時,需要做一些手腳,例如:http://hostname/ci 想要瀏覽到 PHP CodeIgniter Project,而 ci 這個並非實體目錄,且 PHP CI Project 並非擺在 DocumentRoot 裡,這時就有很多環境變數需處理。

由於要符合 PHP CodeIgniter 的 routing rules,必須把 /ci 這個 path 給去掉,在 Apache Web server 透過 RewriteBase 處理,而 Nginx 又更麻煩一點,需處理 fastcgi_param REQUEST_URI 跟 fastcgi_param SCRIPT_FILENAME 資訊。

Apache 的設定:

Alias /ci /data/ci-project
<Directory /data/ci-project>
       Options FollowSymLinks
       DirectoryIndex index.php
       AllowOverride None

       Require all granted
       <IfModule mod_rewrite.c>
               RewriteEngine On
               RewriteBase /ci

               RewriteCond %{REQUEST_URI} ^system.*
               RewriteRule ^(.*)$ /index.php?/$1 [L]
 
               RewriteCond %{REQUEST_URI} ^application.*
               RewriteRule ^(.*)$ /index.php?/$1 [L]

               RewriteCond %{REQUEST_FILENAME} !-f
               RewriteCond %{REQUEST_FILENAME} !-d
               RewriteRule ^(.*)$ index.php?/$1 [L]
       </IfModule>
</Directory>


Nginx 設定:

        set $request_prefix '/ci/';
        set $ci_sys_dir '/opt/actions-channel-api/';

        location /ci/ {
                alias $ci_sys_dir;
                index  index.php index.html index.htm;

                try_files $uri $uri/ /ci/index.php?$query_string;
        }
        location ~* \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                include fastcgi_params;

                set $target_request_uri $request_uri;
                if ($target_request_uri ~ ^/ci/(.*)$ ) {
                        set $target_request_uri /$1;
                }
                fastcgi_param REQUEST_URI $target_request_uri;

                set $target_fastcgi_script_name $fastcgi_script_name;
                if ($target_fastcgi_script_name ~ ^/ci/(.*)$ ) {
                        set $target_fastcgi_script_name $1;
                }
                fastcgi_param SCRIPT_FILENAME $ci_sys_dir$target_fastcgi_script_name;
        }


其他 Nginx 筆記:

  • alias 的數值記得要補上最後的 "/" ;alias 跟 root 的最大差別是 alias 的位置不需要在 document root  裡頭
  • 在 try_files 流程中,一旦符合條件後,就不會再執行該 nginx location 底部項目,因此還是把 php handler 拉到最外層,而不要全部都寫在 location /ci/ 此區塊裡頭
  • nginx 可定義很多環境變數,若想要看它就寫到 log 即可:
    • http {
          log_format proxy ' "$request"  "$status"  "$http_referer"  "$http_user_agent"  $request_time  $upstream_response_time "$ci_sys_dir" "$target_fastcgi_script_name"  "$target_request_uri"  '
      }

2015年10月4日 星期日

iOS 開發筆記 - 修正 Launch Image 失效問題

LaunchImage
換了 Xcode 7.0.1 後,想說認真一下填滿 Images.xcassets 中的 LaunchImage,但始終沒有成功,總覺得一直讀取 Storyboard 的資料!

最後終於搞懂了,記得清空 Launch Screen File 欄位就沒問題啦。

若有碰到 ERROR ITMS-90475 iPad Multitasking support 的問題,再到 info.plist 塞入:

<key>UIRequiresFullScreen</key>
<string>YES</string>


即可解決。