ul ol 測試
本段測試以下幾個 CSS 設定, 內容無意義:
- ul, ol 的多層次縮排
- ul, ol 在註釋區的縮排.
- 註釋區.
- 份段線
- 將靜態 (或全域) 變數, 改為使用區域變數.
- 需要將暫存的資料回傳給呼叫者時,
- 應改成由呼叫者提供回傳所需的暫存區 (所以函數的原型介面會有所更動, 可以對照標準函數庫 strtok(), strtok_r() 的差異).
- 需要將暫存的資料回傳給呼叫者時,
- 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
- 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc() 和 free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
- 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
- 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc() 和 free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
- 真的有困難時 (只有 library, 沒有 source code), 請改用類似 thread-safe wrapper 的方法來避免發生 reentrancy: 重寫另一個函數來取代它, 內容為禁止中斷 (是中斷不是 mutex); 呼叫該函數; 取出回傳資料; 復原中斷的原先設定. (要注意:是復原中斷的原先設定而不是啟用中斷; 可能會有其他負作用)
註九: 到底是在練什麼肖話! 換句話說, 重來一次: 其實就是在前面 (辨識字及已經處理的部份) 補一個左括號和 *, 然後這一組 () 或 [] 運算子之間插入一個右括號. 例如:
af[]() --> (*apf[])()
ff()() --> (*fpf())()
fa()[] --> (*fpa())[]
到底是在練什麼肖話! 換句話說, 重來一次: 其實就是在前面 (辨識字及已經處理的部份) 補一個左括號和 *, 然後這一組 () 或 [] 運算子之間插入一個右括號. 以上三個之所以要這麼改是因為:
- C 無法以函式為陣列元素, 只能用 (指向該函式的) 指標來替代. C 無法以函式為陣列元素, 只能用 (指向該函式的) 指標來替代.
- C 無法回傳一個函式, 只能用 (指向該函式的) 指標來替代. C 無法回傳一個函式, 只能用 (指向該函式的) 指標來替代.
- C 無法回傳一整個陣列, 只能用 (指向該陣列的) 指標來替代.
註十:
- item 10 int af[]() 應改用 item 25 int (*apf[])(). item 12 int fa()[] 應改用 item 33 int (*fpa[])().
- item 13 int ff()() 應改用 item 35 int (*fpf[])().
- item 19 int (*paf)[]() 應改為 int (*(*papf)[])().
- 將靜態 (或全域) 變數, 改為使用區域變數.
- 需要將暫存的資料回傳給呼叫者時,
- 應改成由呼叫者提供回傳所需的暫存區 (所以函數的原型介面會有所更動, 可以對照標準函數庫 strtok(), strtok_r() 的差異).
- 需要將暫存的資料回傳給呼叫者時,
- 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
- 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc() 和 free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
- 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
- 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc() 和 free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
- 真的有困難時 (只有 library, 沒有 source code), 請改用類似 thread-safe wrapper 的方法來避免發生 reentrancy: 重寫另一個函數來取代它, 內容為禁止中斷 (是中斷不是 mutex); 呼叫該函數; 取出回傳資料; 復原中斷的原先設定. (要注意:是復原中斷的原先設定而不是啟用中斷; 可能會有其他負作用)
Table 測試
本段測試以下幾個 CSS 設定, 內容無意義:
- Table 2色測試.
- Table 對角線測試.
- Table 寛度超長測試.
| TensorFlow Version |
Python Version | CUDA Toolkit |
cuDNN SDK |
|||||
|---|---|---|---|---|---|---|---|---|
| 3.6 | 3.7 | 3.8 | 3.9 | 3.10 | 3.11 | |||
| tensorflow_gpu-2.11.0 | GPU* | GPU* | GPU* | GPU* | 11.2, 11.7 GA | 8.7 for CUDA 11.x | ||
| tensorflow_gpu-2.10.1 | OK | OK | OK | OK | 11.2, 11.7 GA | 8.7 for CUDA 11.x | ||
| tensorflow_gpu-2.9.3 | OK | OK | OK | OK | 11.2, 11.7 GA | 8.7 for CUDA 11.x | ||
| tensorflow_gpu-2.8.4 | OK | OK | OK | OK | 11.2, 11.7 GA | 8.7 for CUDA 11.x | ||
| tensorflow_gpu-2.7.4 | OK | OK | OK | 11.2, 11.7 GA | 8.7 for CUDA 11.x | |||
| tensorflow_gpu-2.6.5 | 2.6.2 | OK | OK | OK | 11.2, 11.7 GA | 8.7 for CUDA 11.x | ||
| tensorflow_gpu-2.5.3 | 2.5.2 | OK | OK | OK | 11.2, 11.7 GA | 8.7 for CUDA 11.x | ||
| tensorflow_gpu-2.4.4 | GPU- | GPU- | GPU- | 11.1, 11.2, 11.7 GA |
8.7 for CUDA 11.x | |||
| OK | OK | OK | 11.0.3 | 8.7 for CUDA 11.x |
fieldset legend 測試
本段測試以下幾個 CSS 設定, 內容無意義:
- fieldset+legend 測試 (二種寛度)
- fontello 自定符號: 外部 (class='extern'), 下載 (class='dnld')
- 長超過行末的 URL 的折行.
- <kbd> 測試
- hljs 基本測試: hljs 附加 '行號' 及 '拷貝' 按鈕.
2015/07/02 更新
這一段已經移到 Syntax High Light (在 痞客邦部落格 中使用) Part2: highlight.js.
長超過行末的 URL 的折行: https://www.safaribooksonline.com/library/view/c-in-a/0596006977/ch04.html
<kbd> 測試: Ctrl+Alt+Del.
For Arduino
如果你只用過 arduino, 我們可以把它轉成 Arduino Sketch:
void setup() {
init_this();
init_that();
...
}
void loop() {
do_this();
do_that();
...
}
稍微比對一下大家應該很快的就看出來它們之間的關係: (其實 Arduino 的主結構就是一個無窮迴圈啊!)
- Sketch file 裡的 setup() 要做的事就是進入 while 迴圈之前要做的 (初始化的) 工作.
- Sketch file 裡的 loop() 要做的就是 while 迴圈裡的工作.
或者也可以反過來, 用一般 C 語言的觀點來看 Arduino Sketch:
void main(void)
{
setup(); // function setup() in arduino sketch
while(1) {
loop(); // function loop() in arduino sketch
}
}
img+svg, zoom in/out, del 測試
本段測試以下幾個 CSS 設定, 內容無意義:
- 圖片自動編號
- <img /> 疊合 <svg>
- 圖片放大/縮小與上項相互作用.
- 雙刪除線
- 雙刪除線, 圖片放大/縮小, <var> tag 相互作用.
可是, 後來發現, 這個 CSS 所產生的雙刪除線和我的放大圖片功能和 <var> tag 的背景方框產生衝突: 雙刪除線會出現在最上層 (即: 疊在圖片上), 試著改變 z-index 也無法改善 (這個現象應該和我用 position: relative; 有關).
可是, 後來發現, 這個 CSS 所產生的雙刪除線和我的放大圖片功能和 <var> tag 的背景方框產生衝突: 雙刪除線會出現在最上層 (即: 疊在圖片上), 試著改變 z-index 也無法改善 (這個現象應該和我用 position: relative; 有關).
highlight.js 測試
本段測試以下幾個 CSS 設定, 內容無意義:
- fontello 自定符號: 外部 (class='extern'), 下載 (class='dnld'), 由雲端下載 (class='dnld-cloud')
- hljs 基本測試: hljs '行號': 單行及指定啟始行號
- hljs 上色語言: CSS, HTML(+JS), JS
hljs.initLineNumbersOnLoad( {singleLine: true} );
#idle-pop,
.pop-ad-cover,
.content a.close.hide.left,
.content div.iframe a,
.content div.iframe a img,
.hot-articles,
#scupio_interstitialad,
ins.pixnet-ad,
section.discover-stream,
div[class*="article-ad"],
div[id^="div-gpt-ad"],
div[id^="pixad"],
.tag-container-parent .tag-container.global-keyword,
.rp-wrapper .related-products,
ul.relative-list > div,
li.relative-item > div[id],
li.relative-item.relative-item--ad,
li.relative-item[data-source^="ad_"],
.header-ad,
#main .header-fixed-area,
div.related, div.mgbox, div.GoogleActiveViewElement,
.adsbygoogle { display:none!important; height: 0px!important; min-height: 1px!important }
- 將以下 CSS 內容放在個人的網路磁碟中, 並取得下載該檔案的 URL. MS OneDrive, Google Drive, DropBox 均可, 還不會的可以參看我的這一篇貼文. (下載點).
- 將原本貼文章後面的 JS 換掉:
原本的 JS:
<script><!-- (function (url, callback) { var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', url); if (callback) script.onload = callback; document.getElementsByTagName('head')[0].appendChild(script); })("你要加載的 JS URL, 也就是上面產出的下載 JS URL"); --> </script>新的 JS:
<script><!-- if (typeof(loadCSS) == 'function') loadCSS("你要加載的 CSS URL, 也就是前一項提到的 CSS 的 URL"); --> </script>
var adjStyleRule = function(sheetname, selector, rule) {
// Is browser too old?
if (!document.styleSheets) return [];
var cRules = (function(sheetName, selector, rule) {
if (sheetName.length == 0) {
var cmpFunc = function(i, sheetname) {
return !document.styleSheets[i].href;
};
} else {
var cmpFunc = function(i, sheetname) {
return ( document.styleSheets[i].href &&
document.styleSheets[i].href.indexOf(sheetname)>=0 );
}
}
var ret = [];
var rexN = new RegExp("\\.new-layout ("+selector+")\\s*,\\s*\\.new-layout "+selector+"\\s\\*");
var rexS = new RegExp(selector, "g");
var rexR = new RegExp("("+rule.id+"\\s*:\\s*.*?)"+rule.text+";?", "g");
for (var i = document.styleSheets.length-1; i>=0; i--)
if (cmpFunc(i, sheetname)) {
var rules = document.styleSheets[i].cssRules;
for (var j = rules.length-1; j>=0; j--)
if (rules[j].selectorText && rules[j].selectorText.match(rexS)) {
var obj = {};
obj.ridx = j;
if (rules[j].selectorText.match(rexN))
obj.selTxt = rules[j].selectorText.replace(rexN, "$1");
else
obj.selTxt = rules[j].selectorText;
obj.cssTxt = rules[j].cssText.replace(/^.*\{\s*(.*)\s*\}/, "$1");
obj.newTxt = obj.cssTxt.replace(rexR, "$1");
obj.sheet = rules[j].parentStyleSheet;
ret.push( obj );
}
}
return ret;
})(sheetname, selector, rule);
var xRules = [
{ selTxt:
'#idle-pop,' +
'.pop-ad-cover,' +
'.content a.close.hide.left,' +
'.content div.iframe a,' +
'.content div.iframe a img,' +
'.hot-articles,' +
'#scupio_interstitialad,' +
// 'div[class^="article-footer article-ad"],' +
'section.discover-stream,' +
'div[class*="article-ad"],' +
'div[id^="div-gpt-ad"],' +
'div[id^="pixad"],' +
'.tag-container-parent .tag-container.global-keyword,' +
'.rp-wrapper .related-products,' +
'ul.relative-list > div, li.relative-item > div[id], li.relative-item.relative-item--ad,' +
// '.pix-related-post,' +
'.header-ad,' +
'#main .header-fixed-area,' +
// '#pilot div.pixnet-happix-pilot__launcher-bar,' +
'div#header-ad-fixed,' +
'div.related,' +
'div.mgbox, div.GoogleActiveViewElement,' +
'.adsbygoogle', cssTxt: 'display:none !important; height: 0px !important; min-height: 0px!important' }
];
function myAppendCss(rules, sht) {
if (sht.insertRule) {
for (var i=0; i<rules.length; i++)
sht.insertRule(rules[i].selTxt + ' { ' + rules[i].cssTxt + ' }', sht.cssRules.length);
} else if (sht.addRule) {
for (var i=0; i<rules.length; i++)
sht.addRule(rules[i].selTxt, rules[i].cssTxt, sht.cssRules.length);
}
}
function myReplaceCss(rules) {
var i = 0;
if (rules[0].sheet.insertRule) {
for ( ; i<rules.length; i++)
rules[i].sheet.deleteRule(rules[i].ridx);
for (i--; i>=0; i--)
rules[i].sheet.insertRule(rules[i].selTxt + ' { ' + rules[i].newTxt + ' }', rules[i].ridx);
} else if (rules[0].sheet.addRule) {
for ( ; i<rules.length; i++)
rules[i].sheet.removeRule(rules[i].ridx);
for (i--; i>=0; i--)
rules[i].sheet.addRule(rules[i].selTxt, rules[i].newTxt, rules[i].ridx);
}
}
function loadCSS(url) {
var fd = document.createElement('link');
fd.setAttribute('rel', 'stylesheet');
// fd.setAttribute('type', 'text/css');
fd.setAttribute('href', url);
document.getElementsByTagName('head')[0].appendChild(fd);
}
if (cRules.length && cRules.length > 0) {
// loadCSS("你要加載的自訂手機版 CSS URL");
myReplaceCss(cRules);
myAppendCss(xRules, cRules[0].sheet);
}
}("", "\\.article-content-inner\\.zoom(1|2|3|-lg|-md|-sm)", { id:"font-size", text:"!important" } );
