分類
程式技術

網頁為什麼會發兩次request到自己

這個是相當困難的一個題目…..

話說在 debug 一個 asp.net project 時, 因為會用到 session 內的 counter 做一些事情, 結果在測試的時候發生了一個很奇妙的狀況, counter 會無故多 +1

仔細檢查 asp.net 的程式碼, session 內的 counter 一次只有加一, 是寫在 Page_Init 這個 event 裡. 理論上沒有理由會多 +1, 雖然是用 master page 的方式處理, 也沒有理由在這個狀況下發生問題. 於是進行獨立測試, 發現即使沒有使用 master page 也是一樣. 所以初步排除和 master page 有關.

接下來 check iis log來對照, 果然有發出兩次 request 的狀況, 而不是 asp.net code 內的問題, 這樣問題說明應該是在 client side 端, 所以乾脆用 client 端來查, (利用 firefox 的 firebug 發現還真的會對該頁面發出兩次 request. 真的太神奇了, 於是再將該頁面存成 html 來查, 再做一次測試, 整個還是一樣的結果, 於是只好拿出區塊區塊刪除的方式來查… 花了超久時間… 發現結論問題在一行:

<img src="" width="242" height="182" alt="" />

有沒有看到什麼狀況? 就是 src=”” 這件事, 他讓 client 去多訪問了沒有設定的 img src 也就是本頁, 又或是 src=# 也是一樣的結果啦!!

所以這個到底要怎麼說呢, 唉, 反正就是很悶的一個無敵怪 bug…. 還好有找到咧, 給大家做參考!!

繼續閱讀:
http://www.johnbatdorf.net/blog/CommentView,guid,5aebd6b0-9be3-462c-a920-e19998bc173e.aspx
http://blog.csdn.net/vividboy/archive/2007/09/13/1783162.aspx

為了增加一些 page view, 多上一個英文的描述, why page load twice in ASP.NET or why page fire twice page_init event (雖然和 asp.net 一點關係都沒有, 哈哈)

分類
程式技術

如何利用CSS不要出現SCROLLBAR

今天在弄一個小網頁, 有個比較特殊的需求是不要出現在 browser 右邊的 scrollbar, 而且是 disabled 狀態的 scrollbar 都不要出現.

查了一下, 其實很單純, 直接使用 overflow: hidden 屬性放在 body 上就可以很容易做到這個需求. 參考這個範例: http://sample.diary.tw/15/1.htm

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
    body {
      overflow: hidden;
    }
    </style>
  </head>
  <body>
  這是內文..
  </body>
</html>

不過, 其實也有另一種需求是反過來的, 就是使用 overflow: auto 的 div 區塊, 一般我們若是在要畫面上出現一個含有 scrollbar 的區域用來顯示一些內容時, 就很方便, 我們可以參考這樣的一個範例: http://sample.diary.tw/15/2.htm

<div style="width: 190px; height: 190px; overflow: auto; background: pink;">
內容.....
</div>

範例內藍色底的部分區塊是未下 overflow: auto; 的屬性, 所以內容若是超出的話, 就會超出, 而下方紅色底的部分區塊則是使用了 overflow: auto; 的屬性, 所以超出的內容自動會出現scrollbar, 而方便排版及呈現, 這是在處理 body 不要出現右側 scrollbar 時也一併查到的資料:
http://apptools.com/examples/scroller.php

RegExp物件的group元素取出方式

真的很妙……

這篇是要說明 RegExp 在 VBScript (WShell, ASP皆同) 內使用的狀況, 今天正在解決一個解析指令的語法, 想說利用 Regulare Expression 這個好物來處理一下, 結果真是令人不開心啊. 因為查了半天 msdn, 都沒有找到將 group 元素取出的方式, 所以整個就是失落(因為明明就應該是有方法可以取出來才對). 查到的文件在這裡:

http://msdn.microsoft.com/en-us/library/ms974570.aspx

想說怎麼會沒有這個語法呢? 真的是太奇怪了. 於是再到 google 另外查了一下, 發現其實還有個 SubMatches 的 collection 啦, 原來如此, 這個才是真的拿到 group 元素的方式, 想來真的是自己沒有仔細查找清楚, 只能再做個筆記自己記錄一下.

msdn 其實是有資料的, 在這裡:

http://msdn.microsoft.com/en-us/library/y27d2s18(VS.85).aspx

好地, 回到主題, 簡單地說, 今天原來要做的需求很單純, 就是將一個控制指令中的各項參數取出, 如下:

control_[series]_batch_[bno]_target_[tno]_end

這樣的一個字串, 將其中的 [series], [bno], [tno] 取出來, for example, 像是這樣的一個指令:

control_276324_batch_23_target_14_end

要將其中的 276324 及 23 及 14 取出, 若是用 parse 的方式比較麻煩, 就是一個一個比對下去, 但用 RegExp 就方便了, 既能檢查 pattern, 又可以將參數一次取出, 一舉兩得, 接下來就著手來作業了, 程式碼如下:

strCmd = "control_276324_batch_23_target_14_end"

Set objReg = New RegExp
objReg.Pattern = "control_([0-9]+)_batch_([0-9]+)_target_([0-9]+)_end"
Set objMatches = objReg.Execute(strCmd)
If objMatches.Count > 0 Then
  series = objMatches(0).SubMatches(0)
  bno = objMatches(0).SubMatches(1)
  tno = objMatches(0).SubMatches(2)
End If

Set objReg = Nothing

若是指令(strCmd)是多組, 也可以一次都處理完成, 利用 objMatches(i) 來取得, 不過就是要將 objReg.Global 設為 True 就是了.

這樣就可以一口氣將 series, bno, tno 全數取得, 一方面檢查看指令是否符合 pattern, 一方面又可以將所需要的參數取出, 豈不快哉!?

分類
Windows 懶得分類

快速kill process的方式(Windows)

手邊剛好在處理一個大量 process 未結束於系統上的一個問題. 該 server 不知什麼原因, 在起動 cgi 程式時, 發生了這個現象, 偶發的不會自行結束, 於是在系統內就留下了許多該 process 的名稱. 利用 task manager 會看到大量的 process, 雖未佔用 cpu, 不過會吃掉一部分的記憶.

在不方便重開 server 的狀況下, 如何快速地將相同名稱的 process 一起刪除呢? 於是上網想查看看有沒有什麼方便的小工具可以做這件事. 結果很順利地找到系統內建的一個指令: taskkill

這個指令是給定要刪除的 pid 或 image name (就是執行檔名稱), 來進行 process kill 的動作. 簡單研究一下, 進行了測試, 效果相當不錯, 800多個 process 一下就刪完了, 使用的指令如下:

taskkill /IM mytest.exe /F

如此一來, 所有 mytest.exe 的 process 一口氣就被 kill 完成了.

另外有許多方便的參數可供使用, 詳情可以利用 taskkill /? 來取得說明, 列表如下:

TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

Description:
This tool is used to terminate tasks by process id (PID) or image name.

Parameter List:
/S system Specifies the remote system to connect to.

/U [domain\]user Specifies the user context under which the
command should execute.

/P [password] Specifies the password for the given user
context. Prompts for input if omitted.

/FI filter Applies a filter to select a set of tasks.
Allows “*” to be used. ex. imagename eq acme*

/PID processid Specifies the PID of the process to be terminated.
Use TaskList to get the PID.

/IM imagename Specifies the image name of the process
to be terminated. Wildcard ‘*’ can be used
to specify all tasks or image names.

/T Terminates the specified process and any
child processes which were started by it.

/F Specifies to forcefully terminate the process(es).

/? Displays this help message.

Filters:
Filter Name Valid Operators Valid Value(s)
———– ————— ————————-
STATUS eq, ne RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne Image name
PID eq, ne, gt, lt, ge, le PID value
SESSION eq, ne, gt, lt, ge, le Session number.
CPUTIME eq, ne, gt, lt, ge, le CPU time in the format
of hh:mm:ss.
hh – hours,
mm – minutes, ss – seconds
MEMUSAGE eq, ne, gt, lt, ge, le Memory usage in KB
USERNAME eq, ne User name in [domain\]user
format
MODULES eq, ne DLL name
SERVICES eq, ne Service name
WINDOWTITLE eq, ne Window title

NOTE
—-
1) Wildcard ‘*’ for /IM switch is accepted only when a filter is applied.
2) Termination of remote processes will always be done forcefully (/F).
3) “WINDOWTITLE” and “STATUS” filters are not considered when a remote
machine is specified.

Examples:
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI “PID ge 1000” /FI “WINDOWTITLE ne untitle*”
TASKKILL /F /FI “USERNAME eq NT AUTHORITY\SYSTEM” /IM notepad.exe
TASKKILL /S system /U domain\username /FI “USERNAME ne NT*” /IM *
TASKKILL /S system /U username /P password /FI “IMAGENAME eq note*”

給大家參考!

參考資料: XP: kill a Windows process from the command line with taskkill

分類
好用軟體

Firefox實用的佈景主題(縮小工具列)

在現在大螢幕的顯示器上似乎不是問題. 不過在小小NOTEBOOK上, Firefox 上面落落長的工具列(Toolbar)可就是很佔用可視空間的殺手咧.

這個Add-On名稱為Classic Compact, 其實直接看了就明白了, 很單純的目的, 就是把你的上面工具列(還包含了menu選單及分頁的頁籤, 就是FIRE上面整個能縮的都縮了)縮小, 節省的空間還蠻驚人的, 我們來比較看看, 使用前共高190px, 使用後共142px, 如下:

看起來真的節省不少高度上的空間, 尤其對於NOTEBOOK來說, 桌面大小是很侷限的狀況下, 能有效利用桌面的空間, 相對是很重要的, 這個Add-on相當值得使用!

官方網址: https://addons.mozilla.org/en-US/firefox/addon/3699

給大家參考看看囉!

PS. 不過對於使用Firebug的用家們提醒一下, 在下方的Firebug console是不會有任何變化的, 也不會變小!!

分類
懶得分類

使用google adsense for mobile content

好一陣子沒去看 google adsense 的獲利狀況, 今天心血來潮去看了一下, 發現多了個 adsense for mobile content, 因為 TatterTools 本來就有 mobile 的版本, 所以上 google adsense for mobile content 是不困難的事.

來看一下在 google adsense 新增的這個服務吧:

呈現的結果是這樣的:

於是進行申請並植入程式碼. 不過有趣的地方是在於他的程式碼和一般的 adsense for content 的 client side javascript 或 html code 是不同的, 他必須將 code 放在 server side code, 也就是在 server 上執行產出 html 供 mobile client 使用, 這個原因是因為大多數的 mobile client 對於 javascript 的支援性並不好, 而且也有相容性的問題, 所以必須使用這種方式來產生較相容的 html 供 mobile client 使用.

支援的 server side 程式語言目前共有4種, 分別為 php, perl, jsp及asp, 細項版本說明如下:
* PHP v4.3.0 或以上版本
* CGI/Perl v5.8 或以上版本
* JSP v1.2 或以上版本
* ASP 3.0 或以上版本

yam天空的Email信箱也用gmail平台了

今天登入了 Yam 天空的信箱, 發現這個公告:

原來他們已經改用gmail的平台做Email的服務了, 看起來原來免費的信箱也慢慢成為檢討的成本, 往 gmail尋求解決之道了. 不過和原來的介面完全不同(當然完全不同, 因為已經是gmail了啊), 所以其實就和gmail是一樣的, 只是左上角的logo不一樣而已. 這樣的狀況看起來對Yam天空來說也是節省了大量的server及維護的資源, 基本上應該也是件好事.

但是長得像 gmail 的 yam mail也有種怪怪的感覺呢!

相關閱讀:
Yam天空Email信箱改用Gmail平台了!
天空 yam 的新郵件系統也用 Gmail !!

分類
懶得分類

微軟將於Visual Studio整合jQuery進來了!!

最近的消息, 微軟將於Visual Studio嵌入jQuery這組Open Source的函數庫了. 可以參考下面文章連結: 微軟Visual Studio將嵌入開放源碼jQuery程式庫

jQuery, 有在寫 Web application的工程師應該不陌生, 好用又洗鍊的語法, 方便容易使用的方式, 整個和 Web UI 可以做相當方便結合的一組 library 最近因為微軟的這個消息, 對於之前投資學習 jQuery 的 developer 們來說, 真是個不錯的好消息.

當然, 無論是否於 Visual Studio 內嵌入 jQuery, 大家也都可以直接於 web application 上使用這組 library 沒有什麼大問題, 不過相信對於整合度及方便性來說, 能夠和 Visual Studio 整合當然是再好不過了.

不過和原來的 AJAX 那組 framework 要怎麼整合, 如何取捨, 或是同時並存也是一個有趣的課題. (據消息來說應該是會改用 jQuery)相信這個消息對於已經同時正在使用 asp.net 開發及 jQuery library 的 developer 來說真是個好消息呢.

相關文章及連結:
google blog search: link
微軟將在 ASP.NET 相關產品中全面支援 jQuery
jQuery进入微软和Nokia的解决方案
微軟也搶著支援jQuery?
jQuery從此有名有分,我出運了!

分類
PHP 懶得分類

好用php線上教學資料

今天朋友問到一個架站的問題, 發現他的網站留言不會寫入, 他大概檢查完後, 把錯誤訊息給我看了一下, 發現可能原因是寫入檔案的問題造成的錯誤. 於是朋友就說要是會寫程式就好了, 我便幫忙找一下看有沒有教學的資料.

php我最常用的就是官網了 (www.php.net), 便把這個資料給朋友看, 他說英文閱讀吃力, 我記得官網上有多國語的功能, 於是一邊找, 也發現了好資料, 就是 php 的入門資料, 而且還是中文版本的哦, 記錄下來給大家學習參考用囉: http://docs.php.net/manual/tw/getting-started.php

由於 php + mysql 真的有很多好用的架站軟體, 免費套件, 基於這些理由, 若有心想學好程式的人, 真的可以好好學學呢, 這篇資料給大家參考!

分類
Blog服務

簡便的線上問卷-google docs

從 urmap (www.urmap.com) 上的廣告 banner 看來的, 該問卷的連結在此: link

用 google 的 docs 內的功能做成的一個免費而又簡便的線上問卷統計, 他結合了原來在 google docs 內的 spreadsheets (也就是 ms office 中的 excel ), 並配合 ajax based 的線上問卷編輯器, 快速地達成製作問卷的功能, 詳細的操作可以參考狂人的這篇文章: Google Docs提供「網路問卷調查表」服務,3分鐘搞出一個問卷!

由於是結合 spreadsheets 的結構, 所以所有的問卷結果都會寫入一個 spreadsheets, 但又因為是可以共用及開放編輯的關係, 所以感覺上該 spreadsheets 很像是 “即時” 統計的一個結果頁面, 這個感覺很臨場感, 也就是問卷是上線後, 只要開著那個統計的結果, 就會一直有源源不絕的問卷回收進來了. 不過也得看放置的網頁流量啦.

另外統計的結果除了有上述的 spreadsheets 的 raw data, 也會有一個圖表式的統計結果, 方便原問卷製作人拿到巨觀統計的報表. 整體來說是相當方便好用的一個工具, 並配合上原來 google 的 docs 功能, 方便 share 共享等機能, 實在是不錯用.

當然, 若是站在 “問卷” 機能的角度上來說, 也有一些不足的地方, 例如灌票, 重覆, 還有選擇性的跳躍問題等功能, 不過整體來說是很好用了.

他也有嵌入的語法, 是利用 iframe 的方式, 其實就是單純的在一個 frame 內嵌入, 用法也相當容易, 該大家都能方便地使用線上問卷的功能.

那就來試一下站上的 user 問卷, 有興趣填的朋友也歡迎你留下足跡囉!

問卷連結… link

相關文章:
自訂 Google 問卷表單樣式
「教學」透過 Google Docs 製作免費的線上問卷系統
Google 也有好用的「網路問卷調查表」功能
利用 Google Docs 製作網上問卷