文章列表

文章列表

如何關閉 Google Adsense 自動廣告 – 架站經驗分享

由於 Google 廣告很多時候實在太佔版面了,Google廣告會自動出現在奇怪的地方影響整體網站的體驗,所以最近決定把 Google 自動廣告關掉,這邊紀錄一下將 Google 自動廣告關掉的作法 Google 自動廣告 參考Google自動廣告說明 自動廣告的優點有:自動廣告的優點包括: 有助於提升收益:自動廣告會分析您的網頁,並根據您的版面配置、內容和現有的 Google 廣告,找出新的刊登位置來放送廣告。可根據網站調整廣告:自動廣告設定可讓您控制廣告在網站上的顯示位置。適合透過行動裝置瀏覽:自動廣告能因應不同的螢幕自動調整大小,並且支援錨定廣告和穿插廣告等行動裝置專屬格式。 雖然聽起來很美好,但是實際在瀏覽的時候常常會有很醜的廣告出現,或是使用手機時動不動就點到廣告,所以這中間就有收益和體驗的 tradeoff,大家可以自己斟酌,當然對使用者來說關掉是最好的就是了XD 關閉 Google 自動廣告 到 Google Adsense > 選擇左邊廣告 > 總覽 ,可以看到目前weikaiwei,com的自動廣告顯示綠色的 啟用 點選編輯後,左邊會顯示一些自動廣告所產生的範例,出現在那邊實在是太醜太佔版面了。右邊有選項 自動廣告,可以在這邊將他關閉 Google 現在也有廣告的實驗功能,可以測試關閉自動廣告等等變因對網站的收益影響多大,他的作法是讓一半的使用者會瀏覽變動前的網頁,一半的使用者瀏覽變動後的網頁來比較。但通常需要90天的實驗時間 關閉自動廣告心得 雖然自動廣告關閉後必然會影響收益,但Google自己插入的廣告實在是大大影響了使用者瀏覽網頁的體驗,所以目前還是決定先關閉一陣子試試看,關閉後確實有減少廣告了,現在 都會阿嬤首頁看起來也比較乾淨 ...
ibm-qiskit

【量子計算】IBM Qiskit教學 part1 : 核心觀念、安裝Qiskit

本篇文章之資訊主要來源、翻譯自 : Quantum computing in a nutshell 量子計算 in a nutshell 量子計算的潛力很大,有可能可以作到古典電腦在時間內無法作到的質因數分解、量子模擬、搜尋演算法、量子機器學習量子計算的兩大基石為:干涉 (interference) : 對應到 波 的性質量子糾纏 (entanglement) :對應到 粒子 的性質 干涉 interference 古典電腦的每個 bit 可以是0 或 1,量子電腦的bit(或叫qubit)可以同時是0 和 1,一個 qubit 可以是 0 和 ...

【平行運算】OpenMPI教學(二) Blocking Communication

OpenMPI 在做訊息 傳遞 時,需要指定傳送的資料是什麼?傳送的數量多少?傳送的資料型別是什麼?傳送給哪個 process?OpemMPI 在做訊息 接收 時,需要指定收到的資料放到哪裡?收到的數量 最多 是多少?收到的資料型別是什麼?哪個 process 傳送來的?可以想像以上的指定是很合理的,我們必須要先知道要傳送多少以及傳送給誰,才能預留記憶體並且送到指定的位置。在收資料時也是,要預留記憶體來放接收的資料。另外當然一個 process 可以傳送多筆資料,也可以接收多筆資料,這樣我們怎麼知道每個 process 要把資料放在哪裡? 這時候就需要幫每筆資料貼上標籤 (tag)。當我們在傳送的資料上貼上標籤,在接收端對應的接收位置也貼上一樣的標籤,如此就可以把資料放到指定的位置,不會出錯 圖片來源: SKIRT project 完整程式碼 github 完整程式碼連結 : https://github.com/grandma-tutorial/OpenMPI-tutorial OpenMPI 語法介紹 MPI_Send()MPI_Recv() Blocking Communication 在 OpenMPI 裡面有個很重要的觀念是 Blocking Communication,我們使用到的函式 MPI_Send() ...

【平行運算】OpenMPI教學(一) 基礎語法

訊息傳遞介面(英語:Message Passing Interface,縮寫MPI)是一個平行計算的應用程式接口(API),常在超級電腦、電腦叢集等 非共享記憶體 環境程序設計。(from wikipedia)OpenMPI 與 OpenMP 平行的層級不同 :OpenMP是做多執行緒的平行(Multithreading),每個執行緒可以看到相同的記憶體,他們是共享記憶體 (shared memory)OpenMPI 則是做多行程的平行 (Multiprocessing),每個行程的記憶體不是共享的,因此這時候就需要不同行程間的訊息傳遞 (message passing)。白話來說,多執行緒的平行只能讓你在一台電腦上使用1顆CPU的多核心來進行平行,MPI的平行可以讓你做到跨節點、跨CPU的平行,現在的超級電腦可以說都是由數以千計臺小電腦組成,因此跨節點的平行在超級電腦、叢集式計算、分散式計算就顯得很重要編譯 : MPI 有自己的編譯器,這邊我使用 mpic++ (以下有範例程式)執行程式 : 執行時,也需要呼叫 mpirun 來執行在 OpenMPI 中,每個執行緒都有自己的代號,這邊的名稱叫做 rank,相當於在OpenMP中每個執行緒的 ID 圖片來源: SKIRT ...

【平行運算】OpenMP教學(四) 資料共享 Data-sharing

在多執行緒平行化的程式中,有一些變數是所有執行緒 (threads) 共享的,大家都看得到。有一些變數則是各個執行緒私人擁有的,A 執行緒看得到,但 B 執行緒看不到。詳細來說,在OpenMP裡面有兩種變數: Shared Variable 和 Private Variable。以之前的 for 平行化來說 (請參考多執行緒平行計算 OpenMP教學 Part2 : 分工 Worksharing (附完整程式碼)) ... int main() { const int N = 8; ...

【平行運算】OpenMP教學(三) 同步 Synchronization

同步(Synchronization) 在多執行緒平行化中是很重要的概念。我們可能開了很多執行緒讓他們各別執行執行某些任務(假設是A1, A2, A3,,A10彼此相似但獨立),但 B 這個任務必須等 A1, A2, A3,, A10 都完成後才能執行。舉個例來說,有 10 個送貨員將 10 包貨物獨立的放到貨車上,第 1 個送貨員先放,或是第 5 個送貨員先放順序不重要,10 個送貨員都將貨物放好之後,送貨員能開車出發去送貨。以上面的例子來講,10 個送貨員(10 threads)獨立、平行的執行放置貨物 (A1, A2,,A10),送貨員(1 thread) 送貨(B) 必須等 A 全部完成後才能執行。因此等待變成是一件很重要的事,我們必須避免有一個送貨員將貨物放好後,就去開車送貨!所以我們必須在 A ...

【平行運算】OpenMP教學(二) 分工 Worksharing

在 多執行緒平行計算 OpenMP教學 Part1 : 基礎語法 (附完整程式碼) 中,我們只是將parallel region裡面的程式碼執行了很多次 : 我們開了很多執行緒,每個執行緒都將裡面的函式(printf)做了一次,其實並沒有真正作到分工。在OpenMP中,要將計算量分工給多個執行緒處理,可以用到 worksharing constructs : for construct, sections construct, single construct。以下我們將使用這些 worksharing constructs 來達到真正的分工、真正的平行化處理,提昇效能 完整程式碼 GitHub 完整程式碼連結 : https://github.com/grandma-tutorial/OpenMP-tutorial OpenMP 語法 # pragma omp for# ...

【平行運算】OpenMP教學(一) 基礎語法

OpenMP是一個跨平台的多執行緒實現,主執行緒(順序的執行指令)生成一系列的子執行緒,並將任務劃分給這些子執行緒進行執行。這些子執行緒並列的執行,由執行時環境將執行緒分配給不同的處理器。 要進行並列執行的代碼片段需要進行相應的標記,用預編譯指令使得在代碼片段被執行前生成執行緒,每個執行緒會分配一個 id,可以通過函式 (omp_get_thread_num()) 來獲得該值,該值是一個整數,主執行緒的 id 為 0。在並列化的代碼執行結束後,子執行緒 join 到主執行緒中,並繼續執行程式。 (from wikipedia) 完整程式碼 github 完整程式碼連結 : https://github.com/grandma-tutorial/OpenMP-tutorial OpenMP 基礎語法 # pragma omp parallel# pragma opm parallel num_threads()omp_set_num_threads()omp_get_thread_num() OpenMP 範例程式 : Hello, world 要使用 OpenMP ,需先 #include# pragma ...

$\sum$級數之上下界變換

在微積分中,我們常會使用變數變換,來使整個積分更好積,做完變數變換後,別忘了同時改變上下界,以免辛苦的成果功虧一簣。級數裡面也有異曲同工之妙,需要變換上下界,使我們能繼續往後的數學運算,這在微分方程、訊號與系統(Discrete time Fourier transform等等)都會用到。 以下就以解微分方程會遇到的情況為例 $LARGEsumlimits_{n=0}^{infty}{left(4n^2-2nright)a_nx^{n-1} } +sumlimits_{n=0}^{infty }{a_nx^n} =0$ 為了把兩個級數合在一起,我們需要把 $large x$ 弄成同樣次方所以我們把 $large n$ 用 $large k+1$ 帶入,也就是:$Large n=k+1$$Large k=n-1$ 所以 $Largesumlimits_{n=0}^{infty}{left(4n^2-2nright)a_nx^{n-1} }=sum{left(4(k+1)^2-2(k+1)right)a_{k+1}x^k}$ 大家可以看到此時的變數已經變成 $large k$ 了,我們的級數上下界當然也要跟著變,又 $large n$ 是從 $large 0$ 開始,所以 $large ...
python

Decorator 概念簡介

前言 考量到 decorator 的概念不好懂,def def 的語法對於從 compiling language 或者是不懂 functional programming 的人可能會覺得突兀或陌生,進而產生誤解,因此簡單打了這篇。如有錯誤敬請各位勇敢指正(但也請確定並事先驗證自己的說法),感謝大家~ 一開始學 decorator 時,常常會看到類似下面的這種例子 def a_function_wrapper(inner_function): def wrapper(*args, **kwargs): print("The function starts!") ...

必看!超快積分法,必會積分技巧,超高計算速度,再也不會計算凸槌(3)

再經過前面兩節的介紹之後,想必讀者一定都有了基礎的概念,最後這一小節,我將舉出四個例子,讓大家能更具體的瞭解如何使用這個計算方法,也建議讀者們可以先把答案遮起來,自己算算看!最後再帶入第一節所要講的證明,畫下一個完美的句點。 範例一 $Largeint{ln xdx}$ (讀者可以自己試試看一步一步分部積分,再來比較此法的速度、以及計算難易度) 所以為$Large xln x- int 1dx= xln x- x+c$ 範例二 $Largeint{e^{3x}sin 2xdx}$ 所以$Largeint e^{3x}sin 2xdx=frac{1}{3} e^{3x}sin2x-frac{2}{9} e^{3x}cos2x-intfrac{4}{9}e^{3x}sin 2xdx$ $LargeRightarrowfrac{13}{9}int e^{3x}sin 2xdx=frac{1}{3} e^{3x}sin2x-frac{2}{9} e^{3x}cos2x+c$ $LargeRightarrowint e^{3x}sin 2xdx=frac{3}{13}e^{3x}sin2x-frac{2}{13}e^{3x}cos2x+c$ 大家積出來之後,可以微分回去,驗算看看對不對 範例三 $Largeint_{0}^{1}{x2^xdx}$ $Largeint_{0}^{1}{x2^xdx}=left(xcdot frac{2^{x}}{ln 2}-frac{2^{x}}{left(ln 2right)^{2}}right) Bigg| _{0}^{1}$ 範例四 $Largeint{sin^{-1} xdx}$ 請看附錄<反三角函數的微分> 所以$Largeint{sin^{-1} xdx}=xsin^{-1} xdx-int{frac{xdx}{sqrt{1-x^2} } ...

必看!超快積分法,必會積分技巧,超高計算速度,再也不會計算凸槌(2)

上一節我們導出了$$Largeint{udv}=uv-left(u'v_{1}-int{v_{1}u^{primeprime}dx}right)$$$$Large=uv-u'v_{1}+int{v_{1}u^{primeprime}dx}qquad(3)$$其中的$$Largeint{v_{1}u^{primeprime}dx}=int{u^{primeprime}v_{1}dx}$$令$large u_{new} =u^{primeprime}quadqquad du_{new} =u^{(3)}dx$$large dv_{new} =v_{1}dxqquad v_{new} =v_{2}$得$$Largeint{u^{primeprime}v_{1}dx}=u^{primeprime}v_{2}-int{v_{2}}u^{(3)}dx$$帶回原式$$Largeint{udv}=uv-u'v_{1}+int{v_{1}u^{primeprime}dx}$$$$Large=uv-u'v_{1}+u^{primeprime}v_{2}-int{v_{2}}u^{(3)}dxqquad(4)$$其中的$$Largeint{v_{2}u^{(3)}}dx=int{u^{(3)}v_{2}}dx$$令$large u_{new} =u^{(3)}quadqquad du_{new} =u^{(4)}dx$$large dv_{new} =v_{2}dxqquad v_{new} =v_{3}$得$$Largeint{u^{(3)}v_{2}dx}=u^{(3)}v_{3}-int{v_{3}}u^{(4)}dx$$帶回原式$$Largeint{udv}=uv-u'v_{1}+u^{primeprime}v_{2}-int{v_{2}}u^{(3)}dx$$$$Large=uv-u'v_{1}+u^{primeprime}v_{2}-left(u^{(3)}v_{3}-int{v_{3}}u^{(4)}dxright)$$$$Large=uv-u'v_{1}+u^{primeprime}v_{2}-u^{(3)}v_{3}+int{v_{3}}u^{(4)}dxqquad(5)$$ 可以發現我們已經推出一個規則,還可用圖表的方式幫助我們記憶、運算 $qquad$ $qquad$ 圖1.、圖2.、圖3.,分別對應到 式(3)、式(4)、式(5)由於 ...