2011-07-21

[C語言] strtok 切開字串

#include <string.h>

char *strtok(char *str, const char *delim);

strtok 提供的功能是將字串依照所設定的切分符號字串分解。

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv){
    if (argc != 2) {
        fprintf(stderr, "Usage:  %s <list>\n", argv[0]);
        return 1;
    }

    /*將字串複製到新的空間*/
    char *temp = strdup((const char*)argv[1]);
    char *token;

    /*取出字段*/
    token = strtok(temp, ",");
    while (token != NULL){
        puts(token);

        /*取得下一個字段*/
        token = strtok(NULL, ",");
    }

    puts(argv[1]);
    puts(temp);

    /*釋放剛剛複製的空間*/
    free(temp);

    return 0;
}

[轉載][C語言] memcpy 複製指定長度的字串

轉載自:C Language -memcpy

#include <string.h>

void *memcpy (void *destination, const void *source, size_t num);

memcpy 提供的功能是烤貝記憶體中指定的資料長度製另外一個記憶位置中。

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv){
    char str[256];

    memcpy(str, "memcpy test", 7);

    printf("str = (%s)\n", str);
    // str = (memcpy )

    return 0;
}

[轉載][C語言] memset 設定記憶體空間的值

轉載自:C Language -memset

#include <string.h>

void *memset(void *s, int c, size_t n);

memset 設定位元組中的位元值,設定的方式從s 開始將n 個位元組設定成為c 的位元值並回傳s,經常運用的範圍是在將位元組的位元值清為0。

#include <string.h>

int main(){
    /*將str陣列中所有的值設定為0*/
    char str[10+1]; 
    memset(str, 0x00, sizeof(str));
    return 0;
}

[C語言] realpath 取得真實路徑

realpath 真是一個方便又好用函數,簡簡單單就可以取得一個路徑的絕對路徑,還可以檢查檔案是否存在。


#include <stdlib.h>

char *realpath(const char *path, char *resolved_pa​​th)

函數說明:realpath()用來將參數 path 所指的相對路徑轉換成絕對路徑後存於參數 resolved_pa​​th 所指的字符串數組或指針中。
返回值: 成功則返回指向 resolved_pa​​th 的指針,失敗返回 NULL,錯誤代碼存於 errno。

PS:當路徑檔案不存在時也會丟出 NULL,但 resolved_pa​​th 中仍會有化簡後的路徑。


#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv){
    if (argc != 2) {
        printf("Usage: %s <file>\n", argv[0]);
        return 1;
    }

    char path[1024];
    char *exist;

    exist=realpath(argv[1], path);

    /*經過化簡後的路徑*/
    puts(path);

    /*如果檔案不存在將會是 NULL*/
    if(exist==NULL){
        puts("NULL");
    }else{
        puts(exist);
    }

    return 0;
}

2011-07-20

HTML 標籤一覽

之前在做員工教育時整理的 HTML 標籤一覽,順便分享出來。

檔案連結:HTML 標籤一覽

HTML meta 彙整

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!--網頁文件的編碼格式-->

<meta http-equiv="Content-Language" content="zh-TW" />
<!--網頁內容的語言-->

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="X-UA-Compatible" content="IE=9, IE=8, chrome=1" />
<!--指定 IE 頁面呈現所使用的渲染引擎-->

<meta http-equiv="X-Frame-Options" content="deny" />
<!--限制頁面中Frame的使用方式-->
<!--   sameorigin – 只允許來自同一個網域的頁面嵌入-->
<!--   deny – 防止任何頁面的嵌入-->

<meta http-equiv="Date" content="Wed, 16 Feb 2011 22:34:13 GMT" />
<!--網頁內容的建立日期-->

<meta http-equiv="Last-Modified" content="Mon, 03 Jan 2011 17:45:57 GMT" />
<!--網頁內容的修改日期-->

<meta http-equiv="Location" content="URL=http://www.w3schools.com" />
<!--宣告此網頁的絕對制式資源位址-->

<meta http-equiv="Set-Cookie" content="w3scookie=myContent;expires=Fri, 30 Dec 2011 12:00:00 GMT; path=http://www.w3schools.com" />
<!--設定cookie,如果網頁過期,存盤的cookie將被刪除,需要注意的也是必須使用GMT時間格式-->

<meta http-equiv="Windows-Target" content="_top" />
<!--強制頁面在目前的視窗中以獨立頁面顯示,可以防止網頁被別人當作一個frame頁嵌入-->

<meta http-equiv="Refresh" content="300" />
<meta http-equiv="Refresh" content="10;URL=http://www.w3schools.com" />
<!--定時讓網頁在指定的時間內重新整理,或是跳轉到指定頁面-->

<meta http-equiv="Expires" content="Mon,12 May 2001 00:20:00 GMT" />
<!--設定網頁內容暫存的到期時間-->

<meta http-equiv="Pragma" content="no-cache" />
<!--禁止瀏覽器從近端機的緩存中調閱頁面內容(僅 IE 適用)-->

<meta http-equiv="cache-control" content="no-cache" />
<!--瀏覽器的緩存控制-->
<!--   public - 可放在公用的緩存區-->
<!--   private - 只能放在私人的緩存區-->
<!--   no-cache - 不許存放在緩存區-->
<!--   no-store - 可以暫時存放緩存區,但是不許長存--> 




<meta name="KeyWords" lang="EN" content="key1,key2,key3" />
<meta name="KeyWords" lang="zh-TW" content="關鍵字1,關鍵字2,關鍵字3" />
<!--網頁內容的關鍵字-->

<meta name="Abstract" content="內容摘要" />
<!--網頁內容的摘要-->

<meta name="Description" content="內容描述" />
<!--網頁內容的描述-->

<meta name="Generator" content="Aptana 2" />
<!--製作網頁的工具名稱-->

<meta name="Author" content="作者名稱" />
<!--網頁製作者的名稱-->

<meta name="Reply-To" content="abc@mail.com" />
<!--聯繫人的 Email-->

<meta name="Website" content="http://www.website.com/" />
<!--網頁製作者的網站-->

<meta name="owner" content="http://www.website.com/" />
<!--定義所有者的網頁或網站-->

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<!--viewport的作用是告訴瀏覽器,目前裝置有多寬(或多高),以便在縮放時有個基準-->
<!--   width - viewport的寬度(Number或 device-width)-->
<!--   height - viewport的高度(Number或 device-height)-->
<!--   initial-scale - 初始的縮放比例(0.25~5)-->
<!--   minimum-scale - 允許用戶縮放到的最小比例(0.25~5)-->
<!--   maximum-scale - 允許用戶縮放到的最大比例(0.25~5)-->
<!--   user-scalable - 用戶是否可以手動縮放(1/0或yes/no)-->

<meta name="Robots" content="noodp,noydir" />
<!--搜尋引擎檢索設定-->
<!--   all - 內容將被檢索,且頁面上的連結可以被查詢-->
<!--   none - 內容將不被檢索,且頁面上的連結不可以被查詢-->
<!--   index - 內容將被檢索-->
<!--   follow - 頁面上的連結可以被查詢-->
<!--   noindex - 內容將不被檢索,但頁面上的連結可以被查詢-->
<!--   nofollow - 內容將不被檢索,頁面上的連結可以被查詢-->

<meta name="Googlebot" content="nofollow" />
<!--針對 Google bot 的robots-->

<meta name="baiduspider" content="nofollow" />
<!--針對百度 bot 的robots-->

<meta name="classification" content="Computer" />
<!--告知搜索引擎網站(頁)應被列到哪個目錄下-->

<meta name="copyright" content="2011© W3Schools.com" />
<meta name="doc-rights" content="2011© W3Schools.com" />
<!--網頁的版權聲明-->

<meta name="Distribution" content="Taiwan" />
<!--描述網站(頁)的發佈地-->
<!--   web - 為全面互聯網-->
<!--   intranet - 只為內部網路-->
<!--   global - 全球性網頁-->
<!--   local - 本地端網頁-->
<!--   Intern use - 測試網頁-->

<meta name="doc-class" content="Completed" />
<!--指定文件的完成狀態-->
<!--   Completed - 已完成-->
<!--   Draft - 草稿-->
<!--   Living Document - 動態文件-->
<!--   Published - 發佈-->

<meta name="DownloadOptions" content="noopen" />
<!--控制下載對話匡上的按鈕顯示-->
<!--   noopen - 隱藏[開啟]的按鈕-->
<!--   nosave - 隱藏[儲存]的按鈕-->

<meta name="name" content="My document" />
<!--指定文件名稱-->

<meta name="rating" content="" />
<!--網頁內容分級-->
<!--   14 years - 14歲以上-->
<!--   general - 普通-->
<!--   mature - 成年人-->
<!--   restricted - 限制-->
<!--   safe for kids - 孩童-->

<meta name="resource-type" content="document" />
<!--告知這個網頁的形式是文件-->

<meta name="revisit-after" content="7 days">
<!--搜尋引擎檢索器多久之後來造訪一次-->

<meta name="其他" content="" />
<!--你可以定義自己 meta 名稱與描述-->




<!--[針對 IE 的設定]-->

<meta name="MSSmartTagsPreventParsing" content="yes"/>
<!--防止微軟頁面編輯軟體在頁面上自動添加標籤-->

<meta http-equiv="imagetoolbar"  content="no"/>
<!--關閉IE的圖片管理工具列-->

<meta http-equiv="MSThemeCompatible" content="no" />
<!--關閉XP的藍色立體按鈕系統顯示樣式-->

<meta http-equiv="Pics-label" content="">
<!--網頁等級升等職稱,在IE的internet選項中有一項內容設定,可以防止瀏覽一些受限制的網站,而網站的限制層級就是通過meta內容來設定的-->

<meta http-equiv="Page-Enter" content="revealTrans(duration=10,transtion=50)">
<meta http-equiv="Page-Exit" content="revealTrans(duration=20,transtion=6)">
<!--設定IE進入和離開頁面時的特殊效果-->

2011-07-11

為 Blogger 的地點標記加上 Google Maps 呈現

Blogger 增加了一個標記地點的功能,但只有標記也不知道能拿來做什麼,後來想想用JS寫了一個呈現的小程式,讓文章中設定的資訊可以直接呈現。

以下程式不支援 IE,因為我不想在我的 Blog 上用 Framework,所以 IE 就沒辦法呈現,哈!只要將以下其中一個的程式碼加在 </body> 之前就可以了。

在[文章]的最[前面]插入地圖
<script type="text/javascript">
function showGoogleMap(pos){
    var w=300,h=300,z=14;
try {
    var postOuter=document.getElementsByClassName(&#039;post-outer&#039;);
    for(var i=0; i&lt;postOuter.length; i++){
        var postLocation=postOuter[i].getElementsByClassName(&#039;post-location&#039;)[0];
        var point=postLocation.getElementsByTagName(&#039;a&#039;)[0];
        if(!point){continue;}
        var mapIframe=&#039;&lt;iframe width=&quot;&#039;+w+&#039;&quot; height=&quot;&#039;+h+&#039;&quot; src=&quot;&#039;+point.href+&#039;&amp;output=embed&amp;iwloc=z&amp;z=&#039;+z+&#039;&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&#039;;
        var postBody=postOuter[i].getElementsByClassName(&#039;post-body&#039;)[0];

        switch(pos){
            case &#039;loc-a&#039;:
                postLocation.innerHTML+=mapIframe;
                break;
            case &#039;loc-b&#039;:
                postLocation.innerHTML=mapIframe+postLocation.innerHTML;
                break;
            case &#039;post-a&#039;:
                postBody.innerHTML+=mapIframe;
                break;
            case &#039;post-b&#039;:
            default:
                postBody.innerHTML=mapIframe+postBody.innerHTML;
                break;
        }
    }
}catch(e){}
}
showGoogleMap(&#039;post-b&#039;);
</script>

在[文章]的最[後面]插入地圖
<script type="text/javascript">
function showGoogleMap(pos){
    var w=300,h=300,z=14;
try {
    var postOuter=document.getElementsByClassName(&#039;post-outer&#039;);
    for(var i=0; i&lt;postOuter.length; i++){
        var postLocation=postOuter[i].getElementsByClassName(&#039;post-location&#039;)[0];
        var point=postLocation.getElementsByTagName(&#039;a&#039;)[0];
        if(!point){continue;}
        var mapIframe=&#039;&lt;iframe width=&quot;&#039;+w+&#039;&quot; height=&quot;&#039;+h+&#039;&quot; src=&quot;&#039;+point.href+&#039;&amp;output=embed&amp;iwloc=z&amp;z=&#039;+z+&#039;&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&#039;;
        var postBody=postOuter[i].getElementsByClassName(&#039;post-body&#039;)[0];

        switch(pos){
            case &#039;loc-a&#039;:
                postLocation.innerHTML+=mapIframe;
                break;
            case &#039;loc-b&#039;:
                postLocation.innerHTML=mapIframe+postLocation.innerHTML;
                break;
            case &#039;post-a&#039;:
                postBody.innerHTML+=mapIframe;
                break;
            case &#039;post-b&#039;:
            default:
                postBody.innerHTML=mapIframe+postBody.innerHTML;
                break;
        }
    }
}catch(e){}
}
showGoogleMap(&#039;post-a&#039;);
</script>

在[地點]的[前面]插入地圖
<script type="text/javascript">
function showGoogleMap(pos){
    var w=300,h=300,z=14;
try {
    var postOuter=document.getElementsByClassName(&#039;post-outer&#039;);
    for(var i=0; i&lt;postOuter.length; i++){
        var postLocation=postOuter[i].getElementsByClassName(&#039;post-location&#039;)[0];
        var point=postLocation.getElementsByTagName(&#039;a&#039;)[0];
        if(!point){continue;}
        var mapIframe=&#039;&lt;iframe width=&quot;&#039;+w+&#039;&quot; height=&quot;&#039;+h+&#039;&quot; src=&quot;&#039;+point.href+&#039;&amp;output=embed&amp;iwloc=z&amp;z=&#039;+z+&#039;&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&#039;;
        var postBody=postOuter[i].getElementsByClassName(&#039;post-body&#039;)[0];

        switch(pos){
            case &#039;loc-a&#039;:
                postLocation.innerHTML+=mapIframe;
                break;
            case &#039;loc-b&#039;:
                postLocation.innerHTML=mapIframe+postLocation.innerHTML;
                break;
            case &#039;post-a&#039;:
                postBody.innerHTML+=mapIframe;
                break;
            case &#039;post-b&#039;:
            default:
                postBody.innerHTML=mapIframe+postBody.innerHTML;
                break;
        }
    }
}catch(e){}
}
showGoogleMap(&#039;loc-b&#039;);
</script>


實際呈現樣式:


[轉載] Google Maps嵌入參數

為了製作 Blogger 上的地圖呈現,找到一篇詳細參數說明的翻譯,雖然可用的選項不多,但留著以後方便查。


轉載自:Google Maps嵌入参数
原文:http://mapki.com/wiki/Google_Map_Parameters


一般性的內容

q=
這是最常用的參數。

查詢- 所有被傳入這個參數的內容會被象maps.google.com中的查詢輸入框中所輸入的內容一樣被處理,特別是:

  • 要查找的精確地址,標記點或者在某個特殊點上顯示的信息框。
    • 提示:在附近不能有類似或者著名的地點的查詢值才是可靠的。例如,給出一個會議通知,告訴人們去128號門牌號碼的地點,但是只能在街區信息中發現一個12-8的位置(比如6/2010,誰會知道它以後會被匹配到什麼信息? )
  • 城鎮名字,或者前面的部分郵政編碼,會顯示到標記或者信息框裡。
  • 由緯度和經度信息指定的位置,用十進制形式,比如(52.123N,2.456W或52.123,-2.456),或者採用度/分/秒來表示(52 7 22.8N,2 27 21.6W或52 7 22.8,-2 27 21.6),或者度和分(52 7.38N,2 27.36W或52 7.38,-2 27.36)。
  • 在信息窗口和側邊欄中以粗體顯示的文本內容,增加括號()。你可以在不希望斷行的的時候使用%A0防止斷行發生。你還可以在行尾增加足夠多的%A0,並在後面跟一個空格(在URL中使用+號)來強制產生斷行。例子如原文指出:URL: http://maps.google.com?q=New+ York,+NY+(Mapki%A0is%A0a%A0very%A0good%A0Wiki%A0for%A0Google%A0Maps!%A0%A0%A0%A0%A0%A0%A0%A0+The%A0previous%A0line%A0is%A0now% A0sufficiently%A0long!)
  • to和from需要激活駕駛線路規劃功能。
  • 關鍵字near和loc:會激活本地搜索功能。
  • 兩個街之前可以用空格&空格形式,但是在URL裡需要使用+%26%或%20%26%20,而不是+&+或+&amp;+。
  • 需要指出的是+號,其實它與,號的作用相同。
  • 位置信息也可以由在@符號後的十進制形式來表達,如(@52.123,-2.456)。這個方式應該會自動給出一個較低的縮放比例。使用這種格式會影響到查詢的其它參數。 @符號,而不是near或者loc:可以形成單一的查詢結果。而其它的方式可能返回數以千計的結果。
  • q=10+Downing+Str+is+not+here@51.50335,-0.227721
    可以在指定的地址放置一個自定義的提示標記,比如q=唐寧街10號不在這裡@51.50335,-0.227721。  

    • 這個標籤不能是國家的名字,或者沒有顯示出標記的時候。但是當給出座標的情況下,它可以是空白的。
  • 座標之外增加()標籤可以為Google地圖提供一些提示。
    1. http://maps.google.com/maps?q=24.197611,120.780512
      我們的位置正好在某被錯誤標識的知名地點附近。讀者應該可以注意到正確的綠色箭頭。
    2. http://maps.google.com/maps?q=Dan@24.197611,120.780512
      Dan標籤可以擴展成為某機場的名字(Danville Regional Airport)
    3. http://maps.google.com/maps?q=24.197611,120.780512+ (Dan)
      這種情況會安全一些。但是顯示的是一個黃色的標記。
    4. http://maps.google.com/maps?q=loc:24.197611,120.780512這是一個精確的地點表示。
  • 要注意用%表述非ASCII字符,比如(和)還有+是安全的,但是空格必須以%20表示。注意它們可能被用戶的瀏覽器解釋錯誤。
  • sky:前綴用來查詢由Sky產生的KML內容。這個參數是被Google Sky使用,並產生KML輸出。
  • 包含GeoRSS數據的Google Earth .KML/.KMZ文件或者RSS輸出的完整URL,可以被Google Earth使用,裡麵包含的信息可以被顯示在地圖上。

near=
可以使用位置信息的一部分,而不是像q=參數那樣輸入全部信息。

g=
這是一個給q參數提供額外上下文信息的地址或位置。 Google Maps在這裡自己用來保存上一次運行的搜索。注:如果這是第一次運行,它將包含你所開始的位置信息。所以它有潛在的信息洩露的風險,你需要檢查你是否真的明白並且要分享這個參數所對應的信息。


Search Mode/查詢模式

  • mrt=指出查詢的類型(空白表示所有內容-缺省)
    • mrt=all值為all指出查詢所有內容。
    • mrt=loc值為loc指出是進行位置信息查詢,它需要q=參數。
    • mrt=yp值為yp指出是商業查詢(即:黃頁),它也需要q=信息,一般情況下是位置信息。
    • mrt=websearch值為websearh指出映射的web頁面。這些網頁通過GoogleBot能夠指出地理位置信息。
    • mrt=realestate值為realstate為固定資產查詢。
    • mrt=ds值為ds時為相關的地圖。 Google的GeoRSS源索引(可能是KML?)
  • start=start=參數會跳過前(start-1)個匹配結果。
  • num=num=參數顯示,最多這個數量的匹配結果。合法的範圍是0到20(但是0有點沒有用處)。

Location/位置信息

  • ll= 顯示地圖時中心點的緯度、經度信息。要注意次序。而只接受十進制數值格式才可以。
    如果使用了這個參數但是沒有使用查詢,那麼地圖就以這個點為中心點顯示,但是沒有標記或信息窗口顯示。
  • sll=
    商業查詢執行時指定的點的緯度和經度。你可以使用它來執行一個偏離中心的商業搜索。 Google使用它,所以在執行完一個商業查詢後,中心移動後可以使用“鏈接到此頁”來記錄地圖位置。使用<math>map.getBounds().getSouthWest().toUrlValue()</math>將返回與maps.google.com相同的結果。
  • spn=spn=大致的經緯區域。如果沒有指縮放參數z=,那麼將調整縮放水平到一個合理的數值。
  • sspn=
    屏幕區域,計算方法:
    <math>new GLatL​​ng(map.getBounds().getNorthEast().lat() – map.getBounds().getSouthWest().lat(), map.getBounds().getNorthEast().lng() – map .getBounds().getSouthWest().lng()).toUrlValue()</math>
  • latlng=這是一個奇怪的參數。它有3個由,號分隔的數字。前兩個數字(大概相當於緯度和經度的100000倍)被忽略。第三個數字似乎是Google內部用來處理特殊業務的企業ID。比如latlng=0,0,14944637421527611642代表Blackpool社區教堂。指定此參數會執行一個針對該業務面頁的Google搜索,並顯示一個小地圖。其它參數,特別是q=參數,必須是有效的內容(但不一定涉到目標業務)。
  • cid= Similar to latitude and longitude, but generating a different map size.
    這個值似應該是地點的編號。原文的表述與latlang重複。
  • geocode=
    geocode值似乎是在線路規劃時各關鍵點的編碼。每個geocode之間使用%3B來分隔。
  • radius=在指定半徑內採用本地化信息。需要sll參數指定信息或者類似中心點位置才能使用。單位會採用英里,但是在公制國家可能會採用公里。這個參數有助預防Google結果遠離了結果城市,並讓它被限制在指定區域。

Map Display/地圖顯示

  • t=地圖類型。 m=>常規地圖,k=>衛星地圖,h=>混合地圖,p=>地域地圖,e=>GoogleEarth
  • z=縮放級別,取值範圍1~20。1比例尺最大,20比例尺最小。
  • layer=激活圖層。目前t表示交通情況。
  • lci=激活可以層疊的圖層。用,號分隔。
    • com.panoramio.all 來自Panoromio的圖片
    • com.youtube.all來自YouTube的視頻
    • org.wikipedia.en維基百科(英文)
    • com.google.ugc.c752d13e87c4fbd7來自Webcams.travel的網絡攝像頭。
    • transit公共交通
    • bike自行車線路
  • view=這個參數在測試的時候沒有看出分別。

Directions/路徑規劃

  • saddr= 出發點地址。
  • daddr=目標地址。
    “+to:” 可以使用+to:子句增加多地點線路規劃時的目標地址信息,比如daddr=大石洞村+to:馬欄廣場+to:棠梨溝
  • mra ?? 此參數涵義未知,可能的取值:dm/dpe/cc/ls…
  • mrcr ??此參數涵義未知,可能的取值:0
  • mrsp解析座標到街名。
    • mrsp=0打開從座標解析街名
    • mrsp=1關閉從座標解析街名
  • mrad= 附加目標地址。如果你的行程有三個地點,你可以用saddr=,daddr=和mrad=表示,而不採用+to:子句。
  • dirflg 路線類型。
    • dirflg=h避免高速公路。
    • dirflg=t避免收費路段。
    • dirflg=r採用公共交通。僅在一些區域可用。還可以提出附加的時間信息。
    • dirflg=w步行方式。仍在測試狀態。
    • dirflg=b騎行方式。僅在某些區域可用,仍在測試狀態。
  • via=用,號分隔的經由地址。
  • doflg=距離單位。缺省的是國家的法定標準。
    • doflg=ks ??這個真不知道。
    • doflg=ptk輸出距離單位顯示為公里。
    • doflg=ptm輸出距離單位顯示為英里。
  • ttype= 時間類型。在dirflg=r的狀況下採用公共交通工具的時候date和time參數的解析類型。  
    • ttype=now現在就出發,這個會忽略date和time參數。
    • ttype=dep 出發時間。
    • ttype=arr 到達時間。
  • date= 出發/到達日期,格式mm/dd/[yy]yy。由ttype決定是哪個日期。
  • time= 出發/到達時間,格式hh:mm am|pm。由ttype決定是哪個時間。
  • sort= 公共交通線路的排序 
    • sort=def缺省的排序方式。最快的行程優先。
    • sort=num最少的換乘優先。
    • sort=walk最少的步行優先。
  • start=與搜索模式很像,選擇第n個結果。

Street View/街景

  • cbll= Latitude,longitude for Street View.街景的經緯度信息。
  • cbp= Street View window that accepts 5 parameters街景窗口可以接受5個參數:
    1. 街景/地圖安排,11=上半部街景,下半部地圖,12=大部分是街景顯示,角部為可以調整角度的地圖
    2. 移軸角度,範圍是-90到90度。
    3. 縮放範圍,0~2
    4. 斜度(採用度數表示),-90~90,缺省值是5
  • panoid=這裡的ID是附近的全景對象的ID。全景對象採用可以點擊的小箭頭,你可以移動到下一個對象。

Output Control/輸出控制

  • hl=主機語言。僅支持一部分語言,如hl=fr表示法語
  • om=這個參數指定下方縮略圖是否顯示。如果指定一個1以外的值,縮略圖會關閉。 (經過測試1,2會顯示)。如果參數會被省略或者指定了值1,則顯示。
  • ie=指定輸入的字符編碼,比如ie=UTF8。
  • oe=指定輸出的字符編碼,比如oe=UTF8。
  • output=指定輸出格式,空白(缺省值)是標準的網頁格式。  
    • output=html在整合到Google地圖前使用舊風格的Google本地頁面格式,顯示小地圖和大的邊欄風格。
    • output=js輸出Google地圖使用的JavaScript對象和函數調用,包括駕駛線路的多邊形編碼和HTML格式的場景信息。
    • output=kml輸出包含當前地圖信息的KML文件。
    • output=mobile針對移動設備的格式輸出。在地圖中央位置顯示一個簡單的紅色圖釘。所有的移動基於鏈接而不是鼠標的移動。
    • output=nl輸出Google Earth和Google Maps可以獲取NetworkLink信息的KML文件內容。
    • output=embed輸出可以嵌入到第三方網站的HTML內容。這個參數僅與加密的s=參數一塊工作,據推測可能是阻止顯示不可預知的內容。
    • output=dragdir返回JSON對象。此對象包括反向的地理位置編碼和針對給定saddr(線路開始點)和daddr(線路結束點)線路的多邊形編碼。
    • output=georss 針對當前地圖(可能僅適用於MyMaps)的GeoRSS輸出。
  • f=控制查詢表單的顯示風格。  
    • f=d顯示成路徑規劃表單(有兩個輸入框,始點、終點)
    • f=l此參數似乎沒有作用了。
    • f=q缺省的顯示方式,單一輸入框。
  • pw=激活打印模式,初始化打印。與原文不同,pw=1/2兩個值均可以。測試環境是Ubuntu 11.04+Google Chrome。
  • v= 如果指定了output=kml,則此參數指定kml的版本。缺省是2.0,如果想指定是2.2,則v=2.2。

提示信息窗口

信息顯示窗口就是漫畫書中的對話氣球框。


我的地圖

  • msa=參數目前應該沒有意義了。

雜項

  • vp= 這個參數會使Google地圖切換到版權服務模式。它以JavaScript格式返回所有者的版權信息而不是返回可以畫出地圖的html內容。 vp參數指出視圖位置(即地圖的中心位置)。版權服務僅在提供了spn=z=參數的情況下才可以工作。它們分別代表區域和縮放比例。一還有一些可選的參數,比如t=,它用來指出地圖的類型,key=用來指出站點用來執行查詢時所用到的API key。例如:http://maps.google.com/maps?spn=0.030372,0.068665&z=6&t=h& vp=53.859462,-3.038235
  • ftr=0 這個參數是用來關掉所有Google地圖實驗室特性的。當你遇到這些特性出現問題或者無法載入地圖,這個特性可能提供有用的途徑。使用這個參數之後,你需重新激活那些實驗室特性。比如訪問:http://maps.google.com/maps?ftr=0。這個鏈接會提示你關掉了哪些特性,並且會提示是否保存這種改變。
  • source= 未知。一個值是s_d,另一個是s_q。
  • noexp= 未知。其中一個值是0。
  • noal= 未知。其中一個可取值是0。
  • oi=nojs 在它合併到Google地圖之前使用舊風格的Google本地頁面格式,使用小地圖和大的邊條,就像前面指定output=html選項那樣。這個選項需要停止JavaScript的工作。

[轉載] 屬性(Attribute)與特性(Property)

之前看到jQuery 1.6.1上場救援,不用改寫attr()囉這篇文章時,讓我很疑惑 Attribute 與 Property 到底是有什麼不同,在字典上查出來的結果都是屬性,爬了一些文章後找到一篇不錯的解釋文。


轉載自:屬性與特性

在進入瀏覽器作為客戶端之後,屬性(Attribute)與特性(Property)這兩個名詞就不斷交相出現,到目前還沒正式解釋它們的意義。

其實在正式進入瀏覽器作為客戶端前,對於JavaScript物件本身帶有的名稱,這邊的文件都用特性這個名詞,代表以某個JavaScript物件作為名稱空間的名稱。例如:
var obj = {
    x : 10,
    y : 20
};

以上文件都稱,物件obj擁有特性x與y,特性x的值為10,特性y的值為20。

HTML本身可以擁有屬性。例如:
<input name="user" value="guest">

文件中會稱,<input>標籤擁有屬性name與value,屬性值各為user與guest。

瀏覽器會剖析HTML,為每個標籤建立對應的DOM物件,完成剖析後,對於HTML的所有屬性(無論標籤上是否有撰寫),DOM物件上會建立對應的特性,通常屬性名稱是什麼,特性名稱也會是什麼,如果標籤上有設定某個屬性,則屬性值為何,特性值也就為何,如果標籤上沒有設置屬性,則DOM物件上的特性會有預設值

例如上例中,<input>對應的DOM元素上,name特性與value特性值分別是user與guest。你可以如下分別取得(假設是頁面中第一個<input>標籤):
var input = document.getElementsByName('user')[0];
var name = input.name;
var value = input.value;

像這時,DOM元素上的name、value特性,也可以稱之為name與value屬性。也就是說,屬性這個詞,可用來表示HTML中的屬性,也可用來表示DOM中相對應的特性。對於HTML中沒有設定的標籤屬性,DOM上也會有對應的特性(屬性),不過都是預設值,例如,上面的<input>標籤並沒有設置type屬性,但DOM物件上對應的特性(屬性),其值為"text"。

不過,HTML的屬性名稱未必與DOM物件的特性(屬性)名稱相對應。例如class就是一個例子,因為class在JavaScript中是關鍵字,在DOM上要取得HTML的class屬性對應名稱必須使用className,<label>的for屬性,因為for是關鍵字,而必須使用htmlFor特性來取得。例如:
<img id="logo" src="images/caterpillar.jpg" class="logo" title="Caterpillar's Logo"/>


若要以JavaScript取得HTML的class屬性值,則必須:
var className = document.getElementById('logo').className;

透過JavaScript特性存取方式取得HTML屬性的對應值,也未必是HTML屬性中真正設定的值。例如,透過JavaScript取得<img>的src,結果是絕對URL,即使屬性中設定的是相對URL。

瀏覽器在剖析完HTML後,對於HTML中有設置的屬性,其實會在DOM物件上建立attributes特性。你可以如下顯示attributes的元素值,每個元素的型態是Attr
var attributes = document.getElementById('logo').attributes;
for(var i = 0; i < attributes.length; i++) {
    var attrName = attributes[i].nodeName;
    var attrValue = attributes[i].nodeValue;
    ...
}

以物件結構來表示的話:
{
    attributes : {
        '0' : {nodeName : 'id', nodeValue : 'logo', ...},
        '1' : {nodeName : 'src', nodeValue : 'images/src', ...},
        '2' : {nodeName : 'class', nodeValue : 'logo', ...},
        '3' : {nodeName : 'title', nodeValue : 'Caterpillar\’s logo', ...},
        length : 4
        ...
    },
    id : 'logo',
    src : 'http://caterpillar.onlyfun.net/images/caterpillar.jpg',
    className : 'logo',
    title : 'Caterpillar\'s logo',
    …
}

attributes上的特性值,是HTML上真正設定的屬性與值。在文件剖析完畢後,DOM物件上的屬性(特性)與attributes上的特性是對應的。

注意,上面是以物件結構來示意,並不是指真正的型態就是上面所表示的。attributes的型態會是 NamedNodeMap ,而每個索引元素的型態會是 Attr(如果你手邊有個JavaScript Debugger的話,可以很方便地觀察這些東西)。

你可以使用DOM物件的getAttribute()來取得attributes中的屬性,使用setAttribute()設定attributes中的屬性(同時亦會改變DOM對應的特性),使用removeAttribute()來移除attributes屬性。

移除屬性是指移除attributes上對應的特性值,而非移除DOM物件上對應的特性(屬性)值,DOM物件上對應的特性(屬性)值在使用removeAttribute()後,只是回到預設值,而不是直接將特性移除,沒有任何操作可以將DOM上對應屬性的特性移除。如果HTML上沒有設置該屬性,則使用getAttribute()指定該屬性會取得null,但並不表示DOM上沒有對應屬性的特性,而是該特性值會是預設值。使用setAttribute()可以在attributes中設定屬性,相對應的DOM特性值也會改變。

例如,以下的程式,只會將attributes的中src對應的特性移除,不會移除DOM上src特性(屬性),DOM上src只是回到''的預設值。
var img = document.getElementById('logo');
img.removeAttribute('src');
// img.src 的值是 '',不是undefined
// img.attributes['src'] 是 undefined

如果你直接改變DOM上的特性(屬性),attributes中對應的屬性並不會有變化。例如:
<input id="user" value="guest">

使用以上的程式:
document.getElementById('user').value = 'Justin';
var user1 = document.getElementById('user').value; // 值是'Justin'
var user2 = document.getElementById('user').getAttribute('value'); // 值是'guest'

如果你要同時改變attribues上的屬性與DOM上的特性(屬性),則要使用setAttribute()。例如:
document.getElementById('user').setAttribute('value', 'Justin');
var user1 = document.getElementById('user').value; // 值'Justin'
var user2 = document.getElementById('user').getAttribute('value'); // 值'Justin'


其他參考資訊:
property和attribute的区别
JavaScript property 、 DOM property 、 HTML attribute
翻譯名詞:attribute、property

2011-07-05

關閉 Firefox 外掛套件的版本檢查

最近 Firefox 升級的速度實在太頻繁了,導致很多外掛套件不能用了,再加上外掛套件不可能一致的推出新版,所以最快的方式就是暫時關閉外掛套件的版本檢查。
  1. 在網址列輸入 about:config 進入進階設定中
  2. 新增 Boolean 值 extensions.checkCompatibility.5.0false
    PS: 5.0 為你當前 Firefox 的版本,請以你目前的版本更換參數名稱。
  3. 重啟 Firefox

參考來源:[每週技巧]使firefox可安裝與使用不相容add-on的方法

2011-07-04

創:光速戰記 (Tron Legacy) console 上的指令

$ whoami
flynn

$ uname -a
SolarOS 4.0.1 Generic_50203-02 sun4m i386
Unknown.Unknown

$ login -n root
Login incorrect
login:backdoor
No home directory specifed in password file!
Logging in with home=/

#bin/history
  488  cd /opt/LLL/controller/laser/
  489  vi LLLSDLaserControl.c
  490  make
  491  make install
  492  ./sanity_check
  493  ./configure -o test.cfg
  494  vi test.cfg
  495  vi ~/last_will_and_testament.txt
  496  cat /proc/meminfo
  497  ps -a -x -u
  498  kill -9 2207
  499  kill 2208
  500  ps -a -x -u
  501  touch /opt/LLL/run/ok
  502  LLLSDLaserControl -ok 1

#