Dockerizing a Node.js web app

如果想要在 Docker 在跑 NodeJS 的應用,可以參考 NodeJS 官網上有一篇 「Dockerizing a Node.js web app」介紹,還蠻簡單易懂的,這邊稍微紀錄一下相關步驟。


  1. 首先,建立 package.json
  2. {
      "name": "docker_web_app",
      "version": "1.0.0",
      "description": "Node.js on Docker",
      "author": "First Last ",
      "main": "server.js",
      "dependencies": {
        "express": "^4.13.3"
      }
    }
    

  3. 使用 Express 建立簡單的 web server
  4. 'use strict';
    
    const express = require('express');
    
    // Constants
    const PORT = 8080;
    
    // App
    const app = express();
    app.get('/', function (req, res) {
      res.send('Hello world\n');
    });
    
    app.listen(PORT);
    console.log('Running on http://localhost:' + PORT);
    

  5. 增加一個 Dockerfile
  6. touch Dockerfile
    

  7. 在 Dockerfile 中寫入以下資訊
  8. FROM node:argon
    
    # Create app directory
    RUN mkdir -p /usr/src/app
    WORKDIR /usr/src/app
    
    # Install app dependencies
    COPY package.json /usr/src/app/
    RUN npm install
    
    # Bundle app source
    COPY . /usr/src/app
    
    EXPOSE 8080
    CMD [ "npm", "start" ]
    

    Dockerfile 是 docker 用來 build image 的參考檔案。裡面會包含多個 commands,Docker 在 build image 的時候,會照著裡面所列的步驟一步一步執行。詳細的指令可以參考 Docker 官方網站的 Dockerfile reference
  9. Building your image
  10. docker build -t /node-web-app .
    

  11. 確認 image 已經建立完成
  12. docker images
    

  13. 透過 docker run 執行
  14. docker run -p 49160:8080 -d /node-web-app
    

    
    

Twitter 利用 Human Computation 改善搜尋結果(Amazon's Mechanical Turk)

Twitter 最近在其 Engineer Blog 中發表了一篇 Improving Twitter search with real-time human computation,當中介紹了 Twitter 使用了 Amazon's Mechanical Turk 服務來改善搜尋引擎的精準度。

史馥銘先生演講 - 個資(Personal data)與巨資(Big Data)的Privacy新挑戰 - 從手機感測資訊之應用談起

今天有幸在公司聽到史馥銘先生的演講,主題是個資與Privacy在這個世代的新挑戰。某些內容相當有趣,筆記如下:

  • 在美國管理 Privacy 的 issue 是由公平交委員會(FTC)所管理。
  • 現在許多 mobile app 上的宣告,其實和使用者所認知會給予出去的東西有所差異。
  • 當我們在和使用者索取某些 data 時,不應該僅僅作字面上的描述,應該要告知他,取得此 data 後,延伸可能會造成的 issue。
    • 比如說:當某個 app 向使用者索取 gps 的 data,就必須要告知,我們可能可以知道未來您的工作地點、住家 ... 等等資訊(以上透過 data mining 很容易找出 pattern)。
  • 某些 mobile app 其實會向你 acquire 很多 data ,但是當你在安裝的時候,很容易就輕易的 accept,不知不覺間,data 就被會 collect 了。
  • 某個知名的遊戲 app ,其實不斷的在 collect 你的 gps location,而且是 free version 的才蒐集,付費的就不蒐集了。其實這些也算是該 app 的 businss model,這些 data 是可以賣錢的。
  • Big data 不必然是 good data。
  • 顧客越來越聰明,當你竭盡所能的想要蒐集使用者的 data 時,使用者也可能給你假的 data。

【轉】在熟練使用2B鉛筆前,請不要打開Axure

最近看到一篇不錯的文章,叫做:在熟練使用2B鉛筆前,請不要打開Axure。記錄一下裡面不錯的部分:
  • 當需求範圍已經相對清晰時,請先拿起筆,把產品的藍圖畫出來。通常對一個網站而言,你需要構建一副整體信息架構藍圖,也就是網站的主要網頁和層級關聯。記住,只有當你相信自己用2B鉛筆畫的信息架構草圖是大家想要的,否則不要着急用工具進行美化。
  • 用鉛筆勾勒藍圖或流程,目的是提高溝通的效率。拿起2B鉛筆,用10分鐘將頭腦風暴或範圍討論后的思路花在紙上,儘快與BOSS或團隊成員確認,是結構層最重要的事情,沒有唯一。
  • 我見過太多的產品人員,包括我自己也曾經常犯類似的錯誤:妄圖一開始就使用電腦輔助設計程序,優美的將信息架構或流程圖畫出來。甚至跳過這一步,直接使用Axure話線框圖。這個錯誤的可怕之處在於:你搞得自己很忙很苦逼,結果做出來的是無法得到認同的垃圾。 更可怕的是,在面對你看似完美的圖標或線框圖時,BOSS被你忽悠住了,然後你們投入了整個團隊的開發資源,用了幾個月開發了一堆垃圾出來。
  • 記住,需求被砍掉不是恥辱,做垃圾浪費資源才是最大的恥辱

在需求確認之前,永遠要作的事情就是:確認需求!確認需求!確認需求!

Ubuntu crontab 記錄

在 Linux 上需要排程,有 crontab 這個好用的工具可以使用。一些有用的語法如下:
  • crontab -e:進入設定的檔案中,所有被寫在這個檔案裡面的每一行代表一項工作。
  • crontab -l:檢視目前 crontab 的設定
  • crontab -r:移除目前的 crontab 設定
而 crontab 的格式為:
  • 分 時 日 月 週 指令

查詢 MySQL table size 語法

利用 python update 資料庫欄位,跳脫字元的方式 (escape string)

在 python 中,用 Mysqldb module 結果在 stackoverflow 一個討論串中有個很讚的做法:

What is the best escape character strategy for Python/MySQL combo?
  • row[1] 指的是 column name
  • row[3] 指的是要 insert 的 data
  • row[0] 指的是 where 條件式域比對的限制條件

比對一下原始的 sql 就很清楚了:
cursor2.execute("update myTable set `"+ str(row[1]) +"` = \"'" + str(row[3]) +"'\" where ID = '"+str(row[0])+"'")