WordPress 桌面版應用程式免費下載!打造閱讀器、離線編輯及管理三合一體驗

前段時間 WordPress 發佈全新管理介面 Calypso,以桌面版應用程式形式提供使用者免費下載,創辦人 Matthew Mullenweg 認為,現今行動裝置非常流行,但一般撰寫或編輯文章仍多半侷限在電腦上進行,因此提供一個最佳化的部落格管理工具就顯得格外重要。這也促使 WordPress 持續獲得更多使用者。

WordPress.com 應用程式一開始只有 Mac 版,現在已延伸至 Windows 及 Linux ,搭配原有 iOS 及 Android 應用程式,幾乎可以說已經完成桌面端及行動裝置佈局。

本文要介紹新推出的 WordPress 應用程式,或者你可以稱它為部落格軟體,這個應用身兼三大功能:閱讀器、離線編輯器及管理工具!以往這三個部分要透過不同服務或軟體來達成,現在,WordPress 原生應用程式就能做到。將資訊來源及內容生產整合在一起,可以說是目前看過最強大的產生力工具。

除此之外,重頭戲仍擺在這次的 Calypso 更新,眾所皆知 WordPress 有非常易用且功能完整的控制台(WP-Admin),但每次要進行操作都必須登入網站,有時候不是那麼方便。WordPress 讓你能直接從桌面端來管理多個網站,全新設計的控制台有非常流暢的操作速度,在管理上更為輕鬆簡單。

不過 WordPress 應用程式最大特色是:可以拿來做為離線編輯器使用!

以往你可能會使用第三方離線編輯器來寫文章,例如:Open Live Writer,因為使用內建文章編輯器並不是那麼方便。在 WordPress 應用程式中,你可以透過全新可視化編輯器來寫文章,內建自動草稿儲存、插入圖片、設定分類與標籤及發佈等功能。

WordPress 應用程式不限於 WordPress.com 使用,如果你是採 WordPress.org 開放原始碼程式自行架站,安裝 Jetpack 一樣能夠支援。這是一款由 Automattic(WordPress 母公司)開發的外掛程式,包含幾項我曾介紹過的功能:

  • Photon 免費 CDN 圖片分流加速服務
  • Jetpack Monitor 免費 24/7 網站監測服務,網站無法連線自動提醒
  • 啟用 Jetpack「單一登入」機制教學,讓你的 WordPress 網站更安全

當然,如果你是使用 WordPress.com 免費部落格服務,只要下載應用程式,登入你的帳號密碼,即可讓軟體與你的部落格連線。

軟體資訊

軟體名稱:WordPress.com 桌面應用程式
軟體語系:多國語言
作業系統:Windows、Mac、Linux
官方網站:https://desktop.wordpress.com/
下載鏈結:官方網站免費下載

使用教學

STEP 1

開啟 WordPress.com 應用程式後,輸入你的使用者名稱、密碼來登入,這裡要輸入的不是你網站的登入帳號密碼,而是網站所連結的 WordPress.com 帳號資訊。

若你是使用 WordPress 自行架站,點選下方「Add self-hosted site」取得更多資訊。

STEP 2

WordPress.com 應用程式的預設畫面為「讀取器」,也就是前面提到的閱讀器。在這裡可以將你喜歡的網站內容加入「關注」,WordPress 會推薦你可能有興趣的相關網站內容。你還可以新增清單、加上標籤來分類不同的網站主題。

在閱讀器裡,你可以新增任何有 RSS Feed 功能的網站,不限於 WordPress 類型。

STEP 3

WordPress.com 應用程式的另一個特色是可以隨時收到通知。它就像一般軟體,當有人關注你,在你的網站按讚或留言,它會立即跳出提示讓你知道。

STEP 4

這個應用程式的亮點應該是管理功能,或許你之前在網頁端試用過,軟體把操作介面帶到桌面端,讓你不用從瀏覽器就能進行網站管理,包括新增文章頁面,或是更新升級佈景主題及外掛等等(必須從 Jetpack 開啟「Manage」模組才能用)。

不過我最喜歡的是 WordPress.com 的統計功能(Stats),它會清楚記錄下每天的網站流量變化,包括最熱門的文章頁面、來源網址、國家等資訊,相較於 Google 分析來說,內建的統計資料更為清楚易懂。

STEP 5

前面介紹有提到:WordPress 桌面版應用程式本身就是一個離線編輯器!現在,你可以直接在桌面端透過官方軟體來撰寫文章。

應用程式的編輯器功能非常好用,不但速度快、設計簡單大方,也和 WordPress 有更緊密的結合,因為它已經加入了網站相關設定,例如分類與標籤、特色圖片、分享等功能。

下圖是我使用 WordPress.com App for Windows 桌面版來寫文章的畫面擷圖,可以看到相較於原先網頁編輯器來說,桌面版設計更為乾淨明亮,讓你在寫文章時有更好的寫作體驗(如果常常苦思得不到靈感,就會知道這有多麼重要…)。

這個編輯器的另一特色是:無須連上網路,具備自動儲存草稿功能。若你正在尋找一款免費、好用的部落格寫作工具,WordPress.com App 會是非常棒的選擇!

WordPress 本身只是一個開放原始碼的 PHP 程式,用於架設網站部落格,但憑藉外掛功能,讓它延伸擴展更多更不一樣的變化!Matthew Mullenweg 始終相信開放相較於封閉有更多的好處,WordPress 彈性自由更可以適應不斷變化的網路環境。

這款 WordPress.com 桌面版應用程式耗時二十個月,由來自世界各地的開發者貢獻而生,相信它能跟上接下來的發展趨勢,讓我們有更為便利的數位寫作工具!

值得一試的三個理由:

  1. 開放原始碼,提供 Windows、Mac、Linux 三大平台免費下載
  2. 更好用的寫作工具,將重心聚焦於內容
  3. 速度快、操作簡單,使用現今最流行開發項目
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Hostinger 頂級免費虛擬主機推薦,練習架站最佳 PHP、MySQL 平台

雖然免費資源網路社群有免費網站空間分類,但讀者會發現,我已經很久沒有介紹免費虛擬主機服務,原因很簡單,因為太多免空到後來都變得極為不穩定,甚至無預警關閉服務,對於架站者來說,辛苦經營網站被停用,不僅損失寶貴內容,更是對於免費服務劃上一個大大的問號。因此我會建議真正想架站的朋友花點錢去租用虛擬主機,尤其現在價格相較於幾年前來說已經非常實惠,搭配申請網域名稱可能每個月只要幾百元左右就能輕鬆架站。

不過還是很多人跑來問我:有沒有推薦的免費虛擬主機呢?如果你純粹想練習架站,又不想要花錢(或者想先試試看 WordPress 或其他架站程式是不是合乎你的需求),本文要來介紹一個老牌頂級免費虛擬主機服務。

Hostinger 是一個在全球超過 35 個國家提供免費虛擬主機的公司,旗下還有幾個可能你曾經見過的經銷主機(Reseller Hosting,例如 YouHosting)、帳務管理、VPS 和網站建置服務。Hostinger 提供免費內建 PHP、MySQL 架站空間,預設 2000 MB(2 GB)空間、每月 100 GB 流量限制,最棒的是具備中文介面,而且沒有任何廣告!

或許你曾經聽過或使用過 cPanel 主機,Hostinger 就是一個客製化 cPanel 控制台,可以在平台上使用各項功能。本身也提供付費升級,只要支付費用就能獲得無限制空間。之所以會想介紹 Hostinger ,除了有很簡單易懂中文控制台,內建一鍵快速安裝各種程式功能,讓你在架站時更快、更順暢,也能將資料庫匯出,將網站搬移到其他空間。

不過還是要再次提醒:Hostinger 並非長久之計!如果你想要認真經營網站、部落格,或是想透過架站來協助你達成某些目的,那麼最終仍要走上付費服務一途,不過相較於其他免費空間來說,Hostinger 無論在速度或穩定性都值得一用。本文會介紹如何申請 Hostinger 以及透過它來架設一個中文 WordPress 網站。

網站名稱:Hostinger
網站鏈結:http://www.hostinger.com.hk/

使用教學

第一步,申請 Hostinger 免費版帳號

開啟 Hostinger 中文版網站後,會有簡體中文版介面,雖然 Hostinger 在全世界很多國家都有提供在地化語言網站,但其實功能操作上並沒有太大不同。點選首頁的「現在訂購」就能開始申請帳號。

申請時直接以 Google 帳號登入,或者輸入姓名、Email 及密碼來註冊帳號。

註冊後必須先到信箱收取 Email,點選信中的確認鏈結才能啟用帳號,跟一般我們熟悉的網路服務相同。啟用帳號後點選藍色「主機」下方的「新主機」來開啟第一個空間。

第二步,開啟第一個 PHP、MySQL 網站空間

申請帳號後 Hostinger 不會自動幫你建立主機帳號,因此要點選「新主機帳號」按鈕來開啟新帳號,在這裡可以點選右上角來切換語言,Hostinger 提供繁體中文,不過預設情況下是使用簡體中文。

Hostinger 提供免費版、高級版和商業版三種套餐組合,在這裡選擇「免費版」繼續。如果你需要更多的空間或流量限制、SSH 或選擇更穩定的伺服器節點,可以付費升級。

接著設定一個要使用的免費二級網域名稱,Hostinger 提供一些簡短後綴,或者你也可以切換回一級域名來綁定自己申請的網址,之後再把 DNS 對應到 Hostinger 就能使用。

免費方案只能選擇位於英國的伺服器區域,速度上可能相較於美國來說會慢一些,不過整體來說還算穩定,付費的話可選擇包括美國、新加坡、巴西及俄羅斯在內等其他區域。最後設定好密碼就能建立免費空間。

在確定送出申請表單前,Hostinger 會要求使用者輸入你申請帳號的用途,可以寫一些你要架設網站目的、類型或相關原因。因為 Hostinger 每天收到超過兩萬封免費空間申請,為了過濾嚴重的濫用情形會多一道審核程序。

我在申請後 Hostinger 空間就立即開通,狀態顯示為「已激活」就表示可以使用啦!

第三步,使用 Hostinger 架設 WordPress 網站教學

點選你的空間會開啟更多功能,包括「管理」、「自助建站」、「一鍵安裝助手」以及比較少人用到的「E-mail」,點選「管理」就能開啟 cPanel 控制台,不過在這裡我要先示範如何快速安裝一個 WordPress 網站,我們點選「一鍵安裝助手」來開啟快速架站功能。

如果有用過 cPanel 的話,應該知道它有提供快速架站工具,內建許多常見與不常見的開放原始碼專案程式,能讓我們快速建置出 CMS、部落格、討論區或其他服務,從中找出我們要使用的 WordPress,點選來進行安裝。

設定一下安裝路徑、語言(可以選擇臺灣,有正體中文)、管理員帳號密碼、E-mail,網站標題跟標語之後可以隨時再做修改調整,最後點選「安裝」就能自動架站。

不得不說 Hostinger 或類 cPanel 網站空間的自動化架站程式非常好用,只要幾秒鐘時間就能把 WordPress 網站架設完成!在網址後面加上 /wp-admin/ 可以開啟控制台,不過你會先遇到登入畫面,輸入剛才安裝時設定的管理員帳號密碼。

從 WordPress 後台就能對網站進行完整操控,包括更換佈景主題、安裝外掛功能、加入新帳號,以及新增文章、頁面、媒體等等,Hostinger 快速架站功能會在安裝後內建一些外掛程式,不需要的話可以把它停用移除(沒想到還內建兩階段功能的 Clef ,我曾經有寫過專文來介紹這個外掛)。

現在,你就簡單架設好一個 WordPress 網站了!

延伸閱讀:

  • WordPress 桌面版應用程式免費下載!打造閱讀器、離線編輯及管理三合一體驗
  • 殺手級 WordPress 體檢項目:101 個建立新網站的超簡易捷徑!
  • 安裝 WordPress 後你應該做的 25 件事
  • 11 個強化 WordPress 網站安全的 .Htaccess 設定技巧

後記

前面有提到,Hostinger 本身已有一個客制化的 cPanel 控制台,因此使用者可以很方便快速地從控制台進行虛擬主機相關操作,不僅限於架設 WordPress,若是其他的開放原始碼程式或單純的 HTML 網站都能勝任。

如果你不常接觸這類的架站平台,cPanel 是個很容易上手的選擇,之後若要租用其他付費主機,也可以尋找使用 cPanel 控制台的服務。

另外,Hostinger 已經支援最新的 PHP 7.0,我建議可以從控制台的「高級 -> PHP 版本切換」來進行設定,將它選擇到 PHP 7 以獲得更好的速度及效能。

最後,如果你想使用 Hostinger 架站,請務必要備份好自己的檔案,因為免費空間並不會保障你的使用權益,且可能因為不夠穩定或任何因素而發生問題,若有備份的話,就能隨時搬遷到其他虛擬主機上。此外,我也建議無論如何都要註冊一個網域名稱,未來當你搬移空間時就不用重新開始啦!

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

TDD(測試驅動開發)死了嗎?

01、前言

很早之前,曾在網絡上見到過 TDD 這 3 個大寫的英文字母,它是 Test Driven Development 這三個單詞的縮寫,也就是“測試驅動開發”的意思——聽起來很不錯的一種理念。

其理念主要是確保兩件事:

  • 確保所有的需求都能被照顧到
  • 在代碼不斷增加和重構的過程中,可以檢查所有的功能是否正確

但後來很長一段時間里,都沒再聽過 TDD 的消息。有人說,TDD 已經死了,給出的意見如下:

1)通常來說,開發人員不應該在沒有失敗的測試用例下編寫代碼——這似乎是合理的,但是它可能導致過度測試。例如,為了保證一行生產代碼的正確性,你不由得寫了 4 行測試代碼,這意味着一旦這一行生產代碼需要修改,你也得修改那 4 行測試代碼。

2)為了遵循 TDD 而寫的代碼,容易進入一個誤區:代碼是為了滿足測試用的,而忽略了實際需求。

02、TDD 到底是什麼?

不管 TDD 到底死了沒有,先讓我們來回顧一下 TDD 到底是什麼。

TDD 的基本思想就是在開發功能代碼之前,先編寫測試代碼。也就是說在明確要開發某個功能后,首先思考如何對這個功能進行測試,並完成測試代碼的編寫,然後編寫相關的代碼滿足這些測試用例。然後循環進行添加其他功能,直到完成全部功能的開發

TDD 的基本過程可以拆解為以下 6 個步驟:

1) 分析需求,把需求拆分為具體的任務。

2) 從任務列表中取出一個任務,並對其編寫測試用例。

3) 由於沒有實際的功能代碼,測試代碼不大可能會通過(紅)。

4) 編寫對應的功能代碼,儘快讓測試代碼通過(綠)。

5) 對代碼進行重構,並保證測試通過(重構)。

6) 重複以上步驟。

可以用下圖來表示上述過程。

03、TDD 的實踐過程

通常情況下,我們都習慣在需求分析完成之後,儘快地投入功能代碼的編寫工作中,之後再去調用和測試。

而 TDD 則不同,它假設我們已經有了一個“測試用戶”了,它是功能代碼的第一個使用者,儘管功能代碼還不太完善。

當我們站在“測試用戶”的角度去寫測試代碼的時候,我們要考慮的是,這個“測試用戶”該如何使用功能代碼呢?是通過一個類直接調用方法呢(靜態方法),還是構建類的實例去調用方法呢(實例方法)?這個方法如何傳參呢?方法如何命名呢?方法有返回值嗎?

有了測試代碼后,我們開始編寫功能代碼,並且要以最快地速度讓測試由“紅”變為“綠”,可能此時的功能代碼很不優雅,不過沒關係

當測試通過以後,我們就可以放心大膽的對功能代碼進行“重構”了——優化原來比較醜陋、臃腫、性能偏差的代碼。

接下來,假設我們接到了一個開發需求:

汪汪隊要到小鎮冒險島進行表演,門票為 99 元,冒險島上唯一的一個程序員王二需要開發一款可以計算門票收入的小程序。

按照 TDD 的流程,王二需要先使用 Junit 編寫一個簡單的測試用例,測試預期是:銷售一張門票的收入是 99 元。

public class TicketTest {

    private Ticket ticket;

    @Before
    public void setUp() throws Exception {
        ticket = new Ticket();
    }

    @Test
    public void test() {
        BigDecimal total = new BigDecimal("99");

        assertEquals(total, ticket.sale(1));
    }

}

為了便於編譯能夠順利通過,王二需要一個簡單的 Ticket 類:

public class Ticket {

    public BigDecimal sale(int count) {
        return BigDecimal.ZERO;
    }

}

測試用例運行結果如下圖所示,紅色表示測試沒有通過:預期結果是 99,實際結果是 0。

那接下來,王二需要快速讓測試通過,Ticket.sale() 方法修改后的結果如下:

public class Ticket {

    public BigDecimal sale(int count) {
        if (count == 1) {
            return new BigDecimal("99");
        }
        return BigDecimal.ZERO;
    }

}

再運行一下測試用例,結果如下圖所示,綠色表示測試通過了:預期結果是 99,實際結果是 99。

綠了,綠了,測試通過了,到了該重構功能代碼的時候了。99 元是個魔法数字,至少應該聲明成常量,對吧?

public class Ticket {
    private final static int PRICE = 99;

    public BigDecimal sale(int count) {
        if (count == 1) {
            return new BigDecimal(PRICE);
        }
        return BigDecimal.ZERO;
    }

}

重構完后再運行一下測試用例,確保測試通過的情況下,再增加幾個測試用例,比如說門票銷量為負數、零甚至一千的情況。

public class TicketTest {

    private Ticket ticket;

    @Before
    public void setUp() throws Exception {
        ticket = new Ticket();
    }

    @Test
    public void testOne() {
        BigDecimal total = new BigDecimal("99");

        assertEquals(total, ticket.sale(1));
    }

    @Test(expected=IllegalArgumentException.class)
    public void testNegative() {
        ticket.sale(-1);
    }

    @Test
    public void testZero() {
        assertEquals(BigDecimal.ZERO, ticket.sale(0));
    }

    @Test
    public void test1000() {
        assertEquals(new BigDecimal(99000), ticket.sale(1000));
    }

}

銷量為負數的時候,王二希望功能代碼能夠拋出異常;銷量為零的時候,功能代碼的計算結果應該為零;銷量為一千的時候,計算結果應該為 99000。

重新運行一下測試用例,結果如下圖所示:

有兩個測試用例沒有通過,那麼王二需要繼續修改功能代碼,調整如下:

public class Ticket {
    private final static int PRICE = 99;

    public BigDecimal sale(int count) {
        if (count < 0) {
            throw new IllegalArgumentException("銷量不能為負數");
        }

        if (count == 0) {
            return BigDecimal.ZERO;
        }

        if (count == 1) {
            return new BigDecimal(PRICE);
        }

        return new BigDecimal(PRICE * count);
    }

}

再運行一下測試用例,發現都通過了。又到了重構的時候了,銷量為零、或者大於等於一的時候,代碼可以合併,於是重構結果如下:

public class Ticket {
    private final static int PRICE = 99;

    public BigDecimal sale(int count) {
        if (count < 0) {
            throw new IllegalArgumentException("銷量不能為負數");
        }

        return new BigDecimal(PRICE * count);
    }

}

重構結束后,再運行測試用例,確保重構后的代碼依然可用。

04、最後

從上面的實踐過程可以得出如下結論:

TDD 想要做的就是讓我們對自己的代碼充滿信心,因為我們可以通過測試代碼來判斷這段代碼是否正確無誤。

也就是說,TDD 流程比較關鍵的一環在於如何寫出有效的測試代碼,這裡有 4 個原則可以參考:

1)測試過程應該盡量模擬正常使用的過程。

2)應該盡量做到分支覆蓋。

3)測試數據應該盡量包括真實數據,以及邊界數據。

4)測試語句和測試數據應該盡量簡單,容易理解。

注意,這 4 個原則不僅適用於 TDD,同樣適用於任何流程下的單元測試。

最後,我想說的是,不管 TDD 有沒有死,TDD 都不是銀彈,不可能適合所有的場景,但這不應該成為我們拒絕它的理由。

 

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

100HUB 免費台灣虛擬主機,採Plesk控制台

有不少朋友問我,這幾年好像很少介紹免費虛擬主機?原因很簡單,因為不容易找到我認為足夠穩定、可靠的選項,尤其虛擬主機維持長時間營運實屬不易,通常要有其他營利項目才足以打平開支,對於沒有先經過一段時間「洗禮」的服務我不輕易推薦給讀者。當然要架站的話我認為還是去付費租用虛擬主機會比較可靠一些,例如我在 WordPress 教學文件就曾經推薦過五個虛擬主機服務,價格都不貴,而且有不滿意全額退款保證。

本文要介紹的免費虛擬主機服務 100HUB 並不是新服務,除了提供免費但有廣告的虛擬主機外,也有不同客戶族群適用的主機方案,包括 VPS、網域名稱及 SSL 憑證等項目。如果你不想那麼快付費,想先試試看使用 WordPress 架站是否合乎你的需求,那麼免費的廣告型虛擬主機或許是可考慮的選擇。

100HUB「威利 100 專業主機」是我在 CloudFlare 合作夥伴找到的少數台灣主機商,因為有合作關係,支援 Railgun 功能,100hub.com 客戶搭配 CloudFlare 時將可以獲得更快的連線速度!可惜的是免費虛擬主機不支援 Railgun,但因為主機位於日本,從台灣或亞洲任何國家連線速度都是相當順暢的。

100HUB 免費虛擬主機分成兩種,一種是免費試用 14 天,另一種是廣告型免費主機,但能永久使用,而現今大部分虛擬主機服務都已有不滿意全額退款保證,有時間限制的試用方案倒不那麼吸引人,我會建議使用廣告型空間(沒有時間限制),如果你只是想要練習架站或個人部落格,這個方案規格已相當充裕。

廣告型免費主機提供 300 MB 空間,每月有 6 GB 流量限制,主機位於日本 GMO 東京機房,從台灣連線速度很不錯,對於小型個人網站或部落格來說已經非常充裕。不過必須要提醒的是 100HUB 採用 Plesk 控制台,而不是大部分使用者熟悉的 cPanel,一樣也有提供中文介面,若不是非 cPanel 不用的話倒是沒什麼影響。

接下來我簡單介紹 100HUB 免費日本虛擬主機的註冊申請方式,以及如何在 Plesk 快速架設一個自己的 WordPress 網站。

網站名稱:100HUB 威利100專業主機
網站鏈結:https://100hub.com/

使用教學

申請 100HUB 免費日本虛擬主機教學

STEP 1

開啟 100HUB.com 網站後,從首頁的規格方案中點選「免費」下方「立即申請」,接著會看到三種免費產品,其中有兩種是免費試用 14 天,最後一種為「廣告型免費主機」,我們點選廣告型免費主機最下方的「馬上申請」鏈結。

由於註冊新的網域名稱或移轉(Transfer)都必須付費,因此我們選擇使用 100HUB 提供的免費域名,網址結尾為 .100hub.net,設定一個你要使用的名稱。

STEP 2

如果你選擇的名稱還沒有被佔用,就會跳出支付結帳畫面,價格確認為 0 元,沒問題的話點選右側「結帳」綠色按鈕來跳到下一個畫面。

STEP 3

接著要填寫你的個人資料和帳單資訊,100hub.com 規定使用者必須填寫正確且可供驗證的資料,這部分記得花點時間填寫,如果亂填或資料有誤可能無法通過審核。

STEP 4

註冊後,你的 100HUB 免費帳戶狀態會顯示為「確認中」,大約要等待數小時,站方審核後才會開通、啟用帳號。

使用虛擬主機快速架設 WordPress

STEP 1

當 100hub.com 審核完你的免費虛擬主機申請,就會以 Email 通知,從主機商的控制台可以取得包括使用者名稱、主機名稱、IP 位址和進入 PLESK 後台的登入鏈結。

STEP 2

下圖就是 HUB100 免費虛擬主機使用的 PLESK 控制台介面,怎麼看起來好像跟印象中差了很多?無論如何,控制台就是一個網站最核心的部分,從這裡可以進行主機設定、應用程式安裝、網域名稱管理、Email、資料庫、統計等功能,因此要妥善保存你的帳號密碼。

點選 PLESK 控制台左側選單的「應用程式」,找到「WordPress」後按下「安裝」,當然你也可以選擇要安裝的 WordPress 版本(建議還是以安裝最新版為主)。

STEP 3

選好後就會以自動化工具來安裝、設定 WordPress,其實 WordPress 本身安裝介面設計已經非常簡單,甚至可以在五分鐘以內架設好一個網站,不過如果使用自動化安裝程式的話幾乎不用做任何設定,可以算是最快的安裝法。

安裝後,PLRSK 會顯示你的網址、安裝位置、帳號密碼,建議把「自動更新」功能開啟以增加安全性,未來當有任何新的版本釋出,WordPress 就會自動更新檔案,以保持你的網站在最新、最安全狀態。

STEP 4

進入你的 WordPress 網站後,點選側邊欄右下角的「登入」,以 PLESK 提供的帳號密碼即可登入控制台。或者你可以先試著體驗一下 100HUB 免費虛擬主機的速度,我在台灣連線速度是還蠻快的,換頁也不會有感覺卡卡的問題。

因為 100HUB 免費虛擬主機是會顯示廣告的,因此左下角會有一個 LOGO 圖案,但廣告只是一個鏈結,不會侵入你的內容部分,倒也還可以接受。

如果你覺得自動化安裝工具設定的帳號密碼很難記憶,記得在登入後從「帳號」功能來新增新的管理員帳戶,這麼做除了可增加安全性外,亦能將最初建立的帳號移除,同時熟悉一下 WordPress 帳戶權限設定。

開始享受你的網站吧!

當然,免費虛擬主機不是只能安裝 WordPress,你也可以安裝其他開放原始碼程式,或者拿來單純做為 HTML 網頁託管使用,並沒有侷限於單一功能,不過還是要提醒,如果有任何重要內容,不建議直接放到免費主機上,因為無法保證網站能夠持續運作,若要使用免費主機,也記得要時時備份網站資料,以免發生任何狀況而讓資料遺失無法救回喔!

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

Cloudflare 免費 WordPress 外掛教學,一鍵為網站快速套用最佳化設定


(Photo credit: TechCrunch via Visualhunt / CC BY)

最近 CloudFlare 在台灣網路圈吵蠻兇的,起因是 CloudFlare 八月在自家網站公布服務在全世界各地頻寬支出成本(參考資料:Bandwidth Costs Around the World),其中點名的六家超高成本 ISP 業者在亞洲就有台灣中華電信 HiNet 及韓國電信,相較於歐洲或北美支出的頻寬成本來說多出 15 倍!CloudFlare 為了提出抗議,更大動作將連線到使用 CloudFlare 服務網站的中華電信使用者導向頻寬成本較低的美國西岸節點。

其實連到美西頻寬夠大,速度倒也不是非常糟,畢竟很多網站都選擇放在開銷較低的國外機房,那麼這段距離對於台灣使用者開啟網站的速度並沒有太大影響。但恰巧中華電信近期發生海底電纜異常,尖峰時段連線壅塞造成很多網站無法打開,才會有好像取消台灣節點造成網站變慢的問題。

撇開這些狀況不說,我還是推薦架站時搭配 CloudFlare 提供的免費 CDN 來加速網站連線速度,同時遏止任何可能的攻擊或安全問題,類似服務還有 Incapsula,但沒有它來得這麼全面(目前 CF 節點數也是同類服務之冠)。

關於 CloudFlare 使用教學我在「CloudFlare 架站者必備免費 CDN、DNS 託管服務設定教學,網站載入加速、節省流量防止惡意攻擊」一文有完整說明,若你是使用 WordPress 架站,我建議你務必安裝全新 CloudFlare 外掛,它為 WP 使用者提供更多功能。

早先 WordPress 的 CloudFlare 外掛只有解析 IP 功能,讓無法在控制台迴響顯示使用者真實 IP 位址的問題得以解決;近期 CloudFlare 外掛更新,將設定選項帶進 WordPress 控制台,往後將可以在控制台進行一些基本的設定或操作,也能查看分析報表。

網站名稱:CloudFlare for WordPress
網站鏈結:https://tw.wordpress.org/plugins/cloudflare/

使用教學

STEP 1

登入 WordPress 控制台後,點選左側選單的「外掛 -> 安裝外掛」,右上角填入 CloudFlare 會跳出相關結果,第一個就是來自 CloudFlare 官方的外掛功能,點選「立即安裝」即可將它下載安裝到網站。

在外掛列表中將 CloudFlare 啟用,設定裡就會多一個 CF 設定頁面。

STEP 2

不過要在控制台使用 CloudFlare 功能,必須要連結到你 CF 帳戶,驗證方法是 Email 加上你的 API 密鑰,這組密鑰在哪呢?只要開啟 CloudFlare 控制台並點選右上角的 My Settings 就能找到(網頁下方的 Global API Key,點選 View API Key 就會顯示)。

這組密鑰非常重要,等同於你的密碼,切勿將它告訴其他人。

回到 WordPress 的 CloudFlare 設定頁面,輸入你的 CloudFlare 帳號(Email)及 API Key 就能成功串連,基本上登入畫面只需要設定一次,之後就不會再次出現。

STEP 3

接著會看到 CloudFlare 在全新 3.0 版加入的所有功能,介面也變得跟以前不同。

如果你剛開始接觸 CF,沒有太多時間來詳細研究各項設定,推薦你直接使用第一項設定的「Apply Default Settings」一鍵套用最適合網站效能的建議設定值,這也是此次更新後我認為最喜愛的功能。

STEP 4

CloudFlare 在新的 WordPress 外掛程式上已經加入清理快取(Purge Cache)自動化完整快取管理(Automatic Full Cache Management)功能,若開啟後當你更新網站選項時就會自動清理 CloudFlare 的快取內容。不過預設情況下其實不太需要打開,因為網站頁面並不會被 CloudFlare 快取,只有圖片等靜態元件才會。

STEP 5

另外,設定頁右上角的「Enable “Im Under Attack” Mode」是一項很特殊的功能,如果你認為你的網站正遭遇攻擊,或者有人想嘗試登入網站(例如使用暴力破解),點選後就能使網站獲得更高安全性的保護措施。

正常情況下並不建議開啟這項功能,因為很可能會使一般訪客在瀏覽時發生問題。

STEP 6

其他設定選項在「More Settings」可以找到,完整設定項目建議回到 CloudFlare 調整修改,外掛裡沒有涵蓋所有選項。但還是要補充一下,從 Analytics 裡可以看到 CF 端的分析圖表了!這也是此次更新中非常令人振奮的全新功能。

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

相關文章

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

【算法隨記三】小半徑中值模糊的急速實現(16MB圖7.5ms實現) + Photoshop中蒙塵和划痕算法解讀。,任意半徑中值濾波(擴展至百分比濾波器)O(1)時間複雜度算法的原理、實現及效果,任意半徑中值濾波(擴展至百分比濾波器)O(1)時間複雜度算法的原理、實現及效果

  在本人的博客里,分享了有關中值模糊的O(1)算法,詳見:任意半徑中值濾波(擴展至百分比濾波器)O(1)時間複雜度算法的原理、實現及效果 ,這裏的算法的執行時間和參數是無關的。整體來說,雖然速度也很快,但是在某些特殊情況下我們還是需要更快的速度。特別是對於小半徑的中值,我們有理由去對其進一步的優化的。本文我們進一步探討這個問題。

  一、3*3中值模糊

  首先我們來看看半徑為1的中值,此時涉及到的領域為3*3,共9個像素,那麼最傳統的實現方式就是對9個像素直接進行排序,這裏我們直接使用系統的排序函數qsort,一種簡單的代碼如下所示:

int __cdecl ComparisonFunction(const void *X, const void *Y)        // 一定要用__cdecl這個標識符
{ unsigned char Dx = *(unsigned char *)X; unsigned char Dy = *(unsigned char *)Y; if (Dx < Dy) return -1; else if (Dx > Dy) return +1; else
        return 0; } void MedianBlur3X3_Ori(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride) { int Channel = Stride / Width; if (Channel == 1) { unsigned char Array[9]; for (int Y = 1; Y < Height - 1; Y++) { unsigned char *LineP0 = Src + (Y - 1) * Stride + 1; unsigned char *LineP1 = LineP0 + Stride; unsigned char *LineP2 = LineP1 + Stride; unsigned char *LinePD = Dest + Y * Stride + 1; for (int X = 1; X < Width - 1; X++) { Array[0] = LineP0[X - 1];        Array[1] = LineP0[X];    Array[2] = LineP0[X + 1]; Array[3] = LineP1[X - 1];        Array[4] = LineP1[X];    Array[5] = LineP2[X + 1]; Array[6] = LineP2[X - 1];        Array[7] = LineP2[X];    Array[8] = LineP2[X + 1]; qsort(Array, 9, sizeof(unsigned char), &ComparisonFunction); LinePD[X] = Array[4]; } } } else { unsigned char ArrayB[9], ArrayG[9], ArrayR[9]; for (int Y = 1; Y < Height - 1; Y++) { unsigned char *LineP0 = Src + (Y - 1) * Stride + 3; unsigned char *LineP1 = LineP0 + Stride; unsigned char *LineP2 = LineP1 + Stride; unsigned char *LinePD = Dest + Y * Stride + 3; for (int X = 1; X < Width - 1; X++) { ArrayB[0] = LineP0[-3];       ArrayG[0] = LineP0[-2];       ArrayR[0] = LineP0[-1]; ArrayB[1] = LineP0[0];        ArrayG[1] = LineP0[1];        ArrayR[1] = LineP0[2]; ArrayB[2] = LineP0[3];        ArrayG[2] = LineP0[4];        ArrayR[2] = LineP0[5]; ArrayB[3] = LineP1[-3];       ArrayG[3] = LineP1[-2];       ArrayR[3] = LineP1[-1]; ArrayB[4] = LineP1[0];        ArrayG[4] = LineP1[1];        ArrayR[4] = LineP1[2]; ArrayB[5] = LineP1[3];        ArrayG[5] = LineP1[4];        ArrayR[5] = LineP1[5]; ArrayB[6] = LineP2[-3];       ArrayG[6] = LineP2[-2];       ArrayR[6] = LineP2[-1]; ArrayB[7] = LineP2[0];        ArrayG[7] = LineP2[1];        ArrayR[7] = LineP2[2]; ArrayB[8] = LineP2[3];        ArrayG[8] = LineP2[4];        ArrayR[8] = LineP2[5]; qsort(ArrayB, 9, sizeof(unsigned char), &ComparisonFunction); qsort(ArrayG, 9, sizeof(unsigned char), &ComparisonFunction); qsort(ArrayR, 9, sizeof(unsigned char), &ComparisonFunction); LinePD[0] = ArrayB[4]; LinePD[1] = ArrayG[4]; LinePD[2] = ArrayR[4]; LineP0 += 3; LineP1 += 3; LineP2 += 3; LinePD += 3; } } } }

  代碼很簡潔和清晰,我們沒有處理邊緣的那一圈像素,這無關精要,我們編譯后測試,結果如下所示:

  1920*1080大小的24位圖像,平均用時1280ms,灰度圖像平均用時460ms,這相當的慢,無法接受。

  下面我們稍微對其進行下提速。

  對於9個數據的排序,我們可以對其進行特殊的處理,因為數據的個數是確定的,按照理論分析,沒有必要進行大規模的比較,實際只需要進行19次比較就可以了。修改后算法如下所示:

inline void Swap(int &X, int &Y) { X ^= Y; Y ^= X; X ^= Y; } void MedianBlur3X3_Faster(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride) { int Channel = Stride / Width; if (Channel == 1) { for (int Y = 1; Y < Height - 1; Y++) { unsigned char *LineP0 = Src + (Y - 1) * Stride + 1; unsigned char *LineP1 = LineP0 + Stride; unsigned char *LineP2 = LineP1 + Stride; unsigned char *LinePD = Dest + Y * Stride + 1; for (int X = 1; X < Width - 1; X++) { int Gray0, Gray1, Gray2, Gray3, Gray4, Gray5, Gray6, Gray7, Gray8; Gray0 = LineP0[X - 1];        Gray1 = LineP0[X];    Gray2 = LineP0[X + 1]; Gray3 = LineP1[X - 1];        Gray4 = LineP1[X];    Gray5 = LineP2[X + 1]; Gray6 = LineP2[X - 1];        Gray7 = LineP2[X];    Gray8 = LineP2[X + 1]; if (Gray1 > Gray2) Swap(Gray1, Gray2); if (Gray4 > Gray5) Swap(Gray4, Gray5); if (Gray7 > Gray8) Swap(Gray7, Gray8); if (Gray0 > Gray1) Swap(Gray0, Gray1); if (Gray3 > Gray4) Swap(Gray3, Gray4); if (Gray6 > Gray7) Swap(Gray6, Gray7); if (Gray1 > Gray2) Swap(Gray1, Gray2); if (Gray4 > Gray5) Swap(Gray4, Gray5); if (Gray7 > Gray8) Swap(Gray7, Gray8); if (Gray0 > Gray3) Swap(Gray0, Gray3); if (Gray5 > Gray8) Swap(Gray5, Gray8); if (Gray4 > Gray7) Swap(Gray4, Gray7); if (Gray3 > Gray6) Swap(Gray3, Gray6); if (Gray1 > Gray4) Swap(Gray1, Gray4); if (Gray2 > Gray5) Swap(Gray2, Gray5); if (Gray4 > Gray7) Swap(Gray4, Gray7); if (Gray4 > Gray2) Swap(Gray4, Gray2); if (Gray6 > Gray4) Swap(Gray6, Gray4); if (Gray4 > Gray2) Swap(Gray4, Gray2); LinePD[X] = Gray4; } } } else { for (int Y = 1; Y < Height - 1; Y++) { unsigned char *LineP0 = Src + (Y - 1) * Stride + 3; unsigned char *LineP1 = LineP0 + Stride; unsigned char *LineP2 = LineP1 + Stride; unsigned char *LinePD = Dest + Y * Stride + 3; for (int X = 1; X < Width - 1; X++) { int Blue0, Blue1, Blue2, Blue3, Blue4, Blue5, Blue6, Blue7, Blue8; int Green0, Green1, Green2, Green3, Green4, Green5, Green6, Green7, Green8; int Red0, Red1, Red2, Red3, Red4, Red5, Red6, Red7, Red8; Blue0 = LineP0[-3];        Green0 = LineP0[-2];    Red0 = LineP0[-1]; Blue1 = LineP0[0];        Green1 = LineP0[1];        Red1 = LineP0[2]; Blue2 = LineP0[3];        Green2 = LineP0[4];        Red2 = LineP0[5]; Blue3 = LineP1[-3];        Green3 = LineP1[-2];    Red3 = LineP1[-1]; Blue4 = LineP1[0];        Green4 = LineP1[1];        Red4 = LineP1[2]; Blue5 = LineP1[3];        Green5 = LineP1[4];        Red5 = LineP1[5]; Blue6 = LineP2[-3];        Green6 = LineP2[-2];    Red6 = LineP2[-1]; Blue7 = LineP2[0];        Green7 = LineP2[1];        Red7 = LineP2[2]; Blue8 = LineP2[3];        Green8 = LineP2[4];        Red8 = LineP2[5]; if (Blue1 > Blue2) Swap(Blue1, Blue2); if (Blue4 > Blue5) Swap(Blue4, Blue5); if (Blue7 > Blue8) Swap(Blue7, Blue8); if (Blue0 > Blue1) Swap(Blue0, Blue1); if (Blue3 > Blue4) Swap(Blue3, Blue4); if (Blue6 > Blue7) Swap(Blue6, Blue7); if (Blue1 > Blue2) Swap(Blue1, Blue2); if (Blue4 > Blue5) Swap(Blue4, Blue5); if (Blue7 > Blue8) Swap(Blue7, Blue8); if (Blue0 > Blue3) Swap(Blue0, Blue3); if (Blue5 > Blue8) Swap(Blue5, Blue8); if (Blue4 > Blue7) Swap(Blue4, Blue7); if (Blue3 > Blue6) Swap(Blue3, Blue6); if (Blue1 > Blue4) Swap(Blue1, Blue4); if (Blue2 > Blue5) Swap(Blue2, Blue5); if (Blue4 > Blue7) Swap(Blue4, Blue7); if (Blue4 > Blue2) Swap(Blue4, Blue2); if (Blue6 > Blue4) Swap(Blue6, Blue4); if (Blue4 > Blue2) Swap(Blue4, Blue2); if (Green1 > Green2) Swap(Green1, Green2); if (Green4 > Green5) Swap(Green4, Green5); if (Green7 > Green8) Swap(Green7, Green8); if (Green0 > Green1) Swap(Green0, Green1); if (Green3 > Green4) Swap(Green3, Green4); if (Green6 > Green7) Swap(Green6, Green7); if (Green1 > Green2) Swap(Green1, Green2); if (Green4 > Green5) Swap(Green4, Green5); if (Green7 > Green8) Swap(Green7, Green8); if (Green0 > Green3) Swap(Green0, Green3); if (Green5 > Green8) Swap(Green5, Green8); if (Green4 > Green7) Swap(Green4, Green7); if (Green3 > Green6) Swap(Green3, Green6); if (Green1 > Green4) Swap(Green1, Green4); if (Green2 > Green5) Swap(Green2, Green5); if (Green4 > Green7) Swap(Green4, Green7); if (Green4 > Green2) Swap(Green4, Green2); if (Green6 > Green4) Swap(Green6, Green4); if (Green4 > Green2) Swap(Green4, Green2); if (Red1 > Red2) Swap(Red1, Red2); if (Red4 > Red5) Swap(Red4, Red5); if (Red7 > Red8) Swap(Red7, Red8); if (Red0 > Red1) Swap(Red0, Red1); if (Red3 > Red4) Swap(Red3, Red4); if (Red6 > Red7) Swap(Red6, Red7); if (Red1 > Red2) Swap(Red1, Red2); if (Red4 > Red5) Swap(Red4, Red5); if (Red7 > Red8) Swap(Red7, Red8); if (Red0 > Red3) Swap(Red0, Red3); if (Red5 > Red8) Swap(Red5, Red8); if (Red4 > Red7) Swap(Red4, Red7); if (Red3 > Red6) Swap(Red3, Red6); if (Red1 > Red4) Swap(Red1, Red4); if (Red2 > Red5) Swap(Red2, Red5); if (Red4 > Red7) Swap(Red4, Red7); if (Red4 > Red2) Swap(Red4, Red2); if (Red6 > Red4) Swap(Red6, Red4); if (Red4 > Red2) Swap(Red4, Red2); LinePD[0] = Blue4; LinePD[1] = Green4; LinePD[2] = Red4; LineP0 += 3; LineP1 += 3; LineP2 += 3; LinePD += 3; } } } }

  看上去代碼的行數多了,但是實際上執行速度回更快,我們測試的結果如下:

  1920*1080大小的24位圖像,平均用時155ms,灰度圖像平均用時45ms,比之前的原始實現速度要快了近10倍。

   而在任意半徑中值濾波(擴展至百分比濾波器)O(1)時間複雜度算法的原理、實現及效果一文中的算法,採用了SSE優化,同樣大小的圖耗時為:

       1920*1080大小的24位圖像,平均用時260ms,灰度圖像平均用時160ms,比上述的C語言版本要慢。

  早期有朋友曾提示我在手機上使用Neon可以做到16MB的圖像半徑為1的中值模糊可以做到20ms,我真的一點也不敢相信。總覺得不太可思議。16MB可是4000*4000的大小啊,我用上述C的代碼處理起來要242ms,比手機端還慢了10倍。

  經過朋友提醒,在https://github.com/ARM-software/ComputeLibrary/blob/master/src/core/NEON/kernels/NEMedian3x3Kernel.cpp#L113上看到了相關的Neon代碼,驚奇的發現他和我上面的C代碼幾乎完全一樣。但是就是這一點代碼提醒了我。

inline void sort(uint8x8_t &a, uint8x8_t &b) { const uint8x8_t min = vmin_u8(a, b); const uint8x8_t max = vmax_u8(a, b); a = min; b = max; }

  真是一語驚醒夢中人啊,這麼簡單的優化我怎麼沒想到呢。 

  我們自己看看上面的C代碼,每個像素的9次比較雖然不能用SIMD指令做,但是多個像素的比較之間是相互不關聯的,因此,這樣我就可以一次性處理16個像素了,改成SSE優化的方式也就很簡單了:

inline void _mm_sort_ab(__m128i &a, __m128i &b) { const __m128i min = _mm_min_epu8(a, b); const __m128i max = _mm_max_epu8(a, b); a = min;        b = max; } void MedianBlur3X3_SSE(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride) { int Channel = Stride / Width; int BlockSize = 16, Block = ((Width - 2)* Channel) / BlockSize; for (int Y = 1; Y < Height - 1; Y++) { unsigned char *LineP0 = Src + (Y - 1) * Stride + Channel; unsigned char *LineP1 = LineP0 + Stride; unsigned char *LineP2 = LineP1 + Stride; unsigned char *LinePD = Dest + Y * Stride + Channel; for (int X = 0; X < Block * BlockSize; X += BlockSize, LineP0 += BlockSize, LineP1 += BlockSize, LineP2 += BlockSize, LinePD += BlockSize) { __m128i P0 = _mm_loadu_si128((__m128i *)(LineP0 - Channel)); __m128i P1 = _mm_loadu_si128((__m128i *)(LineP0 - 0)); __m128i P2 = _mm_loadu_si128((__m128i *)(LineP0 + Channel)); __m128i P3 = _mm_loadu_si128((__m128i *)(LineP1 - Channel)); __m128i P4 = _mm_loadu_si128((__m128i *)(LineP1 - 0)); __m128i P5 = _mm_loadu_si128((__m128i *)(LineP1 + Channel)); __m128i P6 = _mm_loadu_si128((__m128i *)(LineP2 - Channel)); __m128i P7 = _mm_loadu_si128((__m128i *)(LineP2 - 0)); __m128i P8 = _mm_loadu_si128((__m128i *)(LineP2 + Channel)); _mm_sort_ab(P1, P2); _mm_sort_ab(P4, P5); _mm_sort_ab(P7, P8); _mm_sort_ab(P0, P1); _mm_sort_ab(P3, P4); _mm_sort_ab(P6, P7); _mm_sort_ab(P1, P2); _mm_sort_ab(P4, P5); _mm_sort_ab(P7, P8); _mm_sort_ab(P0, P3); _mm_sort_ab(P5, P8); _mm_sort_ab(P4, P7); _mm_sort_ab(P3, P6); _mm_sort_ab(P1, P4); _mm_sort_ab(P2, P5); _mm_sort_ab(P4, P7); _mm_sort_ab(P4, P2); _mm_sort_ab(P6, P4); _mm_sort_ab(P4, P2); _mm_storeu_si128((__m128i *)LinePD, P4); } for (int X = Block * BlockSize; X < (Width - 2) * Channel; X++, LinePD++) { // DO Something
 } } }

  注意到上面我已經把灰度和彩色圖像的代碼寫成同一個方式處理了,這是因為對於彩色圖像,3個通道之間的處理時毫無聯繫的。同時我們前面的Swap2個變量的過程時完全可以通過Min和Max兩個算子實現的,我們按下F5測試運行,驚人的速度出現了:

       1920*1080大小的24位圖像,平均用時3ms,灰度圖像平均用時1ms,比上述的C語言版本快了近40倍。

       順便也測試了下16MB的圖像,結果平均只需要7.5ms。真是太厲害了。

、5*5中值模糊

      對於5*5的中值模糊,優化的方式還是一樣的,但是5*5共計25個像素,理論上需要131次比較,其他的過程類似,測試基於SSE的方式,5*5的中值1920*1080大小的24位圖像,平均用時40ms,灰度圖像平均用時20ms,雖慢了很多,但是還是O(1)那裡的速度快。

三、蒙塵和划痕

     在這裏提Photoshop的這個算法也許並不是很合適,但是我也是在研究中值模糊時順便把這個算法給攻破的,當我們打開蒙塵和划痕界面時,發現其有半徑和閾值兩個參數,細心比價,如果閾值設置為0,則相同半徑設置時其結果圖像和雜色里的中間值算法的結果一模一樣,這也可以從蒙塵和划痕算法和中間值同樣都放在雜色菜單下可以看出端倪。   

                     

    通過上述分析,我們可以肯定蒙塵和划痕算法是基於中值模糊的,實際上,PS里很多算法都是基於中值模糊的,特別是那些有平滑度參數的算法^_^。經過多次測試,我們得到的該算法的結果就是如下:

    if  (Median – Src) > Threshold 

    Dest = Median

    else 

    Dest = Src

     對於彩色圖像,不是用彩色圖的中值,而是用其亮度值作為唯一的判斷標準,如果用彩色的中值作為標準來判斷每個分量的,很容易出現過多的噪點,因為有可能會出現Blue分量改變,而Red不變的情況,或其他類似現象。

          蒙塵和划痕的一個作用是去除噪點,特別的,我覺得他在小半徑的時候更為有用,小半徑中值不會改變原圖太多,加上這個閾值則可以很容易去除噪點,同時,基本不會出現新的模糊問題。比如下面這個圖。

        

                           原圖                                                                                                                                                   半徑為1的中值模糊 

        

                                   半徑為1,閾值取20時的蒙塵和划痕                                                                                                            半徑為2,閾值取20時的蒙塵和划痕            

   由以上幾圖,可以明顯的看出,帶閾值的蒙塵和划痕在抑制了噪音的同時對原圖其他細節基本沒有破壞,因此,是一種比較合適的初級的預處理算法,既然是預處理,那麼其效率就非常重要了,因此本文的快速3*3模糊的作用也就是相當有用。

        本文相關算法代碼下載地址:https://files.cnblogs.com/files/Imageshop/MedianBlur3X3.rar。 

   本人的SSE算法優化合集DEMO:測試Demo:http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar。

       

      

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

想寫出一份完整的seo優化方案 你應該這麼做

 

作為一個seo從業人員,網站seo優化方案相信很多人都被老闆要求寫過。老唐今天來介紹一下如何寫出一份完整的seo優化方案,供seo新手朋友們參考。對於一份完整的網站優化方案,老唐這裏將從站內優化、站外優化以及競爭對手分析三個部分來詳細說下。

一、站內優化

一個網站的站內優化,是否出現了問題,大家可以從下面三點來分析查找。

1、代碼標籤優化

最基本的標籤就是我們通常所說的title、keywords以及Description這三個標籤。當然現在的keywords重要性大大降低,可以無視。其他的代碼標籤就是網站h1-h3標籤;圖片Alt、title標籤;外鏈nofollow;頁面元標記meta等等。

2、內容優化

網站SEO的內容優化指的就是網站內容的錨文本、圖片ALT屬性、Tag標籤、麵包屑導航以及原創或者偽原創文章更新之類的。這裏要說的就是站內盡量少用flash,視頻等,影響網頁打開速度不說,蜘蛛抓取也不友好。對於文章中的關鍵字密度以及關鍵字加粗強調等也要注意。

內容優化中內容頁最好設置一些相關欄目,例如:最新文章、推薦文章或者熱門文章等等,這樣可以為文章內容頁增加相關性、減少用戶跳出率以及方便蜘蛛根據鏈接抓取更多內容等等。

對於具體的文章內容,內鏈也是一個很重要的部分,我們需要控制文章內部鏈接數量,不宜太多;注意鏈接對象的相關性;內鏈最好使用使用絕對路徑;做好錨文本等等。

3、URL優化

所謂的網站的url優化就是指網站的url標準化,靜態化,相對/絕對地址,還有首選域,301重定向等等。使用絕對地址,可以防止網站被惡意鏡像。並且如果有人引用了你的網站內容,你會獲得來自外界的導入鏈接。至於首選域就是在www與沒有www的網址之間選擇一個主要網站,將另一個重定向到主要網址,有利於集中網站的權重。

4、網站地圖與robots.txt

我們的網站最好都設置兩個網站地圖,一份是針對訪客的html網站地圖與針對搜索引擎蜘蛛的XML網站地圖。這裏老唐要說一點,我們的網站地圖設置好了可以去對應的站長平台提交下。如百度站長工具、360站長等等。至於robots.txt就是告訴蜘蛛我們網站哪些頁面可以抓取,哪些頁面不能抓取。

二、站外優化

站外優化最重要的就是外鏈的建設,對於外鏈我們首要注重質量,在保證質量的同時可以適當的追求數量。而一般高質量的外鏈來源方式有軟文、目錄提交、獨立博客、論壇簽名、黃頁網站、提交收藏、分類信息、微博推廣、sns推廣等等。而這裏老唐seo特別推薦的就是百度系列的產品,如百度知道、百度貼吧、百度經驗等等。

另外一個就是友情鏈接了,交換友情鏈接是需要注意幾點:

1、交換行業相關的鏈接

2、注意不要被加上nofollow

3、選擇更新與收錄比較正常的網站

4、不要一次性交換大量友鏈

5、友鏈的數量不宜過多

6、定時檢查,刪除異常鏈接

三、競爭對手分析

針對我們自己的網站就是上面所說的這麼多內容了,然而一份完整的seo優化方案,不僅針對自己的網站,還需要對競爭對手的網站進行科學的分析。下面老唐就如何分析競爭對手來詳細說下。

分析競爭對手主要從下面幾點入手:

1、百度權重、PR值

2、域名年齡

3、快照更新

4、反鏈

5、收錄情況

6、品牌關鍵詞

7、長尾關鍵詞

一般來說可以通過一些站長工具如:站長之家、愛站以及5118等等來分析對手的網站。

不知道seo整體優化方案怎麼做?A5服務為企業提供SEO診斷方案,快速讓你了解問題所在。

本站聲明:網站內容來源搜狐https://www.admin5.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

SEO優化方案及排名

 

每個企業建設網站總離不開網站的優化推廣,而有計劃地工作,更能讓效率極大地提高,所以我們需要制定一個詳細的方案,做SEO也是如此。搜索引擎總在不斷更新,所以我們的SEO方案也不能一成不變,想要做一個全面細緻的SEO方案該如何呢?中軟雲數小編為大家來介紹介紹。

方案制定

1、確立目標

確立明確的目標才能更好的安排具體的工作,最好是分化到具體的每月、每周、每日的階段目標。當然,還要做好一個預算的規劃。

2、網站定位要做好

分析自身網站的現狀,根據網站的性質做出用戶人群的定位、推廣方式渠道的定位、差異化的定位、以及網站的風格定位等等。

3、對同行進行研究

知己知彼,才能百戰百勝,了解同行的網站的物理架構、URL架構、關鍵詞的布局、現有的收錄、排名等情況,再結合自身情況,取長補短。

4、關鍵詞的確認

核心關鍵詞就是整個網站關鍵詞系統的核心,容不得半點錯誤。首先關鍵詞一定要選擇正確,你所取的關鍵詞必須和自身網站保持一致性。從用戶的角度去分析他們會通過什麼關鍵詞去搜索網站的產品和服務,這樣可以增加關鍵詞的準確性。

5、預估、風險和成本

風險和成本是一併存在的,SEO的成本主要包括直接費用、時間成本和人力成本這三點;然後其風險也是分為三點,如:成本超支、時間延遲、搜索算法改變。而預估,是我們在制定方案時必須進行的估,比如多長時間才能見到效果,初步統計實現效果之後,我們會獲得一些什麼樣的數據等。

一個網站如果想擁有穩定的搜索引擎排名,網站的內容、更新頻率和網站內部結構是比較重要的。而在SEO優化的多種方法里,外鏈一直被認為是效果最好、最穩定的一種SEO操作。

外鏈常用的幾種方法:

1、友情鏈接

大家都知道友情鏈接可以為我們的網站帶來外鏈還可以適當增加網站的權重,這也是許多人常用的方法之一。不過對於友情鏈接的交換,最好還是找高權重、並與自己領域相同的網站,否則即便他們的流量再高,可能對我們也沒有什麼效果。

2、平台推廣

獲取外部鏈接有效的方式之一就是通過博客、論壇、貼吧等文章並附上鏈接,但這種一般對質量的要求比較高。如果發布的內容毫無看點或者廣告性太強,是不會有太多流量的。

3、分類目錄

分類目錄是將網站信息系統地分類整理,提交到DMOZ目錄、Yahoo目錄和ODP目錄一些專業目錄網站,這樣在每類中,都能排列着屬於這一類別的網站站名、網址鏈接、內容提要,以及子分類目錄等。

對於高質量的外鏈來說:

第一:內容上一定要保持原創,杜絕抄襲還要有一定的可讀性,優質的內容更是爬蟲喜歡抓取的目標,尤其是原創內容。

第二:相對應的網站要在相對應的平台進行發布,這是我們經常說的關聯性,如果你是互聯網相關網站卻在淘寶京東等電商平台發稿,能夠帶來的流量也是少之極少的。

第三:無論是發布稿件、還是其他信息,一定要保持持續性,SEO是一個持續的過程,千萬不能三天打魚两天曬網。最好有規律的進行發布,也會讓爬蟲更好的抓取。

站外優化對於專業技術的要求遠遠低於站內優化,但是許多人會忽視掉站外優化的重要性。站內、站外的優化都是必不可少的環節,從長遠來講,對網站各方面都是有好處的。這個不僅僅能提高網站的排名,還可以增加網站里流量的轉化,在現如今的“互聯網+”的浪潮下,一定要牢牢抓住時代的大方向。

優化一個網站還是很困難的。如果不懂得優化要怎麼操作的話,就很難將網站的關鍵字排名提上來。而網站優化是一項需要長期細心耐心的工作,因此大家在優化時一定要仔細認真,多注意以上提到的這些細節,努力將網站的排名早日提上去。

不知道seo整體優化方案怎麼做?A5服務為企業提供SEO診斷方案,快速讓你了解問題所在。

本站聲明:網站內容來源搜狐https://www.admin5.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

使用 Cloudflare Workers 提高 WordPress 速度和效能教學

去年在 WordCamp Taipei 活動中分享經營網站多年的心得,其中我認為最重要、也不斷重複提及的是「速度」,這兩個字說來簡單,要認真鑽研必須耗費不少時間,如何兼顧速度和使用者體驗確實有相當難度。網站速度一直是我努力的方向,但也深知所有事物都有極限,除了使用近年比較熱門的 Google AMP 技術,網站速度就像一道難以跨越的高牆,許多人努力許久依然徒勞,很難突破的就屬 Time to First Byte(TTFB)。

還好現在資源越來越多,我們有各種方法可以改善網站速度,例如使用 Cloudflare 內容傳遞網路(CDN)服務,甚至全世界目前最快的網域名稱伺服器(DNS),對 WordPress 使用者來說耗費成本一定比靜態網站多很多,而 Cloudflare 可能就是我心目中成本最低、效果最好的網站最佳化服務。

假如你對於改善 WordPress 網站速度有興趣,以下幾篇文章可以參考:

  • Cloudflare 免費 WordPress 外掛教學,一鍵為網站快速套用最佳化設定
  • Jetpack 提供免費 Asset CDN 為你的 WordPress 核心檔案分流加速
  • instant.page 讓你的網頁載入更即時,只需加入一段程式碼

本篇文章要探討全新 Cloudflare Workers 工具,本以為它與我無關,後來才從網路上的範例教學得知 Cloudflare Workers 也可以用來讓 WordPress 變得更快,而且非常有感!簡單來說,交給 Cloudflare 全球邊緣伺服器(Edge Server)處理 WordPress 產生的頁面,因為 WordPress 本身屬於動態產生的內容,透過快取方式把靜態頁面在 Cloudflare 邊緣網路,可使載入速度更快。

Cloudflare Workers 是什麼呢?從官方網站會知道無論在使用者裝置上執行前端程式碼,或是中央資料中心執行後端程式碼 JavaScript 都有其缺陷,於是 Cloudflare Workers 為開發人員在全球網路邊緣(Edge)提供第三個地方部屬程式碼,具備雲端的能力與彈性,大量傳輸系統的備援能力,同時也可以加快傳輸速度。

以往在 Cloudflare 都是使用「Page Rules」強制快取所有頁面(Cache Everything),不過受限於 WordPress 特性,這個方法必須在每次更新網站時都手動清除 Cloudflare 上的快取,對於開發人員來說依然有其不方便性。

Cloudflare 提供各種 Workers 方案,一個月 $5 美元就有十萬次免費請求額度。

那麼以 Cloudflare Workers 進行快取在實作上會不會很困難?我可以跟你說:不會,而且只要十分鐘左右就能設定完成,當然這只能算是 Cloudflare Workers 最基礎、最簡單的功能之一,也就是在邊緣快取(Cache)輕量的靜態 HTML 網頁,但對於 WordPress 使用者來說確實會很有用,特別是在伺服器本身資源不足,時常因為流量過大而停擺的案例上,Cloudflare 可以幫助網站撐下更多的流量。

網站名稱:Cloudflare Workers
網站鏈結:https://www.cloudflare.com/zh-tw/products/cloudflare-workers/

使用教學

在開始前,你的 WordPress 網站必須已經使用 Cloudflare 服務,如果還沒,可以照著這篇文章教學設定一下。以下步驟僅適用於 WordPress 自架站的朋友(也就是可以自行安裝佈景主題和外掛),如果你是使用 WordPress.com 的話不適用本篇教學。

STEP 1

首先從你的 WordPress 控制台安裝「Cloudflare Page Cache」外掛,這個外掛已經在 WordPress 外掛資料庫上架,也是 Cloudflare 團隊開發維護,安全性方面不需擔心,安裝後啟用即可,沒有其他設定畫面。

STEP 2

回到你的 Cloudflare 控制台,從上方選單找到「Workers」後按下「Launch Editor」開啟這項工具的編輯器。

STEP 3

開啟 Workers 編輯器後,從左上角選擇「Scripts」,接著按下「Add Script」,名稱就命名為 html-edge-cache 吧!

把預設的程式碼全選、清除後,我們要從 Cloudflare 的 Github 找到 Edge Cache HTML 範例,其中有一個 edge-cache-html.js(Raw)是要用到的程式碼,全部複製後貼到 Workers 編輯器。

最前面的 CLOUDFLARE_API 部分有三個要設定的欄位:

  • email: 輸入你的 Cloudflare Email,可在 https://dash.cloudflare.com/profile 找到。
  • key: 從 https://dash.cloudflare.com/profile 獲取 Global API Key 然後貼上去。
  • zone: 從 https://dash.cloudflare.com/ 進入對應的網址,在 API section 就能找到。

完成後記得儲存。

STEP 4

接著從左上角切換為「Routes」,我們要設定執行的網址。

點選「Add Route」將你的網址輸入,後面接上 * 字號代表所有頁面下都套用此規則,看起來像是 free.com.tw/* ,然後在後面下拉式選單選擇剛才建立的 Workers 程式碼。如果你有使用其他網址(例如 CDN),也一併在這裡加入。

STEP 5

大功告成!現在 WordPress 網站會丟給 Cloudflare Workers 判斷並做適當的靜態網頁快取,不過登入或留言後會繞過快取,避免 WordPress 原有的動態功能無法正常使用。

打開瀏覽器的開發人員工具,試著查看一下網站目前的 header ,如果有出現 x-html-edge-cache-status: Hit 代錶快取已成功運作。

  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 分享到 Twitter(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 Pocket(在新視窗中開啟)

本站聲明:網站內容來源免費資源網路社群https://free.com.tw,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

百度seo關鍵詞優化到首頁的方法

對於很多從事SEO工作的人員來說,有很大一部分人一直在追求能夠有關鍵詞快速到首頁的方法,然而這也導致很多人為了達到“快速”兩個字從而走上了SEO作弊的道路。SEO這個行業發展也有十來年的時間,從這麼多年的經驗來講,其實有些站點想要快速到百度首頁的話,也有一些正規的渠道能夠做到的。下面勇健科技就具體給大家講講如果能夠快速到百度首頁!

關鍵詞優化到百度首頁

1、網站權重和收錄

網站排名和網站的權重是相輔相成的,所以不是網站上的每個關鍵詞都能很快進入百度的首頁的,如果要嘗試這種操作,需要有一定的前提作為基礎:

(1)網站權重

要想網站關鍵詞能夠快速到百度首頁,就需要站點有一定的權重,至少已經過了所謂的“沙盒期”,但是對於沒有權重的新站來說,前幾個月還是很難做到這點的。

(2)網頁收錄

毫無疑問,如果你想在主頁上找到關鍵詞,一個先決條件就是百度要迅速收錄,否則你就不能談論排名了。

2、關鍵詞的合理選擇

如果你想快速優化一個關鍵詞到百度首頁,在選擇一個關鍵詞時,你必須根據你對SEO資源的實際掌握來選擇它:

(1)選擇適當的關鍵詞。

(2)百度產品佔位較少的關鍵詞,在百度中搜索一個關鍵詞,並查看結果數量。

(3)選擇TOP10,行業主站較少,不是主領域的關鍵詞。

(4)選擇SEM付費推廣少的關鍵詞。

3、制定標題(包括長尾關鍵字)

通常,當我們關鍵詞想要快速進入百度首頁時,在我們撰寫網站標題的時候,我們通常採用以下策略:目標關鍵詞+長尾關鍵詞形式,我們將優先對這個長尾詞進行排名,提高其點擊率,要以優化用戶行為指標,從而促進該頁面的快速權重。

4、優化站內權重入口

如果你想讓搜索引擎在首頁上快速給一個關鍵詞排名,那麼,它一定是一個重要的頁面,所以你需要把這個頁面放在一個相對較高權重的網站位置,如:網站導航、分類頁面頂部、排名較高的內容頁面。其中,值得推薦的是您可能需要提供一些內部錨文本支持,這對排名會更有幫助。

5、優質相關外鏈

當你計算出內部資源時,下一步的操作需要找一些行業內高權重的門戶網站,間接地推廣這個頁面,在短期內盡量形成大量的轉發和報告。

6、製造業熱點事件

為了在短期內產生大量的自然搜索點擊,你可以優化社交媒體中的短句,形成一定程度的熱度。

不知道seo整體優化方案怎麼做?A5服務為企業提供SEO診斷方案,快速讓你了解問題所在。

本站聲明:網站內容來源搜狐https://www.admin5.com/,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!