2014年10月15日 星期三

[筆記] 五個一定要學來給 Stylish 使用的的 CSS 技巧,實在是太實用了!

 使用 Stylish 不外乎就是我們對於某些網站的長相覺得不合用,想要為自己的需求客製化一下,而在自動化的應用裡面,由於很多網站核心引擎是一樣的,但是外觀利用了 CSS 客製化了很多不同的 Skin,這會造成自動化上面的困擾!

有了 Stylish,我們可以很簡單地把核心的要辨識的部分,製作一個固定的格式給不同的網站使用,這樣一來我們的網站辨識核心就可以不用常常會因為要辨識不同的網站而進行更改,或是只要進行少量的更動便可以將新的網站加入我們的辨識系統裡面!

說了這麼多就是要介紹 CSS 的 Selector,它的種類繁多,以下一一對各位做個介紹:
基本的語法:
選擇器 { 屬性:設定值;}
對照 w3schools 的語法簡介:

選擇器其種類大約分成以下幾種:

  1. Element selectors
  2. ID selectors
  3. Class selectors
  4. Grouping Selectors
  5. Universal selector
  6. Attribute selectors
  7. Descendant combinator
  8. Child combinator
  9. Adjacent sibling combinator
  10. General sibling combinator
  11. Pseudo-classes
  12. Pseudo-elements

w3schools 有簡單的介紹和影片可以參考:CSS Selectors

影片介紹包含了 1 ~ 4 種 selector,但是很不幸的,光是學會這四種並不能解決我們的問題,因為常見的問題是:不同的版面排版的關係,並不是單獨對 Element、ID 或是 Class 作變更就足夠的,因為通常還會與其它的 Element、ID 或是 Class 有一些交互參照關係!

在這種時候就是 6 ~ 12 這 7 種 selector 的使用情境了!而且很不幸的是這種狀況還蠻常發生的,所以使用 Stylish 必學啊!
那沒提到的那一種是怎麼回事?是指 5 嗎? 因為這種與 1 ~ 4 種的 Selector 類似,5是以"*"來套用到所有的 Element、ID 或是 Class ,實務上也用不太到,就先跳過吧!

下面針對 6 ~ 10 種 selector 簡單介紹一下:
6. Attribute selectors:
用來針對有使用特定屬性的 Element 做 CSS 設定。
Element[att] //用於含 att 屬性的 Element 標籤
Element[att=val] //用於 att 屬性值為 val 的 Element 標籤
Element[att~=val] //用於 att 屬性值包含 val 的 Element 標籤

7. Descendant combinator:
Element1 Element2 //用空白區隔兩個 Element,表示在 Element1 內的 Element2 才會使用。
Element2 同一層關係的前面可以允許有其他 Element 插入!

8. Child combinator:
Element1 > Element2 //用大於來分隔兩個元素,表示在 Element1 內的 Element2 才會使用。
但與 7 不同的是 Element1 及 Element2 元素之間不能有其它的 Element 插入喔!表示一種絕對的關係!

9. Adjacent sibling combinator:

Element1 + Element2 //用加號分隔兩個元素,表示在 Element1 同一層關係的相鄰 Element2 才會套用。

10. General sibling combinator:
Element1 ~ Element2 //用蟲蟲符號區隔兩個元素,表示在與 Element1 同一層關係的 Element2 全部都會被套用。

11. Pseudo-classes:

12. Pseudo-elements:
這兩種目前沒研究,我實務上還沒遇到要用到這兩種來協助辨識網頁的,暫時先跳過,等以後有用到了再來跟大家一起研究!

2014年10月1日 星期三

一個 Heap Debug 知道可以用卻沒注意到的小技巧,實在太重要了!


我們都知道微軟提供的 debug 工具包裡面有個 Global Flags 的工具,可以針對一些很特殊的狀況像是 heap、stack 相關的一些問題來與 debugger 配合偵錯,最近我工作處理的軟體就發生了 heap corruption,但因為它實在太肥大了,只要開啟了 Global Flags 之後,執行的速度就會慢到一個不可理喻,甚至原來的功能就不能動作了!

拜 G 大神的壞處是只要關鍵字不對,永遠也找不到想要的解答,這次在陰錯陽差之下,找到了一篇文章,裡面提到了我沒想到的功能啊!

一般狀況下我們會針對想偵錯 heap 的程式執行下列設定:
gflags -p /enable yourapp.exe /full

如果你們家的軟體跟我們家的一樣異常肥大,那就要試試下列這種用法了:
gflags -p /enable yourapp.exe /full /dlls yourdll.dll

用這個方法只會檢查你設定的 dll 所占用的 heap,範圍縮小了,自然程式的效率就好了!

實際測試這方法實在太適合我們家的軟體了,的確幫我找到一些問題點!
希望大家都可以在知道這個小技巧後瞬間提升偵錯的能力啊!哈哈!