PDF

Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon
với DevOps Services và Bluemix
Millard Ellingsworth ([email protected])
Nhà phát triển phần mềm
IBM Corporation
29 06 2014
tiên
vào
ngày 20 01
(Xuất bản lần đầu
2015)
Hackathon thường là khoảng thời gian ngắn, tập trung phát triển phối hợp một chủ đề hoặc mục
tiêu cụ thể. Vấn đề là phải hoàn tất điều gì đó nhanh chóng, và tất nhiên việc bạn làm phải hoàn
toàn thuyết phục được ban giám khảo. Trong khoảng thời gian ngắn quy định, đây có thể là thử
thách khi thiết lập một số tính năng cơ bản như xác thực Facebook hoặc gửi email hoặc văn
bản trong khi vẫn thực hiện tiến trình quan trọng về mục tiêu chính của bạn. Dự án Bộ khởi động
Hackathon của Sahat Yalkabov, và cộng sự, được tổ chức tại GitHub, cung cấp tập hợp tuyệt
vời về những khả năng được sử dụng làm nền tảng cho những nỗ lực về Hackathon của bạn.
DevOps Services của IBM cung cấp môi trường phát triển trên web phối hợp và đường truyền
phân phối liên tục trong khi IBM Bluemix cung cấp lưu trữ đám mây mà bạn cần để vận hành,
tạo nên một cặp đôi hoàn hảo cho thành công về Hackathon. Tôi giải thích cách thiết lập bản
sao của riêng bạn về Bộ khởi động Hackathon từ phiên bản mới của nguồn sử dụng DevOps
Services và tự động triển khai nó sau mỗi lần chuyển sang Bluemix PaaS.
Để xem video giới thiệu Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với DevOps
Services và Bluemix , vui lòng truy cập bài viết trực tuyến.
Ðăng ký IBM Bluemix™
Nền tảng đám mây này có sẵn dịch vụ, thời gian chạy (runtime) và cơ sở hạ tầng miễn phí để
giúp bạn nhanh chóng tạo và triển khai ứng dụng web hoặc di động tiếp theo của bạn.
Hackathon thường là khoảng thời gian ngắn, tập trung phát triển phối hợp quanh một chủ đề hoặc
mục tiêu cụ thể. Vấn đề là phải hoàn tất điều gì đó nhanh chóng, và tất nhiên việc bạn làm phải
hoàn toàn thuyết phục được ban giám khảo. Trong khoảng thời gian ngắn quy định, đây có thể là
thử thách khi thiết lập các tính năng cơ bản như xác thực Facebook, hoặc gửi email hoặc văn bản,
trong khi vẫn thực hiện tiến trình quan trọng về mục tiêu chính của bạn.
“ IBM DevOps Services cung cấp môi trường phát triển trên
web phối hợp và đường truyền phân phối liên tục, trong
khi Bluemix cung cấp lưu trữ đám mây mà bạn cần để vận
hành, tạo nên một cặp đôi hoàn hảo cho thành công về
Hackathon. ”
© Copyright IBM Corporation 2015
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Nhẫn hiệu đăng ký
Trang 1 của 14
developerWorks®
ibm.com/developerWorks/vn/
Dự án Bộ khởi động Hackathon của Sahat Yalkabov và cộng sự, được tổ chức tại GitHub, cung cấp
tập hợp tuyệt vời về các khả năng được sử dụng làm nền tảng cho những nỗ lực về Hackathon của
bạn. DevOps Services cung cấp môi trường phát triển trên web phối hợp và đường truyền phân
phối liên tục, trong khi Bluemix cung cấp lưu trữ đám mây mà bạn cần để vận hành, tạo nên một
cặp đôi hoàn hảo cho thành công về Hackathon. Tôi giải thích cách thiết lập bản sao của riêng bạn
về Bộ khởi động Hackathon từ phiên bản mới của nguồn sử dụng DevOps Services và tự động triển
khai nó sau mỗi lần chuyển sang Bluemix PaaS.
Chạy ứng dụng
Lấy mã
Nếu bạn thắc mắc về Hackathon, hãy đọc nhật ký của Tim Fall TẠI SAO lại là Hackathon?
trên SendGrid. Nó trình bày mô tả sâu sắc về lý do Hackathon tồn tại và giá trị mà chúng
tạo ra. Nếu bạn muốn thử tham gia Hackathon, hãy xem 10 lời khuyên để thành công về
Hackathon của Appsembler và Hướng dẫn quan trọng cho lần đầu bạn tham gia Hackathon
của Michelle Sun.
Bộ khởi động Hackathon cung cấp bảng mẫu ứng dụng web Node.js sử dụng khung Express và cơ
sở dữ liệu MongoDB NoSQL. Nó thực hiện nhiều kiểu xác thực khác nhau, bao gồm xác thực cục
bộ (người dùng thiết lập chứng danh riêng của họ) và xác thực Oauth sử dụng Twitter, Facebook,
Google, Linkedln, và những thứ khác. UI mặc định sử dụng Chương trình khởi động 3 và đáp ứng
phù hợp với các kích cỡ màn hình khác nhau. Có biểu mẫu liên hệ cùng với sự hỗ trợ qua email,
khả năng quản lý tài khoản người dùng chung (bao gồm hỗ trợ mật khẩu bị mất), và ngăn chặn việc
mượn quyền trái phép (CSRF). Còn có các ví dụ API về những trang web phổ biến khác nhau, bao
gồm Facebook, Foursquare, Tumbler, Twitter, Stripe, và các trang khác.
Bộ khởi động Hackathon README.md tại GitHub được trình bày chi tiết và được viết tốt. Nó bao
gồm hướng dẫn về cách nhận khóa API của riêng bạn cho nhiều dịch vụ sẵn có khác nhau, tài liệu
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 2 của 14
ibm.com/developerWorks/vn/
developerWorks®
cấp cao hữu ích về cấu trúc dự án, và chi tiết về cách thực hiện thao tác nhất định cần thiết cho
thành công về Hackathon, như thêm trang/định tuyến mới. Ngoài ra còn có danh sách các tham
chiếu đề nghị và số lượng mã hoạt động đáng kinh ngạc, khiến nó trở thành công cụ học tập và tài
liệu tham khảo tuyệt vời ngay cả khi bạn không dự định tham gia Hackathon. Sahat đã làm việc để
giúp cho dự án đơn giản và dễ hiểu trong khi vẫn tiếp nhận sự đóng góp của trên 30 cộng tác viên.
Bạn sẽ cần điều gì để khởi đầu những nỗ lực của bạn về Hackathon
Đối với người bắt đầu:
• ID IBM được đăng ký tại DevOps Services và Bluemix. Nếu bạn không có ID IBM, bạn có thể
tạo tại các trang này.
• Máy khách Git. Tôi sử dụng dòng lệnh trong mục này.
• Tập tin ZIP của Dự án Bộ khởi động Hackathon. Có một nút để tải xuống tập tin ZIP của nguồn
ở phía trên cùng README.md trên trang GitHub. Tại sao không phải là bản sao của Bộ khởi
động Hackathon? Vì chúng tôi muốn bản sao của bạn tại DevOps Services sẽ là bản chính, và
sẽ đơn giản hơn nếu chúng ta tạo kho lưu trữ tại đó và đưa vào mã Bộ khởi động Hackathon.
Việc này cũng tạo cơ hội cho chúng ta thực hiện một số thay đổi cần thiết trước thời hạn.
• Sự hiểu biết cơ bản về JavaScript, Node.js, MongoDB, Express, Jade, và Git sẽ hữu ích, nhưng
chúng ta sẽ sử dụng mã của người khác làm điểm khởi đầu để hoàn tất các bước trong mục
này, vì vậy việc này không cần thiết.
Trong khi bạn chỉ có thể phân nhánh bản sao mà tôi đã thiết lập tại DevOps Services để làm việc
với mục này, bạn chỉ nhận được phiên bản 2.1. Nếu muốn sử dụng phiên bản mới nhất, bạn cần thiết
lập bản sao của riêng mình, tôi sẽ hướng dẫn cụ thể cho bạn. Tôi đã thực hiện việc này theo các
cách khác nhau và tôi muốn chia sẻ suy nghĩ của mình nhằm mang đến cho bạn điểm khởi đầu
tốt nhất với các bước ngắn gọn và đơn giản nhất: dự án DevOps Services tự động triển khai sang
Bluemix mỗi khi đồng đội của bạn đẩy một thay đổi mới vào kho lưu trữ mã nguồn của bạn. Dù vậy,
nếu bạn phân nhánh dự án hiện tại, bạn cần hiệu chỉnh tập tin manifest.yml và cung cấp:
• Máy chủ khác: giá trị (tên máy chủ trở thành một phần của định tuyến phải là duy nhất trong
BlueMix)
• Tên của dịch vụ MongoDB riêng của bạn, thay thế "hackathon-db-service"
Sáu bước để sẵn sàng cho việc lập trình
Đây là tổng quan về các bước:
1. Tạo dự án cho mã Bộ khởi động Hackathon của bạn. Lập cấu hình cho dự án để sử dụng Git
cho mã nguồn của bạn và để “Triển khai sang Bluemix” khi chúng ta đẩy các thay đổi. Việc này
cung cấp URL Git cho kho lưu trữ chính để đẩy các thay đổi cục bộ.
2. Sử dụng bản sao Git để tạo bản sao dự án cục bộ. Đưa vào nguồn Bộ khởi động Hackathon.
3. Vào Bluemix để tạo dịch vụ MongoDB để sử dụng cho kho dữ liệu.
4. Hiệu chỉnh một tập tin, secrets.js, để truy xuất URL cơ sở dữ liệu cho dịch vụ MongoDB từ
Bluemix và thêm tập tin manifest.yml, cần thiết cho việc triển khai tự động.
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 3 của 14
developerWorks®
ibm.com/developerWorks/vn/
5. Đẩy các thay đổi đến đám mây và xem điều kỳ diệu xảy ra.
6. Thực hiện một số thay đổi nhỏ từ đám mây, đồng bộ hóa chúng, và thúc đẩy thực hiện triển
khai tự động.
Vì vậy, sáu bước đơn giản để thành công trong đám mây cho việc khởi đầu những nỗ lực của bạn về
Hackathon. Hãy cùng thực hiện!
Bước 1. Tạo Dự án DevOps Services
1. Đến DevOps Services, đăng nhập và nhấp vào Creat Project. Tôi đã gọi bộ khởi động
Hackathon của tôi trong ví dụ bên dưới— sử dụng tên bất kỳ phù hợp với dự án của bạn.
ĐỌC: Xâm nhập vào đám mây với IBM Bluemix và DevOps Services
2. Cài đặt dự án để sử dụng kho lưu trữ Git nắm giữ mã của bạn. Bạn sẽ lưu trữ dữ liệu cho khóa
API mà bạn không muốn những người ngoài đội của mình nhìn thấy, vì vậy hãy để chế độ
Riêng tư.
3. Thêm các tính năng về sự phát triển linh hoạt. Chúng ta sẽ không sử dụng các tính năng đó
trong mục này, nhưng bạn sẽ muốn theo dõi các tác vụ và sai sót khi thực hiện dự án.
4. Chọn Deploy to Bluemix để thiết lập triển khai tự động mà chúng ta sẽ lập cấu hình sau này.
5. Sau khi tạo dự án, bạn nên mời các thành viên khác trong dự án của bạn. Bạn có thể thực hiện
việc này sau, nhưng chỉ các thành viên của dự án mới có thể nhìn thấy và làm việc trên mã
nguồn. Tất cả thành viên của dự án cần ID IBM và cần được đăng ký tại Bluemix và DevOps
Services.
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 4 của 14
ibm.com/developerWorks/vn/
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
developerWorks®
Trang 5 của 14
developerWorks®
ibm.com/developerWorks/vn/
Bước 2. Thiết lập mã
1. Từ trang dự án mở đầu, bạn có thể tìm thấy URL Git cho dự án của bạn:
2. Hãy tìm thư mục phù hợp trên máy cục bộ của bạn để sao chép dự án. Bản sao Git tạo thư
mục con với tên bất kỳ mà bạn đã sử dụng trước đó cho dự án. Hãy xem đó là thư mục làm
việc hiện tại của bạn.
Việc này dẫn đến hai tập tin được tạo theo mặc định khi dự án của bạn đã được tạo tại DevOps
Services. Nó cũng lập cấu hình cho vị trí đó là vị trí từ xa mà chúng ta sẽ đẩy các thay đổi đến.
3. Trích xuất nội dung của tập tin ZIP về Bộ khởi động Hackathon mà bạn đã tải xuống trước
đó cho thư mục mới. Bạn sẽ gặp xung đột trên tập tin README.md. Lưu tập tin từ DevOps
Services. Nó nhỏ hơn và bạn sẽ cần sử dụng cho dự án của bạn. Nếu bạn không gặp xung đột,
bạn đã không trích xuất nội dung cho vị trí đúng. Trong trường hợp này, hãy xóa những gì bạn
đã trích xuất và chắc chắn hướng đến vị trí đúng, nếu không nguồn mới sẽ không là một phần
của kho lưu trữ Git mới của bạn, hoặc thư mục cấp cao nhất của bạn sẽ khác với thư mục được
sử dụng trong ví dụ bên dưới, tạo ra xung đột với các bước đã trình bày.
Bước 3. Tạo dịch vụ MongoDB tại Bluemix
Bộ khởi động Hackathon phụ thuộc vào MongoDB để lưu trữ cơ sở dữ liệu. Khi thực hiện chỉnh sửa
mã cần thiết để chạy tại Bluemix, chúng ta sẽ cần tên của dịch vụ MongoDB trước khi có thể triển
khai thành công. Dù sao dịch vụ này cũng cần phải tồn tại, vì vậy hãy thực hiện việc đó sau.
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 6 của 14
ibm.com/developerWorks/vn/
developerWorks®
Đi đến tài khoản Bluemix của bạn và đăng nhập, sau đó đến Danh mục và cuộn xuống phần Quản
lý dữ liệu cho dịch vụ. Chọn tạo dịch vụ MongoDB. Bạn có thể nhận tên mặc định hoặc tạo tên. Hãy
ghi chép tên vì bạn sẽ cần cho bước tiếp theo. Phải chắc chắn bạn không kết hợp nó với bất kỳ ứng
dụng hiện tại nào. Tập tin manifest.yml của chúng ta sẽ tạo sự liên kết khi chúng ta triển khai.
Bước 4. Thực hiện một số thay đổi nhỏ về mã
Trước tiên, chúng ta sẽ thay đổi mã để kết nối với dịch vụ MongoDB. Trong khi triển khai, ứng dụng
của bạn được liên kết với dịch vụ. Thông tin kết nối được tạo vào lúc đó và được lưu làm một phần
của cấu hình ứng dụng của bạn. Vì nó khả dụng trong môi trường thực thi, chúng ta có thể truy vấn
nó và trích xuất giá trị URL từ chứng danh để tạo kết nối cơ sở dữ liệu. Tôi cung cấp mã để thực
hiện việc này dưới đây và cho bạn biết vị trí chèn mã. Nếu bạn thắc mắc về cách thức hoạt động,
hãy đọc về biến môi trường VCAP_SERVICES trong Bluemix FAQ.
Nếu bạn nhìn vào mã chưa được giải nén, bạn sẽ thấy rằng thông tin kết nối cơ sở dữ liệu đến từ /
config/secrets.js. Hiện nó được lập cấu hình để kiểm tra về biến môi trường chung, hoặc bạn có
thể sử dụng tham chiếu localhost chuẩn.
db: process.env.MONGODB|| 'mongodb://localhost:27017/test',
Chúng ta sẽ thêm check cho mục nhập Bluemix được lập cấu hình vào phía trước của mục nhập.
Nó sẽ trả về 0 nếu không có biến để mã hiện hành vẫn hoạt động trong trường hợp các thành viên
trong đội của bạn làm việc cục bộ. Đây là công cụ diff:
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 7 của 14
developerWorks®
ibm.com/developerWorks/vn/
Đây là hàm mới nên bạn có thể sao chép và dán nó:
//fixup to retrieve MongDb creds from BlueMix if configured
var getBlueMixDbUrl = function() {
var dbUrl = "";
if (process.env.VCAP_SERVICES) {
var env = JSON.parse(process.env.VCAP_SERVICES);
if (env['mongodb-2.2']) {
dbUrl = env['mongodb-2.2'][0].credentials.url;
}
}
if (dbUrl === "") return null;
else return dbUrl;
};
Đừng quên đánh dấu getBlueMixDbUrl() || vào trước biểu thức trên dòng db: . Hãy lưu lại.
Thêm tập tin mới có tên manifest.yml vào thư mục gốc của dự án. Đặt mã sau đây vào trong thư
mục, thay tên khi cần. Ví dụ, dự án của tôi có tên là "hackathon-starter", bạn sẽ phải sử dụng tên
khác nữa, ít nhất là cho thuộc tính máy chủ. Thuộc tính máy chủ được sử dụng để tạo định tuyến/url
cho ứng dụng: http://hackathon-starter.mybluemix.net. Thay thế hackathon-starter ở hai vị trí
(name: và host:) và tên dịch vụ hackathon-starter-db bằng tên dịch vụ của bạn.
applications:
- services:
- hackathon-starter-db
host: hackathon-starter
disk: 1024M
name: hackathon-starter
command: node app.js
path: .
domain: mybluemix.net
mem: 512M
instances: 1
Bước 5. Hãy khởi động!
Dù tin hay không, chúng ta đã sắp hoàn tất. Chỉ vài bước nữa thôi:
1. Chúng ta cần thêm các thay đổi này cho kho lưu trữ Git cục bộ, xác nhận chúng, và đẩy các
thay đổi đến kho lưu trữ tại DevOps Services. Sử dụng các lệnh này từ cửa sổ lệnh của bạn:
git add .
git commit -m "initial commit"
git push
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 8 của 14
ibm.com/developerWorks/vn/
developerWorks®
2. Giờ quay lại DevOps Services và vào trang Hiệu chỉnh mã để xem qua, sau đó nhấp vào
BUILD & DEPLOY.
3. Trên trang BUILD & DEPLOY, đảo kiểu triển khai sang SIMPLE (Đơn giản). Lần triển khai đầu
tiên của bạn sẽ bắt đầu và hiển thị dưới dạng chưa xử lý trong cột Kết quả của bảng Triển khai
tự động gần đây.
4. Lần triển khai đầu tiên sẽ lâu hơn một chút vì npm cần giải quyết các phụ thuộc Node.js khác
nhau và thực hiện các thiết lập ban đầu như đã được xác định trong tập tin package.json. Hãy
chờ một chút, sau đó chuyển sang Bluemix và kiểm xuất trang tổng quan của ứng dụng. Bạn
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 9 của 14
developerWorks®
ibm.com/developerWorks/vn/
có thể nhìn thấy nó đang chạy, và dịch vụ MongoDB đã được liên kết tự động thông qua tập
tin manfiest.yml .
5. Nhấp vào liên kết kế bên Định tuyến: bên dưới tên ứng dụng. Việc này đưa bạn đến dự án mới.
Bước 6. Chỉnh sửa dự án trong đám mây
Trông rất ổn! Nhưng nó chỉ là tổng quát. Hãy thay đổi tên dự án thành tên khác và thay thế tiêu
đề trên trang HTLM mở đầu. Và để thú vị hơn, hãy thực hiện việc này trong đám mây sử dụng trình
soạn thảo trực tuyến của DevOps Services và giao diện Git.
1. Quay lại DevOps Services và đến trang Hiệu chỉnh mã. Mở thư mục dạng xem
và nhấp vào home.jade. Bên dưới block content, thay đổi dòng h1 (được
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 10 của 14
ibm.com/developerWorks/vn/
developerWorks®
tô sáng) như trong hình, hoặc với văn bản bất kỳ mà bạn thích. Hãy lưu lại.
2. Mở thư mục từng phần bên dưới thư mục dạng xem và nhấp vào navigation.jade.
Thay tên dự án bằng Bắt đầu với DevOps Services (dòng được tô sáng). Lưu lại.
3. Nhấp vào biểu tượng "đĩa" bên trái (thứ hai từ trên xuống) để đến trang trạng thái Git. Tại
đây bạn sẽ thấy các thay đổi chưa được phân cấp. Hãy chọn cả hai rồi nhấp vào nút STAGE .
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 11 của 14
developerWorks®
ibm.com/developerWorks/vn/
Nếu bạn từng thắc mắc các thay đổi nào sẽ được thực hiện, bạn có thể nhấp vào twistie bên
trái mục nhập bất kỳ để hiển thị công cụ diff của tập tin:
4. Chọn cả hai tập tin, nhấp vào COMMIT, thêm chú thích và gửi các thay đổi.
5. Mặc dù chúng ta đã đẩy các tập tin đến kho lưu trữ Git, chúng ta vẫn làm việc trong vùng làm
việc cục bộ khi đang ở máy khách web. Trước khi có thể đẩy các thay đổi, chúng ta cần đồng
bộ hóa với kho lưu trữ chính. Vì vậy, hãy tìm nạp để đồng bộ hóa trước khi bạn đẩy các thay
đổi hoặc bạn sẽ nhận lỗi. Nhấp vào BUILD & DEPLOY, và bạn sẽ nhìn thấy sự triển khai mới
đã được khởi động tự động.
6. Sau một hoặc hai phút, hãy làm mới trang trình duyệt hiển thị ứng dụng bộ khởi động của bạn.
Thành quả là nếu bạn thay đổi kích thước cửa sổ, bạn sẽ nhận thấy rằng ứng dụng có các đặc
tính thiết kế web thuận lợi, ẩn tùy chọn trình đơn bên dưới nút khi thu nhỏ màn hình đáng kể.
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 12 của 14
ibm.com/developerWorks/vn/
developerWorks®
Chúc mừng lập trình thành công! Nếu bạn sử dụng lập trình này cho Hackathon tại Bluemix, vui
lòng thêm chú thích cho mục mô tả dự án của bạn, cùng với một liên kết nếu bạn dự định thiết lập
nó.
Kết luận
DevOps Services cung cấp môi trường linh hoạt, dễ sử dụng để thực hiện dự án của bạn, dù đối với
Hackathon hoặc các thứ khác, cho phép bạn làm việc cục bộ hoặc trên web, tự động triển khai các
thay đổi mới nhất để người dùng theo dõi. Còn nhiều điều chúng ta chưa đề cập trong ví dụ này.
Việc lập kế hoạch, theo dõi, và bảng điều khiển giúp người dùng có thể gửi các yêu cầu nâng cấp
(hoặc những sai sót bất thường) một cách dễ dàng, và giúp các nhà tài trợ dự án biết được những
việc gì đang được thực hiện. Thậm chí còn có nhiều tùy chọn tạo và triển khai linh hoạt khả dụng.
Khi bạn hoàn tất Hackathon, hãy quay trở lại và quan sát.
Lời cảm ơn
Chân thành cảm ơn John Kellerman, Michele Chilanti, Annie Cheng, và Erik Mats đã kiểm tra và
đóng góp ý kiến về mặt kỹ thuật.
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 13 của 14
developerWorks®
ibm.com/developerWorks/vn/
Đôi nét về tác giả
Millard Ellingsworth
Nhà phát triển phần mềm Millard Ellingsworth sống ở Portland, Oregon, tại đây ông
làm việc với cộng đồng IBM Rational Collaborative Lifecycle Management, công việc
là cải tiến việc làm thế nào để một đội lập trình làm việc với nhau tốt hơn. Khi rỗi rãi
ông thích chơi gôn, đàn ghi ta. Bạn có thể theo dõi ông trên Twitter tại @millard3 and
on Google+.
© Copyright IBM Corporation 2015
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Bắt đầu nỗ lực của bạn trong cuộc thi lập trình Hackathon với
DevOps Services và Bluemix
Trang 14 của 14