Mô hình tập hợp lồng nhau trong cơ sở dữ liệu phân cấp

Dữ liệu dạng phân cấp (hierarchical data structure) được sử dụng trong nhiều ứng dụng web như menu, chuyên mục phân cấp có quan hệ cha – con. Việc tổ chức lưu trữ cấu trúc đó trên một cơ sở dữ liệu (CSDL) cũng cần có sự tính toán, xem xét để sử dụng phương pháp nào là tốt nhất cho hệ thống.

Chúng ta cùng tham khảo một cấu trúc như hình bên dưới, cấu trúc này sẽ được sử dụng để làm ví dụ cho toàn bài viết:

Example Model

Theo cách tiếp cận thông thường trong việc thiết kế CSDL, ta sẽ cho mỗi 1 chuyên mục (node) sẽ có 1 thuộc tính là ParentId dùng để lưu trữ id của parent node của nó. Lúc này cấu trúc trong CSDL của chúng ta sẽ có dạng sau đây:

Categories
Id
Name
ParentID

Khi lưu trữ dữ liệu của ví dụ trên ta có:

Id Name ParentId
1 Tin tức null
2 Xã hội 1
3 Đời sống 2
4 Đô thị 2
5 Âm nhạc 1
6 Thời trang 1
7 Giải trí 1
8 Thể thao 1
9 Bóng đá Anh 8
10 Bóng đá TBN 8

Với cách này, ta có thể biết được một node có những node con nào (dưới 1 cấp) và ngược lại, một node sẽ thuộc một node cha (trên 1 cấp) nào đó.

Ưu điểm:

  • Cấu trúc dữ liệu đơn giản
  • Dễ dàng liệt kê tất cả node con (dưới 1 cấp)
  • Thêm, di chuyển một node mới dễ dàng

Nhược điểm:

  • Khó liệt kê được tất cả node cha (trên 1 cấp), node “ông nội” (trên 2 cấp), node “ông tổ”… của một node nào đó. Ở đây không đề cập dùng đệ quy để duyệt vì việc này sẽ tốn chi phí cho hệ thống.

Vì khuyết điểm trên, chúng ta cần tiếp cận với phương pháp khác đáp ứng được việc truy xuất nhanh chóng. Bài viết này xin giới thiệu phương pháp sử dụng kỹ thuật Nested set model.

Nested set model (Mô hình tập hợp lồng nhau)

Giới thiệu

Mô hình tập hợp lồng nhau là kỹ thuật dùng để thể hiện các tập hợp lồng nhau (nested set) trong CSDL. Xét cấu trúc chuyên mục đã nói ở trên khi sử dụng phương pháp tập hợp này sẽ có dạng như sau:

Nested set model

Chúng ta có thể dễ dàng hình dung được cấu trúc dữ liệu ban đầu được biểu diễn theo kiểu tập hợp như trên. Vậy trong CSDL, làm thể nào để biết được mục Đời sống là tập hợp con của Xã hội, cũng là tập hợp con của Tin tức? Chúng ta cũng đến với hình ảnh tiếp theo:

Nested set model with left and right

Lúc này mỗi tập hợp được quy định bởi 2 con số [Left, Right], dựa vào hình trên ta dễ dàng thấy rằng mục Đời sống [3, 4] là con của Xã hội [2, 7] vì tập hợp [3, 4] thuộc tập hợp [2, 7]. Tương tự Đời sống cũng thuộc Tin tức vì [3, 4] thuộc tập hợp [1, 20]. Mục Âm nhạc [8, 9] không thuộc mục Xã hội [2, 7] vì [8, 9] không thuộc [2, 7]. Từ đó, ta có thể thiết kế được cấu trúc bảng trong CSDL như sau:

Categories
Id
Name
Left
Right

Dữ liệu thực tế cho ví dụ trên sẽ là:

Id Name Left Right
1 Tin tức 1 20
2 Xã hội 2 7
3 Đời sống 3 4
4 Đô thị 5 6
5 Âm nhạc 8 9
6 Thời trang 10 11
7 Giải trí 12 13
8 Thể thao 14 19
9 Bóng đá Anh 15 16
10 Bóng đá TBN 17 18

Giả sử ta muốn liệt kê tất cả các node con của mục Xã hội [2, 7] thì SQL query của chúng ta có dạng như sau:

Lúc này ta thấy có mục Đời sống và Đô thị thỏa điều kiện, suy ra 2 mục này là con của mục Xã hội.

Giả sử muốn liệt kê tất cả các node con của mục Tin tức [1, 20], bao gồm luôn mục Tin tức thì SQL query chúng ta sẽ sửa lại:

Lúc này sẽ có 10 node thỏa điều kiện trên. Thế nhưng các node này (trừ Tin tức) sẽ chỉ biết nó có 1 mục cha duy nhất, đó là Tin tức. Trong khi, cha gần nhất của Bóng đá Anh là Thể thao, cha gần nhất của Đời sống là Xã hội. Vậy bước tiếp theo chúng ta cần là đánh dấu lại node cha gần nhất bằng cách thêm cột ParentId như cách tiếp cận ban đầu. Lúc này cấu trúc bảng dữ liệu chúng ta có:

Id Name Left Right ParentID
1 Tin tức 1 20 null
2 Xã hội 2 7 1
3 Đời sống 3 4 2
4 Đô thị 5 6 2
5 Âm nhạc 8 9 1
6 Thời trang 10 11 1
7 Giải trí 12 13 1
8 Thể thao 14 19 1
9 Bóng đá Anh 15 16 8
10 Bóng đá TBN 17 18 8

Lúc này chúng ta có thể thấy ưu điểm tuyệt vời khi sử dụng Nested set model để truy xuất dữ liệu rồi đúng không? Thế nhưng đây cũng chưa phải là kỹ thuật hoàn hảo tuyệt đối vì nó tốn chi phí trong việc chỉnh sửa dữ liệu như: thêm, xóa node. Để biết nguyên nhân vì sao, chúng ta hãy cùng đến với cách thêm, xóa node trong Nested set model.

Thêm node mới

Giả sử cần thêm mục Nhạc nước ngoài thuộc mục Âm nhạc ta sẽ phải cập nhật lại dữ liệu như hình bên dưới.

Nested set model - adding node

Tổng quát, ta cần làm 2 thao tác:

  1. Tạo ra vùng trống mới trong node Âm nhạc tăng từ [8, 9] => [8, 11]
  2. Thêm node Nước ngoài [9, 10] vào node Âm nhạc

Thao tác 1 sẽ tốn nhiều chi phí vì chúng ta tăng giá trị Left, Right phía sau lên 2 đơn vị (chính là vùng trống dành cho node mới) bằng điều kiện:

Thao tác tiếp theo nhẹ nhàng hơn là chỉ việc thêm node Nước ngoài có giá trị Left, Right = 9, 10 vào CSDL nữa là xong.

Xóa node

Giả sử muốn xóa mục Âm nhạc, ta cần thực hiện cập nhật dữ liệu như hình bên dưới:

Nested set model - removing node

Tổng quát ta sẽ làm hai thao tác:

  1. Xóa node và những node con của nó (mục Âm nhạc + mục Nước ngoài)
  2. Cập nhật lại Left, Right. Thực chất việc này chỉ làm cho dữ liệu được chuẩn hóa Left, Right mà thôi. Cho dù không cập nhật lại Left, Right đi chăng nữa thì việc truy xuất dữ liệu vẫn đúng.

Thao tác 1 không tốn nhiều chi phí, chỉ cần xóa node đó và tất cả node con thuộc nó (truy vấn tất cả node con đã liệt kê ở phần ở trên).

Thao tác 2 tốn nhiều chi phí vì phải giảm N * 2 đơn vị cho Left, Right (N là số node bị xóa, trong ví dụ là N = 2). Trong ví dụ xóa mục Âm nhạc trên ta có SQL query như sau:

Như vậy, chúng ta đã có thể thao tác được với dữ liệu phân cấp với kỹ thuật của mô hình tập hợp lồng nhau. Với những ưu, nhược điểm đã nêu, chúng ta hãy lựa chọn phương pháp phù hợp cho mình trong việc tổ chức các loại danh mục phân cấp cho ứng dụng của mình.

Nếu bạn có mô hình khác tốt hơn thì comment ngay bên dưới nhé!

Hướng dẫn tích hợp 8 ứng dụng hữu ích vào Slack giúp làm việc nhóm tốt hơn

Slack là công cụ hỗ trợ làm việc nhóm hiệu quả, giúp đồng bộ giao tiếp của người dùng trên các thiết bị khác nhau. Thoạt nhìn, đây có vẻ là 1 ứng dụng “chat room” đơn giản nhưng nhờ khả năng tích hợp nhiều tính năng mạnh mẽ và quá trình xây dựng thói quen người dùng thông minh, Slack nhanh chóng trở thành ứng dụng có tốc độ phát triển nhanh nhất. Mức độ sử dụng thường xuyên của Slack luôn đạt ngưỡng trên 90%.

Hàng ngày, người dùng phải liên tục nhận hàng tá thông báo từ các ứng dụng, email nội bộ và email từ khách hàng, đối tác. Slack giải quyết vấn đề trên bằng cách tạo ra 1 nền tảng chung cho phép các thành viên giao tiếp trên các kênh (channel) khác nhau và giảm bớt phần lớn những email không cần thiết. Đặc biệt, Slack còn có khả năng tích hợp với các ứng dụng khác và cho phép hiện thông báo ngay trên channel. Tích hợp ở đây nghĩa là bạn chỉ cần thao tác trên 1 ứng dụng (cụ thể ở đây là Slack) là có thể nhận được toàn bộ các thông tin quan trọng từ các ứng dụng có liên quan khác. Một vài ứng dụng tích hợp còn cho phép bạn tương tác trực tiếp với ứng dụng đó từ Slack thông qua Slash Command.

Dưới đây là một clip vui, phản ánh cách mà SSS sử dụng Slack trong công việc và cuộc sống của mình:

 

Slack có rất nhiều tính năng độc đáo mà bạn chưa biết hết đúng không? Trong bài viết này, mình sẽ giới thiệu 8 ứng dụng hữu ích mà SSS đang tích hợp vào Slack để giúp Team giải quyết công việc hiệu quả hơn:

1. Google Drive

Google Drive cho phép bạn tạo, lưu trữ và cùng lúc tương tác, chỉnh sửa trên cùng 1 tập tin với đồng nghiệp. Sự tích hợp này giúp việc chia sẻ tập tin trở nên dễ dàng và tiện lợi hơn. Cách tích hợp cũng khá đơn giản. Bạn chỉ cần kích hoạt và xác nhận tài khoản Google của mình tại đây.

Here’s a guide to integrate Slack and Google Drive

Sau khi tích hợp thành công, bạn chỉ cần dán đường link Google Doc vào khung trò chuyện và tất cả đồng nghiệp của bạn trong cùng channel đều có thể truy cập vào. Đường link bạn gửi sẽ hiển thị rõ ràng và sạch đẹp như bên dưới thay vì các đường dẫn với toàn kí tự và số rối rắm.

google drive slack

2. Trello

trello slack
Trello là công cụ quản lý dự án nhóm thông qua việc sắp xếp công việc bằng các danh sách (list) và thẻ (card). Sau khi tích hợp Slack với Trello, mỗi khi các thành viên trong Team có bất kì thao tác nào với card trên Trello, thông báo sẽ ngay lập tức được gửi đến channel Slack chọn trước. Bạn cũng có thể tuỳ chỉnh thông báo trên cho các channel khác nhau tuỳ thuộc mức độ liên quan của chúng.

Với 1 team lớn, sẽ rất khó để theo dõi được hết tất cả thay đổi của từng card trong nhiều board với các cập nhật liên tục. Sự tích hợp này sẽ giúp bạn dễ dàng nắm bắt những thông tin quan trọng ngay lập tức. Trello là ứng dụng phổ biến thứ hai được tích hợp vào Slack sau Google Drive nên bạn sẽ tìm thấy nhiều tiện ích hay ho từ sự tích hợp này.

3. Dropbox

Dropbox là dịch vụ lưu trữ dữ liệu trực tuyến miễn phí, cho phép bạn dễ dàng sao lưu và chia sẻ hình ảnh, tài liệu, video… với bạn bè, đồng nghiệp ở khắp mọi nơi. Thông qua việc tích hợp Dropbox vào Slack, giờ đây bạn chỉ cần click chuột phải vào tập tin cần chia sẻ trên Dropbox => chọn Share Dropbox Link => dán link Dropbox ở trên vào khung Slack chat là tập tin của bạn đã được đính kèm và chia sẻ cho các thành viên trong channel như hình. Đồng nghiệp của bạn có thể ngay lập tức tải về hoặc thêm tập tin vào Dropbox của mình.

Screen Shot 2015-06-16 at 5.14.59 PM

4. Intercom

Intercom là ứng dụng giúp doanh nghiệp theo dõi cách người dùng tương tác với phần mềm của họ như thế nào. Cụ thể, Intercom giúp gắn kết người dùng với email và tin nhắn mục tiêu từ doanh nghiệp, hoặc yêu cầu phản hồi dựa trên hành vi khách hàng để đội ngũ chăm sóc khách hàng đưa ra được những hỗ trợ nhanh và tốt hơn.

Thông báo từ Intercom sẽ tự động được cập nhật vào channel cho trước trên Slack khi:

  • Có tin nhắn mới từ người dùng.
  • Đồng nghiệp hoặc người dùng gửi tin nhắn trả lời.
  • Thêm ghi chú vào cuộc trò chuyện.
  • Chỉ định nhân viên phụ trách cuộc trò chuyện.
  • Có thêm người dùng hoặc công ty vừa đăng ký.

intercom slack

Với sự tích hợp này, Team của bạn sẽ không bao giờ bỏ lỡ bất kì khách hàng tiềm năng nào, cũng như dễ dàng cùng nhau theo dõi và xử lý những “ca khó” ngay trên Slack.

5. Bonusly

bonusly slack

Bonusly là ứng dụng cho phép bạn “cảm ơn” đồng nghiệp của mình thông qua điểm thưởng, mà ở SSS tụi mình gọi là “tặng tim”. Đây là hình thức thể hiện lòng biết ơn cũng như sự công nhận của bạn đối với sự giúp đỡ, kỹ năng và khả năng hoàn thành công việc của đồng nghiệp. Số điểm này sẽ được cộng dồn để quy đổi (redeem) thành các phần quà có giá trị, như một phần quà khích lệ.

bonusly slack redeem

Nhờ sự tích hợp giữa Bonusly với Slack, giờ đây bạn có thể trực tiếp “tặng tim” cho đồng nghiệp của mình thông qua câu lệnh:

/give [amount] to [name|email] for [reason] [#hashtag]

VD: Bạn muốn tặng 50 tim cho Tracy vì đã làm việc chăm chỉ, bạn có thể gõ dòng lệnh sau vào Slack: /give 50 to tracy for working hard #teamwork.

6. Notify

Sau khi cài đặt Notify, mỗi khi tên doanh nghiệp, sản phẩm (từ khoá bạn chọn trước) xuất hiện trên Twitter, Facebook, Instagram, Youtube, Google+, Blogs, Forums, News, Reddit, Medium, Hacker News…, thông báo sẽ tự động gửi tới channel Slack cho trước của bạn.

Trước tiên bạn đăng ký tài khoản Notify tại http://notify.ly/, sau đó tiến hành cài đặt theo 3 bước đơn giản như sau:

B1. Tạo thông báo: Gõ từ khoá tên công ty, đường dẫn tới website của bạn, tên thương hiệu, đối thủ, sự kiện hoặc hashtag liên quan đến chủ đề bạn muốn nhận thông báo. Bạn cũng có thể “loại trừ” từ khoá không muốn nhận thông báo.

Ví dụ, nếu bạn muốn nhận thông báo về những sản phẩm của Apple và Cloud nhưng không muốn nhận tin về iPad, iPod từ khoá bạn chọn sẽ là Apple AND Cloud  iPad, iPhone là từ khoá loại trừ.

Notify Slack

B2. Chọn nguồn: Từ khoá xuất hiện trên kênh nào (Twitter, Facebook, Instagram, Youtube, Google+, Blogs, Forums, News, Reddit, Medium, Hacker News…), Notify sẽ gửi thông báo về cho bạn.

B3. Nhận thông báo gửi đến channel Slack chọn trước mỗi khi từ khoá ở B1 được đề cập.

7. Slackbot

Tính năng Slackbot Remote Controls cho phép bạn gửi tin nhắn tới các kênh chung (public channel).

  • Nếu bạn muốn Slackbot tự động trả lời tin nhắn của các thành viên trong Team trên kênh chung, bạn có thể thiết lập Slackbot Responses.

slackbot

  • Nếu bạn muốn tuỳ chỉnh tin nhắn tự động nhiều hơn (như chỉ rõ tên người dùng hoặc thêm định dạng cho tin nhắn), bạn có thể dùng Incoming WebHooks.

8. Slash Command

Nói một cách đơn giản, Slack Command là câu lệnh bạn gọi ra để được đáp ứng một yêu cầu nào đó. Những Slack Command này có thể do Slack sẵn có (/away, /archive, /who) hoặc do người dùng (các thành viên trong team) tự tạo ra.

Để bắt đầu tạo Slack Command, bạn gõ link sau vào thanh địa chỉ (address bar) https://xxxxx.slack.com/services/new/slash-commands (trong đó xxxxx.slack.com là đường dẫn riêng vào Slack của công ty bạn). Sau đó bạn tiếp tục thực hiện theo hướng dẫn. Ở phần này bạn cần có chút hiểu biết nhất định về lập trình.

Giới thiệu với các bạn một vài Slack Command mà SSS tụi mình đang dùng thường xuyên nè:

a. Lệnh điểm danh mỗi thứ 2 hàng tuần, trước 12h trưa

diemdanh

 

b. Xem thực đơn hôm này ăn gì?

menu

c. Đặt món từ thực đơn

order

d. Cập nhật thông tin cá nhân và thông tin tài khoản (dropbox, trello, skype, phone, email, facetime, heroku, github, bitbucket, crashlytics, parse, facebook, mbti, behance, dribbble, honeybadger, linkedin, twitter, apiary, zeplin, apple) của bạn:

/contact [service] [value]

Ví dụ: Để cập nhật tài khoản Skype của mình => /contact skype ltdoantrang.

e. Tra cứu thông tin của thành viên khác trong team

/contact [username]

 contact username

Vẫn còn nhiều ứng dụng nữa

Còn rất nhiều ứng dụng khác mà bạn có thể tích hợp vào Slack và số lượng những ứng dụng này vẫn đang tăng hàng ngày. Sự tích hợp này sẽ giúp các thành viên trong Team giao tiếp tốt hơn theo những phương thức thậm chí trước đây bạn không hề nghĩ tới.

Slack thường xuyên chia sẻ thông báo về những tích hợp mới này trên Twitter. Bạn có thể follow Twitter của Slack để cập nhật tin tức mới nhất.

Còn bạn, Team bạn đang tích hợp những ứng dụng hay ho nào với Slack? Hãy cùng chia sẻ với tụi mình ở phần bình luận bên dưới nhé.

Ra mắt tính năng chat nhóm, Slack chuyển Private Groups thành Private Channels

Nguồn hình: slackhq

Theo BusinessInsider, sau 2 năm ra mắt, ứng dụng chat nhóm phổ biến Slack đang được định giá với mức 2.8 tỷ USD và vẫn chưa có dấu hiệu giảm nhiệt. Số lượng người dùng hoạt động hằng ngày (Daily Active Users) hiện nay của Slack là 1.7 triệu người. Ước tính, mỗi ngày Slack có thêm 5000 người dùng hoạt động mới (new active user). Đặc biệt, hôm 27/10, Slack CEO Stewart Butterfield đã tweet trên trang cá nhân của mình thông báo ứng dụng chat nhóm này đã chạm mốc 1 triệu người dùng cùng hoạt động trong một thời điểm.

Với sự phát triển nhanh vượt bậc, Slack cũng liên tục cải tiến, đưa ra các chức năng mới để đem đến cho người dùng những trải nghiệm tốt nhất. Mới đây, Slack vừa cập nhật thêm tính năng chat nhóm riêng tư và chính thức chuyển đổi Private Groups thành Private Channels.

Dễ dàng chat nhóm riêng tư lên đến 8 người

Trước đây, để nhắn tin với 2 người trở lên, bạn phải tạo Private Groups và thực hiện khá nhiều thao tác. Nếu chỉ là những đoạn hội thoại nhỏ như rủ đi ăn trưa, thảo luận về một ý tưởng mới… thì Private Groups có vẻ hơi “đao to búa lớn”. Với tính năng chat nhóm mới này, bạn có thể trò chuyện riêng với một nhóm lên tới 9 người (bao gồm cả bạn). Đoạn hội thoại sẽ được hiển thị ở danh sách Direct Messages và bạn có thể trở lại nhóm chat bất kì lúc nào bằng cách gõ tên nhóm ở Quick Switcher (Cmd+K với Mac và Ctrl + K với Windows/Linux), hoặc ẩn nó đi khi kết thúc trò chuyện. Ngoài ra, tin nhắn trong nhóm riêng cũng được hiển thị khi tìm kiếm tương tự như tin nhắn trên các Channel trước đó.

group slack

Để khởi động tính năng chat nhóm, bạn mở Direct Message Quick Switcher bằng cách gõ tổ hợp phím:

  • Cmd+Shift+K trên máy Mac
  • Ctrl+Shift+K trên máy Windows/Linux

quick switcher

Private Groups trở thành Private Channels

Tính năng chat nhóm riêng tư ra đời đã giải quyết nhiều trường hợp cần tạo Private Groups nên Slack đã tiến hành chuyển đổi Private Groups thành Private Channels. Private Channels có kí hiệu ổ khóa ở trước, được xếp chung danh sách với các Channel cũ theo thứ tự alphabet. Ở màn hình tạo Channel mới, bạn có thể tùy chọn Public/Private.

toogle slack

Và nếu bạn cảm thấy quá nhiều channel hoặc direct message trên Slack của mình, bạn có thể áp dụng mẹo tùy biến slidebar giúp tránh sao lãng.

Bài viết lược dịch từ Business Insiderslackhq.

Peek inside The Pirates’ Pocket Book hands out to Silicon Straits’s new employees

Silicon Straits Saigon was founded by James Chan, Kent Nguyen, and Andy Bui on May 21st, 2013, to help global entrepreneurs and companies build high quality web, mobile, and hardware products. When our company grew from 6 to more than 60 pirates, we faced the challenges of sharing and explaining our visions, history, culture, and core values to new employees. We frequently sent these messages across multiple platforms (such as website, blog, emails, Slack, and social media). They were also integrated into the philosophy behind our office decoration. Still, it seemed insufficient for new pirates to look up and understand them clearly. We wanted to gather this information along with Silicon Straits spirit and package them in this Pirates’ Pocket Book to give to newcomers.

Silicon Straits The Pirates' Pocket Book 1

Silicon Straits The Pirates' Pocket Book 3

Silicon Straits The Pirates' Pocket Book 2

The following are several pages taken from our Pirates’ Pocket Book.

Silicon Straits The Pirates' Pocket Book 5

Silicon Straits The Pirates' Pocket Book 6

Silicon Straits The Pirates' Pocket Book 7

Silicon Straits The Pirates' Pocket Book 15

Silicon Straits The Pirates' Pocket Book 8

Silicon Straits The Pirates' Pocket Book 9

Silicon Straits The Pirates' Pocket Book 10

Silicon Straits The Pirates' Pocket Book 11

Silicon Straits The Pirates' Pocket Book 13

Silicon Straits The Pirates' Pocket Book 14

If you want to read more, the one and only way is being part of our team.

Join us at careers.siliconstraits.vn.

Silicon Straits The Pirates' Pocket Book
SpaceWalker Squad

Silicon Straits The Pirates' Pocket Book 4

*Photos and Retouch by Quang Hai and Tu Bui.

Credits
Hai An Project Manager
Duc Phu Editor
Doan Trang Copywriter, Project Coordinator
Mai Loan Graphic Designer, Illustrator
CiKa Photographer
Quang Hai Creative Advisor
Tu Bui Art Advisor
Management team Content Advisor
Minh Tuan Proofreader

Silicon Straits is hiring Product Manager

Who we are

At Silicon Straits Saigon, we aspire to build the impactful products for businesses in South East Asia and worldwide! Our Product Managers are key to this journey as they have to both work closely with the businesses to find solutions to their problems as well as then coordinate and lead our engineers and designers to turnthese ideas into real products!

We are looking for

You’ll be assigned to a product – own it! :-)

That means you will have to:

  • Work with customers and future product owners to help develop and shape fuzzy and abstract ideas to ready-to-launch, marketable products
  • Plan the timelines and features for development
  • Work closely with the engineering teams to deliver according to planned resources and timeline
  • Report progress back to stakeholders

Our expectations

  • Solid technical background with understanding and/or hands-on experience in software development and web technologies
  • Strong problem solving skills and willingness to roll up one’s sleeves to get the job
  • Strong communication and interpersonal skills – locally as well as internationally (you will be working with many overseas clients!)
  • “Get Shit Done” attitude
  • In love with tech products, passion about shipping out impactful products
  • well developed business sense and understanding the balance between business needs and technical limitations

In return, you will receive

  • Performance Bonuses.
  • Annual Wage Supplement.
  • Social, Health, Unemployment Insurance.
  • Personal Accident Insurance.
  • Free Meal of Lunch.
  • External Training Programs.

Do impress us

Interested candidates, please proceed to submit your updated CV to [email protected].

We are looking for Front-end Developer!

Who we are

Silicon Straits Saigon is a Product Development Lab that works with startups and enterprises in South East Asia to help build and launch new and exciting web and mobile products. We don’t just develop softwares or apps, we build PRODUCTS and BUSINESS. We have the best office in town to provide not just a cool working environment but also the playground for all hackers, builders and makers like yourself to build the next big thing.

Company Size: 50+

We are looking for

As a front-end developer, you will be translating UI/UX designs into production-grade JavaScript/CSS and taking charge of delivering a pleasant experience to consumers of our system.

The world of JavaScript is in very interesting time now when new frameworks, libraries, and tools emerge almost on daily basis. We hope you stay on top of the game and can hold a lively conversation about emerging trends. We also hope you can appreciate this strip :)

While JavaScript is the proprietary technology in the world of browsers, we also welcome advanced users of CoffeeScript and ClojureScript, as long as it helps you write solid, expressive, and maintainable code.

Our expectations

  • Experience working on distributed Linux/Unix systems
  • Experience in UI/UX design
  • Be productive in AngularJS and ReactJS out of the box
  • Wide exposure to multiple technology stacks is an advantage
  • Good knowledge in real-time communication between server and client
  • Knowledge of data analytics or visualizations, such as D3.js is a plus

In return, you will receive

  • Attractive salary
  • Great opportunities to improve your skills in many related fields.
  • Working with other talented developers, designers and product managers.
  • Flexible working time and unlimited leave days.
  • Get your own Macbook.
  • Free classes (English class, UI/UX class…)
  • Nice bosses.
  • Geek Toys.
  • Take part in our exciting events (Hackathon, Drinkathon,…)

Do impress us

If you are an outstanding front-end developer and want to be part of this crew, solve our online puzzle and tell us about yourself!

SS Speaker Series #5 – Bùi Hải An và chặng đường tuổi 20

Anh Bùi Hải An hiện đang là Co-Founder và Head of People Operations của Silicon Straits tại Việt Nam. Sau khi tốt nghiệp kỹ sư chuyên ngành Embedded System tại ĐH Quốc gia Singapore (NUS), anh có 2 năm làm kỹ sư phần mềm tại Fuji Xerox. Năm 2009, anh trở về Việt Nam cùng một số bạn bè khởi nghiệp với TGM Corporation – một doanh nghiệp chuyên về đào tạo và phát triển bản thân, với vai trò là Chief Marketing Technologist. Cuối năm 2012, anh cùng anh Kent Nguyễn sáng lập TGM Tech, trực thuộc TGM Group. Một năm sau đó, TGM Tech hợp tác với Silicon Straits (Singapore) thành lập nên Silicon Straits Saigon (gọi tắt là SSS) chuyên hợp tác với các đối tác lớn và doanh nghiệp startup trong khu vực để xây dựng những sản phẩm công nghệ về web, mobile và hardware. Ngoài ra anh An còn là người xây dựng nên CognitoCRM – giải pháp quản lý khách hàng và tự động hóa Marketing cho các doanh nghiệp vừa và nhỏ tại Việt Nam.
Đánh dấu tuổi 30 với việc mở rộng quy mô công ty khởi nghiệp của mình lần đầu tiên vượt mốc 50 nhân sự và đang trên đà tăng trưởng triển vọng nhưng con đường khởi nghiệp của anh Hải An cũng không mấy dễ dàng. Tại SS Speaker Series lần 5, anh An sẽ lần đầu kể về hành trình tuổi 20 của mình, từ lúc còn là cậu học sinh trung học phổ thông chuyên Tiền Giang, xa quê hương theo học tại NUS, miệt mài đèn sách trong gian phòng 6m2 trong một tổ hợp phòng ở cao đến 11 tầng cho đến lúc trở thành Head of People Operations tại một trong những công ty công nghệ cá tính nhất Sài Gòn, là gương mặt quen thuộc của cộng đồng khởi nghiệp phía Nam và là khách mời, giám khảo của các cuộc thi khởi nghiệp lớn nhỏ về công nghệ.

Chào anh. Trước khi trở thành co-founder của Silicon Straits Saigon, anh được biết đến với vai trò là co-founder của TGM Corporation, nổi tiếng với khóa học Tôi Tài Giỏi, Bạn Cũng Thế! Vậy anh trở về Việt Nam và làm việc cho TGM từ khi nào?

Anh tốt nghiệp Đại học Quốc gia Singapore năm 2007. Đến năm 2009, anh mới về Việt Nam làm cho TGM.

Anh có thể chia sẻ câu chuyện giữa anh và TGM?

TGM được hình thành vào cuối năm 2008 bởi một nhóm 10 người, hầu hết là cựu sinh viên NUS. Nó là một công ty khởi nghiệp khá ngược đời vì lúc đó mọi người chưa có ý tưởng sẽ làm gì với nó cả.

Tính tới thời điểm đó, anh cũng đã làm việc ở Singapore được 2 năm. Trong thời gian này, anh có tham gia tổ chức Vietnam 2020 do bác Võ Tá Hân sáng lập. Vietnam 2020 được chia làm nhiều nhóm nhỏ, anh ở trong nhóm Enterprise Family, chuyên về kinh doanh và khởi nghiệp. Enterprise Family lập ra một công ty gọi là Vietnam 2020 Enterprise. Một trong những dự án đầu tiên của nó là tổ chức một sự kiện cho một phái đoàn kinh doanh từ Việt Nam sang Singapore gặp chính phủ và các tổ chức bên đấy. Đây là dự án đầu tiên mà bọn anh kiếm được doanh thu. Thấy công việc cũng khá thú vị nên cả đám đòi lập công ty riêng. Lập xong mới bàn bạc là nên kinh doanh gì?

Trong nhóm lúc đó có anh Trần Đăng Khoa và chị Uông Xuân Vy. Hai anh chị có dịch quyển sách Tôi Tài Giỏi, Bạn Cũng Thế! dịch từ bản gốc I Am Gifted, So Are You! của tác giả Adam Khoo. Thế là mọi người quyết định là công ty sẽ làm về quyển sách và khóa học này. TGM chính thức đi vào hoạt động vào tháng 2/2009 với mục tiêu tổ chức những khóa học như Tôi Tài Giỏi, Bạn Cũng Thế! cho các bạn học sinh, sinh viên ở Việt Nam.

Khi ở TGM, tại sao anh làm ở bộ phận marketing trong khi chuyên ngành anh học là về kĩ thuật?

Do TGM là một công ty khởi nghiệp nên nhân sự lúc đó rất thiếu thốn. Anh từng thử sức ở vị trí trainer nhưng thấy không ổn nên mới chuyển sang marketing.

Xin anh chia sẻ về một chiến dịch marketing thành công của anh khi ở TGM.

Hồi ấy, công ty chưa có nhiều kinh phí nên bọn anh chỉ có thể làm digital marketing. Khái niệm digital marketing lúc đó cũng còn khá mới mẻ ở Việt Nam nên anh có được lợi thế tốt nhờ đọc được các tài liệu tiếng Anh về lĩnh vực này. Bọn anh đã tự nghiên cứu và áp dụng chúng rất thành công vào facebook của Tôi Tài Giỏi, Bạn Cũng Thế! Vào thời điểm 2010, khi facebook vẫn còn mới ở Việt Nam thì Tôi Tài Giỏi, Bạn Cũng Thế! đã đạt khoảng 300.000 fans ngang với facebook của những người nổi tiếng trong nước. Đây là một chiến dịch ít tốn chi phí nhưng hiệu quả mang lại cực kỳ lớn.

Anh làm việc ở TGM cũng gần 4 năm. Lý do nào khiến anh quyết định ra riêng khi TGM lúc đó đang trên đà thành công?

Một công ty có quá nhiều co-founders thì càng phát triển càng gặp rất nhiều khó khăn. Anh phát hiện mình ở lại không giúp gì được cho công ty dù anh cũng đã học được rất nhiều ở đây. Anh muốn làm những thứ khác và bắt đầu lại từ đầu nên quyết định ra riêng.

Anh cũng nhớ lại một lời khuyên của bác Võ Tá Hân: “Trong quá trình làm việc ở độ tuổi 20, hai năm là đủ để chúng ta thành thạo một công việc.”. Khi ấy, mình không còn học được điều gì mới và bắt buộc phải đi theo một hướng mới. Hướng mới có thể là đi lên với một vai trò khác trong cùng công ty hoặc là chuyển qua một công ty khác. Nhờ đó mà mình mới có lại được đam mê và nhiệt huyết để làm việc.

Bùi Hải An

Nhiều người bảo rằng con đường sự nghiệp của anh khá thuận lợi khi thành lập nên những công ty nổi tiếng như TGM Corporation cho đến Silicon Straits Saigon. Anh suy nghĩ như thế nào về nhận xét đó?

Thật ra thì anh cũng đã vấp phải nhiều thất bại trước đó chỉ là mọi người chưa biết mà thôi. Hồi còn học ở Đại học Quốc gia Singapore, anh cũng rất hăng hái với việc làm khởi nghiệp. Vào mùa hè năm hai, anh và một số người bạn từng thành lập một công ty chuyên thiết kế web, cũng thuê văn phòng, in name card… rất hoành tráng. Tuy nhiên, công ty sau đó phải đóng cửa do không hoàn thành được hợp đồng với khách hàng, cũng may lúc đó tụi anh còn là sinh viên nên mới không bị kiện. Đến năm ba thì anh bị “dụ dỗ” tham gia một công ty bán hàng đa cấp nhưng chưa được bao lâu thì công ty cũng đóng cửa. Việc học hành ở trường do vậy mà chểnh mảng nên thành tích học tập lao dốc. Lo sợ mình sẽ bị đuổi học nên từ lúc đó, anh quyết định dẹp bỏ ý định khởi nghiệp và tập trung vào việc học.

Thất bại đáng nhớ nào để anh có được thành công như ngày hôm nay?

Đó là một cú sốc vào khoảng giữa năm 2010. Anh là một trong những người đầu tiên đứng lớp dạy ở TGM. Nhưng rồi anh phát hiện bản thân không có năng khiếu giảng dạy. Tiếp theo đó, những việc anh làm trong công ty đều thất bại hết. Khi ấy, anh cảm giác như mình sắp bị đuổi khỏi cái công ty do mình đồng sáng lập ra. Đó là giai đoạn suy sụp nhất cuộc đời anh cho đến giờ.

Phải mất một thời gian dưới sự động viên và giúp đỡ của bạn bè mà anh mới vực dậy được. Sau khi nhìn lại, anh nhận thấy mình đã quá tham lam khi đâm đầu vào những lĩnh vực mình chưa biết. Anh rút ra được bài học là đừng đi làm những cái mình không biết, không giỏi mà hãy tập trung vào những cái mình giỏi và am hiểu. Cũng nhờ vậy mà anh tìm được mục đích sống cho mình.

Theo anh thì mục đích sống quan trọng như thế nào?

Mục đích là động lực để thúc đẩy bản thân tiến về phía trước. Trước khi chúng ta tìm được nó thì chúng ta không hề biết nó tồn tại. Đôi khi phải trải qua nhiều khó khăn, thất bại thì mới nghiệm ra được.

Giai đoạn hiện tại, anh tập trung vào những việc gì vào mỗi ngày?

Thứ nhất, anh tập trung vào vai trò hiện tại ở công ty là Head of People Operations. Anh tìm cách để phát triển các bạn ở công ty, nhất là các bạn đang ở vị trí chủ chốt như Squad Lead, Chapter Lead.

Thứ hai, anh tập trung phát triển bản thân với vai trò của một người lãnh đạo, nhất là khi Silicon Straits Saigon đang ngày càng phát triển vượt mốc 60 thành viên như hiện nay.

Thứ ba là anh tập trung vào gia đình nhỏ của mình, dành thời gian hiệu quả nhất cho họ.

Anh nhận xét như thế nào vào thị trường công nghệ thông tin ở thành phố Hồ Chí Minh nói riêng hay Việt Nam nói chung trong tương lai sắp tới?

Việt Nam đã bị phát hiện là một vùng đất rất tiềm năng đối với các công ty nước ngoài. Họ đã biết bên mình có rất nhiều người giỏi, chỉ còn thiếu những kĩ năng khác mà thôi. Điều này làm thị trường công nghệ thông tin của mình có nhiều sự lựa chọn hơn. Gia công phần mềm (outsourcing) không còn là lựa chọn duy nhất nữa mà còn có xây dựng sản phẩm (building product) hoặc làm cho các công ty khởi nghiệp (startup).

Khi bạn có nhiều lựa chọn, bạn cũng phải chuẩn bị cho mình những kĩ năng cần thiết như Tiếng Anh, kiến thức về các công nghệ mới như Python, Ruby, Go, NodeJs, kinh nghiệm thực tế từ các side projects. Đặc biệt, bạn cần phải có lối suy nghĩ của những người xây dựng sản phẩm (Product Mindset).

Anh có suy nghĩ như thế nào về Product Mindset?

Theo anh, Product Mindset là những cách suy nghĩ bạn có được từ việc thật sự bắt tay vào xây dựng một sản phẩm và chịu trách nhiệm đến nhiều mảng liên quan đến sản phẩm đó. Kinh nghiệm này đến từ việc bạn được tham gia nhiều sản phẩm khác nhau, cả sản phẩm khi làm cho công ty cũng như những side projects cho riêng bản thân mình.

Cái Silicon Straits đang làm là tạo một nơi để các bạn xây dựng Product Mindset, được học hỏi nhiều kĩ năng khác chứ không chỉ là coding.

Cảm ơn anh đã dành thời gian tham gia buổi chia sẻ ngày hôm nay.

Thực hiện: Đức Phú, Kim Tuyến, Giáp Hồng

Các bài phỏng vấn khác trong chuỗi Speaker Series mùa thứ nhất:

Quality Assurance Warrior and Automation QA (Senior) wanted!

Who we are

Silicon Straits Saigon is a Product Development Lab that work with startups and enterprises in South East Asia to help build and launch new and exciting web and mobile products. We don’t just develop softwares or apps, we build PRODUCTS and BUSINESS. We have the best office in town to provide not just a cool working environment but also the playground for all hackers, builders and makers like yourself to build the next big thing.

Who we are looking for?

# Quality Assurance Warrior (Junior)

  • Flexible aggressive on several platform and operating system (iOS + Android and Web Apps).
  • Proviciency in software testing tools (as Jira, Trello, Redmine…)
  • Good communicate with customer.
  • UI/UX experiences.
  • Knowledge in Ruby & Automation Test is advantage.

# Automation QA (Senior)

  • Passionate with software testing & automation test
  • Hands-on experience with automation tools (Selenium, QTP, & other automation test tools)
  • Hands-on experience in developing automation scripts for mobile application.
  • Experience on a variety of technology platforms (web service, mobile)
  • Determines automation testing strategies and guides the work of team members as needed.
  • Working knowledge of testing methodologies.
  • Good analytical/problem solving experience to deal with complex business problems.
  • 2 years experience in automation testing is required

It’s a great advantage if you can demonstrate

  • Experience in automation test for mobile (IOS, Android…)
  • Knowledge in Software testing.
  • Professional (or hobby) mobile development experience.

In return, you will receive

  • Attractive salary .
  • Great opportunities to improve your skills in many related fields.
  • Working with other talented developers, designers and product managers.
  • Flexible working time and unlimited leave days.
  • Get your own Macbook.
  • Free classes (English class, UI/UX class…).
  • Nice bosses.
  • Geek Toys.
  • Take part in our exciting events (Hackathon, Drinkathon,…).

Do impress us

If you are an outstanding QA Warrior & Automation tester and want to be part of this crew, send us your CV to [email protected].

And if you know someone perfectly fit for this position, feel free to share them the good news.

3 cách sử dụng cơ bản của thư viện Alamofire

Thư viện Alamofire là bản port từ Objective-C sang Swift của thư viện AFNetworking. Alamofire hỗ trợ cài đặt thông qua Cocoapods và hiện tại thì thư viện này không còn support cho iOS 7 nữa. Bài viết sau sẽ hướng dẫn bạn những tính năng cơ bản của Alamofire.

Cài đặt thư viện Alamofire

Alamofire có thể được cài đặt dễ dàng thông qua Cocoapods. Thêm đoạn sau vào pod file của project:

Sau đó chạy lệnh pod install trong thư mục root của project.

Sử dụng Alamofire

1. Thực hiện một request

Thư viện Alamofire khi được install thông qua cocoapods sẽ được build thành framework. Do đó để sử dụng, bạn phải import Alamofire framework:

Alamofire là một class chứa các class methods hỗ trợ cho việc thực hiện request async tới một URL. Do đó, việc gọi các request method của Alamofire sẽ có syntax như sau:

request là class method thực hiện việc request tới URL. Bản thân method này có nhiều overload với parameter khác nhau. Trong ví dụ trên, request nhận 2 parameters: HTTP Request Method dưới dạng enum, và URL để request tới. Các overload khác của request method bao gồm:

Bạn có thể xem thêm về những method này trong tài liệu của thư viện Alamofire.

2. Xử lý response

Get reponse từ server

Nhìn lại những methods request ở trên, bạn sẽ thấy rằng tất cả các method này đều trả về instance của Alamofire’s Request object. Việc này để giúp cho chúng ta có thể gọi liên tiếp các methods (chaining) của Alamofire:

Trong ví dụ trên, sau khi thực hiện một request, chúng ta tiếp tục gọi method response để handle các response trả về từ server. Method này nhận vào 1 parameter là một closure (tương đương với block trong Objective-C) với 4 parameter: request – instance của Request object, response – instance của NSHTTPURLResponse object, data – body của response dưới dạng NSData, error – NSError chứa thông tin của lỗi trả về từ phía server. Ngoài ra, cũng như request, method response cũng có các overload sau:

Ở đây, mình thích sử dụng method response thay vì responseJSON hơn, vì khi dùng responseJSON, nếu data trả về từ phía server không đúng JSON format thì Alamofire sẽ đưa ra lỗi The operation couldn’t be completed. (Cocoa error 3840.) rất xấu. Do đó mình sẽ tự parse data trả về từ phía server để control cái error message thay vì để Alamofire tự parse.

Parse data từ response

Trong snippet trên, mình đã thử convert data trả về từ server sang Dictionary thông qua extension method toDictionary của NSData object.

Nếu data không thể được convert sang Dictionary sẽ trả về kết quả là nil. Lúc này chúng ta có toàn quyền xử lý data thay vì phải dựa vào parser của Alamofire. Sẽ tránh được những lỗi xấu xí nhữ lỗi 3840 đã nói ở trên.

3. Xử lý lỗi

Tới đây thì đã gần như hoàn tất việc tạo một request và xử lý response trả về. Nhưng vẫn chưa đủ, chúng ta còn phải handle khi có lỗi xảy ra và phía server trả về response với error code (status code không phải 2xx). Với cách gọi method như ở trên, khi có lỗi xảy ra, giá trị của biến error vẫn là nil. Để Alamofire có thể parse được lỗi của server vào biến error, chúng ta phải gọi thêm một method là validate để validate response:

Trong snippet trên có các extension methods của NSErrorNSHTTPURLResponse để tiện hơn cho việc xử lý error:

Tới đây thì bạn đã có thể sử dụng Alamofire để thực hiện các request cơ bản và parse data/error trả về từ phía server. Phần tiếp theo sẽ nói về cách sử dụng thư viện Alamofire để download/upload content.

SS Speaker Series #4 – Tony Ngo: Bằng cấp không đảm bảo sự nghiệp thành công

Anh Tony Ngo hiện là Chủ tịch và Đồng sáng lập Everest Education (E2) – tổ chức giáo dục uy tín tại TP. HCM. Anh tốt nghiệp Đại học Stanford với hai tấm bằng Cử Nhân Kinh Tế (Economics) và Thạc Sĩ Kĩ Thuật Công Nghiệp (Industrial Engineering), và sau đó là bằng Thạc Sĩ Quản Trị Kinh Doanh của Harvard Business School. Trước khi về Việt Nam, anh đã có 15 năm kinh nghiệm làm việc tại Wall Street, bắt đầu với vai trò là chuyên viên ngân hàng đầu tư tại Morgan Stanley và kết thúc tại Bridger Capital, quỹ hợp tác đầu tư tư nhân có trụ sở tại New York. Niềm đam mê dành cho giáo dục đã thúc đẩy anh sáng lập nhiều tổ chức phi lợi nhuận trong lĩnh vực này ngay từ khi ở Mỹ như tổ chức phát triển kĩ năng lãnh đạo UNAVSA (200-2006), Sponsors for Educational Opportunity – Vietnam – SEO-Vietnam (2009).

Theo anh Tony: “Bằng cấp có thể giúp bạn vào được vòng phỏng vấn nhưng không đảm bảo cho sự thành công trong sự nghiệp của bạn”. Phần trò chuyện dưới đây sẽ giúp bạn hiểu thêm về quan điểm này của anh.

Chào anh. Tốt nghiệp Đại học Stanford cả hai chuyên ngành Kinh tế và Kĩ thuật, tại sao anh lại chọn làm việc tại Phố Wall?

Khi ra trường, tôi chưa biết mình sẽ làm gì. Thấy bạn bè vào làm tại các công ty Phố Wall, tôi nghĩ người khác làm được thì mình cũng làm được nên tôi nộp đơn vào Morgan Stanley.

Môi trường làm việc ở đây rất khốc liệt. Khoảng thời gian đầu, tôi phải làm liên tục từ 9 giờ sáng hôm nay đến 2-3 giờ sáng hôm sau. Khi công ty có dự án lớn chúng tôi hầu như không có thời gian để nghỉ ngơi. Thời gian đầu, tôi học được rất nhiều thứ nhưng càng về sau công việc lặp lại khá nhiều và nhàm chán. Sau một năm, tôi bị sa thải và xin vào làm cho một công ty nhỏ hơn, hoạt động ở một lĩnh vực rộng hơn. Tại đây, tôi có cơ hội được tiếp xúc và học hỏi thêm rất nhiều thứ.

Lý do anh bị sa thải ở Morgan Stanley là gì? Lúc đó, anh cảm thấy như thế nào?

Nguyên nhân một phần do bong bóng công nghệ bị vỡ, phần khác do tôi mới ra trường, chưa hiểu rõ môi trường làm việc nơi công sở. Lúc đó tôi chỉ tập trung vào công việc mà không để ý đến các mối quan hệ trong công ty. Sau khi bị đuổi, tôi mới phát hiện mình đã tin nhầm người. Việc này dạy tôi bài học về tầm quan trọng của kỹ năng mềm và các mối quan hệ khi đi làm.

Khoảng thời gian đó là thời điểm thấp nhất trong cả cuộc sống và sự nghiệp của tôi. May mắn nhờ gia đình và bạn bè động viên, giúp đỡ, tôi đã vượt qua và tìm được một công việc khác tốt hơn.

Được biết có thời gian anh làm đầu tư ở Trung Quốc, anh có thể chia sẻ đôi nét về những khó khăn hay kinh nghiệm đáng nhớ khi ấy?

Một trong những vấn đề lớn nhất ở Trung Quốc là việc giả mạo giấy tờ. Nhiều doanh nghiệp làm việc không minh bạch và khai khống số liệu. Vì vậy, tôi không tin tưởng hoàn toàn vào đội ngũ quản lý của các công ty hoặc những số liệu thống kê, báo cáo trên báo chí của họ. Tôi thường đến tận nơi phân phối, phân xưởng sản xuất để điều tra, nghiên cứu, so sánh số liệu thực tế và số liệu do công ty cung cấp. Chỉ có làm thế mới đảm bảo cho số tiền đầu tư của quỹ được sử dụng an toàn và đúng mục đích.

Hiện anh đang là Chủ tịch và Đồng sáng lập Everest Education (E2) – một tổ chức giáo dục uy tín tại TP. HCM. Tại sao anh lại từ bỏ công việc đầu tư để làm giáo dục ở Việt Nam?

Tại Việt Nam, một lớp học thường có từ 30-40 học viên và một giảng viên. Tuy nhiên, năng lực tiếp thu của mỗi học viên không đồng đều và giảng viên cũng không có thời gian quan tâm hết tất cả học viên. Trong khi đó, công nghệ càng lúc càng phát triển, có những mô hình giáo dục mới áp dụng rất thành công tại Mỹ và Trung Quốc. Hơn nữa, Việt Nam có gần 100 triệu dân, 50% trong số đó sử dụng Internet và hơn 20 triệu người sử dụng smartphone. Tôi muốn sử dụng công nghệ để áp dụng những mô hình giáo dục tiên tiến đó cho các học viên Việt Nam. Đây là một thị trường rất tiềm năng và chưa có nhiều người khai thác.

Speaker Series - Tony Ngo

Anh sinh ra và lớn lên ở Mỹ, thời gian gần đây sinh sống và làm giáo dục tại Việt Nam. Vậy theo anh, đâu là điểm khác nhau giữa những founder sinh ra và lớn lên ở Việt Nam và Mỹ?

Vào năm 2007, khi thực tập tại quỹ đầu tư TPG, tôi có cơ hội về Việt Nam và làm việc tại FPT. Trong thời gian ở Việt Nam, tôi thấy rằng những founder sinh ra và lớn lên ở đây sẽ phát triển đến một mức độ nhất định, mà tôi tạm gọi là “chạm trần” và họ không thể phát triển lên được nữa. Họ giỏi nhưng chưa vươn tới mức chuyên nghiệp và mang tầm cỡ khu vực hay quốc tế. Sự khác biệt này là do mindset và mô hình đào tạo của hai quốc gia.

Bên cạnh đó, một số bạn ở Mỹ về Việt Nam kinh doanh và đầu tư, họ thường cho rằng thông minh và giỏi giang hơn. Tuy nghiên, sau khoảng hai đến ba năm thì họ trở về Mỹ do làm ăn thua lỗ vì không quen với môi trường làm việc, hệ thống pháp luật và chính sách của tại đây.

Tốt nghiệp với những tấm bằng danh giá từ các trường Đại học hàng đầu trên thế giới nhưng con đường sự nghiệp lúc đầu của anh dường như không được suôn sẻ cho lắm. Anh có bài học hay lời khuyên nào để chia sẻ cho các bạn trẻ ở đây?

Bằng cấp có thể giúp bạn vào được vòng phỏng vấn nhưng không đảm bảo cho sự thành công trong sự nghiệp của bạn. Những kiến thức, kĩ năng mà các bạn học được ở trường Đại học là cần thiết nhưng chưa đủ. Để thành công, các bạn cũng cần rèn luyện thêm các kĩ năng mềm khác như thuyết trình, nói trước đám đông, thuyết phục người khác… Thêm nữa, hãy tìm cho mình một mentor. Họ sẽ giúp bạn làm quen với công việc nhanh hơn và bạn cũng học được nhiều điều từ họ.

Với anh mentor là người có vai trò quan trọng như thế nào và làm sao để một người giỏi hơn nhận làm mentor của anh?

Bản thân chúng ta không thể nào đủ thông minh để biết hết mọi thứ và phát hiện ra những khuyết điểm của bản thân. Mentor sẽ là người giúp chúng ta nhìn ra khuyết điểm và phát triển bản thân tốt hơn.

Một mối quan hệ tốt đẹp và bền vững là hai bên phải mang lại lợi ích cho nhau. Để một người trở thành mentor của bạn, tự thân bạn phải mang lại giá trị cho họ. Bạn có thể rủ họ đi ăn uống, cùng chia sẻ kiến thức, sở thích và trò chuyện về những chủ đề mà họ hứng thú.

Những mentor tốt mà anh biết có những đức tính gì?

Những mentor tốt mà tôi từng gặp thường là những người khiêm tốn, am hiểu về lĩnh vực của họ và luôn sẵn sàng giúp đỡ khi tôi gặp khó khăn.

Cuối cùng là lời nhắn đến các bạn trẻ, kĩ năng nào mà anh nghĩ các bạn nên có?

Nếu như chỉ được chọn một kĩ năng thì tôi sẽ chọn “tự nhận thức bản thân” (self-awareness). Nhận ra được bạn đang ở đâu và cần phải khắc phục những yếu điểm nào. Khi người khác chê bai hay khuyên nhủ bạn điều gì, hãy dũng cảm đón nhận nó. Những lời phê bình như vậy thường quý hơn những lời khen mà chúng ta nhận được. Người Việt Nam mình có thói quen “sĩ diện”, thường lo lắng người khác nghĩ thế nào về mình nên hay che giấu khuyết điểm. Đó là một thói quen không tốt. Hãy biết cách đánh giá đúng bản thân nếu như bạn muốn bản thân mình ngày càng tốt lên. 

Cảm ơn những chia sẻ của anh.

Thực hiện: Đức Phú, Kim Tuyến, Giáp Hồng, Đoan Trang, Chí Cao

Ảnh chụp chân dung anh Tony Ngo được lấy từ http://e2.com.vn/

Các bài phỏng vấn khác trong chuỗi Speaker Series mùa thứ nhất:

[Urgent] Senior Back-end Developer (Ruby, Python, or Golang) wanted!

Who we are

Silicon Straits Saigon is a Product Development Lab that works with startups and enterprises in South East Asia to help build and launch new and exciting web and mobile products. We don’t just develop softwares or apps, we build PRODUCTS and BUSINESS. We have the best office in town to provide not just a cool working environment but also the playground for all hackers, builders and makers like yourself to build the next big thing.

Company Size: 50+

We are looking for Senior back-end developers

As a backend developer, you will be exposed to projects in different domains.

The fast moving pace of our industry fosters the adoption of new technologies that improve productivity and make programming fun. While we all have our preferred technologies, as a team, we don’t believe in a silver bullet, one-size-fit-all solution, but a combination of best tools for each task.

Hence we always look for people who are keen to explore and pick up more modern languages and frameworks as we grow. Over the years, our team has picked up Lotus (Ruby), Golang, and Elixir (Erlang) and that’s just the beginning.

Our expectations

Senior backend developers

  • Know either Ruby, Python, or Golang like the back of your hand
  • Understand OOP is not the holy grail of software development
  • Experience with unit tests and other testing methodologies
  • Involved in activities to improve and maintain code quality of previous projects
  • Experience in scaling and optimizing web applications.
  • Know there are better ways to work with legacy system than rebuilding it

And for this position, you have great advantage if you understand how backend integrates with various other services, from frontend, to mobile and even embedded system.

In return, you will receive

  • Attractive salary.
  • Great opportunities to improve your skills in many related fields.
  • Working with other talented developers, designers and product managers.
  • Flexible working time and unlimited leave days.
  • Get your own Macbook.
  • Free classes (English class, UI/UX class…).
  • Nice bosses.
  • Geek Toys.
  • Take part in our exciting events (Hackathon, Drinkathon,…).

Do impress us

If you are an outstanding back-end developer and want to be part of this crew, please send your CV to [email protected].

And if you know someone perfectly fit for this position, feel free to share them the good news.

From SSS with love,

Silicon Straits Saigon

Kinh nghiệm triển khai wifi tại Silicon Straits Saigon

Nguyên nhân sâu xa

Trong hơn một năm từ lúc thành lập, tất cả việc trao đổi thông tin, liên lạc của khoảng 20 con người  tại Silicon Straits (SS) đều được thực hiện thông qua hai đường dây ADSL 8Mbps/768Kbps.

Chúng tôi đã không thể lắp đặt được cáp quang! Bạn có tin được không? Một công ty hoạt động trong lĩnh vực công nghệ thông tin tại khu đô thị hiện đại Phú Mỹ Hưng (Quận 7, Tp. HCM) nhưng lại không kéo được cáp quang, chỉ vì đơn vị chủ quản tòa nhà Garden Court 2 không muốn làm thay đổi tới thiết kế và cấu trúc của nó (>_<).

Cho đến tận năm ngoái (2014), để đáp ứng nhu cầu đường truyền tốc độ cao hơn khi số lượng nhân viên tăng lên, SS đã ký hợp đồng thuê một văn phòng phụ ở dãy nhà đối diện văn phòng hiện tại để… có được cáp quang 80Mbps/80Mbps.

Để đưa được Internet tốc độ cao về đến SS, chúng tôi chỉ có một giải pháp khả thi là phát wifi qua khoảng cách khoảng 30m – 40m, ở giữa có một số cây xanh chắn ngang.

Lúc đầu khi còn dùng ADSL, SS chỉ dùng một thiết bị phát wifi chính là Apple Airport Extreme với khả năng phục vụ khoảng 50 người dùng (theo như tài liệu của hãng). Sau khi “kéo” được đường cáp FTTH, chúng tôi dùng thêm một “cục” Airport Extreme mới tương tự để phát wifi từ bên văn phòng phụ, cục Airport cũ dùng để thu wifi bên văn phòng chính.

Việc cài đặt này rất đơn giản với chức năng Extend wireless network của Airport Extreme. Tuy nhiên, tốc độ thu được cũng không ổn định theo thời điểm, thời tiết, và suy hao khá nhiều. Để hỗ trợ Airport Extreme, SS còn gắn thêm một thiết bị chuyên dùng hơn cho doanh nghiệp là Unify AP AC phát wifi với SSID riêng, khả năng đáp ứng khoảng > 200 người dùng cùng lúc (theo tài liệu của hãng).

Nhưng với số lượng nhân viên tăng dần lên khoảng 40 người, rồi 50 người và thêm nữa. Mỗi người thường có 2 thiết bị là laptop và điện thoại kết nối vào hệ thống wifi nên Airport Extreme dần không đáp ứng nổi. Tình trạng “rớt mạng” thường hay diễn ra trong ngày, từ nhân viên đến sếp, từ sếp đến anh bảo vệ… mọi người ai cũng nản.

Hướng giải quyết

Để khắc phục tình trạng đau khổ đó, chúng tôi đã xem xét rất nhiều cách và dưới đây là một số cách mà chúng tôi đã áp dụng:

1. Xóa hết những sóng wifi không cần thiết

SS thường tổ chức nhiều sự kiện và thỉnh thoảng tạo mạng wifi riêng để người tham dự sự kiện sử dụng Internet. Ngoài ra cũng có một số mạng wifi phục vụ cho các mục đích khác. Những mạng wifi này có thể gây ra tình trạng nhiễu sóng đối với mạng wifi chính của công ty (phát ở băng tần 2.4Ghz và 5Ghz) vì số kênh trên băng tần này khá giới hạn (12 kênh).

Hơn nữa, xung quanh SS cũng có khá nhiều hộ gia đình và công ty cũng phát wifi riêng nên mật độ sóng khá dày và chuyện nhiễu là hoàn toàn có thể. Thông tin từ Wifi Analyzer cho thấy điều đó:

wifi analyzer
Công cụ đánh giá Wifi – Hình chỉ mang tính minh họa

Theo Wifi Analyzer thì kênh wifi của SS trùng với kênh của nhiều sóng xung quanh, nên chúng tôi đã thử chuyển sang một kênh ít được sử dụng hơn (không sử dụng chế độ chọn kênh tự động của router wifi). Nhưng sau đó có ghi nhận một số máy sử dụng Windows (Asus) không thể thấy wifi nên chúng tôi đã để lại chế độ tự động.

SS cũng sử dụng wifi ở băng tần 5Ghz, vì số lượng kênh trên băng tần này nhiều hơn nên chuyện nhiễu ít xảy ra. Ngoài ra, số lượng thiết bị xung quanh phát ở băng tần này không nhiều, và sóng 5Ghz không có khả năng “đâm xuyên” (tường, cây cối…) tốt như 2.4Ghz nên băng tần này hầu như không bị ảnh hưởng bởi các thiết bị của những người hàng xóm.

2. Tăng số lượng kết nối

Với mô hình Extend wireless network từ hai thiết bị Apple Airport Extreme, chạy DHCP cấp phát cho hai Router wifi (Unify AP AC và Unify AP Pro). Cả hai router này đều chạy ở chế độ cầu nối (bridge mode) do đặc điểm của dòng Unify, nên Airport Extreme có thể trở thành một nút nghẽn khi lượng người dùng trong mạng wifi tăng lên nhiều. Tài liệu của Apple chỉ cho biết Airport Extreme có khả năng chịu khoảng 50 người dùng cùng lúc. Với một nhân viên tại SS, mở nhiều ứng dụng, trình duyệt… số lượng connection này trong khoảng 130 (có thể làm tròn thành 150 :D):

Vậy lượng kết nối mà Airport Extreme có thể chịu ở thời điểm bận rộn là: 150 * 50 = 7.500. Quả là con số khá khiêm tốn với một router. Vì để tránh bị nghẽn ở đây, chúng tôi cho Airport Extreme chạy ở chế độ cầu nối (bridge mode) thay vì DHCP. Lúc này Airport Extreme chỉ còn nhiệm vụ luân chuyển gói tin mà không cần phải “track” kết nối từ IP nào đến IP nào.

Gánh nặng bây giờ sẽ thuộc về router chính.

Đường cáp quang của SS được FPT cung cấp và hỗ trợ sẵn một router là TL-R480T+. Theo như tài liệu kỹ thuật, khả năng của router này vào khoảng 30.000 kết nối cùng một lúc. Nếu cũng sử dụng cách tính trên thì router này có thể phục vụ cho khoảng 200 người.

Tuy nhiên tình trạng chập chờn mạng vẫn còn nên chúng tôi quyết định thay router Tp Link này bằng một router có sẵn trong kho của SS là Draytek Vigor V300b với khả năng hỗ trợ khoảng 80.000 kết nối. Sau khi chuyển sang router mới, việc “rớt mạng” (mất kết nối wifi hoặc limited connectivity) ở công ty có vẻ tạm ổn, tuy nhiên…

3. Sử dụng thiết bị chuyên dùng cho thu phát wifi ngoài trời

Vài ngày sau đó, chúng tôi lại tiếp tục nghe bài ca “trả mạng cho ta” léo nhéo và ai oán vào một buổi trưa mùa hè nóng nực. Thôi thì nhận trách nhiệm rồi phải ráng giải quyết. Sau những lần phân tích giằng xé, đánh giá nhức óc, thử nghiệm rã rời thân xác các kiểu… (cũng không đến mức như vậy lắm, nhưng bạn hiểu đúng ý rồi đấy) ấy vậy mà vấn đề vẫn chưa được giải quyết dứt điểm. Lần này, chúng tôi quyết định thử một giải pháp tốn kém hơn là thay thế 2 cục Airport hiện tại bằng thiết bị khác chuyên phát và thu wifi ngoài trời.

Có nhiều lý do để Airport Extreme không phù hợp để được sử dụng như cách nó đang được dùng tại SS. Hai điều quan trọng trong số đó là nhiệt độ ngoài trời (có khi lên đến 40º – 50º C vào giữa trưa) và khoảng cách (30m – 40m). Thiết bị chúng tôi chọn để thay thế Airport Extreme là Unify Nanostation locoM5. Đây là thiết bị chuyên dùng ngoài trời (chịu được nắng nóng, mưa gió) và khoảng cách phủ sóng khoảng hơn 10km, quá nhiều so với nhu cầu thực tế. Nói là tốn kém nhưng chi phí cho hai thiết bị locoM5 này cũng khá rẻ, tổng cộng chưa đến 3.000.000đ. Điều quan trọng khi sử dụng thiết bị này là chúng phát ở băng tần 5Ghz với công suất lớn nên ít (hoặc hầu như không) bị ảnh hưởng bởi những sóng wifi xung quanh văn phòng phụ (vốn chủ yếu phát ở băng tần 2.4Ghz).

Unify NanoStation locoM5
Unify NanoStation locoM5

Việc cài đặt để hai thiết bị này làm việc với nhau không khó và mất nhiều thời gian. Chỉ trong một buổi là xong. Chuyện còn lại là lấy thang chạy qua lại giữa hai bên văn phòng để gỡ Airport Extreme và gắn locoM5 vào, tốn thêm một buổi nữa. Và đây là thành quả chúng tôi gặt được:

Tốc độ trước và sau khi tối ưu
Tốc độ trước và sau khi tối ưu

Tốc độ trước khi tiến hành các biện pháp tối ưu hóa cũng không đến nỗi tệ lắm, có lúc đo được khoảng 40Mb/s hoặc 50Mb/s, tùy từng thời điểm. Thời điểm chúng tôi chạy Speedtest thì chỉ có 8.23Mb/s, tuy nhiên sự thay đổi sau khi sử dụng locoM5 là rất rõ rệt.

Bài học bên lề

Có thêm hai điều chúng tôi rút ra được trong quá trình tìm hiểu và khắc phục những vấn đề với mạng wifi của SS là:

  1. Có thể sử dụng SSID (tên mạng wifi) duy nhất với thông tin password, chế độ mã hóa… như nhau ở mỗi Access Point. Miễn là chúng không trùng kênh. Điều này sẽ giúp người sử dụng truy cập vào mạng wifi một cách thông suốt trong công ty mà không phải tự chuyển qua mạng wifi khác khi ở địa điểm khác. Máy tính (hoặc thiết bị di động) sẽ tự động kết nối tới BSSID có tín hiệu tốt hơn. Đây là cách mà Unify AP AC và Unify AP Pro áp dụng.
  2. Ubiquity (hãng cung cấp Unify AP AC/Pro) hỗ trợ việc quản lý thiết bị thông qua cloud (của nhà phân phối hoặc tự cài đặt). Do đó việc cài đặt, quản lý và theo dõi thiết bị rất tiện lợi thông qua trang dashboard này. Điều này giúp việc “scale” lên khá dễ dàng: khi có nhu cầu mở rộng tầm phủ sóng wifi hoặc phục vụ cho nhiều người dùng hơn, chỉ cần gắn thêm một thiết bị Unify vào hệ thống mạng và thao tác từ trang quản lý này.

Thực tế sau nhiều tháng sử dụng, ngoại trừ một số lần hệ thống mạng từ nhà cung cấp FPT bị trục trặc thì hệ thống wifi của SS đã ổn định hơn rất nhiều. Thỉnh thoảng thiết bị Unify có bị “down” và phải restart lại nhưng vẫn ở trong mức chấp nhận được.

Lắp đặt hệ thống wifi cho nhiều người cùng sử dụng là điều không dễ dàng. Với một doanh nghiệp từ nhỏ thành không phải vừa, và tự tin là mình có thể làm được (nhiều thứ) như SS thì cũng tốn kha khá thời gian và công sức để tối ưu hệ thống wifi. Nhưng bù lại những bài học mà chúng tôi học được cũng rất giá trị và thú vị. :-P

Bài viết gốc: https://minhdanh.me/mot-so-kinh-nghiem-trien-khai-wifi-tai-silicon-straits-saigon/

Chạy đua sáng tạo game trong 48h cùng Gameloft Game Jam 2015

Gameloft Game Jam 2015 là cuộc thi do Gameloft SEA tổ chức. Cuộc thi là cơ hội tranh tài dành cho các lập trình viên Android và bất kỳ ai đam mê phát triển Game tại Việt Nam và Indonesia. Không chỉ đơn thuần là một cuộc thị, Gameloft Game Jam 2015 còn là cơ hội để các bạn lập trình viên có cơ hội để cùng làm việc – chia sẻ kinh nghiệm – cùng sáng tạo và vượt qua giới hạn về thời gian để tạo ra những sản phẩm game tuyệt vời nhất.

1. Đối tượng tham dự

Tất cả bạn trẻ là lập trình viên Android, đam mê phát triển game hoặc đơn giản là bạn mê chơi game và có những ý tưởng táo bạo cho game của riêng mình.

2. Giải thưởng

Tổng giải thưởng lên đến 8400 USD với:
– 1 giải nhất – THE CHAMPION trị giá 4800 USD
– 2 giải nhì – THE EXCELLENCE & THE INNOVATION trị giá 1500 USD
– 1 giải bình chọn – THE FAVORITE trị giá 600 USD

3. Thông tin chi tiết

a. Thời gian: 19:00, thứ 6 ngày 13 tháng 11 năm 2015

Hạn chót đăng ký: 23:55 ngày 5 tháng 11 năm 2015.

b. Địa điểm

–  Sài Gòn: Silicon Straits – 147 Tôn Dật Tiên, phường Tân Phong, quận 7, tp Hồ Chí Minh

–  Hà Nội: Trường Đại học Công Nghệ – ĐHQGHN, 144 Xuân Thủy, phường Quan Hoa, quận Cầu Giấy, tp Hà Nội

–  Đà Nẵng: Trường Cao đẳng Công nghệ (ĐH Đà Nẵng) – 48 Cao Thắng, quận Hải Châu, tp Đà Nẵng

–  Yogyakarta: Yogja Digital Valley – Jl. Sagan, Kota Yogyakarta, Yogyakarta 55223

4. Cách thức đăng ký

a. Chỉ 50 nhóm đăng ký hợp lệ đầu tiên được chọn. Nhóm đăng ký hợp lệ khi đáp ứng đủ các yêu cầu sau:

  • Mỗi nhóm có tối đa 4 thành viên.
  • Nhóm có không quá 1 thành viên đang làm việc tại Gameloft, có kỹ năng và nền tảng lập trình game.
  • 1 thành viên có thể đại diện cho cả 4 thành viên trong nhóm đăng ký tại webiste của Gameloft Game Jam 2015.

b. Nếu bạn chưa có nhóm, bạn vẫn có thể đăng ký trước theo một trong hai phương án sau:

  • Bạn đăng ký thông tin nhóm trên website. Ban tổ chức sẽ đăng thông tin tại http://gamejam.gameloft.com/teams để các thành viên khác liên hệ gia nhập.
  • Hoặc bạn chọn một nhóm đang thiếu người tại http://gamejam.gameloft.com/teams và liên hệ với nhóm trưởng để gia nhập.

c. Đăng ký tại đây (hạn chót đăng ký: 23:55 ngày 5 tháng 11 năm 2015):

http://bit.ly/GGJ2015ss

Mọi thắc mắc về cuộc thi, vui lòng email về Ban Tổ Chức: [email protected].