分類目錄歸檔:站長文檔

Learning Ajax 2, url, link and button

with <Ajax on Rails>
S2.3. Bringing Rails into the Picture

complex url_for example:
url_for :only_path => false, :protocol => ‘gopher:// ‘,
  :host => ‘example.com’, :controller =&gt; ‘chapter2′,
  :action => ‘myresponse’, :trailing_slash => true, :foo => ‘bar’,
  :anchor => ‘baz’
#=> ‘gopher://example.com/chapter2/myresponse?foo=bar/#baz’

ajax on rails(aor) alert:
<p><%= link_to_remote "Alert with javascript Helper", :url =>
   "/chapter2/myresponse", :success => "alert(request.responseText)" %></p>

aor insert:
<p><%= link_to_remote "Update  with javascript Helper", :url =>
  {:action => "myresponse"}, :update => "response5" %></p>
<p id="response5"></p>

Chapter 3. Introducing Prototype

3.2 Ajax Links

:method => :delete
<%= link_to "Delete", "/people/1", :method => :delete %>

==>
<a href="/people/1"
  onclick="var f = document.createElement(‘form’);
           f.style.display = ‘none’;
           this.parentNode.appendChild(f);
           f.method = ‘POST’;
           f.action = this.href;
           var m = document.createElement(‘input’);
           m.setAttribute(‘type’, ‘hidden’);
           m.setAttribute(‘name’, ‘_method’);
           m.setAttribute(‘value‘, ‘delete’);
           f.appendChild(m);
           f.submit(  );
           return false;">Delete</a>

Return false;
<a href="#"
   onclick="new Ajax.Updater(‘current_time’, ‘/chapter3/get_time’,
               {asynchronous:true, evalScripts:true});
            return false;">Check Time</a>
<div id="current_time"></div>
The link will only be followed if the expression evaluates true (or if the user has javascript turned off). That’s why the link_to_remote helper puts return false at the end of the onclick attribute.

Callbacks:
<%= link_to_remote "Check Time",
    :update   => ‘current_time’,
    :url      => { :action => ‘get_time’ },
    :before   => "$(‘indicator’).show(  )",
    :success  => "$(‘current_time’).visualEffect(‘highlight’)",
    :failure  => "alert(‘There was an error. ‘)",
    :complete => "$(‘indicator’).hide(  )" %>
<span id="indicator" style="display: none;">Loading…</span>
<div id="current_time"></div>

hide( ) and show( )
for an element to be dynamically shown via javascript, its CSS display: none property must be defined inline

this won’t work:
<style type="text/css">
  #indicator { display: none; }
</style>
<div id="indicator">Hidden DIV</div>
<script type="text/javascript">
  $("indicator").show(  ); // won’t work
</script>

But this will work:

<div id="indicator" style="display: none">Hidden DIV</div>
<script type="text/javascript">
  $("indicator").show(  ); // will work
</script>

:condition
<li><%= check_box_tag ‘checkbox’ %> Thing #1</li>
<%= link_to_remote "Delete checked items",
    :condition => "$(‘checkbox’).checked",
    :url       => { :action => ‘delete_items’ } %>

:submit
it allows you to simulate a form submission. By providing the ID of a page element, any fields contained in it will be sent along with the request.
<div id="fakeForm">
  <input type="text" name="foo" value="bar" />
</div>
<%= link_to_remote "Submit fake form",
       :submit   => "fakeForm",
       :url      => { :action => ‘repeat’ },
       :complete => "alert(request.responseText)" %>

nested forms

<form id="myForm">
  <input type="text" name="text_to_reverse" id="text_to_reverse" />
  <%= link_to_remote "Reverse field",
       :url      => { :action => ‘reverse’ },
       :submit   => "myForm",
       :complete => "$(‘text_to_reverse’).value=request.responseText" %>
  <input type="submit" />
</form>

:with
<%= link_to_remote "Link with params",
       :url      => { :action => ‘repeat’ },
       :complete => "alert(request.responseText)",
       :with     => "’foo=bar’" %>
two sets of quote marks. javascript expression

include references to javascript variables or DOM elements:
<input id="myElement" type="text" value="bar" />
<%= link_to_remote "Link with dynamic params",
       :url      => { :action => ‘repeat’ },
       :complete => "alert(request.responseText)",
       :with     => "’foo=’+escape($F(‘myElement’))" %>
escape it (so that it can safely be included in a URL query string)

link_to_function
<%= link_to_function "Toggle DIV", "$(‘indicator’).toggle(  )" %></p>
toggle( ), which hides and shows elements on the page.

button_to_function
<%= button_to_function "Greet", "alert(‘Hello world!’)" %>

combine with remote_function
<%= button_to_function "Check Time",
      remote_function(:update => "current_time",
        :url => { :action => ‘get_time’ }) %>

DIY button_to_remote
def button_to_remote(name, options = {})
  button_to_function(name, remote_function(options))
end
==>
<%= button_to_remote "Get Time Now",
      :update => "current_time",
      :url    => { :action => ‘get_time’ } %>

發表在 Ruby on Rails, 站長文檔 | 留下評論

如何在linux中查找文件

本文修改自:
http://it.sohu.com/2004/06/09/32/article220453226.shtml

whereis 文件名

  尋找文件工具

  whereis 是一個小巧好用的文件尋找工具,它專門用來尋找可執行的程序、原始程序和使用手冊。

如執行命令:whereis bzip2

 find [尋找的目錄] [表示式]

  尋找文件工具

  find 是高級的尋找文件工具,可不像 whereis 那麼“陽春白雪”。但也因為它太高級了,複雜到很多人用不熟練。我們盡量只舉簡單的例子。

  最簡單的格式如下:

  find / -name my* -print

  這個意思是請它從最底層的主目錄開始找,找出文件名是 my 開頭的文件,把它顯示出來。-print 選項是顯示,您可把它當做固定要加上的項目。

  但它還可以用時間來找,例如:

  find /usr -atime 3 –print

  會從 /usr 目錄開始往下找,找最近3天之內存取過的文件。

  find /usr -ctime 5 –print

  會從 /usr 目錄開始往下找,找最近5天之內修改過的文件。

  find /doc -user jacky -name 'j*' –print

  會從 /doc 目錄開始往下找,找jacky 的、文件名開頭是 j的文件。

  find /doc \( -name 'ja*' -o- -name 'ma*' \) –print

  會從 /doc 目錄開始往下找,找尋文件名是 ja 開頭或者 ma開頭的文件。

  find /doc -name '*bak' -exec rm {} \;

  會從 /doc 目錄開始往下找,找到凡是文件名結尾為 bak的文件,把它刪除掉。-exec 選項是執行的意思,rm 是刪除命令,{ } 表示文件名,“\;”是規定的命令結尾。

locate 文件名

  尋找文件工具

  locate 也是一個尋找文件的工具,但是它不像 whereis 只能找程序文件等幾種文件,也不像find那麼複雜,可以算是“中庸之道”!

grep [-選項] [字串] [文件名]

  尋找某字串內容工具

  有些時候,我們存儲文件時隨手亂取了一個文件名,事後自己都忘了那個文件名叫什麼,連開頭第一個字母都想不起來。那麼,如果您還記得該文件一點特殊的詞語,應該可以用 grep 命令找到。

  例如,我們想在一個目錄的200個文件裡面,找出哪一個文件提到“排版”這個詞語:

  grep 排版 *.txt

如果您想要讓它凡是符合條件的只出現一次的話,加上 -l 選項就可以了

其他常用的選項還有:

  -n 同時列出該詞語出現在文章的第幾行。

  -c 計算一下該字串出現的次數。

  -i 比對的時候,不計較大小寫的不同。

相關命令:
more [文件名]

  分頁顯示一個文件或任何輸出結果

ls x* | more
more /etc/XF86Config

 less [文件名]

  分頁顯示一個文件並且可以回頭

  less 的優點就是可以隨時回頭,最簡單的用【PgUp】鍵就可以向上翻。

 

發表在 站長文檔 | 留下評論

從Windows Xp 轉到Linux (Ubuntu 6.06)上

這文章是8個多月前寫的。今天(20070929)更新。

忙了四天,基本上從Windows Xp 轉到了Ubuntu 6.06這個Linux操作系統上了。

為什麼要轉到linux?
1.比起Windows,Linux更加Free,而得到更多的自由是我孜孜不倦的人生追求。
2.工作方向向開源,協同,草根方向發展,linux比windows更能代表這個方向。
3.在Windows上進程開多了,切換程序時反應很慢。希望在linux可以解決這個問題。
4.多年的Windows使用讓人感覺它很枯燥,沒有新鮮感,不再能帶來刺激。
5.現在的linux系統已經比較成熟,相信可以勝任工作和娛樂的要求。
6.新買了一個250G的硬盤,在新硬盤上實驗新的操作系統,不用擔心數據丟失,可以放手進行轉換實驗。

為什麼選擇Ubuntu?
在Rubyonrails論壇(http://www.ruby-forum.com/forum/3)上很多人說都在用Ubuntu。
Ubuntu最近好像很熱, 前幾天在一期<程序員>看到它已經是最多人使用的Linux操作系統。人多出了問題好打聽解決辦法。。。
因為聽說6.06版叫Long Term Support版(LTS)版,所以雖然舊了點,還是選擇了它。
雖然自己使用的是AMD Athlon64 3600+, 但據說amd64版的linux軟件和硬件驅動不全,所以還是選擇了i386版安裝。

Ubuntu Linux操作系統官方網站:
http://www.ubuntu.com/

安裝Ubuntu
http://www.ubuntu.com/products/GetUbuntu/download#lts 下載DVD鏡像。 3G多,用迅雷下載,速度很快。
然後用nero將文件刻錄成光盤,引導安裝。人性化的對話安裝方式,過程沒有遇到任何問題。系統安裝好了就進了gnome桌面。

自動登錄
啟動自動登錄功能,不然每次進入桌面前要輸入用戶名和密碼。

ADSL撥號上網
我這裡連接的是小區寬帶,但撥號方式和ADSL一樣。用pppoeconf設置好,讓系統在啟動時自動撥號連接。

中文環境
Gnome我選擇了英文界面,但Ubuntu可以正確識別中文字符。
字體比windows下的差多了,很不好看。我照:
http://forum.ubuntu.org.cn/viewtopic.php?t=19841
更換了字體,感覺和Windows系統沒有差距了。
雖然在語言支持中選擇安裝了中日韓相關的語言文件,但不能調出中文輸入法。
後來才知道要修改/etc/environment 文件
加入
LC_CTYPE=zh_CN.UTF-8
這時可以調出scim輸入法了。同時去除了裡面用不到的輸入法,如二筆,日文輸入等。為五筆和拼音定義了快捷鍵。

通過USB轉換線連接的HP Laserjet 1100激光打印機
接上打印機電源後Ubuntu 6.06能自動找到打印機和它的驅動。安裝後,感覺打印機的反應速度比在Windows XP慢。

USB攝像頭
系統已經安裝好了驅動,在Ekiga Softphone上可以看到圖像,可惜這個本來就沒有多少用處的攝像頭在linux更是沒有用武之地。。

NVIDIA Quadro NVS 280雙頭顯卡
這個折騰得最慘烈。我安裝的是一個雙頭的顯卡,同時接兩個顯示器。在剛安裝好ubuntu時,其中一個顯示器可以顯示,而另一個則是花屏的。
我先是不知道怎樣安裝nvidia驅動,後來才知道要把ubuntu文件源文件全使用上才有驅動安裝(?)。無論怎樣,最後是安裝上了nvidia-glx驅動文件。
但第二個顯示器還是不能正常顯示。最好搞來搞去,把系統搞壞了,進不了桌面,不知道怎樣入手修復,我竟然重新安裝一個ubuntu。。。
後來才知道nvidia顯卡可以使用TwinView技術實現雙顯示器功能,於是我照:
http://www.ublug.org/ubuntu/twinview/twinview-howto-breezy.html
(我打開了Option "RenderAccel" "1")
實現了第二個顯示器的正常顯示。
但還有問題
1.除了交換兩台顯示的連接線,我不選擇linux登錄界面出現在哪個顯示器上。
2.使用vlc播放器時,無論在哪個桌面上讓它全屏播放,視頻畫面都只會出現在主顯示屏上。
3.使用mplayer播放器時,當在分辨率大的那個顯示屏時讓它全屏播放時,畫面只使用分辨率小的那個顯示屏的分辨率(這時在更改aspect ratio後可以修正這個問題)

更新ubuntu文件源
ubuntu有個自動更新安裝文件的系統,叫Synaptic Package Manager,這個管理器會自動對比系統文件和/etc/apt/sources.list列表文件提供的文件版本,然後升級系統。這個源列表修改到中國區的服務器,這樣更新時速度快一些。
參看:
http://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake#head-ebc0c729d9417455acdd859232f278cf3127935a

更換linux內核文件
我的CPU是AMD Athlon64 3600+,為提高系統性能,將原來的linux-i386更換成linux-k7-smp內核。這時系統監視軟件顯示的CPU為兩個了。

安裝aMule
這個安裝很方便,系統自帶的。aMule很像eMule,更新服務器列表,下載速度也不錯。
參看:http://forum.ubuntu.org.cn/viewtopic.php?t=40336&;highlight=amule
注意,文章中的sudo apt-get install amule amule-utils要換成sudo apt-get install amule amule-utils*
更新:後來經過實際使用,發現速度不如用wine模擬運行eMule的速度,所以一直使用eMule了。但有兩個問題:eMule佔用系統資源比較大;eMule偶爾會自動退出;但總得來說不影響使用。

安裝BT下載軟件
比較了多個BT下載軟件,發現只有bitstormlite可以正常識別中文編碼,速度也不錯。
更新:發現這個軟件的速度也不如用wine模擬utorrent的速度,後一直用utorrent。

安裝迅雷下載軟件
迅雷沒有linux版本,也沒有同類替代軟件。所以在Linux下只能用Wine模擬機安裝。我試過了迅雷5和迷你迅雷,安裝後都不能啟動,後經網友指點,找了一個國際版的迅雷,安裝後真的可以使用!
更新:後模擬迅雷5也成功了。

使用FireFox
這回要以Firefox為最主要的瀏覽器了。用了幾天,感覺firefox不比ie差。現在將最小字體限制到18,看網頁比IE舒服多了。
linux下的firefox好像不能安裝google toolbar, 為查看網站的pr值,我安裝了一個seoquake插件,沒想到它的功能強多了。
為了下載速度,又安裝了一個DownThemAll!插件。
又自行設置了firefox和amule的關聯,現在點擊emule鏈接會將下載文件自動添加到amule下載列表去了。
Windows下Firefox可以導入IE的收藏夾,但在linux下只能導入收藏夾文件。為了導入Windows下IE的收藏夾,我先在 Windows下啟動firefox,然後導入IE收藏夾,再在FireFox中將收藏夾內容導出到一個文件中,最後在linux中用FireFox導入 這個文件。。。(繞口)
讓FireFox也能正常瀏覽BT@China, 參看:http://forum.ubuntu.org.cn/viewtopic.php?t=17327&;postdays=0&postorder=asc&start=0
更新:FF有很多插件,對日常使用和網站開發很有幫助。如ColorfullTabs, ColorZilla, FireBug, FireFTP, Link Alert, SeoQuake….

在linux下遠程登錄到Windows 2000服務器
本來以為這會一是一件很難的事,但經過反覆搜索,得知一個叫rdesktop的軟件可以完成這個工作。然後在試探性地在系統安裝文件中查找,竟然意外地發現這個軟件已經安裝到ubuntu上了。。。

ftp工具
照系統里的安裝了gFTP
更新:這個FTP不太穩定,功能也很一般。後來試用了FireFox加FireFTP插件和CrossFTP。感覺都不錯。

圖片工具
看圖工具gThumb和圖片編輯工具GIMP默認下也安裝了。

看書工具
用xCHM可以打開chm文檔,pdf文件原先已經可以打開。
更新:後來一直用KchmViewer看CHM文檔。

安裝QQ
安裝了LumaQQ 2005,安裝之前要安裝java環境,但安裝後發現不能打開QQ, 最後才發現一定要設置java解釋器。。。
LumaQQ 2005可以進行QQ聊天,但好像不能視頻聊天,也不能傳文件。
更新:LumaQQ不能登錄了,改用wine模擬QQ了。但不穩定,很少使用。

旺旺
旺旺還沒有linux版本,所以只能使用網頁旺旺了,雖然不能保存聊天記錄,但也沒有辦法。
更新:用wine模擬安裝了一個 旺旺。但現在淘寶網不支持FireFox支付了。所以使用VirtualBox模擬了一台虛擬機,在上面安裝了一個Windows XP。基本上偶爾QQ聊天,就專門用來上淘寶網。感覺更安全。

音樂播放工具
安裝了網上說的好幾個,但最後只發現Beep Media Player (BMP)可以正常顯示中文。
之後又給它安裝了wma和ape插件。參看:http://forum.ubuntu.org.cn/viewtopic.php?t=18801

安裝mplayer多媒體播放器
參照:http://www.ubuntuforums.org/showthread.php?t=187709 安裝了mplayer.
後來才發現可以設置不同的視頻驅動,在我的電腦上選gl,gl2驅動後畫質最好。但還是比不上Windows上的Kmplayer。功能也遠沒有 kmplayer豐富,雖然這個播放器是我發現的linux上功能最多的播放器。(參看在linux下用mplayer播放帶字幕的電影

安裝realplayer
mplayer在播放rmvb文件時不能用鼠標拖放進度,所以決定安裝一個realplayer. 用real官方網站(http://www.real.com/linux?pcode=rn&;am)下載了 realpalyer10.0.7.bin, 按照官方說明安裝好了,但卻死活不能啟動, 後來看到
http://forum.ubuntu.org.cn/viewtopic.php?t=14108
才解決了問題。

安裝IE
聽說工商銀行的電子銀行只能通過IE訪問,我一直很惦記這個問題,再說IE也可以調試網頁,所以安裝它很有必要。
IE好像沒有linux版本,所以只能通過wine虛擬。
我參看:
http://www.tatanka.com.br/ies4linux/page/Installation:Ubuntu
安裝,過程很簡單。通過wine虛擬出來的IE界面差得一塌糊塗。

安裝詞典stardict

http://stardict.sourceforge.net/
下載並安裝了星際譯王,又將windows下的詞典文件複製到/usr/share/stardict/dic/目錄下。 鬱悶的是直到重啟系統後它才能找到詞典文件。。。

虛擬光驅
據說在linux可以直接使用
sudo mount -o loop /path/filename.iso /media/cdrom
掛接iso文件,而bin文件要轉成iso文件,不知道nrg文件要怎麼辦。

文字編輯
gedit好像是gnome上的記事本。不經意間我發現經常用它。
一般的網頁或程序在Windows我用EditPlus編輯,很是順手。所以在linux上我希望能找個類似編輯器。我安裝試用了很多個。
Emacs強大得讓我一頭水霧。。。一般我不打開它。
BlueFish感覺不錯,但好像沒有在search in files的重要功能。
SciTE我找不到將編輯區字體設置為18的選項,對我的眼睛不好。
最後找到一個還可以接受的jEdit。
更新:後來沒有使用jEdit。日常就使用勉強可以使用的gedit,寫代碼時就用aptana。

安裝beryl
這個能給帶來超酷的桌面效果,據說比vista的動畫桌面有過之而無不及。
http://www.youtube.com/watch?v=gpOz8duTh-4

我是照:
http://wiki.beryl-project.org/wiki/Install_Beryl_on_Ubuntu_Edgy_with_XGL
安裝的。
安裝好後要重新啟動系統才能打開效果。
雖然感覺很爽,但我還是不太滿意。現在我還不知道如何讓桌面有雨點下落。。。
更新:後來沒有安裝beryl,因為不穩定,也點資源,更重要的是不實用。

安裝mysql數據庫和ruby on rails環境
安裝mysql很簡單,系統帶有。
參照
http://wiki.rubyonrails.com/rails/pages/RailsOnUbuntu
安裝ruby on rails的環境也很簡單。

ruby on rails編輯環境
在windows上一直使用radrails(http://www.radrails.org/),我一直希望在linux上能找到一個類似的替代品,所以當我發現radrails竟然有linux版本時,我高興極了。這個軟件下載解壓 後就可以使用了。
更新:現在使用更名之後的aptana了。

移植mysql數據文件
在原來windows系統下導出數據文件
mysqldump -h host -u user -p database > dump_file
然後在linux上創建一個數據庫,將數據文件導入
mysql -h host -u user -p database < dump_file

安裝Firestarter防火牆管理軟件
Ubuntu內置集成有iptables防火牆,但管理比較麻煩,於是我安裝了firestarter,並開通了BT和aMule軟件的相應端口。

更新內容:
Google Earth
Google Earth有linux版本。很好玩的東西。

文件管理器
我一直用PCMan File Manager代替系統默認的Nautilus。感覺前者速度更快,操作更方便。缺點是不是很穩定,偶爾會自動關閉。

虛擬機
VirtualBox
剛開始安裝了一個VMware,後來果然證實沒有VirtualBox速度快。在VBox裡面安裝的Windows XP上安裝QQ要在安裝完成之後刪除一兩個文件才能啟動。

Easy Wine
很方便的Wine虛擬機。

現在我基本上可以在linux上完成windows上的一切工作和娛樂項目了。

總體感受:
linux的實用優點:
1.linux是一個更free的系統,很多功能可以定製。
2.在開啟多個程序後,linux上反應速度比windows快。
3.因為很少病毒,所以沒有安裝殺毒軟件,這點比Windows好多了。(但要是Linux真的流行起來,可能病毒也會增加的。這是以後的,當問題產生問題時才是問題,呵呵。)

linux的缺點:
1.linux是個更free的系統,這意味着更多的問題要親手解決。。。
2.linux上的工具還是比不是windows上的完全。
linux上的mplayer沒有windows上的kmplayer強大實用
linux平台沒有自己很喜歡的EditPlus替代編輯器。
linux上不能使用完整的QQ,旺旺聊天工具等

忙了四天,終於配置好了系統。俗話說開頭萬事難,以後在使用上應該不會出現太多的問題了,即使有,網上也有好些好心人幫忙。
我相信自己能從這開始,堅持使用linux操作系統。

更新:
Linux已經用了8個多月,總得來說感覺不錯。以後也許不會再有可能轉到Windows平台了。

發表在 站長文檔 | 4 條評論

SEO要點

1.選對關鍵詞(a.關鍵詞和網站相關;b.關鍵詞是網友常用的搜索詞)
2.域名帶關鍵詞
3.網站名帶關鍵詞
4.頁面title帶關鍵詞
5.頁面h1帶關鍵詞

6.正文首行帶關鍵詞
7.正文10%內容為關鍵詞
8.引用外相關鏈接帶關鍵詞
9.頁面內容SE可讀
10.100個PR高(5以上)的頁面引用目標頁面、首頁
11.頁面內容獨特

根本原則:
1.不要騙用戶這是個好站
2.不要騙SE這是個差站

發表在 站長文檔 | 留下評論

Learning Javascript 3

with "Visual QuickStart Guide javascript and Ajax for the Web, Sixth Edition"

Chapter 3. Language Essentials

Arrays
var newCars = new Array("Toyota", "Honda", "Nissan");
newCars[2] returns "Nissan"

Loop
     for (var i=0; i<24; i++) {
        var newNum = Math.floor(Math.random() * 75) + 1;

        document.getElementById("square"  + i).innerHTML = newNum;
     }

var newNum;
     do {
        newNum = colBasis + getNewNum() + 1;
     }
     while (usedNums[newNum]);
remember that the do block of code always gets executed, whether the while check evaluates to true or false.

switch/case
function saySomething() {
     switch(this.value) {
        case "Lincoln":
           alert("Four score and seven years ago…");
           break;
        case "Kennedy":
           alert("Ask not what your country can do for you…");
           break;
        case "Nixon":
           alert("I am not a crook!");
           break;
        default:
     }
}
we've done everything we want to do, and so we want to get out of the switch. In order to do that, we need to break out. Otherwise, we'll execute all of the code below, too.
The default section is where we end up if our switch value didn't match any of the case values. The default block is optional, but it's always good coding practice to include it, just in case (so to speak).

Detecting Objects
if (document.getElementById) {
 xxxxxxxxxxxxx
}
 else {
        alert("Sorry, your browser doesn't support this script");
}

browser detect
Apple's Safari browser claims that it is a Mozilla browser, even though it is not. And some browsers, such as Safari and Opera, allow you to set which browser you want it to report itself as.
The same goes for attempting to detect which version of javascript a browser supports. We strongly suggest that you do not use these detection methods, and use object detection instead.

try/throw/catch
function initAll() {
     var ans = prompt("Enter a number","");
     try {
        if (!ans || isNaN(ans) || ans<0) {
            throw new Error("Not a valid number");
        }
        alert("The square root of " + ans + " is " + Math.sqrt(ans));
     }
     catch (errMsg) {
        alert(errMsg.message);
     }
}

Once an error is thrown, javascript jumps out of the TRy block and looks for a corresponding catch statement. Everything between here and there is skipped over.
If no error was thrown, the code inside the catch will never be executed.

This's the end of my learning javascript program.

發表在 站長文檔 | 留下評論

Learning JavaScript 2

with "Visual QuickStart Guide javascript and Ajax for the Web, Sixth Edition"

Chapter 2. Start Me Up!
Scripts can be put in one of two places on an HTML page: between the <head> and </head> tags (called a header script), or between the <body> and </body> tags (a body script).
        <script language="javascript" type="text/javascript">
          document.write("Hello, world!");
       </script>

internal scripts

external script, a separate file that just contains javascript.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
     <title>My second script</title>
     <script language="javascript" type="text/javascript" src="script02.js">
     </script>
</head>
<body bgcolor="#FFFFFF">
     <h1 id="helloMessage">
     </h1>
</body>
</html>

script02.js:
window.onload = writeMessage;
// Do this when page finishes loading
/*
a function shown with parentheses means that the function is being called, right then and there. When it's without parentheses, (as it is here) we're assigning it to the event handler, to be run later when that event happens.
*/
function writeMessage() {
     document.getElementById("helloMessage"). innerHTML = "Hello, world!";
}

<noscript>
<noscript>
     <h2>This page requires javascript.</h2>
</noscript>

On non-javascript browsers, a message appears saying that this page requires javascript.

confirm() & alert()
if (confirm("Are you sure you want to do that?")) {
     alert("You said yes");
}
else {
     alert("You said no");
}

condition
(condition) ? truePart : falsePart;
like:
myNewVariable = (condition) ?
truevalue : falsevalue;
or
if (condition) {
        truePart;
}
else {
        falsePart;
}

prompt()
var ans = prompt("Are you sure you want to do that?","");
if (ans) {
     alert("You said " + ans);
}
else {
     alert("You refused to answer");
}
 If a variable is created inside a function, other functions don't have access to it, as it's local to that function. If it's created outside any function, it's global, and everything has access to it.

redirect
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
     <title>Welcome to our site</title>
     <script src="script07.js" type="text/javascript" language="javascript">
     </script>
</head>
<body bgcolor="#FFFFFF">
     <h2 align="center">
         <a href="htmlpage.html" id="redirect"> Welcome to our site… c'mon in!</a>
     </h2>
</body>
</html>

window.onload = initAll;
function initAll() {
     document.getElementById("redirect"). onclick = initRedirect;
}
function initRedirect() {
     window.location = "jspage.html";
     return false; //The return false says to stop processing the user's click, so the href page doesn't get loaded.
}
On first glance, we might think that we could just set the onclick handler globallythat is, as the page is loadingbut we can't. There's a chance, particularly for a large and complex page, that the browser will not yet have come across that redirect id, and if that happens, javascript won't be able to assign the onclick handler. Instead, we have to wait until the page has completed loading, and that's done via onload.

action after the user clicks a link
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
      <title>Welcome to our site</title>
      <script src="script08.js" type="text/javascript" language="javascript">
      </script>
</head>
<body bgcolor="#FFFFFF">
      <h2 align="center">
        Hey, check out <a href="
http://www.pixel.mu/" id="redirect">my cat's Web site</a>.
      </h2>
</body>
</html>

window.onload = initAll;

function initAll() {
     document.getElementById("redirect"). onclick = initRedirect;
}

function initRedirect() {
     alert("We are not responsible for the content of pages outside our site");
     window.location = this; //THIS!!!
  /*The javascript keyword this allows the script to pass a value to a function, solely based on the context where the keyword is used.*/
     return false;
}

document.referrer
A referrer page is the page that the user was viewing before the current page, or, in other words, the page the user came from.
function writeMessage() {
     if (document.referrer != "") {
         document.getElementById("referrerMsg"). innerHTML = "I hope you like this page
better than " + document.referrer;
     }
}

Unobtrusive scripting: An approach to scripting Web pages using javascript, in which the behavior of the Web page is kept separate from its content, that is, the HTML is in one file, and the javascript is in another. Additionally, the term "unobtrusive scripting" is used when code is written such that visitors without javascript (or with less-capable browsers) get all the functionality of a site, just with a less-rich user experience.

And finally, this being the real world, we also know that sometimes the simplest way to hammer in a nail is to grab a rock and pound the nail into the wall. This, for instance, is why we used innerHTML back in Script 2.3, even though it's not part of the W3C DOM.

發表在 站長文檔 | 留下評論

Learning Javascript

with "Visual QuickStart Guide javascript and Ajax for the Web, Sixth Edition"
By Tom Negrino, Dori Smith
target browsers:
Internet Explorer 6 or later; Firefox 1.0 or later; Netscape 7 or later; all versions of Safari; and Opera 7 or later.

Chapter 1. Getting Acquainted with javascript

What javascript Is
Despite the name, javascript and Java have almost nothing to do with one another.

With Java, a descendant of the C and C++ programming languages, programmers can create entire applications and control consumer electronic devices.
Microsoft dropped Sun's Java from Windows altogether, after creating its own Java-like language, C#.
If javascript isn't related to Java, then why do they have such similar names? It's another example of one of the computer industry's most annoying traits: the triumph of marketing over substance.
and ever since then, writers like us have made good money explaining that javascript and Java are very different things.
This Microsoft version of javascript is called JScript.

What javascript Can Do
 A rollover is an image that changes when you move the mouse pointer over it.
javascript has some limitations built-in, mostly for security reasons:
 1.javascript does not allow the reading or writing of files on client machines. The only exception is that javascript can write to the browser's cookie file.
 2.javascript does not allow the writing of files on server machines.
 3.javascript cannot close a window that it hasn't opened.
 4.javascript cannot read information from an opened Web page that came from another server.

What Is Ajax?
Ajax is shorthand for Asynchronous javascript and XML.
In the larger scheme of things, what's generally referred to as Ajax is the combination of these technologies:
 XHTML
 CSS (Cascading Style Sheets)
 The DOM (Document Object Model) accessed using javascript
 XML, the format of the data being transferred between the server and the client
 XMLHttpRequest to retrieve data from the server

javascript is an object-oriented language
Objects
Properties, Objects have properties.
Methods, The things that objects can do are called methods.
dot syntax
 document.images.name
 forms.elements.radio.click()

The representation of the objects within the document is called the Document Object Model (DOM).
Each of the objects on the tree is also called a node of the tree. If the node contains an HTML tag, it's referred to as an element node. Otherwise, it's referred to as a text node.
Events are actions that the user performs while visiting your page. javascript deals with events using commands called event handlers.
The 12 most common javascript event handlers :
 onabort
 onblur
 onchange
 onclick
 onerror
 onfocus
 onload
 onmouseover
 onmouseout
 onselect
 onsubmit
 onunload

value Types:
 Number
 String
 Boolean
 Null
 Object
 Function
value returned by a function
Variable names cannot contain spaces or other punctuation, or start with a digit. They also can't be one of the javascript reserved words.  javascript is case sensitive.
Operators:
 x + y (Numeric)
 x + y (String)
 x – y
 x * y
 x / y

 x % y Modulus of x and y (i.e., the remainder when x is divided by y)
 x++, ++ x
 (if x is 5, y=x++ results in y set to 5 and x set to 6, while y=++x results in both x and y set to 6. The operator – (minus sign) works similarly.)
 x–, –x
 -x

Assignments:
 x = y
 x += y

  Same as x = x + y
 x -= y
 x *= y
 x /= y
 x %= y

Comparisons:
 x == y
 x != y
 x > y

 If you are comparing strings, be aware that "a" is greater than "A" and that "abracadabra" is less than "be".
 x > = y
 x < y
 x <= y
 x && y
 x || y
 !x

Writing javascript-Friendly HTML
Structure, presentation, and behavior
When split up this way, your sites will contain three types of text files:
 XHTML: content and structure
 CSS: appearance and presentation
 javascript: behavior
CSS:
A <div> is a block-level element, that is, there's a physical break between it and the elements above and below it. A <span> isn't block-level; instead, it's inline, so you can apply it to, for instance, a single phrase within a sentence.
A class identifies an element that you may want to use more than once. An id identifies an element that is unique to that document.

發表在 站長文檔 | 留下評論

如何將使用Access數據庫文件的ASP程序轉向SQL數據庫

如何將使用access數據庫文件的asp程序轉向sql數據庫

因為blog的access數據庫文件經常出問題, 於是昨晚將blog轉向了sql數據庫. 網上找了一些文章, 現在經合自己的經驗, 把實際操作要點寫下來.

一.數據庫轉換問題
1.用SQL Server新建一個數據庫, 然後將mdb文件中的access數據導入(import)這個新建的數據庫.
2.access數據庫原來自動增長的ID在SQL中要重新設置,設置為“標識”(identity).
3.access表內數據類型"是/否",到了sql server的表內就是 bit (not null),有可能一些true/false類型不能使用,要變為1/0。
4.原來的默認值都丟失了.主要是數字類型和日期類型.
5.轉化時,跟日期有關的字段,SQL SERVER默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的範圍比smalldatetime型大。有時用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。
6.在mssql server中,有許多保留字。mssql在導入的時候,會自動給這些字段(包括數據庫中的表名)加上[字段名],因此,你必須修改你的腳本,把相應的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字.最好在有可能和系統關鍵字的地方使用[和]將他包圍起來,以避免在移植過程中出現的運行錯誤問題  
7.CursorType要改成1,也就是打開數據庫時要給出第一個數字參數為1,否則記錄可能 顯示不完整 
8.備註類型要通過cast(column as varchar)來使用 

二.asp數據庫連接語句修改
以下假設strConn為連接字符串變量名.
由原來strConn="Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(數據庫文件路徑)
改為:strConn="Provider=SQLOLEDB;Data Source=’數據庫所在服務器IP(本地為127.0.0.1)’;Initial Catalog=’數據庫名’;User ID=’數據庫用戶名’;Password=’數據庫用戶密碼’;" 

三.查尋語句問題(注意以下適用的是sql查尋語句中的修改原則, 不要修改查尋語句外的asp語句)
1.所有的sql語句中的now(),time(),date()必須換成getdate()。
2.isnull(rowname)要改成rowname = null 
3.所有datediff(’d’, time1, time2)要改成datediff(day, time1, time2) ,所有datediff(’ww’, time1, time2)要改成datediff(week, time1, time2)  (或datediff("d", time1, time2)要改成datediff(day, time1, time2) ,datediff("ww", time1, time2)要改成datediff(week, time1, time2)  )
4.“DELETE * FROM ……”要改為“DELETE FROM ……” 例如:在對ACCESS數據庫進行刪除紀錄時用:"delete * from user where id=10",而對SQL SERVER數據庫進行刪除是用:"delete user where id=10". 
5.access裡面除法可以使用"\"或者"/",MSSQL裡面只能使用"/"
6.SQL語句中Like後面字符串的通配符’*'要改成’%'。
7.access查詢通過cdate構造日期,sql server內是convert(datetime,…), convert使用方法見下文.
8.在對ACCESS數據庫處理中,sql語句中直接可以用一些VB的函數,像instr()函數,而對SQL SERVER數據庫處理中不能使用這類函數(instr()可用charindex函數代替,方法見下文)。 
9.在access的sql語句中的時間使用變量查詢的時候,一般使用"select * from aaaa while time=#"&變量名&"#",在mssql中的語法是“select * from aaaa while time=’"&變量名&"’"”。不然有可能rs.update失敗,修改成update 表名 set 字段=‘值’ 這樣通過(遇到的情況,提示為: Microsoft OLE DB Provider for SQL Server 錯誤 ’80040e38’  )

SQL中CONVERT轉化函數的用法

CONVERT的使用方法:

////////////////////////////////////////////////////////////////////////////////////////

格式:
CONVERT(data_type,expression[,style])

說明:
此樣式一般在時間類型(datetime,smalldatetime)與字符串類型(nchar,nvarchar,char,varchar)
相互轉換的時候才用到.

例子:
SELECT CONVERT(varchar(30),getdate(),101) now
結果為
now
—————————————
09/15/2001

/////////////////////////////////////////////////////////////////////////////////////

style數字在轉換時間時的含義如下

————————————————————————————————-
Style(2位表示年份) | Style(4位表示年份) | 輸入輸出格式 
————————————————————————————————-
- | 0 or 100 | mon dd yyyy hh:miAM(或PM) 
————————————————————————————————-
1 | 101 | mm/dd/yy 
————————————————————————————————-
2 | 102 | yy-mm-dd 
————————————————————————————————-
3 | 103 | dd/mm/yy 
————————————————————————————————-
4 | 104 | dd-mm-yy 
————————————————————————————————-
5 | 105 | dd-mm-yy 
————————————————————————————————-
6 | 106 | dd mon yy 
————————————————————————————————-
7 | 107 | mon dd,yy 
————————————————————————————————-
8 | 108 | hh:mm:ss 
————————————————————————————————-
- | 9 or 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
————————————————————————————————-
10 | 110 | mm-dd-yy 
————————————————————————————————-
11 | 111 | yy/mm/dd 
————————————————————————————————-
12 | 112 | yymmdd 
————————————————————————————————-
- | 13 or 113 | dd mon yyyy hh:mi:ss:mmm(24小時制) 
————————————————————————————————-
14 | 114 | hh:mi:ss:mmm(24小時制) 
————————————————————————————————-
- | 20 or 120 | yyyy-mm-dd hh:mi:ss(24小時制, 應該和now()生成的日期格式相同) 
————————————————————————————————-
- | 21 or 121 | yyyy-mm-dd hh:mi:ss:mmm(24小時制) 
————————————————————————————————-

 

使用charindex函數代替   
    
  CHARINDEX   
  返回字符串中指定表達式的起始位置。     
    
  語法   
  CHARINDEX   (   expression1   ,   expression2   [   ,   start_location   ]   )     
    
  參數   
  expression1   
    
  一個表達式,其中包含要尋找的字符的次序。expression1   是一個短字符數據類型分類的表達式。   
    
  expression2   
    
  一個表達式,通常是一個用於搜索指定序列的列。expression2   屬於字符串數據類型分類。   
    
  start_location   
    
  在   expression2   中搜索   expression1   時的起始字符位置。如果沒有給定   start_location,而是一個負數或零,則將從   expression2   的起始位置開始搜索。   
    
  返回類型   
  int   
    
  注釋   
  如果   expression1   或   expression2   之一屬於   Unicode   數據類型(nvarchar   或   nchar)而另一個不屬於,則將另一個轉換為   Unicode   數據類型。   
    
  如果   expression1   或   expression2   之一為   NULL   值,則當數據庫兼容級別為   70   或更大時,CHARINDEX   返回   NULL   值。當數據庫兼容級別為   65   或更小時,CHARINDEX   僅在   expression1   和   expression2   都為   NULL   時返回   NULL   值。     
    
  如果在   expression2   內沒有找到   expression1,則   CHARINDEX   返回   0。   

發表在 站長文檔 | 留下評論