WHAT'S NEW?
Loading...

[Google部落格]救回誤刪文章(下)-利用postID重新發佈

上一章,我利用複製搜尋引擊的快照內容,重新刊登我的文章,但是新文章卻無法使用原本網址,如下圖一所示。然而,搜尋引擊是根據你的網址去統計流量,網址就像在網路上身分證具有唯一性。另一方面,網址更換也會影響到Google+留言,當你決定為你的部落格換網域時,Google會出現以下的警告訊息告知你的留言會消失。換句話說,若要保留你的流量和Google+留言,你必須使用原本的網址。


警告:您已啟用 Google+ 留言功能,變更網誌網址會對現有的留言造成負面影響
圖一. 被救回的文章


以下將教你如何利用postID找回刪除文章後再重新發佈。然而,若你有出現錯誤訊息『bX-cejt47』,你就需要利用其他工具救回原本網址,但也不一定有效。


環境

  • Google 部落格 (Blogger)
    • 網域:XXXX.blogspot.tw
  • Chrome
  • Blogger管理頁面

教程

  1. 首先,請依據上一章到你被刪除網頁的快取畫面,按下滑鼠右鍵後,選擇『檢視網頁原始碼』。


    圖一. 檢視快取網頁的原始碼

  1. 接下來,在原始碼頁面按下『Ctrl+F』呼叫搜尋功能,然後在對話框輸入『postID』後,在橘色標註的位置即可找到唯一的ID,這裡為4239077584546560024』。
  2.  
    圖二. 搜尋被刪除的文章

  3. 接著,請編輯任一篇文章的編輯後,在omnibox找到postID,請將它取代為找到的postID這裡將把8889869403022029595』替代為『4239077584546560024』。
  4.  
    圖三.開起快照的頁面


  5. 最後,在文章的編輯模式,你可以看到被刪除的文章,然後選擇『發佈』救回原本文章。

  6. 圖四.救回的文章

Reference:

  1. Easy Methods To Recover Deleted Blogger Blog Post 
  2. http://www.how-to-comp.com/2014/03/Recover-Deleted-Blog-Post-Page.html

[Google部落格]救回誤刪文章(上)-搜尋引擊


你曾經不小心刪除你的部落格文章嗎?



如上圖,我曾經整理部落格文章標籤時,不小心刪除剛發表的文章,然而,它沒有提供任何介面讓你簡單救回文章。換句話說,Blogger沒有Gmail的回收桶功能,救回只能依賴外部工具,因此文章救回比起信件來複雜許多。幸運的是,當你發表你的文章時,Google搜尋引擊會定期快照你的頁面,因此當你修正內容時,快照過不久也會更新。換句話說,快照能幫你拿回刪除前的文章,但滿高機率救不回修改前的。

以下將教你如何使用Google搜尋引擊找到文章內容,複製後在重新發佈。然而,若你文章有特殊格式,直接複製內容會造成編輯不容易,在下一章將描述如何保留原本格式。


環境

  • Google 部落格 (Blogger)
    • 網域:XXXX.blogspot.tw
  • Chrome
  • Google搜尋引擊

教程

  1. 首先,請在Chrome的OmniboxGoogle搜尋引擊輸入Site:再加上你的網域,如以下所示,按下搜尋』。
    1. site:設定的部落格英文名稱.blogspot.tw
    圖一. 搜尋你的網誌


  2. 接下來,Google會列出網誌所有列表,然而當你網誌文章數過多時,你要花過多時間找此文章,因此若你記得被刪除的文章,請在『Site:』前面輸入文章名字後,按下『搜尋鍵』就可以找到它。
  3.  
    圖二. 搜尋被刪除的文章


  4. 接著,如下圖三在被刪除文章下面點擊『朝下按鈕』開起選單後,請點選『頁庫存檔』開啟快照頁面。
  5.  
    圖三.開起快照的頁面


  6. 最後,你能看到被刪除的文章內容,此時你直接複製文章內容再重新發佈文章。

  7. 圖四.救回的文章


Reference:

  1. Easy Methods To Recover Deleted Blogger Blog Post 
  2. http://www.how-to-comp.com/2014/03/Recover-Deleted-Blog-Post-Page.html

UML類別圖:Generalization vs Realization

某一個類別去繼承另一個,子類別(child class)在擁有父類別的屬性和行為下去擴展功能,在C++很單純定義兩者關係為繼承(inheritance)。如下圖一所示,在UML有以下兩種方式描述繼承,兩者主要差別在父類別。
  • Generalization
    • 實線
  • Realization
    • 虛線
    • 父類別必須是界面(interface)
圖一. UML繼承

Realization


請先思考什麼是界面(interface)?

在物件導向的定義,界面是一個抽象類別,設計一個界面類似於設計一個類別,但是它們的思考點有所不同。類別描述物件的屬性和行為,而界面是定義類別們統一行為,並且不會有詳細行為描述。界面是不被允許實例化,但你可以宣告空指標,或是將它綁定其中一個子類別。

例如:當主人叫動物們(雞,豬和狗)走路時,如何在C++實作界面?

這裡只解釋程式碼的一部分,我已經將完整新增在線上C++編譯器ideone,你無需安裝任何C++IDE,直接線上修改後跑程式,請在以下找子標題程式碼。

  • 首先,找出類別們的共同行為,實作一個界面。這裡的例子為走路,因此新增界面Animal,然後增加純虛擬函數(pure virtual function) walking 定義走路的指令。
    class Animal
    {
    public:
        virtual ~Animal(){}
        virtual void walking()=0;
    };
  • 接下來,新增繼承界面的子類別,並且實作界面的子類別。以下舉雞為例,這裡的walking描述雞用兩隻腳走路。

  • class Chicken:public Animal
    {
    public:
        virtual void walking()
        {
           printf("chickens walk on two leg\n");
        }
    };
    
  • 最後,擁有界面指標向量的類別可直接呼叫物件的虛擬方法,不需要是哪一個類別實作。由於界面不允許初始化,在程式某處產生向量容器界面指標Animal,然後將物件雞,豬和狗放入容器後,擁有此容器的類別如同下圖46-47行直接呼叫walking,讓容器所有動物開始走路。
圖二. 界面的呼叫

下圖三我簡單使用UML圖描述上述例子,若你將此例做一些改善,界面不但使程式碼能被重複使用,而且能降低你程式的相依性,尤其在使用者介面和低層的互動。如果有時間,我將獨立寫一篇文章如何善用界面。

圖三. 範例類別圖

程式碼

  • 編譯環境
    • Ideone 線上編譯器
    • 最低C++版本: C++ 11 

結果

圖三. 程式碼執行結果

Reference

  1. Abstract Class vs Interface in C++, stackoverflow
  2. http://stackoverflow.com/questions/12854778/abstract-class-vs-interface-in-c
  3. 接口(Java)
  4. http://zh.wikipedia.org/wiki/%E6%8E%A5%E5%8F%A3_%28Java%29
  5. How do you declare an interface in C++, stackoverflow
  6. http://stackoverflow.com/questions/318064/how-do-you-declare-an-interface-in-c