[心得]ASP.net 的For迴圈Bug

使用環境:Microsoft Visual Web Developer 2008 Express Edition
使用語言:ASP.net (Visual Basic)

我們好常用的For迴圈,一般來說是可以會更新終止值的(我暫時取叫  n  )
但在這裡出現了個很奇特的狀況,ASP.net 的For迴圈,終止值不會被更新

 

——————————————————————————————————————

在C語言裡,我們的For迴圈是由while所改良而成,寫法如下

int i, n;

n=10;

for(i=0;i<=n;i++)

{

        printf(“%d\n”, i);

}

以上大略的意思是,初始化 i 為0,若 i 還是小於或等於10的話,就繼續迴圈
執行完裡面的敘述後(就是印出 i 值),i  自己加1
如果用while寫,應該是長這樣子的

int i, n;

i=0;

n=10;

while(i<=n)

{

        printf(“%d\n”, i);

        i++;

}

——————————————————————————————————————

回到ASP.net (Visual Basic)裡,我寫了幾個測試程式,用好幾個按鈕來執行

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

        Response.Write(“測試 n 值變小<br>”)

        Dim i, n As Integer

        n = 10

        For i = 0 To n

            If i = 5 Then

                n = 8

            End If

            Response.Write(“i=” & CStr(i) & ”   “ & “n=” & CStr(n) & “<br>” & vbCrLf)

        Next

    End Sub

 

    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click

        Response.Write(“測試 n 值變大<br>”)

        Dim i, n As Integer

        n = 10

        For i = 0 To n

            If i = 5 Then

                n = 20

            End If

            Response.Write(“i=” & CStr(i) & ”   “ & “n=” & CStr(n) & “<br>” & vbCrLf)

        Next

    End Sub

 

    Protected Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click

        Response.Write(“測試 i 值變小<br>”)

        Dim i, n As Integer

        Dim flag As Boolean

        n = 10

        For i = 0 To n

            If i = 7 And flag <> True Then

                i = 0

                flag = True

            End If

            Response.Write(“i=” & CStr(i) & ”   “ & “n=” & CStr(n) & “flag=” & CStr(flag) & “<br>” & vbCrLf)

        Next

    End Sub

 

    Protected Sub Button4_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button4.Click

        Response.Write(“測試 i 值變大<br>”)

        Dim i, n As Integer

        n = 13

        For i = 0 To n

            If i = 2 Then

                i = 7

            End If

            Response.Write(“i=” & CStr(i) & ”   “ & “n=” & CStr(n) & “<br>” & vbCrLf)

        Next

    End Sub

 

    Protected Sub Button5_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button5.Click

        Response.Write(“測試 n 值變小(while版)<br>”)

        Dim i, n As Integer

        n = 10

        i = 0

        While i <= n

            If i = 5 Then

                n = 8

            End If

            Response.Write(“i=” & CStr(i) & ”   “ & “n=” & CStr(n) & “<br>” & vbCrLf)

            i += 1

        End While

    End Sub

 

    Protected Sub Button6_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button6.Click

        Response.Write(“測試 n 值變大(while版)<br>”)

        Dim i, n As Integer

        n = 10

        i = 0

        While i <= n

            If i = 5 Then

                n = 20

            End If

            Response.Write(“i=” & CStr(i) & ”   “ & “n=” & CStr(n) & “<br>” & vbCrLf)

            i += 1

        End While

    End Sub

 執行結果:

測試 n 值變小
i=0 n=10
i=1 n=10
i=2 n=10
i=3   n=10
i=4   n=10
i=5   n=8
i=6   n=8
i=7   n=8
i=8   n=8
i=9   n=8
i=10 n=8

測試 n 值變大
i=0   n=10
i=1   n=10
i=2   n=10
i=3   n=10
i=4   n=10
i=5   n=20
i=6   n=20
i=7   n=20
i=8   n=20
i=9   n=20
i=10 n=20

測試 i 值變小
i=0   n=10  flag=False
i=1   n=10  flag=False
i=2   n=10  flag=False
i=3   n=10  flag=False
i=4   n=10  flag=False
i=5   n=10  flag=False
i=6   n=10  flag=False
i=0   n=10  flag=True
i=1   n=10  flag=True
i=2   n=10  flag=True
i=3   n=10  flag=True
i=4   n=10  flag=True
i=5   n=10  flag=True
i=6   n=10  flag=True
i=7   n=10  flag=True
i=8   n=10  flag=True
i=9   n=10  flag=True
i=10 n=10  flag=True

測試 i 值變大
i=0   n=13
i=1   n=13
i=7   n=13
i=8   n=13
i=9   n=13
i=10 n=13
i=11 n=13
i=12 n=13
i=13 n=13

測試 n 值變小(while版)
i=0 n=10
i=1 n=10
i=2 n=10
i=3 n=10
i=4 n=10
i=5 n=8
i=6 n=8
i=7 n=8
i=8 n=8

測試 n 值變大(while版)
i=0   n=10
i=1   n=10
i=2   n=10
i=3   n=10
i=4   n=10
i=5   n=20
i=6   n=20
i=7   n=20
i=8   n=20
i=9   n=20
i=10 n=20
i=11 n=20
i=12 n=20
i=13 n=20
i=14 n=20
i=15 n=20
i=16 n=20
i=17 n=20
i=18 n=20
i=19 n=20
i=20 n=20

 

從上面的程式執行結果看到,測試 n 值變小的時候,本來已經更改成8次就結束了
但程式還是執行10次。在while中同個寫法,就不會有這個問題。

測試n 值變大的時候也是一樣,應該程式應該迴圈執行滿20次,但只有執行10次

 

所以要注意For迴圈這個特殊的BUG,以避免資料有缺失或是索引超出範圍,怎麼抓都抓不到的BUG。

(註記1:在Visual Studio 2008 裡,在IDE環境裡複製程式碼,到Word 2007貼上,雖然有漂亮的程式碼顏色,但要注意中文字中文字之間夾雜的英文數字消失不見,關於這個BUG,改天再截圖給大家)

(註記2:同樣的方式貼上到FrontPage 2003,中文字會全部消失不見,這個嚴重的BUG也是其中之一,有空再實驗貼到哪裡才會正常顯示)

[教學] OPEN VPN for Windows 環境設定整理

 

這裡我整理了其設定方法,文字檔的設定還真有些複雜
整理起來備忘
參考自http://www.kerobbs.net/thread-9082-1-1.html

——————————————————————————–

所需工具

  1. OpenVPN GUI for Windows
  2. Notepad++ 或是其他非內建記事本文字編輯器
  3. Cmd Here PowerToy

 

請先到這裡下載OpenVPN GUI for Windows
http://openvpn.se/download.html

找Installation Package安裝

我用的版本openvpn-2.0.9-gui-1.0.3-install.exe

請將之安裝,請記得安裝路徑
我是裝在D:\Program Files\OpenVPN

 

 

NotePad++請到這裡下載安裝
http://notepad-plus.sourceforge.net/tw/download.php?lang=tw

因為用Windows內建的記事本開設定檔無法正確換行

 

Cmd Here PowerToy載點在這
http://download.microsoft.com/download/whistler/Install/2/WXP/EN-US/CmdHerePowertoySetup.exe

目的是方便開啟某目錄的命令提示字元而不用一直用cd切換資料夾

 ——————————————————————————–

到安裝OpenVPN的目錄  (我是裝在 D:\Program Files\OpenVPN 目錄)
先備份easy-rsa和sample-config子目錄 (包成二個7z壓縮檔丟在旁邊)

用cmd切到easy-rsa目錄

編輯vars.bat.sample,修改以下資料
(rem那整行是註解)
————————————————————
rem 改目錄成正確的
set HOME=D:\Program Files\OpenVPN\easy-rsa

rem 視情況選擇金鑰長度要1024或2048(但2048編碼時要等很久,之後的設定值要跟它一樣)
set KEY_SIZE=1024

rem 下面設定值一需要改一改
set KEY_COUNTRY=TW
set KEY_PROVINCE=TW
set KEY_CITY=Taipei
set KEY_ORG=home
set KEY_EMAIL=[email protected]

————————————————————

執行init-config.bat,建置設定檔
正常來說會沒有錯誤訊息,它會copy二個檔案出來。

執行vars.bat,初始環境變數

然後再執行clean-all.bat,清空keys資料夾
在這邊要注意,當你執行這個時,keys目錄裡的東西將會被刪
這邊也要注意是否有錯誤訊息發生。如無意外,就會copy二個檔案出來。

再執行build-dh.bat,製作亂數 (要稍等電腦一段時間)

執行build-ca.bat,要作伺服器的認証 (產生keys\ca.key檔)
這邊如果在[]之間有資料,(也就是之前你改的vars.bat.sample值),可以直接按「enter」表示與左邊的預設值相同。
我覺得用戶端的資料若沒有合乎的話,可能會產生不出來!
多以下這二個參數,請務必抄下來

Organizational Unit Name (eg, section) []:user
Common Name (eg, your name or your server’s hostname) []:johnny

請執行build-key-server.bat server指令,製作伺服器端的秘鑰 (產生keys\server.key檔)keys\server.key
請注意有加入「 server」參數(請務必空一格,代表它帶有參數)
資料一定要統一,例如section跟host name等等。
密碼請變更成難猜的密碼。
後面是告訴你是否要認証,當然是輸入「y」,後面也是輸入「y」。
到此步驟已經將伺服器所有認証的部份全建立好了。
以下是執行時的重點部份

Organizational Unit Name (eg, section) []:user
Common Name (eg, your name or your server’s hostname) []:johnny

A challenge password []:12341234
An optional company name []:user

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

 

 

———————————————————————————
接下來製作用戶端的秘鑰
請執行build-key.bat client1
請注意有加入「 client1」參數(請務必空一格,代表它帶有參數,本參數可以隨意變換,例如:「build-key jack」,或「build-key john」)
在這邊你有多少台電腦需連到伺服器就建立幾個,名字可以取自己容易記的。

這裡請注意,當製作client端連線資料時,主機名稱不可重覆
否則會出現.old的錯誤訊息,只能再重作一次囉!

Organizational Unit Name (eg, section) []:user
Common Name (eg, your name or your server’s hostname) []:clinet1

A challenge password []:12341234
An optional company name []:user

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

———————————————————————————

將伺服器端所需要的檔案(ca.crt、ca.key、dh2048.pem、server.crt、server.key)
複製一份到 config 資料夾。

然後將sample-configserver.ovpn
複製一份到 config 資料夾。

然後修改config的server.ovpn檔
以下是設定重點,全部都要看
———————————————————————————
# 若你有多組ip,可以在local中輸入你要指定的ip,記得前面的分號要拿掉。
local 192.168.1.2

# 要連線的連接埠,請確認防火牆有正確的開啟且導向該連接埠
port 1194

# 使用TCP連線或UDP連線
proto udp

# 看是要走tun模式還是tap模式(這邊我是用預設,其它都改為自己能用的)。
# “dev tun” will create a routed IP tunnel,
# “dev tap” will create an ethernet tunnel.
# tap模式是要建一張虛擬網卡,用它來橋接網路
# tun模式是直接現有用IP做通道
dev tun

# dh這邊是密鑰長度,如果你改了預設數字1024,就要改成符合你之前設定的數字!
dh dh1024.pem

# server這邊的參數是指定你的vpn的網段,我是使用192.168.2.0 255.255.255.0
server 192.168.23.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# 開啟push “route 192.168.2.0 255.255.255.0″後可以使用戶端電腦知道要走vpn。
push “route 192.168.23.0 255.255.255.0

# 開啟client-to-client後可以使用戶端電腦連往別台用戶端電腦。
client-to-client

# 開啟duplicate-cn是怕用戶端電腦名稱可能會取一樣的情況發生。
# (這個用途在於,若你想要分享給大家使用,
# 又不想每個人都建一個連線檔案的話,就必須設定,
# 設定之後每個人的ip連上來就不會被固定下來!)
duplicate-cn

———————————————————————————

到此就作好伺服器端電腦的設定了,記得要存檔(Ctrl+S),開始執行看看是否有誤。
右點在OpenGUI的小圖示,選「connect

 

會另開一視窗,如果沒問題,該視窗會自行關閉。

 

若正確執行無誤的話,此時OpenGUI的小圖示會由紅燈轉綠燈,並且告知ip為何。

查看一下網路連線資料,果然多了一個網路卡,並且多了一個ip。

 

———————————————————————————

以下為用戶端的設定

用戶端也是要安裝OpenVPN GUI才能使用,詳情不再敘述。
安裝完後,在config子目錄中,將用戶端認証需要的檔案置放其中,
複製伺服器端easy-rsa\keysca.crt、client1.crt、client1.key 到用戶端的config資料夾
從「sample-config」目錄中複製「client.ovpn」 到用戶端的config資料夾

修改client.ovpn設定檔
————————————————————
#  看伺服器是走tap還是tun,需跟server端設定一致。
dev tun

#  看伺服器是走tcp還是udp,需跟server端設定一致。
proto udp

#  remote的參數,如果你架的伺服器有DNS,可以在此設定,
#  例如:remote john.dyndns.org 1194
#  1194指的是port,這也要看伺服器是設成哪一port。
remote my-server-2 1194

#  ca ca.crt是不動它的,要動的是用戶端,如果你的用戶端名稱為john,
#  則cert跟key後面接的檔名一定要改為john,否則會找不到檔案。改完後就存檔(Ctrl+S)。
ca ca.crt
cert client1.crt
key client1.key

————————————————————

右點在右下角找OpenVPN GUI小圖示,選「Connect」

執行後,會跳出視窗,若連線成功,此視窗會自動消失。

瞧,我們就得到ip了!耶!萬歲!我們成功了!

 

 

 

工讀,也是攻讀。

話說最近都沒有發文了
最近真的有些忙碌

到學校的電算中心工讀
時間真的壓縮了很多

好消息是,實習了之後就能排班
就可以慢慢有錢了

在電算也認識到很多學長姐
從一開始不太熟

到現在皆慢慢進入狀況

 

不過晚上回家有些累,這倒是真的
能用自己的電腦的時間就變少了

一回到家,真的沒啥力開電腦

 

實習中也學到很多
講桌怎麼處理、解毒….

最多的還是應對進退,還有口才吧
我口才真的很差….

跟大家說聲抱歉,我會努力學習的

 

 

—————————————————————–

昨天企業參訪台達電
1988前成立,賣電源供應器到現在跨國大企業

真是不簡單

我覺得厲害的是在裡面工作的學長

大學畢業後,直接考台大研究所
整個很拚….

真不簡單

—————————————————————–

 

 

 

人生很有趣,起起落落。。。。

都不知道下一步會發生甚麼事

 

我現在只希望能遇到未來的那位女生
只差這門課,也是最難修的課。。。

是嗎是嗎?

有沒有這麼誇張

連作夢也在騎機車

 

哈哈哈

 

好好笑。

 

 

 

快夢醒時還被開了張罰單
「逆向行駛」  囧……

 

我好愛騎機車,更喜歡單車,哈哈哈
因為機車有的單車不一定有
單車可以無優無慮的騎,不用太被交通法規束縛住(因為有河濱呀)

可以不用忍受那些超速從旁切過
        停超久紅燈還不熄火的
        旁邊抽煙的
        明明就紅燈3  4 秒了還要硬闖的
        好一個待轉沒有樹陰的
        ........

        的一堆事情

但單車沒有機車的碟煞制動力很佳
   沒有機車引擎牽引,不會速度上升很快
   沒有後照鏡
   沒有時速50(含)以上的速度

 

就這樣吧

 

誰不想換車?

 

 

沒錢。

希望

 

我想去海邊………

在一個天氣好的時候

 

騎著機車,吹著海風

 

 

打著電腦多無聊
一直逛facebook也不是辦法呀

2k這樣有為自己而活嗎?

 

電腦開了又關    關了又開

 

這學期有為自己多一門課
但也多了一本原文書

皮要繃緊點

 

 

想寫的PHP程式,我可以用中文說給你聽
一直搞就是不給動, 一直有BUG是怎樣

跑到Apache都當掉了

 

我就是要把它普通的資料表管理
變得簡潔,乾淨,利用性高

我想到一些重覆的動作,把它function化
然後自動帶出SQL語法,然後執行

 

卡了幾了問題

1.  現在有數個array的陣列,元素個數是相同的(應該說是張表格)

資料表欄位,資料表中文名稱,是否為字串(處理SQL時,要加上引號)

我想把資料表欄位為key,資料表中文名稱為值

合併二個陣列為一個陣列

 

2.  陣列內容用特定字串接起來
不想土法煉鋼把它接起來,再用取部分字串濾掉最後多加的字元
(最後土法煉鋼,這就是當掉的原因)

 

3.  用for($i=;$i<count(陣列);$i++)
的格式來產生一些東西,但是count遇到空的值就會為0
用 foreach()有當掉的風險  (主要是我想用 $i 啦,它很好用)

4.  function化之後可見度的問題

5.  class化之後………

 

能寫到最後一步應該就成功了吧?

 

 

事情做的很卡,感覺很煩

國小同學會

這一開始是彭唯善問的

「你有沒有收到同學會的消息?」

沒有辦同學會?要不要我們一起來辦

 

事情就這樣開始了

 

 

跟蕭婷玉拿了通訊錄,就想辦法聯絡上所有的人

很多人的資料都更新了
還好很多人的市話沒有變
還是間接的找到了人

 

然後找在線上的人
決定地點,還有時間

 

很感謝蕭婷玉
他幫我找了很多地點,要不然地點就真的難產了

很感謝蔡承翰
不是只有提供地點,還熱情的幫我聯絡,真的很感謝

很感謝李佳達
不只有幫我們橋機車的問題,還為我們想到很多事

很感謝彭唯善
雖然一直忙於打工,還是竭盡所能的幫助我

還有謝謝到場的大家……

雖然不是辦得很優
下次一定會再加油

[揪團]2009無車日騎單車

<

p>無車日又來摟
活動時間: 98年9月19日(六)上午06:00-10:00
北縣的
http://www.lifestyle.com.tw/2009carfreeday/ch03.html
台北的
http://taipei-2009carfreeday.com.tw/client/intro/bike.php
你覺得要哪個比較好,我比較喜歡北縣的
因為台北的好像很短=  =

 

 

台北

—————————————————————-

ibon報名

<

p>騎乘路線:
美堤河濱公園(出發點)→樂群一路 →明水路→ 北安路 → 大直橋 → 濱江街→ 塔悠路 → 民權東路 → 敦化北路 →忠孝東路(終點:綠色交通博覽會)

<

p> 

<

p>可以騎河濱腳踏車道過去


北縣

—————————————————————-

集合地點:
位於板橋民生路上大漢橋前(八里新店線入口匝道)。

<

p>活動路線:
八里新店線(板橋交流道–臺北港),全長約19公里。

好誘人…我好想騎^~^

快….來去騎單車!!
大家想去哪一個

我投北縣一票!!

[恍神] 最近的蠢事….

同步在PTT下StupidClown(笨版)發文

作者  j796160836 (Johnny)                                  看板  StupidClown
標題  [恍神] 最近的蠢事….
時間  Tue Aug 25 12:34:05 2009
───────────────────────────────────────

話說,最近在打掃家裡
除了用吸塵器吸地之外
也順便把電腦桌前的所有(不堪入目?)的東西給清乾淨
擦一下許久沒擦的桌面

大家在用桌上型電腦就知道,鍵盤附近和桌面都會有少許的頭髮和灰塵
所以我很直覺的用吸塵器把附近吸一遍

就當我在整理的時候

我瞬間聽到一個聲音

咻~~~~

                   刷…….

阿……不不不不不不不不不不不不不不不
不不不不不不不不不不不不不不不不不不不不不不不不不不不不
不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不

我的隨身碟被整隻含吊帶

含吊帶被整隻吸進去了……….

還我隨身碟阿~~~~~~~~~~~~~~~~~~~~~~~~~~

(慘叫)

PS.五樓請不要搞西斯,謝謝


※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.210.96
推 ur260:五樓隨身碟好吃嗎?                                         08/25 12:35
→ feelin:五樓只看到含吊就                                         08/25 12:35
推 openwang:蓋                                                     08/25 12:36
→ openwang:蓋                                                     08/25 12:36
推 tingchia:五樓不搞西斯,這個讓給六樓以下                         08/25 12:36
推 spongebob424:吸塵器:阿阿~~~                                     08/25 12:37
→ andrew0714:原PO只說五樓不能搞  我看到含吊 就啊~~~ 蘇胡!!吃飯去  08/25 12:38
→ gtoamdk7:    西斯:這不是搞到了嗎?                               08/25 12:39
推 yeha:阿阿阿  斯~~~~                                             08/25 12:40
推 Vince75429:阿姨這水龍頭滴出來是什麼?~(玩弄)                     08/25 13:01
推 bey869:熱插拔的水深碟含吊…                                    08/25 13:17
→ j796160836:這是哪招?  哈哈哈                                    08/25 14:01
推 Qupi:我剛剛一直想不通什麼是含吊帶 原來是連同吊帶                08/25 14:18
推 acool:啊啊~~吸~~吸~~塵器~~含~~含~~屌~~帶~~吸~~進去了~~          08/25 17:00
推 howard312:我看成含屌帶…    我怎麼了                           08/26 16:13
→ j796160836:樓上好糟糕                                           09/01 15:29

事情

看來事情還是要一鼓作氣的做完
要不然拖著拖著…..

就把它給忘了=  =