详情

全站展示位

Go 語言內 struct methods 該使用 pointer 或 value 傳值?小惡魔AppleBOY

上週末在台北講『Go 語言基礎課程』,其中一段介紹 Struct 的使用,發現有幾個學員對於在 Method 內要放 Pointer 或 Value 感到困惑,而我自己平時在寫 Go 語言也沒有注意到這點。好在強者學員 Dboy Liao 找到一篇說明:『Don’t Get Bitten by Pointer vs Non-Pointer Method Receivers in Golang』,在 Go 語言如何區分 func (s *MyStruct) 及 func (s MyStruct),底下我們先來看看簡單的 Struct 例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package main import "fmt" type Cart struct { Name string Price int } func (c Cart) GetPrice() { fmt.Println(c.Price) } func main() { c := &Cart{"bage", 100} c.GetPrice() } 。。。

推荐

啟動 Percona XtraDB Cluster 注意事項小惡魔AppleBOY

在 Percona XtraDB Cluster 推出 5.5.28 以前,最簡單的啟動方式就是打開 my.cnf 設定 wsrep_urls 在 [mysqld_safe] section 內。假設我們有三台 Node 分別為底下 IP: node1 = 192.168.1.100 node2 = 192.168.1.101 node3 = 192.168.1.102

MySQL 預設儲存引擎: InnoDB 介紹小惡魔AppleBOY

MySQL 是一套眾所皆知的 Database System,今天來簡介 InnoDB 儲存引擎,在 MySQL 5.5.5 之前預設的儲存引擎是 MyISAM,但是為什麼在 5.5 之後官方要將預設儲存引擎換成 InnoDB 呢?大家都知道 InnoDB 用來交易管理非常方便,因為 InnoDB 透過 row lock,相對於 MyISAM 透過 table lock 來的有效率,也避免大量寫入的時候,造成無法讀取資料,這就是 row lock 的優勢,當然用 InnoDB 最主要的原因還有 Full-text search indexes 功能,但是別擔心 MySQL 5.6.4 之後(含此版本) InnoDB 開始支援 Full-text search 功能,另外在使用 MyISAM 時候,如果資料突然出問題,還必須使用 MySQL Binary Log 來恢復資料,如果用 InnoDB 這就沒關係了。大家還在用 MyISAM 嘛?開始升級伺服器,一起體驗 InnoDB 的功能,如果已經上線很久的網站,作者不建議轉換,因為可能會遇到很多雷。

[CSS] IE 6, 7, 8 FireFox hack 支援透明背景圖 background or img javascript小惡魔AppleBOY

先前在國外部落格發現一篇非常好用的教學:Quick Tip: How to Target IE6, IE7, and IE8 Uniquely with 4 Characters,裡面有提供一部教學影片,非常好用,也很實在,底下可以先看影片,看完大概就可以針對 IE, FireFox, Chrome 進行 CSS Hack。 目前網頁製作,要符合多瀏覽器跨平台(IE, Safari, Chrome, FireFox…等),就必須動到 CSS Hack,雖然 Google 已經宣稱不支援 IE6,但是很多單位,很多學校跟客戶都是使用 IE6 瀏覽器,不只國內這樣,國外大廠也都希望支援 IE 系列,包含 IE6, IE7, IE8,這時候就必須知道如何分別針對各種不同 IE 做設定,底下就來看看實做例子。

如何使用 PPA 升級 Ubunut Firefox 瀏覽器到 4.0小惡魔AppleBOY

作者目前使用 Ubuntu 10.10 (maverick) 桌面環境,也是台灣 MozTW 成員之一,這次 FireFox 4.0 Release 介面有些改變,使用上來也非常順手,記憶體好像吃的比較少了?(有待商榷),現在就來升級 FireFox 吧,兩種升級方式,如果不熟悉 Command Line 就用 GUI 升級,另一種升級方式就是用 apt-get upgrade 啦。 如果用 Windows 請到這裡下載 利用 GUI 介面升級 (Install firefox 4 using GUI) 我的環境是英文,所以底下寫的是英文安裝方式: 按照底下步驟進行 Applications > Ubuntu Software Center > Edit > Software Sources 之後點選 "Other Software" 選擇左下角 "Add" 按鈕,接著把底下文字輸入 ppa:mozillateam/firefox-stable 最後到底下升級,就可以開始使用 FireFox 4 了 System > Administration > Update Manager 文字介面升級 (Install firefox 4 using terminal) 只要鍵入三行指令即可 $ sudo add-apt-repository ppa:mozillateam/firefox-stable $ sudo apt-get update $ sudo apt-get upgrade 沒圖沒真相啦,底下附上桌面截圖 Reference: How to install firefox 4 in ubuntu using PPA Firefox 4 正式版現已推出,帶給您更棒的網路體驗

心灵鸡汤

  战国时期鲁国国相公仪休爱吃鱼,有人投其所好送鱼给他,公仪休不收。

  问其原因,他说:“正因为喜欢吃鱼,所以不能理解,此刻我作为国相,能够用自我俸禄买鱼吃,如果此刻收了鱼而丢了官,谁又会送给我鱼呢所以我不能理解啊。”

  公仪休“好鱼而不贪鱼”,实乃其深知“贪赃、枉法、丢官、受惩罚”之间的内在联系,愿每位领导干部任前任中都时刻不忘认真算一算政治帐、经济帐、家庭帐。

列表展示

主站展示位

[Linux] CentOS 5.1 安裝 Lighttpd + PHP5 + FastCgi + eaccelerator小惡魔AppleBOY

昨天網站無緣無故被擋掉,原因是我的流量網站太大,囧,因為是架設 web site,測試一下效能,我發現 = 這個東西,這樣才可以找到。 首先先看你的版本再來抓: RHEL5 / CentOS-5 i386:

有效率的用 jsonnet 撰寫 Drone CI/CD 設定檔小惡魔AppleBOY

Drone 在 1.0 版本推出了用 jsonnet 來撰寫 YAML 設定檔,方便開發者可以維護多個專案設定。不知道大家有無遇過在啟動新的專案後,需要從舊的專案複製設定到新專案,或者是在 .drone.yml 內有非常多重複性的設定,假設 Go 語言的開源專案需要將執行檔包成 ARM64 及 AMD64 的映像檔,並且上傳到 Docker Hub,底下是 AMD64 的設定檔範例。剛好在 Udemy 課程內有學員詢問到相關問題。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 --- kind: pipeline name: linux-arm64 platform: os: linux arch: arm64 steps: - name: build-push pull: always image: golang:1.11 commands: - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-discord" environment: CGO_ENABLED: 0 GO111MODULE: on when: event: - push - pull_request - name: build-tag pull: always image: golang:1.11 commands: - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-discord" environment: CGO_ENABLED: 0 GO111MODULE: on when: event: - tag - name: executable pull: always image: golang:1.11 commands: - ./release/linux/arm64/drone-discord --help - name: dryrun pull: always image: plugins/docker:linux-arm64 settings: dockerfile: docker/Dockerfile.linux.arm64 dry_run: true password: from_secret: docker_password repo: appleboy/drone-discord tags: linux-arm64 username: from_secret: docker_username when: event: - pull_request - name: publish pull: always image: plugins/docker:linux-arm64 settings: auto_tag: true auto_tag_suffix: linux-arm64 dockerfile: docker/Dockerfile.linux.arm64 password: from_secret: docker_password repo: appleboy/drone-discord username: from_secret: docker_username when: event: - push - tag trigger: branch: - master

在 Go 語言用 singleflight 解決快取擊穿 (Cache Hotspot Invalid)小惡魔AppleBOY

上圖是在實作 Web 服務時常用的架構,會在服務跟資料庫之間加上快取,以減少資料庫的負載。然而在實作服務串接時,常常會遇到快取三大問題:雪崩、擊穿、穿透,其中 Cache Hotspot Invalid (快取擊穿) 是一個非常常見的問題,當快取中的資料過期或消失時,大量的請求會同時打到後端資料庫,這會導致資料庫的負載過大,甚至會導致資料庫掛掉,如下圖某篇文章的 cache key 過期。這篇文章將會介紹如何使用 Go 語言內建的 singleflight 來解決快取擊穿的問題,這是 sync 套件中的一個功能,可以避免重複的請求同時打到後端資料庫。

關於 PHP FIG Group 所制定的 PSR-0, PSR-1, PSR-2小惡魔AppleBOY

上禮拜寫了一篇 寫出好維護的 PHP 程式碼,看到 gslin 大神回應了一篇 關於可維護的 PHP 專案:PHP-FIG 的 PSR-0、PSR-1、PSR-2,其實我已經關注 PHP FIG 有一陣子了,FIG 所定義的三份文件 PSR-0 (Auto loading Standard), PSR-1 (Basic Coding Standard), PSR-2 (Coding Style Standard) 寫的非常清楚,目的就是讓 PHP Open Source 專案有共同的 Coding Standard,方便大家共同開發。所以上禮拜提到的投影片內容有大部份參考了這份文件,裏面的內容比較不同的地方就差於 Control Structures 部份,舉個簡單例子: 寫 if 條件式,網路上只有兩種寫法 <?php if ($a == $b) { …… }[/code] 另外一種寫法 [code lang=“php”]<?php if ($a == $b) { …… }[/code]

SSH SCP 速度小惡魔AppleBOY

好快阿 這是我用過最快的了~ snapshot2 Hosted on Zooomr 哈哈,雖然說在同一個hub底下 這算是蠻正常的 哈哈~ 11.1MB的速度在跑 不是蓋的

AWS 機器上 duplicated RPM 問題小惡魔AppleBOY

昨天幫忙升級全部 AWS RPM 套件,升級過程本來很順利,不過不知道哪一個 RPM 造成 SSH 全面斷線,接著我直接到 AWS Management Console 把機器 restart,登入系統之後下 yum update,直接給我噴出底下錯誤訊息 ---> Package zlib.i686 0:1.2.3-24.7.amzn1 will be updated ---> Package zlib.i686 0:1.2.3-25.8.amzn1 will be an update --> Finished Dependency Resolution You could try using --skip-broken to work around the problem ** Found 155 pre-existing rpmdb problem(s), 'yum check' output follows: audit-libs-2.1-5.15.amzn1.x86_64 is a duplicate with audit-libs-2.0.4-1.14.amzn1.x86_64 authconfig-6.1.12-5.14.amzn1.x86_64 is a duplicate with authconfig-6.1.4-6.13.amzn1.x86_64 basesystem-10.0-4.9.amzn1.noarch is a duplicate with basesystem-10.0-4.8.amzn1.noarch bash-4.1.2-8.14.amzn1.x86_64 is a duplicate with bash-4.1.2-3.13.amzn1.x86_64 binutils-2.20.51.0.2-5.20.17.amzn1.x86_64 is a duplicate with binutils-2.20.51.0.2-5.12.15.amzn1.x86_64 cloud-init-0.5.15-16.amzn1.noarch is a duplicate with cloud-init-0.5.15-8.amzn1.noarch coreutils-8.4-13.13.amzn1.x86_64 is a duplicate with coreutils-8.4-9.12.amzn1.x86_64 coreutils-libs-8.4-13.13.amzn1.x86_64 is a duplicate with coreutils-libs-8.4-9.12.amzn1.x86_64 cpp-4.4.5-6.35.amzn1.x86_64 is a duplicate with cpp-4.4.4-13.33.amzn1.x86_64

[Ubuntu & java] java JDBC and MySQL小惡魔AppleBOY

最近開始要摸 java 了,目前大概先實做 java with JDBC 連接 MySQL,所以在 JavaWorld@TW 這裡找了一些相關的文件,目前我在 Linux 底下實做,還沒找到一套很適合的 IDE Tool 來撰寫程式碼,大家好像都很推 netbeans 跟 eclipse,不過我目前還是使用 PSPad 來撰寫 java 程式碼,然後透過 FTP 的方式編輯,這不是重點,重點是要透過 jdbc 來連接 MySQL,目前是在 Ubuntu 7.04 這一版本上面實做,底下是實做方法: 1. 首先先安裝 deb 檔案:透過 apt-get 的方式 # # 首先尋找 java lib with mysql apt-get install libmysql-java 2. 安裝好之後尋找 jar 檔案,加入到 class path 裡面 # # 首先 echo $CLASSPAT # # java mysql jar 檔案如下 /usr/share/java/mysql.jar # 加入 CLASSPATH,修改 /etc/bash.bashrc export CLASSPATH=$CLASSPATH:/usr/share/java/mysql.jar # 然後在 source /etc/bash.bashrc

用 Terraform 初始化 GCP 環境小惡魔AppleBOY

我們將使用 Terraform 來初始化 GCP 環境。從建立 Service Account 到 GCS 並且將 Terraform State 儲存做版本控制,這篇文章將會一步一步帶領您完成。

[文獻館]搞定了LTO – 3580小惡魔AppleBOY

我用館內新買的伺服器,安裝了3個作業系統 Windows 2003 Server, Windows XP, Windows 2000 Server ,還好最後終於給我搞定了 2003的driver 如下 點選我

[生活日記]回到高雄了~小惡魔AppleBOY

昨天晚上,朋友從台中殺下來中正找我,到中正的時候已經晚上12點半,然後在從中正殺到高雄,還真快阿,一小時就到了,一路上跟他聊天,非常開心,哈哈,聊一下以前在公司的事情,一整個感覺就是爽,後來到高雄,我就跟他去光華夜市這裡吃東西,吃羊肉燴飯,跟排骨湯,哈哈還不錯吃,可是有一間滷肉飯超好吃,竟然說要關店了,一整個囧,想說喝他的排骨酥湯,超棒的說。 話說我下禮拜二又要自己開車上去了,要把一些冬天的東西弄上去了,哈哈~

[Mysql] 資料庫備份[big5]utf8轉換成utf-8小惡魔AppleBOY

其實在很多opensource底下的套裝軟體,資料庫預設都是用 utf8,我想這會造成在 phpMyAdmin 底下看到亂碼,然後自己之前也有遇到問題,然後又在網路上看到這篇 搶救 xdite.net 所用的奇技淫巧 裡面所寫的備份方式跟我在轉換 phpBB2 跟自己的 wordpress 一樣 大同小異,我還在想說有更好的解法說,看來是沒有,在 wordpress 底下,只能利用後台的資料庫備份,不然用phpMyAdmin的話,我想你備份出來也是沒用。

在本機端導入 Drone CLI 做專案測試小惡魔AppleBOY

Drone 是一套用 Go 語言所撰寫的 CI/CD 開源專案,透過 .drone.yml 檔案方式讓開發者可以自行撰寫測試及部署流程。大家一定會認為要先架設好 Drone 伺服器,才能透過 Git Push 方式來達到自動化測試及部署專案。現在跟大家介紹,如果你的團隊尚未架設 Drone 服務,但是又想要使用 Drone 透過 Yaml 方式所帶來的好處,很簡單,你只需要透過 Drone CLI 工具就可以完成,不需要架設任何一台 Drone 服務,只要學會 Yaml 方式如何撰寫,就可以透過 drone exec 指令來完成。好處是寫完 .drone.yml 檔案,未來圖隊如果正式架設了 Drone 服務,就可以無痛升級,沒有的話,也可以透過 CLI 工具在公司專案內單獨使用,這比寫 docker-compose.yml 方式還要快很多。本篇會介紹使用 drone exec 的小技巧。

MongoDB 效能調校紀錄小惡魔AppleBOY

最近剛好在實作 Prometheus + Grafana 的時候,對 MongoDB 做了容器 CPU 使用率 (container_cpu_usage_seconds_total) 的監控,Metrics 寫法如下: 1 2 3 sum( rate(container_cpu_usage_seconds_total{name!~"(^$|^0_.*)"}[1m])) by (name) 從上面的 Metrics 可以拉長時間來看,會發現專案的 MongoDB 非常不穩定,起起伏伏,這時候就需要來看看資料庫到底哪邊慢,以及看看哪個語法造成 CPU 飆高? 接著為了看 MongoDB 的 Log 紀錄,把 Grafana 推出的 Loki,也導入專案系統,將容器所有的 Log 都導向 Loki,底下可以看看 docker-compose 將 Log 輸出到 loki 1 2 3 4 5 6 7 logging: driver: loki options: loki-url: "" loki-retries: "5" loki-batch-size: "400" loki-external-labels: "environment=production,project=mongo" 先看看結論,做法其實很簡單,找出相對應 Slow Query,把相關的欄位加上 Index,就可以解決了

利用 mb_strwidth 取代 mb_strlen 計算 Multi-byte 字數小惡魔AppleBOY

之前寫了一篇如何切割中文標題,裡面計算中文字數,這樣才不會直接切到中文字,但是 PHP 有很多函式可以算出字串有多少字元,我們看看底下例子,使用了 strlen、mb_strlen、mb_strwidth 分別下去測試,看看會把中文字算成幾個字元: <?php echo strlen("測試ABC") . " "; # 輸出 9 echo mb_strlen("測試ABC", 'UTF-8') . " "; # 輸出 5 echo mb_strwidth("測試ABC") . " "; #輸出 7 ?> 看到這結果並不意外,大家可以看到 strlen 把中文字元算成3個字元,mb\_strlen 不管是中文還是英文就都算成單一字元,mb\_strwidth 則是把中文算成 2 字元,mb_strwidth 算出來正是我想要的,如果是想要在 Web 上面切割中文,建議大家用 mb_substr 即可。因為作者本人在弄跟 BBS 相關技術,所以必須江中文字算成2字元,底下節錄 mb_strwidth 如何算字元長度: Chars => Width U+0000 - U+0019 => 0 U+0020 - U+1FFF => 1 U+2000 - U+FF60 => 2 U+FF61 - U+FF9F => 1 U+FFA0 - => 2 PS: 測試環境 PHP 5.

PHP 免費雲端主機 PHPFog vs Pagoda vs AppFog小惡魔AppleBOY

今天筆者來介紹幾套目前免費的雲端虛擬主機服務,自從 Git 版本控制的出現後,大家可以發現,以往免費的虛擬主機搭配後台 Panel,這種模式已經不再看到,取代而之的就是用 Git 來管理程式碼,而不是用 FTP 上下傳方式了。筆者認為學會 Git,是一件非常重要的事情,這樣可以嘗試不同雲端服務,,像是 PHPFog,Pagoda Box,AppFog …等。這次介紹的雲端主機服務不同於 Linode VPS,Linode 是可以拿到完整的虛擬主機權限,可以進行主機的效能優化,以及安裝合適的套件。

Go 語言用 pprof 找出程式碼效能瓶頸小惡魔AppleBOY

Go 語言除了內建強大的測試工具 (go test) 之外,也提供了效能評估的工具 (go tool pprof),整個生態鏈非常完整,這也是我推薦大家使用 Go 語言的最大原因,這篇會介紹如何使用 pprof 來找出效能瓶頸的地方。假設開發者在寫任何邏輯功能時,發現跑出來的速度不是想像的這麼快,或者是在串接服務流程時,整個回覆時間特別久,這時候可以透過 benchmark 先找出原因。 1 go test -bench=. -benchtime=3s ./lexer/

今天考試兩科必修無線區域網路,TCP/IP小惡魔AppleBOY

今天真是很忙得一天,不過我自己認為是還好,早上一起床9點,我就要趕去meeting了,早上是大group meeting,所以蠻早起床的,加上今天要考兩科期中考,整個就是大爆炸,所以最近晚上都在實驗室,哈哈,早上好險計畫的教授沒來,所以我們meeting的時候沒有被電,不然就慘了,下午有一科是老闆的無線區域網路課程要考試,雖然是 open book 可是我好像沒有看,因為早上要meeting要準備阿,哈哈,下午一點考一科TCP/IP,因為幾乎都是考考古題,所以我寫10分鐘就交卷了,助教一整個傻眼,同學都嚇到了,回去lab,大家都說你考完試了喔,囧,我說對阿,大家被我驚奇的交卷速度嚇到,不過也還好吧,都是考考古題,會寫都寫好了,不會寫就空白了,再來呢,考我們老闆的科目,我一整個不會寫,然後我幾乎教空白卷吧,哈哈我看我又要拼期末project了。 有時後,我自己在想,我真的適合念研究所嗎?這裡的課程值得我學習嗎?我到底是為了什麼讀研究所?我成績這麼差,可以畢業嗎?在這門客裡面,雖然我成績很差,可是我覺得我學習到很多實做的東西,我理論真的很差,差到不行,隨便一個人都可以贏我,我寫考卷不是0就是1,也就是,答案只有會寫,跟不會寫,沒有在亂掰的,哈哈。

Debian 7.x Install PHP 5.5 或 5.6 版本小惡魔AppleBOY

Debian 目前預設的 PHP Stable 版本是 5.4.x,由於 Laravel PHP Framework 關係,所以希望升級到 PHP 5.5 或 5.6 版本,只要透過底下操作就可以直接裝 PHP 5.6 版本了

[Pear] 利用 Validate 套件驗證 E-mail 多重表單認證小惡魔AppleBOY

最近都在玩 open source 的程式,方便加速自己開發 PHP 的專案,在申請帳號密碼部份就可以利用 Validate 套件來驗證,以及 email 填寫正確性,可以檢查 MX 或者是 A record 紀錄,還蠻方便的,也可以檢查 multiple 欄位,設計的相當不錯,也有金融相關套件可以驗證 CreditCard,金融套件名稱是 Validate_Finance 裡面的 Validate_Finance_CreditCard 部份,線上也有很多相關說明,可以參考 Validate 線上手冊,目前已經到 0.8.2 (beta),如果使用 Release 版本,請選用 0.8.1,軟體可以在此下載,0.8.2 是在 2009-01-31 Release 出來的,還不錯用,最主要的功能如下 Package to validate various datas. It includes : - numbers (min/max, decimal or not) - email (syntax, domain check, rfc822) - string (predifined type alpha upper and/or lowercase, numeric,…) - date (min, max, rfc822 compliant) - uri (RFC2396) - possibility valid multiple data with a single method call (::multiple) 驗證各種不同的日期函式 驗證數字(最小/最大,是否是10進位) email 驗證(正規語法驗證,check domain name 是否存在,rfc822 驗證) 字串驗證(正規語法驗證,是否包含數字英文字母,可輸入最長或最短) url 驗證(遵從 RFC2396 規定) 多重欄位(multiple data)驗證(可以同時驗證上述功能)

[生活日記] 中正大學上學期成績單到我家裏了~小惡魔AppleBOY

這學期成績單,寄過來了,拿到成績單之前,其實就有網路查過成績了,這學期成績普普,沒有特別好,也沒有很差,不過我在組上排名,算倒數的吧,哈哈,我果然很不會唸書,我成績好的科目,都是有期末 project 的,沒辦法,我對讀書不太行,應該是說理論背景,我很弱,老師還說,地基沒有穩,蓋出來的房子,一定會倒塌,其實說得很有道理,要對自己改進改進了,底下列一下我這學期成績

博客寄语:

    博主很懒什么都没留下!

实时播报:

博客号-学习成长

相信每一分耕耘都有每一分收获,致力帮助博客主所创作的博客能更快的被收录! 如果有其它需求,可联系下方邮箱。