ul ol 測試


本段測試以下幾個 CSS 設定, 內容無意義:

  • ul, ol 的多層次縮排
  • ul, ol 在註釋區的縮排.
  • 註釋區.
  • 份段線

  1. 將靜態 (或全域) 變數, 改為使用區域變數.
  2. 需要將暫存的資料回傳給呼叫者時,
    • 應改成由呼叫者提供回傳所需的暫存區 (所以函數的原型介面會有所更動, 可以對照標準函數庫 strtok(), strtok_r() 的差異).
    • 需要將暫存的資料回傳給呼叫者時,
      • 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
      • 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc()free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
    • 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
    • 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc()free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
  3. 真的有困難時 (只有 library, 沒有 source code), 請改用類似 thread-safe wrapper 的方法來避免發生 reentrancy: 重寫另一個函數來取代它, 內容為禁止中斷 (是中斷不是 mutex); 呼叫該函數; 取出回傳資料; 復原中斷的原先設定. (要注意:是復原中斷的原先設定而不是啟用中斷; 可能會有其他負作用)

註九: 到底是在練什麼肖話! 換句話說, 重來一次: 其實就是在前面 (辨識字及已經處理的部份) 補一個左括號*, 然後這一組 ()[] 運算子之間插入一個右括號. 例如:
af[]() --> (*apf[])()
ff()() --> (*fpf())()
fa()[] --> (*fpa())[]

到底是在練什麼肖話! 換句話說, 重來一次: 其實就是在前面 (辨識字及已經處理的部份) 補一個左括號*, 然後這一組 ()[] 運算子之間插入一個右括號. 以上三個之所以要這麼改是因為:

  1. C 無法以函式為陣列元素, 只能用 (指向該函式的) 指標來替代. C 無法以函式為陣列元素, 只能用 (指向該函式的) 指標來替代.
  2. C 無法回傳一個函式, 只能用 (指向該函式的) 指標來替代. C 無法回傳一個函式, 只能用 (指向該函式的) 指標來替代.
  3. 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)[])().

  • 將靜態 (或全域) 變數, 改為使用區域變數.
  • 需要將暫存的資料回傳給呼叫者時,
    1. 應改成由呼叫者提供回傳所需的暫存區 (所以函數的原型介面會有所更動, 可以對照標準函數庫 strtok(), strtok_r() 的差異).
    2. 需要將暫存的資料回傳給呼叫者時,
      1. 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
      2. 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc()free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
    3. 如果呼叫者用 malloc() 動態取得暫存區, 也要記得 free().
    4. 如果函數的原型介面不可以被更動, 也可以將 malloc() 改由函數本身來呼叫, 但這樣子程式會變得不易維護. 主要是因為呼叫 malloc()free() 在不同一個函數內, 容易犯錯而造成 memory leak, 故非不得已不建議採用.
  • 真的有困難時 (只有 library, 沒有 source code), 請改用類似 thread-safe wrapper 的方法來避免發生 reentrancy: 重寫另一個函數來取代它, 內容為禁止中斷 (是中斷不是 mutex); 呼叫該函數; 取出回傳資料; 復原中斷的原先設定. (要注意:是復原中斷的原先設定而不是啟用中斷; 可能會有其他負作用)

Table 測試


本段測試以下幾個 CSS 設定, 內容無意義:

  • Table 2色測試.
  • Table 對角線測試.
  • Table 寛度超長測試.

TensorFlow GPU support matrix (Unofficial)
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 附加 '行號' 及 '拷貝' 按鈕.

<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; 有關).

Pi 3B+
(來源: 維基百科)

PoE Head position of Raspberry Pi 3B+

Pi 3B+
(來源: 維基百科)

可是, 後來發現, 這個 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 }
  1. 將以下 CSS 內容放在個人的網路磁碟中, 並取得下載該檔案的 URL. MS OneDrive, Google Drive, DropBox 均可, 還不會的可以參看我的這一篇貼文. (下載點).
  2. 將原本貼文章後面的 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" } );

 

文章標籤
全站熱搜
創作者介紹
創作者 MagicJackTing 的頭像
MagicJackTing

傑克! 真是太神奇了!

MagicJackTing 發表在 痞客邦 留言(0) 人氣(52)