Numbers / Google Spreadsheet 的 COUNTIF

最近總是遇到需要用條件計算某些總數出來,而不論在Numbers還是在Google Spreadsheet中都一樣有著COUNTIF這個函式可以用

假設我們要統計的資料是放在A欄內,判斷文字欄位中如果是字串"o"的話,計算總數,所以我們可以這樣寫

=COUNTIF(A, “=o")

值得注意的是,包住o的必需要雙引號,如果使用單引號的話會出錯。

另外一個需要注意的點是,這個「A」其實是給Numbers用的,如果是Google Spreadsheet的話則需要明定一個範圍才可以。

張貼在 雜記 | 標記 , , , | 發表留言

我們相遇,在停車場電梯前
四目相交,在人來人往之中
妳注視著我,我暫停下腳步
欲言又止
最終,我轉過頭繼續向前走去
忍下心中那句
「小姐,才幾樓而已,請爬樓梯」

獨白 | Posted on by | 標記 | 發表留言

Linux ps STAT 欄位

在Linux上執行這段指令

ps aux

大概在第八個欄位會出現一個STAT,這邊表示Process的狀態,有以下幾種

  • R: Running,正在執行當中
  • S: Sleep,休眠狀態,但叫得醒
  • D: 不可喚醒的睡眠狀態,可能卡在某個程序上,例如在列印
  • T: 停止狀態,可能是在背景執行
  • Z: 僵尸狀態,程式已經停止但是記憶體無法清掉

資料來源:http://linux.vbird.org/linux_basic/0440processcontrol.php#ps_l

張貼在 工作記錄 | 標記 , , , | 發表留言

MySQL Replication 爛掉的解決辦法 – Could not find target log during relay log initialization

「啊,爛了!」

今天禮拜五給我出這個鳥問題 = =…

找了很多資料卻沒幾個能用,也不想要砍掉整個db重來,後來只好下這樣的一段指令死馬當活馬醫

STOP SLAVE; RESET SLAVE; CHANGE MASTER …; START SLAVE;

CHANGE MASTER 那邊我不能打出來,不過就是你得先去MASTER那邊執行過一次

SHOW MASTER STATUS;

然後把POS跟BINLOG的位置給記錄下來重新執行一次就好了。

現在IO Running & SQL Running都是YES,跑一段時間再看看吧 …

===== 還沒送出文章就要 UPDATE =====

Why?因為Slave_SQL_Running又爛在我眼前了!

 

===== UPDATE 11:34 =====

爛掉的原因是Slave沒有Master端的表,現在可以work了

張貼在 尚未分類 | 標記 , , | 發表留言

活動會後感想

終於是有時間寫了啊 … 9/9都過這麼久了,希望記憶還深刻。

2012/09/09,與整個Macat南區蘋果專屬社群在高雄商務會議中心舉辦了一場AUGM2012的活動。那是一場超過三百人參加的蘋果盛會,有著很棒的課程、很吸引人的贈品以及令人朝思暮想的抽獎品都在這個聚會中送出去了(我不信MacBook Air跟The new iPad不是讓人夢寐以求的東西)。

我算是第一次成為大活動的工作人員,這次擔任的不是講師而是 — 場控,這是我從來都沒有接觸過的工作,居然一次就抓這麼大的活動來玩,在開始之前我真的皮皮挫,很擔心會有事情出錯 … 而當活動結束後回過頭來省思,發現到 ….

「慘,錯了不少事情。」

從一開始到活動結束後的剩餘活動都出了小問題,所以我一一整理起來希望以後不要再重蹈覆轍。顏回不二過,我也希望我們也不二過。

宣傳

太晚宣傳了我說真的,其實活動在定好場地與時間時就要開始公佈有這個活動,然後做好實體宣傳的部署,而網路宣傳更要不遺餘力,這個地方我沒有做得很好,居然我的Facebook有一半以上的朋友「沒看到」!所以必須重新思考一下宣傳的方式,下次必須要提高命中率才行。

再者,這次實在是「太慢」聯繫AUG了,所以我們的贈品中不包含含有正版Apple Logo的東西,這個一定要改進!不過目標版圖只放在AUG上不太好,最好還要加上日本 … :P

報名系統

原先採用的報名系統是工作人員之一的報名系統,但是問題很多而且也看不到報名資料,後來才在活動之前的一個月左右重新改寫,但是因為太倉促所以很多問題發生,像是:

  • E-mail 重複報名
  • 部分欄位可以漏寫
  • 確認信問題(報名成功 / 報名失敗)
  • 取消報名問題
  • 與報到沒辦法整合在一起

即便之後多做了一些補救措施,但還是讓整個報到流程給「卡住」了,始料未及的傻眼,因此這個部分必須改進,整個報名系統必須重寫並且搭配iOS 6的Passbook才行。

報名費

報名費當天再收真的是一個令人難以掌控實際會到的人數的一個錯誤方式,因為這個報名費會直接影響到整個會後結餘的計算,而且工作人員在收錢算錢的時候也怕漏收或者是收到假鈔,這個部分的金流系統需要重新思考。

便當統計失誤

我原本看到整個報名人數(包含廠商、講師、工作人員)大約是三百多個,所以我就真的給它訂了三百多個便當,結果那天來參加活動的人只有兩百多個,加上工作人員與廠商講師等也才破三百出頭,所以 …

是的,最後我們在高雄街頭「發便當」,好丟臉Orz

下次應該要抓七成人數,然後如果超過了再追定一成左右的數量即可。

報到流程控制

這個我不太知道該怎樣說,因為我系統的設計沒有很好導致整個報到流程有誤,這個需要重新設計。

最好是從報名系統就開始貫穿整場與「人」有關的事情,包含報到、抽獎、領獎等。

活動控場

這次整個活動都有Delay到一點,壓縮了講師上課的時間,這個很重要需要好好思考。

設備確認

這個很慘,前一天下午就已經檢查過設備,活動當天早上也有檢查過設備,但會場的WiFi還是有問題 …

會後抽獎

要把系統寫好,抽獎就不怕有問題了Q_Q

 

大概就是這樣吧,其實有一些東西是「隱藏版」的,我就不公開講出來了 …

總之,要抽空重新設計報名系統以及活動抽獎系統,這樣對我們會有好處:)

張貼在 尚未分類 | 標記 , , | 2 則迴響

開始撰寫 HTML 教學

網址在這:https://gist.github.com/3469449

得說一下為什麼我會開始寫這篇文件。

其實算是個記錄吧,寫下來也算是給自己一個紀念,還能夠帶給一些想學的人一些觀念,其實沒什麼不好的。

為什麼我不直接寫在部落格上就好?那是因為Word Press沒辦法直接寫Markdown、Octopress我放在Dropbox上,可是我的Air我並不想裝上Dropbox、Tumblr沒那麼好用、FB讓我失望過,所以我乾脆用iA Writer寫好後丟到Gist上,反正Gist也好用嘛 :P

動機其實很單純,但也很希望當我把這份文件寫好之後可以成功的販賣,至於丟到哪 … Pubu吧,或者學XDite一樣自己架個站(Heroku真的功德無量)然後搞個金流系統去賣這本書。說好聽點是賣,難聽點大概就是接受捐款吧。

這本書我希望我能夠穩穩地寫下去,然後慢慢地再推出網頁設計的教學、網站開發的教學等,我希望我能夠好好地把我會的知識整理起來、把我不會的知識給學起來,然後一併交給有興趣的人。這是我第一次這麼認真寫書,雖然以前曾經與Thegiive以及鄭立竺大哥合寫過Ruby on Rails的書(後來流產),但這次是只有我自己是作者,一個字一個字慢慢寫出來刻出來的書,我想我會很珍惜它。

也當作是練練文筆吧,最近也開始覺得自己言之無物,都快面目可憎了。

這本書現在正免費公開的讓大家閱讀,希望各位願意給予一點意見、指教,我不介意大家廣為流傳,但我不希望會有太多的人改一改後拿去賣或怎樣的 … 被我抓到沒關係,被別人抓到那就不一定了 …

謝謝各位 :)

張貼在 尚未分類 | 標記 , | 3 則迴響

工作記錄之nginx配置

在網路上讀了不少文章後稍微整理了一下做法,實作出來後用 Blitz 跑雲端Benchmark測試,結果Hit rate 每秒96個,一天下來大約可以收八百多萬個hit rate,感覺還不錯 …

我想可能是因為我的後端用的不是unicorn_rails而是puma的緣故,不過速度上真的很令人滿意

先說主機規格,主機規格是Linode 2048,系統是Ubuntu 11.10 64bit

首先,先去編輯 /etc/security/limits.conf,加下面那行:

* – nofile 65535

然後編輯 /etc/nginx/nginx.conf 添加或者修改

worker_processes 8;

worker_rlimit_nofile 65535;

worker_cpu_affinity 0001 1000 0010 0100 1000 0100 0001 0010;

 

event {

  worker_connections 8192;

  use epoll;

}

設定檔的解釋部分:

  • worker_processes – 表示將啓用幾個執行續去接收requests,這邊要嘛4要不然就是8,不要高也不要低也不要奇怪的數字
  • worker_rlimit_nofile – 這邊跟我們一開始設定的nofile數字一樣
  • worker_cpu_affinity – 這邊表示我們可以讓nginx針對不同的process來決定採用CPU的哪個核心,這個部分留待之後另開專欄解釋
  • worker_connections – 這邊的設定會影響最大用戶端的數量,公式是:max clients = work_processes * work_connections

大致上前台這樣配置後,後台用concurrent的Web Server (像是Node.js或者是puma) 就會跑得飛快囉!

張貼在 尚未分類 | 標記 | 發表留言

Rails中建立Migration的時機

有的時候總是會針對資料表做修修改改的,雖然Rails的migration很方便,但是只要其中一個動作爛掉的時候很可能沒有辦法繼續進行下去,我已經被這種鳥問題搞過好多次了,所以分享一下心路歷程。

基本上在同一個檔案中create_table之後搭配add_index是沒有太大問題的,不過如果是在add_column之後加上add_index之類的可就要拆開到另外一個migration檔案會比較好了。曾經遇過的問題是新增一個欄位之後要打索引,結果索引欄位太長然後就爛在那邊沒辦法往前走只能往後退,這個時候只好修改一些地方然後從頭重新再跑一次migrate才正常。

所以像是額外再加進去的都不要合併在一起寫,除非像是添加欄位(Ex: posts_count之類的),如果是要用來當作搜尋條件的因為會打上index所以請小心使用。

另外,也可以搭配一些條件使用,像是 table_exists? 或者是 column_exists? 可以很簡單的去控制整個新增的流程,還算不錯用。

張貼在 雜記 | 標記 , | 發表留言

Google Chrome 的搜尋引擎設定

Google Chrome可以手動新增搜尋引擎的設定,而在預設的搜尋引擎裡面Google的預設網址是採用「http://google.com」而非「http://google.com.tw」,這樣會讓我們的搜尋結果中沒有台灣的選項可以選。

這樣會造成什麼問題呢?因為當採用沒有.tw的域名的時候,Google應該會使用國際主機(也就是說網站已經有中文化,但是搜尋還是以國際間為主,但是可能會搜到整個亞州區、華文體系的國家的資料)而非台灣主機(我不知道說主機是不是真的放在台灣就是了),所以有時候資料會是簡體中文在前面而非正體中文在前面,或者容易找到香港、新加坡之類地區的中文文章,所以採用.tw的時候才會出現一個「台灣」特別針對台灣地區做搜尋。

Okay,簡言之,只要在搜尋的參數加上「&cr=countryTW」後,整個搜尋會自動幫你導到「台灣」的搜尋結果內。

打開Google Chrome的偏好設定,在「管理搜尋引擎」上按一下後跳出的畫面捲到最底下,在最左邊的欄位輸入「Google TW」,中間的欄位輸入「google.com.tw」,最右邊的欄位輸入「http://google.com.tw/search?q=%s&{google:RLZ}{google:acceptedSuggestion}{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}sourceid=chrome&ie={inputEncoding}&cr=countryTW」

按一下Enter後滑鼠移上去剛新增的紀錄,最右邊有個「設為預設值」,點下去就搞定了。

自己測試過後感覺非常好用,以後就不必手動調整了 …

Safari尚未找到解法,之後再看看吧。

張貼在 尚未分類 | 標記 , | 發表留言

今天的工作日記

買了新的兩台Linode主機,準備把資料庫移到其中一台上面當專屬資料庫,並且順便開始練習MySQL Replication的設定。

不過前幾天我發現phpMyAdmin其實已經內建了一個還不錯用的同步功能便想要嘗試,可是一開始只能夠允許選擇「本地端」或者「當前連線」兩種,我的主機是分開的沒辦法設定,上網找了一下發現要去修改 `config.inc.php`,加上這則設定:「$cfg['AllowArbitraryServer'] = true;」後即可。

但開始連線時又發現連線會失敗,看了iptables沒有設定任何防火牆規則而且3306是開的,後來檢查my.cnf發現bind-address寫127.0.0.1 … 嗯,這邊忘記打開就會變成讓MySQL Server只監聽127.0.0.1,反而外部網路都聽不到。

調整之後就通了,結果測試的時候又沒成功,只好連到Master的phpMyAdmin看一下,結果發現InnoDB死光光 … 解決方式是把ib_logfile*給刪除(ibdata別刪),然後重新啓動一般就可以搞定;如果搞不定的話可能是innodb_buffer_pool_size太高,往下修就可以了。

接著,因為我在資料庫機器上也要跑一台Memcached Server,而Memcached Server本身是沒有使用者驗證機制的,因此必須要用iptables或其他方式來限制連線,而Linode提供了API可以讓我自己開發Client去吃這個IP列表自己打入iptables,幸好這個API有Ruby版本可以用 …

詳情請看: https://gist.github.com/3426056

產生好iptables指令後剩下的就是去做其他事情了。

大致上是這樣。

張貼在 工作記錄 | 標記 , | 發表留言