Home Blog Page 184

Hãy build nên những câu chuyện, chứ đừng chỉ là những tính năng!

Ai mà chẳng muốn dữ liệu của mình được an toàn, và một trong những biện pháp hỗ trợ đó là sử dụng account nhiều lớp password. Thế nhưng, mọi người khi nghe về việc phải cài đặt bổ sung hay add thêm info đều sẽ nản lòng và dễ thoát ngay. Cái tôi muốn nói ở đây là, hãy truyền tải câu chuyện về “tính bảo mật”, chứ không nên offer feature “password” như thế!

Câu chuyện Vs. Tính năng

Hầu như mọi chức năng của app đều được biểu thị thông qua các feature. Bạn sẽ tạo một account, add thêm content, kết nối với bạn bè, v.v.. App được tạo nên từ hàng trăm ngàn mảnh nhỏ hỗ trợ lẫn nhau để giúp user đạt được mục tiêu của mình.

Tuy nhiên, điều quan trọng là chúng ta phải nghĩ xa hơn nếu muốn mang đến trải nghiệm người dùng tốt nhất có thể. Chúng ta cần phải nhắm đủ xa để có thêm nhiều câu trả lời hơn cho những vấn đề đang khuất mắt. Và những câu trả lời này sẽ chính là các feature mà bạn tạo nên.

Nếu bạn xem ví dụ của Shopify, bạn sẽ thấy họ làm nên trang web kì diệu thế nào khi làm nổi bật câu chuyện của mình lên rồi list các feature ở ngay dưới.

  • Câu chuyện: You can control your brand
  • Các feature: custom domain, themes, customizable CSS

Một cách để đi nhanh hơn nếu bạn đã có sẵn ý tưởng feature trong đầu đó là dùng 5 Whys. Nó sẽ dẫn dắt bạn để tìm ra cốt lõi vấn đề.

Tại sao nó quan trọng? 

Chúng ta luôn có những kế hoạch riêng, nhưng nó rất dễ bị trì hoãn hoặc bị huỷ bởi nhiều yếu tố. Có thể do quản lý kém, hoặc những lỗi kĩ thuật đột xuất, hoặc khó khăn về đồng bộ hoá workload. Vì thế mà bạn cần phải linh hoạt hơn nếu muốn truyền tải trọn vẹn value đến với người dùng. Nếu bạn đang sử dụng agile methodology, nó có thể giúp bạn sớm nhận ra liệu mình có đang bị “trật nhịp” hay không. Nhưng nó cũng chỉ hiệu quả nếu như bạn làm gì được để thay đổi kết quả đó.

Việc tạo nên một câu chuyện dẫn dắt user trên roadmap của bạn sẽ giúp thay đổi quy mô hoặc chuyển thứ tự ưu tiên dễ dàng hơn nhiều. Trong trường hợp của Shopify, mục tiêu của họ là muốn giúp khách hàng mang thương hiệu mình đến gần hơn với audience. Nếu có 1 feature hơi phức tạp và khó dùng thì cũng còn nhiều sự lựa chọn khác thay thế. Dù cho có thay đổi set tính năng để gửi đến user thì bạn vẫn có thể đạt được mục tiêu.

Nếu xem giải pháp dưới dạng một “câu chuyện” thì mọi thứ sẽ trở nên sáng tạo hơn. Ngày nay chúng ta unlock điện thoại bằng cả tá cách khác nhau, đến cả nhận diện khuôn mặt để không cần phải type nữa. Đó chính là bởi vì có người đã nghĩ ra giải pháp theo một level cao hơn.

“Nhỏ nhưng có võ” 

Trước đây tại công ty chúng tôi dành rất nhiều thời gian để xác định được mục tiêu của mình, đó là: giúp các team kiểm soát được tiến độ các project. Chúng tôi đã cho ra lò rất nhiều feature hay ho chỉ trong vài lần thử đầu tiên, tuy nhiên cũng sớm nhận ra rằng mình đang đi không đúng hướng.

Tôi dám cá rằng, nếu tầm nhìn không đủ xa thì chúng tôi vẫn còn mắc kẹt trên lối mòn này, cho ra hết feature này đến feature khác. Thay vì thế, chúng tôi đã bắt đầu lại từ drawing board và design nên một platform khác toàn diện hơn.

Thể hiện dưới dạng kể chuyện như thế này sẽ làm cho thông điệp của bạn rõ ràng hơn và có sức thuyết phục hơn nhiều – nó truyền cảm hứng hơn so với một list các tính năng thô dài lê thê.

TopDev

10 Vấn đề về Git thường gặp và Giải pháp

10-van-de-ve-git-thuong-gap-va-giai-phap

Bất kể ai từ newbie tới “gừng già” đều sẽ học được cái gì đó về Git.

1. Bỏ phần chỉnh sửa local file

Đôi khi cách tốt nhất để nắm được vấn đề là phải “ngụp lặn” mầm mò trong code. Nhưng đáng tiếc là, những thay đổi trong quá trình lại không được tối ưu lắm, trong trường hợp này thì revert file về lại trạng thái ban đầu có lẽ là cách nhanh gọn nhất:

git checkout -- Gemfile # reset specified path 
git checkout -- lib bin # also works with multiple arguments

Dấu 2 gạch (--) biểu thị cho tính năng command line để báo kết thúc các option của command.

2. Undo các local commit

Đôi khi chúng ta phải tốn khá nhiều thời gian để nhận ra rằng mình đang đi sai hướng, và đến lúc đó thì không ít thay đổi đã được áp dụng. Đấy là lúc mà git reset trở nên có ích:

git reset HEAD~2        # undo last two commits, keep changes
git reset --hard HEAD~2 # undo last two commits, discard changes

Hãy cẩn thận với option --hard! Nó sẽ reset hệ thống bạn làm việc, cũng như tất cả các thay đổi cũng sẽ bị mất đi luôn.

3. Remove một file khỏi git mà không phải remove nó khỏi file system

Nếu bạn không cẩn thận khi dùng git add, bạn sẽ add một mớ file không mong muốn vào mà không hay biết. Tuy nhiên, git rm sẽ remove nó trên cả staging area, cũng như file system của bạn – một điều không ai mong muốn. Trong trường hợp này, hãy đảm bảo rằng bạn chỉ remove bản staged thôi, và add file vào .gitignore để tránh lặp lại lỗi lần hai:

git reset filename          # or git remove --cached filename
echo filename >> .gitignore # add it to .gitignore to avoid re-adding it

4. Edit commit message

Lúc này sẽ có typo, nhưng may thay là bạn có thể sửa nó khá dễ trên commit messages:

git commit --amend                  # start $EDITOR to edit the message
git commit --amend -m "New message" # set the new message directly

Nhưng đó vẫn chưa hết công dụng của git-amend. Nếu bạn có quên add một file vào, chỉ cần add vào và chỉnh lại commit trước đó!

git add forgotten_file 
git commit --amend

Hãy nhớ rằng --amend thật ra tạo commit mới thay thế cho cái trước, nên đừng dùng nó để thay đổi commit mà đã được đẩy vào giữa repository. Có một ngoại lệ đó là bạn phải chắc chắn về việc không có developer nào đã check các bản trước và làm dựa trên đó, như thế thì một forced push (git push --force) vẫn sẽ ổn. Cần có option --force ở đây vì lịch sử của hệ thống đã bị điều chỉnh local, nghĩa là push sẽ bị reject bởi server từ xa vì fast-forward merge là không thể.

5. Dọn local commit trước khi push

Mặc dù --amend rất hữu ích, nó không thật sự có tác dụng nếu phần commit bạn muốn  reword không phải là cái cuối. Trong trường hợp này, bạn sẽ cần đến một interactive rebase:

git rebase --interactive 
# if you didn't specify any tracking information for this branch 
# you will have to add upstream and remote branch information: 
git rebase --interactive origin branch

Nó sẽ mở ra phần editor và hiển thị menu sau:

pick 8a20121 Upgrade Ruby version to 2.1.3 
pick 22dcc45 Add some fancy library 
# Rebase fcb7d7c..22dcc45 onto fcb7d7c 
# 
# Commands: # p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# 
# These lines can be re-ordered; they are executed from top to bottom. 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 
#
# Note that empty commits are commented out

Ở phần đầu, bạn sẽ thấy một list các local commit, kèm theo phần giải thích cho các command có sẵn. Chỉ cần chọn phần commit bạn muốn update, đổi pick thành reword (hoặc viết tắt là r), và bạn sẽ có được một view mới nơi bạn có thể edit message.

Tuy nhiên, như có thể thấy từ listing trên, các interactive rebase offer nhiều cái khác nữa ngoài edit commit message: bạn có thể remove commit hoàn toàn bằng cách xoá nó khỏi list, cũng như edit hoặc sắp xếp lại hoặc squash nó. Squash cho phép bạn gộp nhiều commit thành một, một bước tôi hay làm trên các nhánh feature trước khi push chúng vào phần remote. Từ đó sẽ không còn các bản record các commit “Add các file bị miss” và “Sửa typo” nữa!

6. Revert các commit đã push

Mặc dù một số giải pháp đã được nêu rõ trong những tip trước, một số commit sai đôi khi sẽ trội lên hẳn trong repository. Không sao cả, vì git đã cho bạn một cách đơn giản để revert một hoặc nhiều commit:

 git revert c761f5c              # reverts the commit with the specified id
 git revert HEAD^                # reverts the second to last commit
 git revert develop~4..develop~2 # reverts a whole range of commits

Nếu bạn không muốn tạo thêm revert commit mà chỉ muốn áp dụng các thay đổi cần thiết vào hệ thống, bạn có thể dùng option --no-commit/-n.

# undo the last commit, but don't create a revert commit 
git revert -n HEAD

Trang manual tại man 1 git-revert cũng list ra nhiều option khác và cho thêm một số ví dụ khác nữa.

7. Tránh các conflict trùng lặp về merge

Một chuyện mà mọi developer đều hiểu, rằng việc fix merge conflict nghe thật sự kinh dị, nhưng việc cứ xử lý đi xử lý lại một conflict (ví dụ: trong các feature branch chạy lâu dài) thì thật sự là một cơn ác mộng. Nếu bạn đã gặp tình trạng này, bạn sẽ rất vui khi được biết về feature reuse recorded resolution feature. Hãy add nó vào global config cho tất cả các project:

git config --global rerere.enabled true

Ngoài ra, bạn có thể dùng nó trên từng dự án bằng cách tạo thủ công thư mục .git/rr-cache.

Đây không phải là một feature cho tất cả mọi người, nhưng riêng đối với những ai cần nó,  nó sẽ tiết kiệm cho bạn không ít thời gian. Hãy tưởng tượng team của bạn đang làm nhiều nhánh tính năng khác nhau cùng một lúc. Bây giờ bạn muốn hợp nhất tất cả chúng lại với nhau thành một nhánh có thể test được trước khi release. Từ đó bạn sẽ phải xử lý một số conflict về merge. Không may một trong các nhánh vẫn chưa hoàn thiện, vì vậy bạn phải hủy merge lại một lần nữa. Vài ngày (hoặc vài tuần) sau khi nhánh cuối cùng đã sẵn sàng, bạn sẽ merge lại, nhưng nhờ vào các độ phân giải đã ghi, bạn sẽ không phải giải quyết xung đột hợp nhất lần nữa.

Trang chính (man git-rerere) có nhiều info hơn về các case và các command (git rerere statusgit rerere diff, v.v).

8. Tìm commit gây lỗi sau khi merge

Việc mò ra commit đã kéo bug sau khi merge khá tốn thời gian. May mắn là git cung cấp cho chức năng search nhị phân rất hay dưới dạng git-bisect. Đầu tiên bạn cần biểu hiện setup đầu tiên:

git bisect start         # starts the bisecting session
 git bisect bad           # marks the current revision as bad
 git bisect good revision # marks the last known good revision

After this git will automatically checkout a revision halfway between the known “good” and “bad” versions. You can now run your specs again and mark the commit as “good” or “bad” accordingly.

Sau khi git tự động checkout các phiên bản “tốt” và bản “xấu”. Bạn cũng có thể chạy lại các spec và đánh dấu commit tương ứng là “tốt” hay “xấu”.

git bisect good # or git bisec bad

Process này sẽ tiếp tục cho đến khi bạn tìm ra commit mang bug.

9. Tránh các lỗi thường gặp các git hook

Một số lỗi bị lặp lại rất thường xuyên, nhưng sẽ dễ tránh được nếu như check thường xuyên hoặc các task cleanup ở một stage nhất định trong git workflow. Hook được thiết kế để dùng cho trường hợp này. Để tạo ra hook mới, hãy add thêm một file vào .git/hooks. Tên của script phải tương thích với một trong những hook có sẵn , một list đầy đủ những cái có sẵn trên manual page (man githooks). Bạn cũng có thể define các global hook để dùng trong các project của mình bằng cách tạo ra template directory cho git sử dụng khi khởi động một repository mới. Một template directory mẫu trông như sau:

[init]
    templatedir = ~/.git_template

  → tree .git_template
  .git_template
  └── hooks
      └── pre-commit

Khi khởi động initialize một repository mới, các file trong template directory sẽ bị copy về vị trí tương ứng trong  .git directory của project.

Dứoi đây là một hook commit-msg mẫu, để đảm bảo rằng mỗi commit message đều hướng về một ticket number như “#123“.

ruby
  #!/usr/bin/env ruby
  message = File.read(ARGV[0])

  unless message =~ /\s*#\d+/
    puts "[POLICY] Your message did not reference a ticket."
    exit 1
  end

10. Nếu tất cả đều fail

Tới đây thì chúng ta đã cover được khá nhiều cách fix các lỗi thường gặp khi làm việc với git. Hầu hết giải pháp đều khá ổn, tuy nhiên cũng có lúc không dùng được cách dễ và phải viết lại history của nguyên branch. Một cách hay dùng trong trường hợp này đó là remove phần data nhạy cảm (ví dụ như uỷ quyền login cho hệ thống production) gắn liền với public repository:

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch secrets.txt' \
  --prune-empty --tag-name-filter cat -- --all

Việc này sẽ remove file secrets.txt khỏi tất cả các branch và tag. Nó cũng remove mọi commit trống sau khi thực hiện remove. Hãy nhớ rằng việc này cũng sẽ viết lại history của toàn bộ project mà có thể broke trên workflow. Và trong lúc file đang bị remove, phần uỷ quyền vẫn khá nguy hiểm!

GitHub đã có một bài tutorial cách remove data nhạy cảm và man git-filter-branch có mọi chi tiết về những filter và option có sẵn.

Có một nỗi khổ mang tên “thành viên mới” – Những khó khăn khi mới vào team

Khó khăn khi mới vào team

Đối với một lập trình viên, code đỉnh không phải là tất cả. Vì bất cứ sản phẩm và project nào cũng cần một team để hoàn thiện nó. Và khi hoạt động team, sự thay đổi về thành viên là điều khó tránh khỏi. Với một Dev, khó khăn khi mới vào team của một project nào đó, thường xoay quanh 3 từ “thành viên mới”.

  Junior developer là gì? Những quy tắc bất biến giành cho Junior developer

Gần đây tôi nghe được một trường hợp về một team cần tuyển thêm staff vì họ quá thiếu người.

Phản ứng của một trong số đó là:

Tôi không muốn dùng code của tụi nó

Tôi hiểu loại tâm lý này. Code của người khác bao giờ cũng xấu cũng tệ. Đối với hầu hết các lập trình viên thì đây là sự thật hiển nhiên.

Nhưng một sự thật hiển nhiên khác đó là rất ít phần mềm “xịn” được ra lò dưới tay một code thủ đơn độc được.

Build phần mềm là một hành trình đòi hỏi nhiều nỗ lực và cực kì tốn thời gian. Vào một thời điểm nào đó, chuyện tuyển thêm dev để đẩy nhanh tiến trình là không thể tránh khỏi. Đó là chưa nói chuyện thêm thành viên mới vất vả đến thế nào.

Thật ra rất nhiều khó khăn trong việc tuyển thêm dev hoàn toàn có thể kiểm soát được. Nỗi lo lắng về sử dụng code của ai đó chỉ dấy lên khi tuyển trúng người bị sai skill set. Chưa kể công việc tuyển dụng là một quá trình khá đơn giản, nhưng nếu bỏ công sức thêm vào nó thì có thể mang lại hiệu quả không ngờ.

Khó khăn lớn nhất về người mới thật ra là chuyện bắt kịp tiến độ. Mọi hệ thống phần mềm đều có các pattern và naming convention khác nhau. Tất cả phải được giải thích đầy đủ chi tiết cho người mới. Kể cả khi đã được train, còn cả tỷ thứ cần phải train trước khi dev mới sẵn sàng.

Chuyện này có thể giải quyết được nếu có một cấu trúc phần mềm tốt. Nó làm cho mọi thứ rõ ràng và minh bạch hơn. Nếu lỡ như dev mới có rắc rối trong quá trình làm, chỉ cần nhìn vào code là có thể giải quyết được.

Đáng tiếc là, cái “tốt” ở đây là vô cùng chủ quan. Các dev làm chung team với tôi có người rất đồng tình với quyết định của tôi, người thì lại cực kì ghét nó. Cái hợp lí phụ thuộc vào cảm nhận mỗi người và mỗi người cảm nhận rất khác nhau.

Một trong những vấn đề với dev mới

Là cái tôi của các dev cũ. Người mới tức là có những ý tưởng mới. Chúng làm ta cân nhắc lại các quyết định cũ. Lúc này việc ngại tiếp nhận code của người khác không phụ thuộc vào việc nó tệ nữa, mà là do nó khác với code mà chúng ta dự định viết.

Trong nhiều trường hợp, các ý tưởng mới là điều tốt. Những quan điểm mới giúp hoàn thiện những suy nghĩ của chúng ta mà giúp kết nối mọi người trong team vững mạnh hơn nhiều, cả người mới và cũ.

Và điều này chỉ xảy ra khi cái tôi của các thành viên cũ chấp nhận nó…

Xem thêm việc làm Software Developers hấp dẫn trên TopDev

TopDev 

  Lập trình viên vượt qua rào cản bất lực bằng cách nào?

Junior developer là gì? Những quy tắc bất biến giành cho Junior developer

kinh nghiệm làm lập trình viên

Bạn có bao giờ cảm thấy, những người khi càng yêu thích công việc coding thường luôn cảm thấy họ chưa đủ giỏi? Càng suy nghĩ nhiều, những câu hỏi sau lại càng xuất hiện nhiều trong tâm trí. Hãy cùng tìm hiểu tâm lý này nhé. 

Junior developer là gì?

Junior developer là chỉ những developer dưới 2 năm kinh nghiệm trong công việc lập trình. Junior developer là những người chưa biết nhiều gì về công nghệ, framework, hoặc chỉ tìm hiểu sơ sơ chứ chưa dùng nó trong thực tế bao giờ. Junior dev chỉ cần viết code cho chạy được, hoàn thành đúng chức năng đề ra. Họ thường được giao cho việc sửa lỗi, thực hiện những task nhỏ. Việc này giúp cho junior tìm hiểu thêm về hệ thống, làm quen dần với code base.

Quy tắc làm việc cho Junior developer

Khi gặp khó khăn, junior sẽ phải mất nhiều thời gian để tìm hiểu xem lỗi ở đâu, làm sao giải quyết, sau đó mới bắt đầu fix bug.

Để làm một lập trình viên giỏi, chúng ta phải đặt ra cho mình một số quy tắc nhất định. Tự tạo ra cho mình những kỷ luật cũng như những thói quen tích cực. Quan trọng nhất là phải luôn tìm cách giải quyết những câu hỏi có trong đầu.

Những câu hỏi lập trình viên luôn thắc mắc?

  • Tôi nên học gì tiếp theo từ list những thứ cần phải học?
  • Tôi nên dành bao nhiêu thời gian cho việc học code mỗi ngày? Liệu nó có đủ không?
  • Có nên thay đổi phương thức học code hiệu quả hơn?
  • Nếu thay đổi một điều gì đó, nó nên là một cái gì đó nhỏ cho kết quả nhanh chóng hay lớn cho ứng dụng lớn hơn?
  • Tôi có nên dành thời gian nghỉ ngơi sau khi code một cái gì đó? Nếu vậy, bao nhiêu thời gian là đủ?
  • Tôi nên đăng những bài viết của mình ở đâu? Trên trang cá nhân của tôi hoặc trang website lớn?
  • Tôi đã hoạt động đủ trên các kênh khác nhau chưa?
  • Tôi nên làm gì tiếp theo? Một cái gì đó cơ bản từ khi tôi không thể bỏ qua nó mãi mãi, hay tìm hiểu một công cụ mới?
  Junior là gì? Yếu tố để cạnh tranh trong “cuộc chơi tuyển dụng”?

Nhưng câu hỏi khó nhất vẫn là:

  • Tôi đã học được đủ để đồng nghiệp đánh giá cao?

Những câu hỏi này luôn nằm trong tâm trí của các developer. Giống như có một vách đá cheo leo mà chúng tôi phải nhanh chóng vượt qua nhưng lại không có đủ trang thiết bị (hoặc bí quyết để sử dụng những gì tôi đã có).

Không có gì đáng ngạc nhiên, điều này có thể làm giảm hứng thú đối với công việc. Vậy chúng ta nên làm gì tiếp theo?

1- Ưu tiên những gì phải học tiếp theo

Trước hết, tôi cần phải chấp nhận rằng việc code sẽ không bao giờ kết thúc, học, học nữa học mãi. Đây không phải lời khuyên chỉ giành cho junior developer. Một phần của việc code luôn luôn học hỏi cái mới.

“Tôi đã học được tất cả mọi thứ?” là một câu hỏi sai, vì câu trả lời không bao giờ thay đổi. Câu hỏi đúng nên là “Tôi có ưu tiên học những điều đúng không?”

Mặc dù nhiều junior developer cần phải học thêm rất nhiều, tuy nhiên có một số thứ quan trọng hơn cả. Ví dụ: các nguyên tắc cơ bản luôn có ý nghĩa nền tảng để học hỏi những thứ khác trở nên dễ dàng hơn. Những thứ mới mẻ (như React) có thể không liên quan, đặc biệt là nếu công việc hiện tại của bạn liên quan đến Ember). Việc học sẽ giải quyết các vấn đề hiện tại trong luồng công việc có thể hữu ích.

Chọn những thứ học sẽ được ứng dụng được ngay và đặt phần còn lại được đưa vào danh sách “To Learn”. Danh sách đó sẽ không bao giờ trống, nhưng miễn là nó rõ ràng với các item quan trọng nhất.

2- Làm những việc nhỏ để duy trì hoạt động

Tạo cho mình những thói quen tích cực là một trong những chiếc chìa khóa quan trọng cho các lập trình viên muốn thành công. Tôi luôn tham khảo các nội dung hay trên các trang web như CodePen, Github. Các trang này là nơi để đăng các dự án lớn hoặc hướng dẫn một số trường hợp hiếm gặp.

Theo dõi một số người có tiếng trong giới, hoặc các trang cộng đồng. Hãy tương tác với những gì được chia sẻ. Nhận xét về các bài viết và đoạn code. Thậm chí chỉ cần nhấp vào một số điều không quen thuộc mà mọi người chia sẻ để bạn bắt đầu những ý tưởng.

Bạn không cần phải chia sẻ những điều to lớn để cho thấy mình có đóng góp, hãy bắt đầu làm từ những điều nhỏ nhất. Làm những điều nhỏ nhặt này thậm chí có thể có giá trị hơn, vì các lập trình viên có mạng lưới tốt và kỹ năng giao tiếp sẽ luôn được nhà tuyển dụng đánh giá cao.

Điều này cũng áp dụng cho việc học. Tốt hơn là học một vài điều nhỏ mỗi ngày hơn là cố gắng nhồi nhét hàng tấn kiến thức trong một tuần. Duy trì thói quen học từng chút một sẽ có hiệu quả hơn rất nhiều.

  Tại sao junior dev nên review commits của các senior?

3- Tận hưởng công việc của mình

Thứ ba, và quan trọng nhất, tôi không thể quên đam mê của mình đối với công việc này. Tôi code vì nó thách thức tôi và cho phép tôi được sáng tạo. Chuyển nó thành một công việc nhiều thử thách là cách tốt nhất để làm cho tôi có động lực tiến bộ. Tìm cách để giữ cho niềm vui là quan trọng.

Có nhiều cách để làm điều này tùy thuộc vào những người khác nhau, tự tạo hứng khởi trong công việc. Tạo bằng cách nào? Tôi hay tự code ứng dụng bật tắt đèn cho hệ thống ioT bằng Adruino hay làm một app tắt mở đèn từ xa qua wifi…

Là một junior developer có thể phải chịu nhiều áp lực và đôi khi khiến ta mệt mỏi với quá nhiều thứ cần phải học. Điều này đôi khi làm cho ta cảm thấy mình vô dùng trong công việc, tuy nhiên đừng phóng đại bản chất của vấn đề.

Tóm lại, hãy ưu tiên học một cách khôn ngoan, chia nhỏ nó thành những phần nhỏ, và đừng đánh mất niềm vui trong công việc. Sẽ vẫn còn rất nhiều công việc, nhưng nó sẽ trở nên dễ dàng hơn. Học tập sẽ cảm thấy không giống như việc phá vỡ vách đa, mà giống như một hành trình leo núi, cần có thời gian để ổn định và trưởng thành, nhưng hoàn toàn có thể.

TopDev 

Tham khảo việc làm IT mới nhất trên TopDev

5 Bước giải quyết mọi vấn đề lập trình

Xử lý vấn đề đối với mọi lập trình viên là cơm bữa. Ai cũng có những phương pháp cách thức riêng, riêng bản thân tôi thì thấy 5 bước dưới đây là áp dụng được nhiều, không chỉ sẽ giúp bạn mà nó sẽ nhanh hơn và hiệu quả hơn.

1. Xem lại vấn đề vài lần đến khi bạn có thể giải thích nó cho ai đó hiểu

Read

Đây là bước quan trọng nhất, xem vấn đề xem đi xem lại, đến khi bạn thật sự hiểu nó, vì nều không thì có Chúa mới giúp bạn xử lý được. Và làm sao để biết được bạn hiểu nó? Nếu bạn giải thích nó cho người khác hiểu được.

2. Giải quyết vấn đề từ manual

Nothing can be automated that cannot be done manually!

Bất kì code nào cũng có một nền tảng, và đó chính là manual process. Chỉ có từ manual bạn mới biết chắc là mình muốn automate cái gì, nó sẽ tiết kiệm được cho bạn một khối thời gian thya vì đâm đầu vào code như điên.

Test process của bạn bằng nhiều input và thêm cả một số corner case để validate, chú ý từng bước mà bạn làm, ghi chúng ra để theo dõi sát sao.

3. Nâng cấp giải pháp manual của bạn

Hãy review lại xem liệu có thể cải thiện process không, có cách làm dễ hơn hoặc có bước nào cần thêm/ bớt không. Bước này cần thiết, vì dù sao đi nữa, build lại process trong đầu bạn vãn dễ hơn nhiều so với build lại code.

Giờ đây bạn nghĩ là sẽ viết một ít code, nhưng gượm đã. Bạn nên làm một bước nữa, và tôi đảm bảo nó sẽ giúp bạn viết final code dễ hơn.

4. Viết pseudo code

Pseudocode là phần mô tả chi tiết về chương trình, giúp bạn viết mọi dòng code cần thiết để giải quyết vấn đề.

Các senior dev thường sẽ bỏ qua bước này, nhưng tôi có thể đảm bảo với bạn rằng dù bạn có dày dặn kinh nghiệm đến đâu, nếu bạn viết một vài pseudo code, process viết final code sẽ dễ dàng hơn rất nhiều, bởi bạn chỉ cần dịch một vài dòng pseudo code thành code chính mà thôi.

Ví dụ, bạn muốn viết function return về giá trị số mũ.

// Initialize a variable with a 'n' value

// Multiply variable by it self

// Return the result of that multiplication

Giờ đây bạn đã hiểu chính xác code làm gì, chúng ta chỉ còn một bước nữa.

5. Thay pseudo-code bằng code thực

Đây là phần khá thú vị, sau khi đã hiểu rõ chương trình làm gì, bạn chỉ cần viết một ít code và test nó. Nhớ rằng bạn luôn có thể cải thiện code trong lúc làm.

function square(n) { 
    // Initialize a variable with a 'n' value
    const initialValue = n
    // Multiply variable by it self
    const squaredValue = initialValue * initialValue
    // Return the result of that multiplication
    return squaredValue
}

Tối ưu hoá code:

function square(n) { 
    return n * n
} 

Nhìn nó có vẻ là một process rõ ràng, nhưng hầu hết mọi người đều bỏ qua nó và viết code ngay, làm bạn tiêu tốn rất nhiều thời gian.

Note: Nếu vấn đề của bạn quá phức tạp, chia ra thành nhiều cái nhỏ nữa, thì có một technique gọi là “Divide and conquer”.

TopDev

Tài nguyên thiết kế web và hình ảnh hot nhất cho Lập trình viên

tai-nguyen-thiet-ke-web-va-hinh-anh

Lập trình viên có cần thiết kế không?

Thiết kế là một kỹ năng rất cần thiết cho bất cứ ngành nghề nào, đặc biệt là lập trình. Biết một chút thiết kế sẽ giúp bạn đi xa hơn trên con đường phát triển sự nghiệp. Cũng chính vì vậy, hôm nay TopDev xin giới thiệu một số tài nguyên thiết kế web và hình ảnh mà rất nhiều lập trình viên thích sử dụng.

  Thiết kế hệ thống URL Shortening giống Bit.ly chịu tải 6 tỷ click 1 tháng

Các tài nguyên thiết kế web và hình ảnh

Tạo và Chỉnh sửa hình ảnh

Tài nguyên thiết kế web và hình ảnh

Nếu bạn muốn tự sáng tạo hình ảnh hay chỉnh sửa các hình ảnh hiện có, bạn có thể dùng FigmaPixelmator.

Còn có ứng dụng khác là Gravit Designer, là một ứng dụng thay thế tuyệt vời cho các ứng dụng thiết kế vector như Adobe Illustrator và Sketch.

Nói về ứng dụng Figma, nó đã dần trở nên phổ biến hơn đối với lập trình viên. Vì dựa trên nền tảng web, nên việc tạo logo và tạo mẫu giao diện người dùng bằng Figma rất tiện lợi.

Tiếp đến là Pixelmator, thật không may nó là một ứng dụng chỉ dành cho hệ điều hành Mac. Mặc dù vậy, nhiều người vẫn thích nó bởi giá thành rẻ hơn rất nhiều so với Photoshop, còn những gì nó đem lại thì thật sự rất ấn tượng.

Một vài công cụ khác dành cho bạn:

  • Pablo: Được dùng để tạo nhanh các hình ảnh cho các kênh social, nó rất tiện lợi mỗi khi bạn muốn chia sẻ một bài viết của mình ra cộng đồng.
  • remove.bg: Đây là một công cụ tuyệt vời để xóa nền khỏi ảnh.
  • Duotone: Nếu bạn muốn hình nền của mình trở nên độc đáo hơn một cách nhanh chóng, thì Duotone sẽ giúp bạn. Ứng dụng cho phép bạn tải lên một bức ảnh và thêm các hiệu ứng vào nó.
  • Squoosh: Các bạn nên sử dụng một công cụ nén hình ảnh như Squoosh khi muốn giảm kích thước hình ảnh của bạn mà vẫn đảm bảo chất lượng. Đây cũng là cách tối ưu web performance cho website của bạn.

Icon và hình minh họa

Tài nguyên thiết kế web và hình ảnh

Kỹ năng thiết kế mà nhiều lập trình viên không giỏi đó là thiết kế icon hoặc vẽ minh họa. Thật may, có nhiều tài nguyên từ các nhà thiết kế khác, và họ sẵn sàng chia sẻ miễn phí những tài sản vô giá này cho bạn.

  • Feather Icon: Có nhiều bộ icon đơn giản. Bạn có thể dễ dàng đưa chúng vào các ứng dụng React bằng gói React Feather, hoặc dễ dàng hơn là chỉ cần tải xuống các icon định dạng SVG raw.
  • React Kawaii: Nếu bạn đang cần gấp một bộ hình có thể tái sử dụng để làm app của mình đẹp hơn, thì React Kawaii chính là lựa chọn dành cho bạn.
  • OpenMoji: Cái tên đã nói lên tất cả. Thay vì dùng những emoji có sẵn của Apple, các bạn có thể sử dụng OpenMoji. Nó cho phép bạn tải có bản quyền và có mã nguồn mở thuận tiện cho việc sử dụng.
  • unDraw: Một danh sách đồ sộ các hình minh họa được tạo sẵn theo từng mục đích khác nhau.
  • humaaans: Một gói tài nguyên tuyệt vời khác để ghép cảnh và nhân vật lại với nhau.

Nâng tầm thiết kế của dân lập trình!

Thiết kế không nhất thiết phải màu mè và phức tạp. Ngày nay, người dùng đang rất ưa chuộng những mẫu thiết kế đơn giản và nhất quán. Có thể kể đến là các mẫu thiết kế tối giản của Apple.

Điều tuyệt vời nhất của thiết kế tối giản là nó không khó để học. Nói một cách đơn giản là chỉ cần xóa bỏ các yếu tố ít quan trọng hơn khỏi giao diện người dùng, thêm khoảng trắng, sử dụng bảng màu nhất quán, và chắc chắn rằng bạn luôn thiết kế một giao diện “sạch”.

Kết luận

Các bạn cần nhiều thời gian để tìm hiểu cách cải thiện UX của trang web và ứng dụng. Bên cạnh đó cũng cần học cách xây dựng thương hiệu và phát triển thương hiệu cá nhân đúng cách.

Xem thêm UX Design là gì?

Hy vọng sau bài chia sẻ này, các bạn có thể chọn lọc cho mình những tài nguyên thiết kế web và hình ảnh hữu dụng nhất và ứng dụng một cách hiệu quả.

Có thể các bạn quan tâm:

Xem thêm việc làm UX/UI Design hấp dẫn trên TopDev

  UX Design - Học từ lý thuyết hay thực hành?
  Design pattern là gì? Tại sao nên sử dụng Design pattern?

Ngôn ngữ lập trình Scala là gì?

scala-la-gi

Bài viết này chúng ta sẽ cùng nhau tìm hiểu về ngôn ngữ lập trình Scala là gì. Hiều về những ưu điểm, cũng như cách làm việc với Scala.

  Ngôn ngữ lập trình Scala là gì?
Câu chuyện xuyên mưa về Scalable Social Network”]

  10 lí do để học Scala và FP

Scala là gì?

Scala là ngôn ngữ lập trình đa mẫu hình, được thiết kế tích hợp các tính năng của lập trình hướng đối tượng và lập trình hàm. Scala chạy trên nền máy ảo Java và nó tương thích hoàn toàn với Java. Vì nó có kiểu biên dịch tương tự Java nên nó có thể đọc được các thư viện của Java. Ngoài ra nó cũng có thể chạy trên .NET, tuy nhiên chưa được ổn định.

ngôn ngữ lập trình scala

 

Những ưu điểm của Scala

  • Ở Scala, một số cấu trúc phức tạp của môi trường Java hay .NET đã được loại bỏ và thêm vào một số đặc tính ưu việt hơn, ví dụ như:
    1. a uniform object model
    2. pattern matching và higher-order functions
    3. novel ways to abstract và compose programs
  • Scala ngắn gọn, súc tích, dễ đọc hiểu và dễ học. Các cấu trúc của Scala rất nhẹ và súc tích, cho phép lập trình viên có thể giảm kích thước của code ít nhất hai hoặc ba lần so với Java. Vì thế nó giúp cho việc viết code nhanh hơn và việc maintain cũng dễ hơn.
  • Nó rất chính xác vì nó được trang bị hệ thống phát hiện và tránh nhiều lỗi ứng dụng tại thời điểm biên dịch.
  • Ngôn ngữ này có tính mở rộng. Nó cung cấp một ngôn ngữ máy độc đáo, dễ dàng thêm thư viện, hỗ trợ việc lập trình dựa trên các thư viện hàm có sẵn.

Hướng dẫn lập trình trên Scala IDE for Eclipse

Thiết lập môi trường

Download và Install JDK (Java Development Kit)

Link download: https://www.oracle.com/java/technologies/downloads/?er=221886

Download Scala IDE cho Eclipse và thiết lập workspace

・Download file: scala-SDK-3.0.3-2.10-win32.win32.x86_64.zip

・Extract file trên, sẽ được folder eclipse chứa các file và folder như dưới đây

・Chạy file eclipse.exe → thiết lập workspace.

Có thể kiểm tra version của Scala IDE xem có chính xác version cần sử dụng không bằng cách vào Help → About Scala IDE

Demo chạy 1 project trên Scala

B1. Tạo 1 project Scala

Trên menu, chọn New -> Scala Project, sẽ hiển thị màn hình “Create a Scala project”.

Ở mục Project Name, nhập “Hello1” rồi ấn button Next -> Finish, sẽ thấy hiển thị project Hello1 ở trong Package Explorer.

B2: Tạo 1 Scala package trong folder source “src”

Click chuột phải vào project Hello1 trên, trên menu chọn New -> Package, sẽ hiển thị màn hình Java Package. Trên màn hình Java Package nhập tên package vào mục Name. Ở đây nhập tên package là “hello”. Trên Package Explorer sẽ hiển thị package vừa tạo trên.

B3: Tạo Scala object “HelloWorld”

Click chuột phải vào project hello trên, trên menu chọn New -> Scala Object, sẽ hiển thị màn hình Scala Object. Nhập tên object vào mục Name. Ở đây nhập tên Object là “HelloWorld”. Sau khi tạo xong sẽ thấy trên Package Explorer hiển thị object HelloWorld.scala.

B4: Mở HelloWorld.scala và viết code vào

B5: Chạy code vừa viết

Click chuột phải vào HelloWorld.scala, trên menu chọn Run As -> Scala Application

-> sẽ hiển thị kết quả “HelloWorld”

Ngoài ví dụ trên đây, các bạn có thể thực hành scala với một số simple example và advance example sau: http://www.scala-lang.org/old/node/219

Kết luận

Trên đây là giới thiệu sơ lược về ngôn ngữ lập trình scala. Các bạn có thể tham khảo thêm tài liệu về Scala ở các link sau.

Hiện tại ở Việt Nam, ngôn ngữ này còn khá mới mẻ và chưa có nhiều tài liệu. Hy vọng qua bài viết này các bạn có thể hiểu hơn về ngôn ngữ lập trình Scala.

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers hot nhất trên TopDev

Vietnam Mobile Day lần thứ 9 – Kỳ lân công nghệ sẽ xuất hiện tại Việt Nam trong một năm nữa

Vietnam Mobile Day 2019
Sáng nay, ngày 6/6 tại TP.HCM, đã có hơn 5000 khán giả tham dự sự kiện Vietnam Mobile Day 2019, chương trình do TopDev tổ chức có sự góp mặt với nhiều chuyên gia hàng đầu trong lĩnh vực công nghệ và digital marketing đã chia sẻ và cập nhật những số liệu mới nhất trên thị trường. Ba từ khóa được đề cập đến nhiều nhất chính là: Digital Transformation (chuyển đổi số), AI (trí thông minh nhân tạo, ứng dụng trong tài chính, bán lẻ, xử lý hành vi tiêu dùng), Mobile và Data Driven (tối ưu hóa và tận dụng những lợi thế từ mobile). Các báo cáo và số liệu chỉ ra nhiều xu hướng và cơ hội cho các doanh nghiệp tại thị trường Việt Nam nói riêng và Đông Nam Á nói chung.
Hơn 5000 khán giả đã đến tham dự sự kiện ngày 6 tháng 6
Thực tiễn hơn, tại thị trường Việt Nam các chuyên gia còn nhấn mạnh tầm quan trọng đặc biệt của các công nghệ Automation (tự động hóa), IOT (internet vạn vật), Blockchain (công nghệ chuỗi khối giúp quản lý và truy xuất nguồn gốc nông sản) đây cũng chính là những công nghệ phù hợp nhất với lĩnh vực nông nghiệp tại Việt Nam, một lĩnh vực đóng góp nhiều nhất cho GDP và tăng trưởng của quốc gia. Hiểu rõ những xu hướng cốt lõi này sẽ giúp các doanh nghiệp có thể tìm ra nhiều giải và hướng đi pháp đột phá cho mô hình kinh doanh của mình.

Thị trường mobile tăng trưởng mạnh mẽ tại Việt Nam.

Theo các báo cáo gần đây nhất của MMA Vietnam, chị Phan Bích Tâm – Country Manager của Hiệp hội Mobile Marketing Việt Nam, Myanmar và Campuchia đã chỉ ra rằng, thị trường quảng cáo Việt Nam đặc biệt là mảng mobile sẽ tăng trưởng mạnh mẽ trong năm 2019. Tại Việt Nam, chìa khóa mấu chốt của thị trường này nằm ở khu vực nông thôn. Đây là nơi có lượng truy cập mobile tăng trưởng mạnh mẽ hơn bao giờ hết, tỷ lệ chuyển đổi tại những khu vực này cũng dần trở nên tốt hơn khi hành vi mua hàng và tiêu dùng online cũng đã trở nên phổ biến hơn bao giờ hết. Nhiều chuyên gia đánh giá đây là một thị trường màu mỡ cho các doanh nghiệp có thể tiếp cận một lượng khách hàng mới nếu biết cách tận dụng nhiều nền tảng đang có mặt tại Việt Nam.
phan bích tâm mma
Chị Phan Bích Tâm – Country Manager của Hiệp hội Mobile Marketing Việt Nam, Myanmar và Campuchia chia sẻ báo cáo toàn cảnh về thị trường Mobile tại Vietnam trong năm 2019
Cũng từ đó, các doanh nghiệp sẽ có nhiều cơ hội để tạo ra những trải nghiệm tốt hơn cho khách hàng, điều này cũng phụ thuộc vào mức độ “chịu chi” và những mục tiêu mà doanh nghiệp muốn đạt được khi triển khai các chiến dịch quảng cáo. Ngoài những mức tăng trưởng mạnh của thị trường, các chuyên gia cũng chỉ ra 3 thách thức lớn của thị trường Mobile Marketing bao gồm: Measurement attribution (đo lường dữ liệu), Consumer Privacy (tính năng bảo mật), Data quality (chất lượng dữ liệu), đây cũng là một bài toán lớn mà nhiều doanh nghiệp hiện đang gặp phải.
Người tham dự trải nghiệm trực tiếp những công nghệ thanh toán mới nhất tại khu vực triển lãm của VNPAYQR.

Kỳ lân công nghệ sẽ xuất hiện tại Việt Nam trong vòng một năm nữa.

Tại phiên tọa đàm Women in Tech của Vietnam Mobile Day 2019, chị Lê Hoàng Uyên Vy – General Partner của ESP Captital đã cung cấp rất nhiều số liệu đầu tư đáng tin cậy để chỉ ra rằng, chúng ta sẽ sớm thấy sự xuất hiện các kỳ lân công nghệ tại Việt Nam trong khoảng hơn một năm nữa. Những thương vụ đầu tư hàng chục triệu đô vào những công ty như VNG, Topica, Tiki, v.v… Một tín hiệu tốt cho thị trường Tech startup tại Việt Nam.
Vietnammobileday2019
Tọa đàm Women in Tech – Từ trái sang phải – chị Mandy Nguyễn – Director of Ecosystem Development – Startup Vietnam Foundation, chị Lê Hoàng Uyên Vy – General Partner – ESP Capital.
Các chuyên gia cũng đưa ra nhiều nhận định cho rằng, câu chuyện tech startup tại Việt Nam cũng khá giống với những gì đã từng diễn ra tại Indo những năm gần đây với rất nhiều yếu tố khách quan được hội tụ đầy đủ ở thời điểm hiện tại. Tuy nhiên vẫn còn một số khó khăn như việc làm sao để những nguồn vốn đầu tư có thể tiếp cận được với hơn 4000 startup tại Việt Nam, hiện có đến 90% trong số các startup này chưa nhận được nguồn vốn cần thiết từ các quỹ đầu tư chính thức cho giai đoạn phát triển của mình.
Ông Antony Wilcox – Director of Agency Alliances – Appsflyer APAC – nói về những cơ hội của Việt Nam tại thị trường quốc tế.

AI tại Việt Nam đã đạt sự trưởng thành cần thiết, 2019 sẽ là năm của chuyển đổi số.

Cũng tại sự kiện Vietnam Mobile Day năm nay, ông Vũ Anh Tú – Phó Tổng Giám Đốc FPT Telecom đã nhận định rằng, công nghệ AI tại Việt Nam đã đạt đến giai đoạn chín muồi cần thiết. Các doanh nghiệp cũng đã dần có những bước tiến rõ rệt trong việc chuyển đổi số giúp tối ưu hóa nguồn lực doanh nghiệp, giải phóng sức người để có thể làm được nhiều việc quan trọng hơn.
Tọa đàm Digital Transformation tại Việt Nam – Từ trái sang phải – ông Nguyễn Hữu Bình – CEO TopDev, ông Vũ Anh Tú – Phó Tổng GĐ – FPT Telecom, ông Đinh Lê Đạt – CEO ANTS.

Một trong những ví dụ điển hình của chính FPT Telecom là thực hiện việc chuyển đổi từ hợp đồng thường sang sử dụng hợp đồng điện tử, việc này đã góp phần giúp cho việc triển khai các dịch vụ được nhanh hơn, rút ngắn thời gian từ 3 ngày xuống chỉ còn 30 phút cho một hợp đồng.

Từ những thay đổi tích cực này, chuyển đổi số sẽ là một sự chuyển đổi bắt buộc quyết định tính sống còn của doanh nghiệp trong những năm sắp tới. Dù được đánh giá là một trong những đất nước triển khai số hóa doanh nghiệp khá muộn trong khu vực, nhưng nhiều chuyên gia quốc tế nhận định rằng, Việt Nam sẽ có những bước tiến vượt bậc trong việc nâng tầm doanh nghiệp cũng như thúc đẩy nhanh quá trình đưa những sản phẩm mang tầm quốc tế ra thị trường thế giới trong một tương lai không xa.
Sự kiện sẽ còn tiếp tục tại Hà Nội vào ngày 14 tháng 6 này, đừng bỏ lỡ cơ hội cập nhật những thông tin giá trị nhất trong thị trường. Hẹn gặp lại các bạn tại Vietnam Mobile Day 2019 Hà Nội.
Đăng ký tham dự sự kiện tại: https://mobileday.vn/

Điểm qua các điểm nổi bật của WWDC 2019 trong 5 phút

Điểm qua các điểm nổi bật của WWDC 2019 trong 5 phút

Trong bài viết này chúng ta sẽ điểm qua một số thông tin quan trọng vừa được Apple công bố sáng nay, Techtalk nghĩ nó sẽ phần nào ảnh hướng đến cách các nhà phát triển làm việc trên nền tảng của “ông lớn” này.

Cùng tìm hiểu nào!

watchOS

Chuông đồng hồ taptic mới ( sẽ được phát nếu âm thanh đang được bật ) mang tên: The robins are okay – Kevin Lynch

Các ứng dụng mới

  • Audiobook
  • Voice Memos
  • Máy tính

Các công cụ phát triển mới

  • Các ứng dụng độc lập ( không cần iPhone đi kèm )
  • Các phiên bản mở rộng
  • Các luồng Audio API
  • Appstore cho Apple Watch

  • Kiểm tra chính tả
  • Tìm kiếm dựa trên Siri
  • Tích hợp chức năng mua hàng

iOS

Thống kê của phiên bản iOS 12

  • 97% người dùng iOS 12
  • 85% cơ sở cài đặt ( 10% áp dụng cho Android 9 )

[không giống như] những kẻ khác – Tim Cook

iOS 13

Vâng, đây chính là iOS 13 – Craig Federighi

  • Mở khóa bằng Face ID nhanh hơn 30%
  • Thay đổi gói ứng dụng – tải xuống sẽ nhỏ hơn 50% và cập nhật sẽ nhỏ hơn 60% so với bình thường
  • Tốc độ mở ứng dụng tăng gấp đôi
  • Dark Mode
  • Gõ chữ bằng cử chỉ vuốt ( như GBoard )
  • Gợi ý chia sẻ hình ảnh thông minh
  • Đồng bộ hóa lời bài hát trong Music
  • Tùy chọn kích thước văn bản trong Safari
  • Kiểm soát định dạng của mail và phông chữ phong phú hơn
  • Thêm chú thích trong thư viện, các thư mục chia sẻ
  • Chức năng Reminder sẽ được thiết kế lại
    • Danh sách sẽ thông minh hơn
    • Gắn thẻ cho iMessage ( nhắc nhở để nói chuyện )
  • Bản đồ
    • Xây dựng lại bản đồ
    • Triển khai đến toàn bộ nước Mỹ vào cuối năm 2019
    • Chia sẻ ETA
    • Dễ dàng truy cập các địa điểm yêu thích
    • Chia sẻ bộ sưu tập danh sách các địa điểm yêu thích
    • Nhìn bao quát hơn với chế độ 3D
    • Điều hướng trong đường phố mượt mà hơn

Riêng tư

Vị trí

  • Chia sẻ vị trí một lần
  • Báo cáo ứng dụng nền sử dụng vị trí
  • Kiểm soát tín hiệu truy cập của Wi-Fi và Bluetooth

Đăng nhập mạng xã hội

  • Đăng nhập bằng Apple
    • API đơn giản hơn
    • Xác thực bằng Face ID ngay lập tức
    • Tùy ý tạo email riêng

> Một địa chỉ ngẫu nhiên được chuyển tiếp đến địa chỉ chính của bạn … bạn có thể vô hiệu hóa bất kỳ một địa chỉ nào trong số đó bất cứ lúc nào bạn thích – Craig Federighi

  • Có sẵn trên web và tất cả các nền tảng khác của Apple

Homekit

  • Homekit Secure Video
    • Phân tích máy ảnh Cloudless HomePod, Apple TV hoặc iPad
    • Lưu trữ clip 10 ngày miễn phí
  • Homekit cho bộ định tuyến
    • Tường lửa cho các phụ kiện cá nhân
    • Sẽ có sẵn từ Linksys, Eero, ISP như Spectrum

Tin nhắn

Chia sẻ hình ảnh Avatar

Memojis

  • Tùy chọn các Memoji mới
  • Tự động tạo các gói sticker Memoji cá nhân

  • Memoji trên tất cả thiết bị có chip A8 trở lên

Máy ảnh

  • Hiệu ứng đơn âm
  • Điều chỉnh hiệu ứng ánh sáng cho chế độ chụp Chân Dung
  • Thiết kế lại giao diện chỉnh sửa ảnh và video
  • Xoay video

Ảnh

  • Ẩn các bản sao với Machine Learning
  • Tổ chức ảnh thông minh hơn và duyệt ảnh đẹp hơn

AirPods

  • Siri có thể thông báo và đọc tin nhắn từ Message hoặc bất kỳ ứng dụng tin nhắn nào có hỗ trợ SiriKit
  • Chia sẻ âm thanh

HomePod

  • Chuyển giao nhạc, podcast hoặc các cuộc gọi điện cho HomePod
  • Radio trực tiếp từ 100.000 kênh thông qua Siri
  • Thu hồi giọng nói / cá nhân hóa phản hồi
    • Bao gồm các hoạt động của Apple Music, Tin nhắn, Reminder và Notes

CarPlay

  • Được thiết kế lại
    • Bảng điều khiển CarPlay với Siri, nhạc, bản đồ và lịch
  • Tích hợp Siri với bên thứ ba ( khởi đầu với Pandora và Waze )

Phím tắt

 

  • Tích hợp phím tắt Siri với ứng dụng phím tắt trên tất cả các nền tảng
  • Đề xuất được tự động hóa dựa trên các hoạt động của bạn trong các ứng dụng khác nhau

Siri

  • Giờ đây, việc chuyển giọng nói thành văn bản hoàn được thực hiện bởi một mạng lưới thần kinh
    • phản hồi tự nhiên hơn

Các tính năng khác

  • Chuyển người gọi không xác định vào hộp thư thoại
  • Doanh nghiệp chỉ cần đăng nhập một lần
  • Có tài khoản iCloud riêng

iPadOS

  • Có một cái tên mới
  • Ứng dụng Springboard được bố trí chặt chẽ hơn
  • Ghim các tiện ích trên màn hình chính
  • Slideover ( trình khởi chạy ứng dụng nhỏ ở cạnh ứng dụng chính )
  • Tích hợp khả năng đa cửa sổ với tính năng kéo thả cho các thành phần và hỗ trợ ứng dụng của bên thứ ba.

[hiển thị cùng lúc hai tài liệu Word trong chế độ xem tách rời] Ý của tôi ở đây đó chính là một sự táo bạo – Craig Federighi

Các tập tin

  • Xem ở dạng cột ( như Finder trên macOS )
  • Chia sẻ thư mục với iCloud Drive
  • Chia sẻ tập tin với máy chủ SMB
  • Hỗ trợ ổ USB
  • Hỗ trợ tải ảnh USB cho các ứng dụng của bên thứ ba ( như máy ảnh của Lightroom )

Safari

  • Trình duyệt Desktop – class ( với khả năng tự động thay đổi kích thước và tối ưu hóa cảm ứng )
  • Quản lý download
  • Hơn 30 phím tắt mới

Viết và Apple Pencil

  • Tùy chỉnh phông chữ trên Appstore
  • Điều hướng đa chạm
    • cuộn tài liệu
    • kéo vị trí con trỏ
    • chỉnh sửa cử chỉ
    • cử chỉ sao chép với ba ngón tay
    • cử chỉ dán với ba ngón tay
    • cử chỉ hoàn tác với ba ngón tay
  • Cử chỉ đánh dấu ảnh chụp màn hình / ảnh ( với chế độ chụp tài liệu đầy đủ trong Safari )
  • Thao tác vuốt bàn phím để thay đổi kích thước ( gõ ngón tay cái )
  • Độ trễ chỉ từ 20 mili giây đến 9 mili giây
  • Thiết kế lại bảng chỉnh sửa
  • Cung cấp API của bảng chỉnh sửa PencilKit cho các nhà phát triển ứng dụng

Mac

Mac Pro mới

  • Module thiết kế
  • Xử lý các trường hợp hàng đầu
  • Bộ xử lý Xeon lên đến 28 lõi 300+ watt với khả năng làm mát tuyệt vời
  • Ram 6 kênh ECC, tối đa 1,5TB
  • 8 khe cắm mở rộng PCIe
  • Thẻ IO: hai cổng Thunderbolt 3, một cổng USB-A, giắc cắm âm thanh, hai cổng Ethernet 10 gigabit
  • Đồ họa được hỗ trợ thông qua tối đa hai module mở rộng

Mac Pro (MPX): Radeon Pro 580 X, Radeon Pro Vega || ( Hai hỗ trợ )

  • Module “Afterburner” ( được tăng tốc 6 tỷ pixel mỗi giây khi chỉnh sửa video )
  • Tùy chọn bánh cuộn để di chuyển
  • Có thể chạy với 6 màn hình 6K
  • Giá phát hành khởi điểm vào mùa thu: $5999
  'Toát mồ hôi' phỏng vấn tuyển dụng vào Apple

Live Demo

  • 1000 track audio + phần mềm giả lập nhạc cụ trong Logic

Phát đồng thời 3 luồng cảnh quay RAW 8K ProRes

Màn hình chuyên nghiệp XDR

  • LCD 32 inch
  • Võng mạc 6K
  • Góc nhìn siêu rộng
  • Lớp phủ chống phản chiếu
  • Tùy chọn bảng điều khiển kính mờ kết cấu nano mà không có hiệu ứng khói mù
  • Độ sáng toàn màn hình không xác định 1000 nits cho HDR
    • đỉnh 1600 nits
  • Tỷ lệ tương phản 1 triệu đến 1
  • Xoay sang chế độ dọc
  • Giá khởi điểm phát hành mùa thu: $ 4999
    • Phiên bản kết cấu nano: $ 5999

MacOS Catalina

Tách iTunes – Apple Music, Podcasts, TV

Về lịch trong iTunes thì sao? … cả Mail trong iTunes nữa? Có thể là Safari trong iTunes!… Tất nhiên là chúng ta sẽ thêm một dock nữa cho iTunes … và giữ nó lại ở đó! – Craig Federighi

Music

  • Đồng bộ hóa thiết bị từ Finder
  • Thanh sidebar hiện đề xuất mới

Podcast

Machine Learning – tìm kiếm thông tin cho các nội dung nói

TV

  • Chứa phim đã mua, các kênh đã đăng ký
  • Phát lại dưới dạng 4k HDR
  • Âm thanh không gian Dolby Atmos

Sidecar

  • Sử dụng iPad làm màn hình Mac thứ hai
  • Đầu vào chính xác hơn với Apple Pencil trong một số ứng dụng macOS

Khả năng tiếp cận

Điều khiển bằng giọng nói cho iOS và Mac.

  • Điều chỉnh / chỉnh sửa văn bản
  • Mở ứng dụng
  • Hướng dẫn cuộn
  • Điều hướng dựa trên tab
  • Nhấn vào nút
  • Điều hướng trong các trường nhập
  • Chế độ xem bản đồ lưới
  • Kiểm soát âm lượng
  • Xử lý cục bộ

Find My

  • Find My iPhone + Find My Friends
  • Có sẵn trên Mac và iOS
  • Phát hiện vị trí offline thông qua bảo mật của Bluetooth được phân chia an toàn thông qua các thiết bị Apple khác

Khóa tính năng kích hoạt

  • Hỗ trợ tất cả các máy Mac T2
  • Khóa các quá trình cài đặt hệ điều hành và khởi động cùng với thông tin đăng nhập của bạn

Dự án Catalyst ( Marzipan )

  • Bắt đầu với checkbox “ Mac “ trong Xcode và xây dựng ứng dụng cùng lúc cho cả iPad và macOS
  • Những người dùng được sử dụng sớm:
    • Asphalt
    • Twitter
    • Atlassian

ARKit 3

cộng với bản demo trực tiếp Minecraft Earth

  • Dân tộc

  • Hỗ trợ ghi hình chuyển động

Rõ ràng là không có con gà nào bị hại trên sân khấu tại WWDC – Craig Federighi

Swift

Khung giao diện người dùng mới: SwiftUI

  • UI khai báo
  • Nhiều lớp kích thước
  • Hoạt ảnh tự động
  • Tự động hỗ trợ chế độ tối
  • Xem trước giao diện của người dùng trực tiếp trong Xcode
  • Cử chỉ kéo và thả các thành phần (“view”) trong thư viện với việc khởi tạo các đoạn mã
  • Menu giám sát thông minh
  • Tích hợp nội địa hóa
  • Chỉnh sửa mã trực tiếp trên thiết bị
  • Áp dụng module (một chế độ xem hoặc ứng dụng đầy đủ)
  • Chạy tự nhiên trên watchOS và mọi nền tảng của Apple và liên kết với mọi loại điều khiển gốc

Ngày phát hành (tất cả các nền tảng đã được công bố)

Nhà phát triển beta: Hôm nay

Công khai : Tháng 7

Tính khả dụng của người dùng chung: Mùa thu

Kiểm tra tất cả các công cụ mới trên trang web của Apple , được cập nhật gần đây với các máy Mac đã được công bố:

  Hiểu sâu về trí tuệ nhân tạo & Machine Learning tại Apple

Bí mật của thuật toán ngẫu nhiên

SỰ NGẪU NHIÊN – THẾ LỰC CHI PHỐI MỌI SỰ VẬN HÀNH CỦA VŨ TRỤ! BÍ MẬT CỦA NÓ LÀ GÌ?

Bản chất của sự ngẫu nhiên, những thử thách mà nó đem lại sẽ được xoáy sâu cùng với cách sự ngẫu nhiên đã được lợi dụng để phát triển công nghệ loài người.

Trong mật mã học, độ ngẫu nhiên của các con số có thể được coi là quan trọng tối thượng. Mã hóa học làm việc với những chiếc ‘chìa khóa số’ – nếu chiếc chìa khóa này dễ dàng bị đoán trúng thì coi như mất tất cả. Rất nhiều thuật toán mã hóa đã bị phá vỡ vì phạm phải sai lầm là thiếu tính ngẫu nhiên. Do đó nâng cao và bảo vệ sự bất định của những con số luôn là yêu cầu quan trọng bậc nhất đối với mật mã học. Machine Learning là một trong các lĩnh vực lợi dụng sự ngẫu nhiên nhiều nhất. Tính ngẫu nhiên được tận dụng trong hầu hết các khâu: sampling, resampling, data augmentation, thuật toán tối ưu,… Trong lĩnh vực Thuật Toán cũng vậy, chính sự ngẫu nhiên đã giúp cho các thuật toán thoát khỏi những vùng “an toàn”, chấp nhận kết quả tiếp theo “xấu hơn” để đi đến những trạng thái kết quả tốt hơn nhiều so với kết quả ban đầu.

Và còn nhiều thứ nữa mà sự ngẫu nhiên khiến con người mong muốn kiểm soát được nó. Nhưng liệu con người có làm được điều đó. Câu trả lời sẽ tại sự kiện Vietnam Mobile Day 2019 với chủ đề “Bí mật của thuật toán ngẫu nhiên” từ diễn giả DƯƠNG NGUYỄN THÁI BẢO – Team Leader của Big-O Coding. Hãy đến và cùng khám phá chủ đề thú vị này các bạn nhé.

“Appreciate the knowns. Go for the unknowns”, đối với anh việc khám phá những góc nhìn mới luôn đem lại nguồn cảm hứng để khai phá những khía cạnh thú vị trong công việc. Bạn có sẵn sàng cùng anh Thái Bảo chinh phục tính ngẫu nhiên trong thuật toán của mình? Ngoài ra, anh Bảo còn chia sẻ về một số case study về các thuật toán ngẫu nhiên được dùng hiệu quả để giải quyết các bài toán thực tế.

Đăng ký và giữ chắc vé trên tay để tham gia sân chơi về công nghệ lớn nhất năm nay cùng hơn 100 diễn giả với các topic xoay quanh 6 nội dung chính:

➖ Digital Transformation & Mobilization
➖ Woman in Tech
➖ 5G & Internet of things, Machine Intelligence and future of Mobile Technology
➖ Fin-Tech/ Mobile Payment/Ecommerce & Mobile commerce
➖ Digital Marketing & Mobile Marketing
➖ Mobile content (AR/VR/Livestream) and gaming

============================

🔎 Website: https://mobileday.vn/
📌 Time: Hồ Chí Minh – 06/06/2019 | Hà Nội – 14/06/2019

============================

🔥🔥 VÉ COMBO dành cho nhóm 5-10-20-30 người với những giá cực ưu đãi nhưng vẫn giữ nguyên quyền lợi TIÊU CHUẨN!!!

CODE ưu đãi 50.000 cho độc giả: TOPDEVBLOG@VMD19

Discord đã lưu trữ hàng tỉ messages mỗi ngày như thế nào

discord-la-gi-va-cach-discord-luu-tru-messages

Bài viết được sự cho phép của tác giả Ngo Thang

Về số lượng messages trên Discord theo thống kê như sau: vào tháng 7 năm 2017, số lượng messages 1 ngày là 40 triệu. Nhưng đến tháng 12 thì đã đạt 120 triệu messages 1 ngày. Sự tăng trưởng khá là nhanh chỉ trong vòng 5 tháng. Và đến bây giờ chắc phải hơn 1 tỉ messages 1 ngày. Vậy cùng nhau tìm hiểu xem Discord là gì và họ đã lưu đống messages khổng lồ đó như thế nào nhé!

  Google AMP là gì ? Cài đặt AMP cho website asp.net mvc

Discord là gì?

Discord là 1 ứng dụng chat. Nó giống như slack vậy. Cũng tạo được team, group riêng. Phân quyền người dùng, gọi điện, gửi tin nhắn, cung cấp API đủ cả. Xem thêm cách xây ứng dụng chat realtime 

Discord là gì

Discord được ra đời đầu tiên vào năm 2015, và họ chỉ code trong vòng đúng 2 tháng (2 tháng code xong cũng thấy pro thật). Khi đó họ sử dụng MongoDB để lưu trữ dữ liệu.

Xem thêm MongoDB là gì?

Tại thời điểm này họ chỉ lưu dữ liệu trên 1 replica MongoDB duy nhất thôi, và không muốn sử dụng sharding trong MongoDB vì nó quá phức tạp, 1 phần vì bản thân Discord cũng không chắc chắn về mức độ ổn định của nó.

Còn 1 điều mình thấy khá thú vị về Discord đó là về văn hoá công ty:

Làm thế nào thì làm nhưng service phải được build thật nhanh để tung ra thị trường, xem phản ứng của người dùng. Tuy nhiên cũng cần phải có 1 đường lui đến 1 solution mạnh mẽ hơn.

Công ty mình cũng đang đi theo hướng này. Cũng build thật nhanh, và luôn luôn có giải pháp công nghệ tốt hơn khi đối mặt với big data.

Xem thêm công cụ và kỹ thuật trong Big Data.

Về messages được lưu trong collection của MongoDB với bộ index là channel_id created_at.

Giai đoạn đầu với dữ liệu còn nhỏ, MongoDB chạy khá là mượt mà. Tuy nhiên, vào đầu tháng 12 khi dữ liệu messages đạt đến 120 triệu messages trên 1 ngày thì đã xảy ra 1 số vấn đề như sau:

  • data và index không thể fit đầy vào RAM (dữ liệu to thế mà chỉ dùng 1 node thì khó có thể fit đầy RAM được)
  • Thời gian latency bắt đầu kéo dài ra.

Đã đến lúc cần phải chuyển sang 1 database mới phù hợp hơn với logic hiện tại.

Vấn đề đang gặp phải

  • Phần voice chat làm server chịu tải khá lớn, đến nỗi không thể gửi được message. số lượng message loại này chỉ tầm khoảng 1k messages mỗi năm. Khá là ít.
  • Phần private message (trong group private) cũng làm khá nặng server. Loại messages này mỗi năm đạt từ 100k đến 1 triệu messages. Các group private này có số lượng member không nhiều, chỉ tầm 100 member thôi.
  • Các message trong public group thì được gửi khá là nhiều. Các public group này có số lượng thành viên lớn hơn, tầm khoảng 1000 người. Tổng messages trong 1 năm khoảng 1 triệu và gửi thường xuyên hơn.

Yêu cầu về mặt hệ thống

Khi chọn database mới thì cần phải đáp ứng được những yêu cầu sau:

  • Khả năng mở rộng
  • Chịu lỗi tốt
  • Không mất nhiều công trong quá trình bảo trì
  • Đã có nhiều công ty lớn dùng
  • Có thể dự đoán được hiệu năng.
  • Không muốn cache message trong Redis hay Memcached.
  • Open source (muốn tự mình control được hệ thống mà không phải phụ thuộc vào bên thứ 3)

Từ những yêu cầu trên thì chỉ có Cassandra là phù hợp nhất.

Cassandra có thể dễ dàng thêm, xoá node để tăng hiệu năng. Và các node đồng bộ dữ liệu với nhau thông qua cơ chế P2P (peer to peer) nên khi 1 node có bị chết đi chăng nữa thì các node khác vẫn chứa dữ liệu nên độ chịu lỗi khá cao.

Ngoài ra còn có các công ty lớn đang dùng như Netflix, Apple, Facebook, Twitter với hàng nghìn node nên có thể tự tin về hiệu năng của nó.

Data Modeling

Cơ chế tổ chức data trong Cassandra như sau:

  • Được tổ chức dưới dạng KKV (key key value) store.
  • Trong đó, tổ hợp của 2 chữ K này là khoá chính:
    • Chữ K đầu tiên là partition key.
    • Partition gồm nhiều row, mỗi row được định danh bởi K thứ 2 (được gọi là cluster key). Cluster key này cũng đóng vai trò là khoá chính trong partition.

Message được index trong MongoDB sử dụng channel_id và created_at. Trong đó channel_id là partition key bởi vì tất quả query đều thao tác trong channel. Nhưng mà created_at không thể là cluster key được vì có thể 2 message đều được tạo ra cùng thời điểm.

Nhưng thật may mỗi ID trong Discord luôn luôn duy nhất (vì sử dụng cơ chế Snowflake của twitter). Khi đó khoá chính sẽ trở thành (channel_idmessage_id). Trong đó message_id chính là snowflake.

Điều đó giúp ta dễ dàng lấy được message dựa vào channel_id.

Khi đó cấu trúc bảng messages sẽ như sau:

CREATE TABLE messages (
  channel_id bigint,
  message_id bigint,
  author_id bigint,
  content text,
  PRIMARY KEY (channel_id, message_id)
) WITH CLUSTERING ORDER BY (message_id DESC);

Khi import data from MongoDB sang Cassandra thì gặp phải 1 vấn đề sau. Đó là xuất hiện cảnh báo kích thước partition đã vượt quá 100MB. (Có lẽ dữ liệu trong 1 partition có kích thước lớn không được phân tán sang các cluster bên cạnh nên bị cảnh báo này chăng?)

Do đó mà cần chia nhỏ dữ liệu ra để fit vừa 100MB. Họ kiểm tra 1 channel to nhất Discord thấy messages trong 10 ngày sẽ có kích thước tầm 100MB. Do đó quyết định cho messages vào từng bucket với khoảng thời gian là 10 ngày.

Cụ thể như sau:

DISCORD_EPOCH = 1420070400000 // thời điểm lúc 12:00 1/1/2015
BUCKET_SIZE = 1000 * 60 * 60 * 24 * 10 // tin nhắn trong 10 ngày

def make_bucket(snowflake):
   if snowflake is None:
       timestamp = int(time.time() * 1000) - DISCORD_EPOCH
   else:
       # When a Snowflake is created it contains the number of
       # seconds since the DISCORD_EPOCH.
       timestamp = snowflake_id >> 22
   return int(timestamp / BUCKET_SIZE)
  
def make_buckets(start_id, end_id=None):
   return range(make_bucket(start_id), make_bucket(end_id) + 1)

Khi đó primary key sẽ trở thành: ((channel_id, bucket), message_id)

CREATE TABLE messages (
   channel_id bigint,
   bucket int,
   message_id bigint,
   author_id bigint,
   content text,
   PRIMARY KEY ((channel_id, bucket), message_id)
) WITH CLUSTERING ORDER BY (message_id DESC);

Để query lấy messages gần đây thì chỉ cần tạo ra 1 bucket từ current_time cho đến channel_id (vì channel_id được tạo ra bởi Snowflake, mà channel thường được tạo trước sau đó mới đến message nên có thể coi channel_id như message đầu tiên).

Và chúng ta sẽ query tuần tự trong partition để lấy đủ message thì thôi.

Hiệu năng

Quả đúng như đồn đại, tốc độ write luôn luôn nhanh hơn tốc độ read. Write mất khoảng 0.5ms trong khi read mất tầm khoảng 5ms. Mặc dù read chậm hơn thật nhưng mà chỉ mất đến milisecond thì vẫn nhanh chán.

Discord là gì

Đây là kết quả khi muốn xem 1 tin nhắn cách đây 1 năm.

discord là gì

Kết quả bên trên được test ở trong 1 channel to nhất Discord (có trên 1k thành viên). Tốc độ quả rất là nhanh.

1 điều ngạc nhiên đã xảy ra

Cassandra hoạt động khá suôn sẻ suốt 6 tháng và đến 1 ngày có 1 việc xảy ra. Họ phát hiện ra 1 kênh mất tầm 20s để load dữ liệu. Tại sao lại load lâu như vậy?

Khi vào kiểm tra thấy kênh này chỉ còn duy nhất 1 tin nhắn. Kiểm tra thấy admin của channel này đã dùng api discord để xoá hàng triệu messages đi.

Như chúng ta đã biết, việc xoá dữ liệu trong Cassandra sẽ không như trong Mysql. Là nó sẽ không xoá ngay. Mà nó sẽ gắn 1 cái cờ gọi là tombstones đến dữ liệu muốn xoá. Khi query để lấy dữ liệu, nó sẽ check xem dữ liệu có gắn cờ này không và trả về dữ liệu.

Do đó mặc dù channel chỉ có 1 message duy nhất mà phải mất đến 20s để load. Quá là lâu.

Và họ đã giải quyết bằng cách:

  • Giảm lifespan của tombstones từ 10 ngày xuống còn 2 ngày. Vì họ thực hiện chạy Cassandra repairs vào mỗi buổi tối để dọn dẹp dữ liệu, tăng tính nhất quán của hệ thống.

Kết luận

Qua bài này chắc các bạn cũng biết được Cassandra nó được sử dụng trong các hệ thống big data như thế nào.

Về Cassandra mình thích nhất là tính dễ mở rộng (càng thêm node thì hiệu năng càng cao) và mức độ chịu lỗi thấp của nó.

Nên nếu bạn nào đang có ý định đưa Cassandra vào hệ thống thì mình thấy có thể sẽ là 1 sự lựa chọn đúng đắn.

Đừng bỏ lỡ những bài viết hay về:

Xem thêm việc làm Software Developers mới nhất trên TopDev

Bài viết gốc được đăng tải tại Nghệ thuật Coding

  Kafka là gì? Ứng dụng Kafka cơ bản cho hệ thống message
  JSON Web Token (JWT) là gì ?

React Native – Vẫn còn có thể nhanh hơn nữa

🔥 Điều gì khiến công ty hay startup công nghệ của bạn tiến bước trên con đường thành công?
🔥 Ý tưởng táo bạo, chưa từng xuất hiện ở bất kì đâu?
🔥 Đội ngũ nhân sự cùng chí hướng sẵn sàng đồng cam cộng khổ?
🔥 Nghiên cứu thị trường rồi đưa ra những chiến lược và tầm nhìn phù hợp?

Tất cả đều đúng, nhưng điểm mấu chốt đó chính là là ra mắt sản phẩm với thời gian và tốc độ nhanh nhất. Trong thời buổi digital hiện nay, chỉ cần chậm một chút thôi là những ý tưởng mà bạn suy nghĩ trong đầu đã trở thành sản phẩm trong tay người khác. Do đó, Mobile First là 1 trong những xu hướng trong 3-4 năm trở lại đây mang mọi thông tin và sự tiện ích lên chiếc điện thoại thông minh nhỏ gọn. Tất cả những sản phẩm đặc biệt là những startup công nghệ càng phải chú trọng hơn vào mảng Mobile. Nguồn lực có hạn, ý tưởng có thừa, vậy làm sao để phát triển sản phẩm nhanh nhất, phát hành liên tục một cách tự động CI/CD, đo lường và kiểm soát người dùng. Chủ đề React Native – Vẫn còn có thể nhanh hơn nữa” của anh Phan Thanh Tùng – CEO của TungTung.VN sẽ chia sẻ cho các bạn một cách xây dựng ứng dụng thần tốc với React Native đúng như cách nói “from Zero to Production”.

✅ Cùng tìm hiểu đôi chút về anh Tùng nhé:

Anh PHAN THANH TÙNG – CEO của tungtung.vn sẽ đồng hành cùng Vietnam Mobile Day 2019 sẵn sàng mổ xẻ những khía cạnh ít được phát hiện của React Native.

Với hơn 5 năm kinh nghiệm là Web, Mobile & Design, anh Tùng đã tham gia nhiều dự án liên quan đến Bank Currency, Q&A, Education, QrCode… Ngoài ra, bằng những kinh nghiệm của bản thân cũng như những năm chinh chiến NodeJS – ReactJS – React Native, anh Tùng đã tự tạo ra nhiều Web app và Mobile app tinh gọn, đơn giản nhưng tiện lợi và thực tế với số lượt download đáng mơ ước là hơn 60.000 lượt.

Đến với buổi hội thảo lần này, anh Tùng sẽ chia sẻ về React Native cũng như hướng dẫn những phương pháp để bạn có thể viết app trên nền tảng này một cách dễ hiểu và đơn giản nhất. Với kinh nghiệm cùng những ví dụ thực tế mà anh đưa ra, tin rằng đây là buổi chia sẻ đầy bổ ích và hấp dẫn đối với những ai đang và sẽ tìm hiểu về React Native.

============================

✅ Đừng quên tại ngày hội VIETNAM MOBILE DAY, quy tụ hơn 100 chuyên đề hấp dẫn xoay quanh 6 nhóm chủ đề chính, đó là:

➖ Digital Transformation & Mobilization
➖ Woman in Tech
➖ 5G & Internet of things, Machine Intelligence and future of Mobile Technology
➖ Fin-Tech/ Mobile Payment/Ecommerce & Mobile commerce
➖ Digital Marketing & Mobile Marketing
➖ Mobile content (AR/VR/Livestream) and gaming

============================

🎫 Book now
🔎 Website: https://mobileday.vn/
📌 Time: Hồ Chí Minh – 06/06/2019 | Hà Nội – 14/06/2019

CODE ƯU ĐÃI 50.000 CHO ĐỘC GIẢ: TOPDEVBLOG@VMD19

Kafka là gì? Ứng dụng Kafka cơ bản cho hệ thống message

kafka là gì

Kafka là gì? Nếu lần đầu bạn nghe đến Kafka thì đừng lo, trong bài viết dưới đây TopDev sẽ giúp bạn cập nhật các kiến thức mới nhất về Kafka và các ứng dụng tuyệt vời của nó. Cùng chúng tôi tìm hiểu ngay nhé!

Kafka là gì?

Kafka với tên gọi đầy đủ là Apache Kafka là hệ thống message pub/sub phân tán mã nguồn mở (distributed messaging system) được phát triển bởi Apache Software Foundation và được viết bằng Java và Scala.

Bên pulbic dữ liệu được gọi là producer, bên subscribe nhận dữ liệu theo topic được gọi là consumer. Kafka có khả năng truyền một lượng lớn message theo thời gian thực, trong trường hợp bên nhận chưa nhận message vẫn được lưu trữ sao lưu trên một hàng đợi và cả trên ổ đĩa bảo đảm an toàn. Đồng thời nó cũng được replicate trong cluster giúp phòng tránh mất dữ liệu.

kafka là gì
Một cấu trúc Apache Kafka đơn giản

Các khái niệm cơ bản

Bạn có thể xem thêm giải thích Message Broker là gì?

Kafka là gì? – Có thể hiểu là một hệ thống logging để lưu lại các trạng thái của hệ thống đề phòng tránh mất thông tin.

Định nghĩa trên được giải thích bằng các khái niệm sau:

  • PRODUCER: Kafka lưu, phân loại message theo topic, sử dụng producer để publish message vào các topic. Dữ liệu được gửi đển partition của topic lưu trữ trên Broker.
  • CONSUMER: Kafka sử dụng consumer để subscribe vào topic, các consumer được định danh bằng các group name. Nhiều consumer có thể cùng đọc một topic.
  • TOPIC: Dữ liệu truyền trong Kafka theo topic, khi cần truyền dữ liệu cho các ứng dụng khác nhau thì sẽ tạo ra cá topic khác nhau.
  • PARTITION: Đây là nơi dữ liệu cho một topic được lưu trữ. Một topic có thể có một hay nhiều partition. Trên mỗi partition thì dữ liệu lưu trữ cố định và được gán cho một ID gọi là offset. Trong một Kafka cluster thì một partition có thể replicate (sao chép) ra nhiều bản. Trong đó có một bản leader chịu trách nhiệm đọc ghi dữ liệu và các bản còn lại gọi là follower. Khi bản leader bị lỗi thì sẽ có một bản follower lên làm leader thay thế. Nếu muốn dùng nhiều consumer đọc song song dữ liệu của một topic thì topic đó cần phải có nhiều partition.
  • BROKER: Kafka cluster là một set các server, mỗi một set này được gọi là 1 broker
  • ZOOKEEPER: được dùng để quản lý và bố trí các broker.
Cấu trúc kafka chi tiết
Cấu trúc kafka chi tiết

Tại sao nên sử dụng Apache Kafka?

Kafka là dự án opensoure, đã được đóng gói hoàn chỉnh, khả năng chịu lỗi cao, hiệu năng rất tốt và dễ dàng mở rộng mà không cần dừng hệ thống.

Kafka thật sự đáng tin cậy, có khả năng lưu trữ lượng dữ liệu lớn nên nó đang dần được thay thế cho hệ thống message truyền thống.

Một vài use case cho kafka:

  • Sử dụng như một hệ thống message queue thay thế cho ActiveMQ hay RabbitMQ
  • Website Activity Monitoring: theo dõi hoạt động của website
  • Stream Processing: Kafka là một hệ thống rất thích hợp cho việc xử lý dòng dữ liệu trong thời gian thực. Khi dữ liệu của một topic được thêm mới ngay lập tức được ghi vào hệ thống và truyền đến cho bên nhận. Ngoài ra Kafka  còn là một hệ thống có đặc tính duribility dữ liệu có thể được lưu trữ an toàn cho đến khi bên nhận sẵn sàng nhận nó.
  • Log Aggregation: tổng hợp log
  • Metrics Collection: thu thập dữ liệu, tracking hành động người dùng như các thông số như page view, search action của user sẽ được publish vào một topic và sẽ được xử lý sau
  • Event-Sourcing: Lưu lại trạng thái của hệ thống để có thể tái hiện trong trường hợp system bị down.

Use case Kafka cho thương mại điện tử

Một hệ thống thương mại điện tử có nhiều server thực hiện các tác vụ khác nhau. Tất cả các server này đều sẽ giao tiếp với database server để đọc ghi dữ liệu.

Vì vậy sẽ có rất nhiều data pipeline kết nối từ rất nhiều server khác đến database server này. Cơ cấu như sau:

lập trình web
Credit: Nitin Rawat From Quora

Nhìn đơn giản vậy thôi chứ đây là hệ thống nhỏ, đối với hệ thống lớn hơn thì nó sẽ như vầy:

kafka là gì
Credit: Nitin Rawat From Quora

Lúc này data pipeline sẽ phức tạp khủng khiếp do gia tăng lượng hệ thống server. Lúc này nếu ta sử dụng Kafka tách rời các data pipeline giữa các hệ thống để làm cho việc giao tiếp giữa các hệ thống trở nên đơn giản hơn và dễ quản lý hơn.

kafka là gì
Credit: Nitin Rawat From Quora

Tổng kết lại, Apache Kafka là một hệ thống hoàn hảo để xử lý các khối dữ liệu khổng lồ và phức tạp. Hi vọng bài viết trên của đội ngũ TopDev có thể giúp bạn hiểu rõ khái niệm cũng như các tính năng nổi bật của Kafka, từ đó ứng dụng vào mô hình triển khai một cách phù hợp nhất.

Để sử dụng kafka, tải ở đây và làm theo hướng dẫn.

Có thể bạn quan tâm:

Xem thêm Top Việc làm it trên TopDev

Những lỗ hổng phổ biến khi phát triển ứng dụng Mobile

ĐÂU LÀ NHỮNG “HỐ ĐEN” KHI BẠN BẮT TAY PHÁT TRIỂN MỘT ỨNG DỤNG??

Trong quá trình thực hiện việc kiểm thử ứng dụng di động cho các tổ chức trong lĩnh vực tài chính, ngân hàng, vận tải, đội ngũ chuyên gia của CyRadar phát hiện ra các lỗ hổng tồn tại trong các ứng dụng này mà xét theo tiêu chuẩn OWASP thì đây là những lỗ hổng phổ biến, nhưng lại có nhiều ảnh hưởng tới vấn đề an ninh thông tin của ứng dụng và tổ chức nói chung.

Nhận ra điều này, những chuyên gia từ CyRadar sẽ đem đến Vietnam Mobile Day 2019 chủ đề “Những lỗ hổng phổ biến khi phát triển ứng dụng Mobile”. Tin rằng qua những phân tích dưới góc độ của các chuyên gia về an ninh thông tin người dùng, các bạn sẽ có những góc nhìn trực quan trong quá trình phát triển ứng dụng Mobile.

Dù bạn là mobile app developer hay đơn giản là những người yêu thích công nghệ & mobile, đây là một trong các chủ đề bạn sẽ không muốn bỏ qua. Còn chờ gì mà không kêu gọi bạn bè đăng ký chung để giữ những chỗ ngồi tốt nhất trong ngày hội công nghệ được mong đợi nhất năm 2019 nào!!!

🔥DIỄN GIẢ SẼ ĐỒNG HÀNH CÙNG BẠN LÀ AI??

Anh HÀ TRUNG HIẾU là Security Service Director | CyRadar

**Anh có những thành tích “khủng” như: tốt nghiệp đại học FPT Greenwich Việt Nam, sở hữu chứng chỉ OSCP danh giá – đích đến của mọi Hacker mũ trắng, có kinh nghiệm trong lĩnh vực thâm nhập, kiểm thử. Ngoài ra, anh Hiếu còn có nhiều năm kinh nghiệm trong tìm kiếm và khai thác lỗ hổng của ứng dụng Web và Di động trên các nền tảng khác nhau cho nhiều tổ chức, doanh nghiệp lớn tại Việt Nam.

Đồng hành cùng anh Hiếu sẽ là anh NGUYỄN MINH ĐỨC – CEO | CyRadar

**Tốt nghiệp trường Đại học Bách Khoa và có hơn 11 năm trong lĩnh vực an ninh mạng, anh Nguyễn Minh Đức là một chuyên gia trong cộng đồng bảo mật. Trước khi sáng lập CyRadar, anh Đức từng là Security Director tại Bkav Corp và Security Research Team Leader tại FPT Corp. Anh gia nhập FPT và phụ trách những dự án liên quan đến Big Data và bảo mật ở nhiều dự án lớn khác trong tập đoàn.

🧿 Là những diễn giả quen thuộc tại các hội thảo, cuộc thi về công nghệ, an ninh mạng, bảo mật. Đến với Vietnam Mobile Day 2019 cùng chủ đề “Những lỗ hổng phổ biến khi phát triển ứng dụng Mobile”, anh Hiếu và anh Đức sẽ đưa ra những phân tích chuyên sâu để giúp các bạn nhìn ra được những mối nguy hại tìm tàng khi phát triển ứng dụng mobile, từ đó đưa ra những phương án tối ưu để giải quyết vấn đề.

Đừng bỏ lỡ cơ hội lắng nghe anh Hà Trung Hiếu và anh Nguyễn Minh Đức cùng 100+ diễn giả khác tại sân chơi công nghệ vào tháng 6 sắp tới nhé!!

danh sách chủ đề vietnam mobile day

VIETNAM MOBILE DAY lần thứ 9 mang đến hơn 100 chuyên đề hấp dẫn xoay quanh 6 nhóm chủ đề chính, đó là:

➖ Digital Transformation & Mobilization
➖ Woman in Tech
➖ 5G & Internet of things, Machine Intelligence and future of Mobile Technology
➖ Fin-Tech/ Mobile Payment/Ecommerce & Mobile commerce
➖ Digital Marketing & Mobile Marketing
➖ Mobile content (AR/VR/Livestream) and gaming

============================

🔎 Website: https://mobileday.vn/
📌 Time: Hồ Chí Minh – 06/06/2019 | Hà Nội – 14/06/2019

CODE ƯU ĐÃI 50.000 CHO ĐỘC GIẢ: TOPDEVBLOG@VMD19

Xem thêm: Tìm việc làm mobile lương cao hấp dẫn nhất

Sql là gì? 6 lý do tại sao bạn nên học SQL

sql-la-gi

SQL là gì? 

SQL là gì? Đó là viết tắt của Structured Query Language là ngôn ngữ truy vấn có cấu trúc. Nó là một ngôn ngữ, là tập hợp các lệnh để tương tác với cơ sở dữ liệu. Dùng để lưu trữ, thao tác và truy xuất dữ liệu được lưu trữ trong một cơ sở dữ liệu quan hệ. Trong thực tế, SQL là ngôn ngữ chuẩn được sử dụng hầu hết cho hệ cơ sở dữ liệu quan hệ. Tất cả các hệ thống quản lý cơ sở dữ liệu quan hệ (RDMS) như MySQL, MS Access, Oracle, Postgres và SQL Server… đều sử dụng SQL làm ngôn ngữ cơ sở dữ liệu chuẩn.

Hầu như công ty nào lớn cũng cần xây dựng một hệ thống để lưu trữ cơ sở dữ liệu. Mọi thứ trong cơ sở dữ liệu này sẽ được diễn tả ra thành nhiều bảng, có mối quan hệ với nhau. Để truy vấn và lấy dữ liệu từ các bảng này nhằm tổng hợp thành thông tin nào đó, người ta dùng đến SQL thông qua các câu query.

>>> Xem thêm: Phần 1: Giới thiệu Cơ Sở Dữ Liệu (CSDL) – Hệ Quản Trị CSDL

>>> Xem thêm: Phần 2: Giới thiệu xung quanh Cơ Sở Dữ Liệu(CSDL)

Nguồn gốc

SQL bắt đầu từ những năm 1970, khi các kỹ sư của IBMDonald ChamberlinRaymond Boyce thiết kế phiên bản đầu tiên để tương tác và lấy dữ liệu được lưu trữ trong hệ thống cơ sở dữ liệu của công ty. Họ gọi nó là SEQUEL, mặc dù sau đó họ buộc phải thay đổi nó do các vấn đề bản quyền.

Tại sao sử dụng SQL và nó lại quan trọng

SQL được sử dụng phổ biến vì nó có các ưu điểm sau:

  • Cho phép truy cập dữ liệu trong các hệ thống quản lý cơ sở dữ liệu quan hệ.
  • Cho phép mô tả dữ liệu.
  • Cho phép xác định dữ liệu trong cơ sở dữ liệu và thao tác dữ liệu đó.
  • Cho phép nhúng trong các ngôn ngữ khác sử dụng mô-đun SQL, thư viện và trình biên dịch trước.
  • Cho phép tạo và thả các cơ sở dữ liệu và bảng.
  • Cho phép tạo chế độ view, thủ tục lưu trữ, chức năng trong cơ sở dữ liệu.
  • Cho phép thiết lập quyền trên các bảng, thủ tục và view.

Thường thì doanh nghiệp luôn cần một hệ thống để quản trị thông tin, họ phải thiết kế ra một cơ sở dữ liệu để lưu trữ thông tin. Nếu họ lưu trữ ở dạng giấy hoặc excel thì sẽ chứa nhiều rủi ro bảo mật thông tin như bị mất, sửa, xóa…

SQL sẽ giúp quản lý hiệu quả và truy vấn thông tin nhanh hơn, giúp bảo trì, bảo mật thông tin dễ dàng hơn.

Ví dụ: trước đây, trường đại học thường lưu trữ thông tin sinh viên bằng hồ sơ giấy. Sau đó, cất giữ hồ sơ trong kho. Khi cần tìm kiếm hoặc thêm/xóa/sửa thông tin nào đó, họ phải mất rất nhiều thời gian để lục tìm lại hồ sơ.

sql là gì

Trong khi, nếu lưu trữ thông tin vào một hệ thống cơ sở dữ liệu, họ chỉ cần gõ một câu lệnh SQL ngắn là đã có thể trích xuất được thông tin cần. Việc thêm/xóa/sửa cũng được thực hiện một cách dễ dàng, nhanh chóng.

Con đường sự nghiệp cho SQL Developer nói riêng và Database Developer

Hiện tại có 2 hướng phát triển như sau:

  • Hướng đi thiên về kỹ thuật: có thể trở thành Data Architect – là người thiết kế ra cơ sở dữ liệu cho doanh nghiệp. Hiện nay, Data Scientist cũng là vị trí đang rất cần trong thời đại AI & Bigdata. Ngoài kiến thức về SQL, lập trình viên còn phải biết về xác suất thống kê và ngôn ngữ lập trình khác, thường là Python.
  • Hướng đi về quản lý: đích đến sẽ là Business Analyst hoặc Project Manager.

Các câu lệnh SQL

Các lệnh SQL tiêu chuẩn để tương tác với cơ sở dữ liệu quan hệ là CREATE, SELECT, INSERT, UPDATE, DELETE và DROP. Các lệnh này có thể được phân thành các nhóm sau dựa trên bản chất của chúng

DDL – Ngôn ngữ định nghĩa dữ liệu (Data Definition Language)

Lệnh Mô tả
CREATE Tạo ra một bảng mới hoặc các đối tượng khác trong cơ sở dữ liệu.
ALTER Sửa đổi một đối tượng cơ sở dữ liệu hiện có, chẳng hạn như một bảng.
DROP Xoá toàn bộ một bảng hoặc các đối tượng khác trong cơ sở dữ liệu.

DML – Ngôn ngữ thao tác dữ liệu(Data Manipulation Language)

Lệnh Mô tả
SELECT Lấy ra các bảng ghi nhất định từ một hoặc nhiều bảng.
INSERT Tạo một bảng ghi..
UPDATE Chỉnh sửa bảng ghi.
DELETE Xóa bảng ghi.

DCL – Ngôn ngữ điều khiển dữ liệu (Data Control Language)

Lệnh Mô tả
GRANT Cung cấp một quyền cho người dùng.
REVOKE Lấy lại các quyền được cấp từ người dùng.

 

6 lý do bạn nên học SQL

1. Khai thác dữ liệu

Biết sử dụng SQL sẽ cho phép bạn khai thác dữ liệu với hiệu quả cao hơn. Chỉ cần sử dụng các truy vấn cơ bản là bạn có thể xác định được dữ liệu cụ thể theo yêu cầu của người dùng.

2. Nhu cầu lập trình viên SQL cao

Khi bạn là backend developer, khả năng sử dụng SQL là yêu cầu bắt buộc. Cho nên biết sử dụng và sử dụng thành thạo để tối ưu query db là một ưu điểm cực kỳ tốt. Xem thêm việc làm SQL.

3. Dữ liệu có ở mọi nơi

Mọi ứng dụng trên internet để cần lưu trữ dữ liệu. Ngay cả các ứng dụng desktop, laptop và mobile cũng cần phải lưu dữ liệu. Khi bạn đăng ký tài khoản trên ứng dụng web, bạn đang cung cấp thông tin cho ứng dụng.

4. Thao tác với dữ liệu dễ dàng

Với SQL, việc bạn muốn thêm, sửa, đọc hay xóa dữ liệu trở lên dễ dàng hơn bao giờ hết. Ví dụ, nếu bạn muốn lấy thông tin người dùng với email chứa gmail trong đó bạn có thể chạy một câu lệnh duy nhất sau với MySQL.

mysql> select * from users where email like '%gmail%'

Thử tưởng tượng việc này sẽ khó khăn như thế nào nếu như bạn phải dùng một ngôn ngữ lập trình thông thường để đọc toàn bộ nội dung file và tìm ra dòng chữ có chứa ‘gmail’ trong đó.

5. SQL được sử dụng và hỗ trợ bởi nhiều công ty lớn

Mặc dù SQL là ngôn ngữ khá đơn giản, nhưng nắm vững được nó là một kỹ năng là một điều vô cùng cần thiết.

Tất cả các công ty lớn về công nghệ trên thế giới hiện nay như Microsoft, IBM, Oracle… đều hỗ trợ việc phát triển ngôn ngữ này và SQL được rất nhiều công ty lớn sử dụng.

6. SQL giúp công việc lập trình dễ dàng hơn

Nếu không xài DB để lưu trữ dữ liệu, bạn có thể lưu dữ liệu trên một file trên server. Tuy nhiên thử tưởng tượng trong ứng dụng của bạn có rất nhiều loại thông tin cần lưu và bạn quyết định sử dụng nhiều file để lưu mỗi loại dữ liệu.

Việc này lại khiến cho việc đọc dữ liệu trở lên phân tán và quy trình maintain không dễ dàng chút nào. Ngoài ra nếu bạn có nhiều ứng dụng khác nhau cần lưu thông tin thì việc quản lý dữ liệu lại càng trở lên khó khăn.

Với SQL, bạn có thể lưu nhiều dữ liệu cho nhiều ứng dụng khác nhau trên cũng một cơ sở dữ liệu và việc truy cập các cơ sở dữ liệu này trở lên đơn giản hơn nhờ một cách thức giống nhau đối với nhiều cơ sở dữ liệu.

sql là gì

Các câu hỏi thường gặp về SQL

Sau đây là 50 câu hỏi phỏng vấn sql là gì phổ biến và hữu ích để bạn có thể chuẩn bị cho cuộc phỏng vấn trong khi học SQL.

STT Câu hỏi Câu trả lời
1 SQL là gì? SQL là viết tắt của Structured Query Language – ngôn ngữ truy vấn mang tính cấu trúc. Nó được thiết kế để quản lý dữ liệu trong một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). SQL là ngôn ngữ cơ sở dữ liệu, được dùng để tạo, xóa, lấy các hàng và sửa đổi các hàng.
2 Làm thế nào để chọn tất cả bản ghi từ table? Sử dụng cú pháp sau: Select * from table_name;
3 Định nghĩa JOIN và các loại JOIN khác nhau? Từ khóa JOIN được sử dụng để nạp dữ liệu từ hai hay nhiều bảng liên quan. Khi cần truy vấn các cột dữ liệu từ nhiều bảng khác nhau để trả về trong cùng một tập kết quả, cần sử dụng từ khóa “JOIN”
Loại JOIN là –
INNER JOIN (Hoặc JOIN)
LEFT OUTER JOIN (Hoặc LEFT JOIN)
RIGHT OUTER JOIN (Hoặc RIGHT JOIN)
FULL OUTER JOIN (Hoặc OUTER JOIN)
CROSS JOIN
SELF JOIN
4 Cú pháp để thêm bản ghi vào một bảng là gì? Để thêm bản ghi trong một bảng cú pháp INSERT được sử dụng.
Ví dụ:INSERT into table_name VALUES (value1, value2..);
5 Làm thế nào để bạn thêm một cột vào một bảng? Để thêm một cột khác trong bảng sử dụng lệnh.
ALTER TABLE table_name ADD (column_name);
6 Xác định câu lệnh Delete SQL. Xóa được sử dụng để xóa hàng hoặc các hàng từ một bảng dựa trên điều kiện được chỉ định. Cú pháp cơ bản như sau:
DELETE FROM table_name<br>WHERE<Condition>
7 Xác định COMMIT? COMMIT lưu tất cả các thay đổi được thực hiện bởi các câu lệnh DML.
DML cho phép thực thi các câu truy vấn, bao gồm cú pháp để cập nhật – sửa đổi, chèn thêm và xoá các mẩu tin.
8 Khóa chính (PRIMARY KEY ) là gì? Khóa chính là cột có các giá trị xác định duy nhất mỗi hàng trong một bảng. Giá trị khóa chính không bao giờ được sử dụng lại.
Một cột là PRIMARY KEY thì không được phép có giá trị NULL.
Một bảng chỉ cho phép tối đa một PRIMARY KEY.
Mỗi bảng đều cần có khóa chính.
9 Khóa ngoại (Foreign key) là gì? Khi một trường khoá chính của một bảng được thêm vào các bảng có liên quan để tạo ra trường phổ biến có liên quan đến hai bảng, nó được gọi là khoá ngoại trong các bảng khác. Các ràng buộc khóa ngoại thực thi toàn vẹn tham chiếu.
10 CHECK Constraint – Ràng buộc CHECK là gì? Một ràng buộc CHECK được sử dụng để giới hạn các giá trị hoặc loại dữ liệu có thể được lưu trữ trong một cột. Nếu bản ghi không đáp ứng được điều kiện này, thì sẽ không được lưu trữ vào trong bảng.
11 Một bảng có thể có nhiều hơn một khoá ngoại? Đúng, một bảng có thể có nhiều khóa ngoài và chỉ có một khóa chính.
12 Trường dữ liệu BOOLEAN có giá trị nào? Đối với trường dữ liệu BOOLEAN, có hai giá trị: -1 (TRUE) và 0 (FALSE).
13 Thủ tục lưu trữ (stored procedure) là gì? Một thủ tục lưu trữ là một tập hợp các truy vấn SQL có thể lấy đầu vào và gửi lại đầu ra.
14 IDENTITY trong SQL là gì? Một cột IDENTITY trong SQL sẽ tự động sinh ra các giá trị số tự tăng. Có thể định nghĩa giá trị bắt đầu và gia tăng của cột nhận dạng.
15 NORMALIZATION – Chuẩn hóa trong sql là gì? Quá trình thiết kế bảng để giảm thiểu sự thừa số liệu được gọi là chuẩn hóa. Chúng ta cần phải chia một cơ sở dữ liệu thành hai hay nhiều bảng và xác định các mối quan hệ giữa chúng.
16 Trigger là gì ? Trigger là một thủ tục dược thực thi từ phía máy chủ CSDL khi một sự kiện bảng xảy ra (Chèn, cập nhật hoặc xóa lệnh thực hiện đối với một bảng cụ thể) .
17 Làm thế nào để lấy ra các hàng ngẫu nhiên từ một bảng? Sử dụng mệnh đề SAMPLE chúng ta có thể chọn các hàng ngẫu nhiên.
Ví dụ:
SELECT * FROM table_name SAMPLE (10);
18 Cổng TCP / IP nào mà SQL Server chạy? Mặc định SQL Server chạy trên cổng 1433.
19 Viết một truy vấn SELECT SQL mà trả về mỗi bản ghi chỉ một lần từ một bảng? Để có được mỗi tên một lần duy nhất, chúng ta cần phải sử dụng từ khoá DISTINCT.
SELECT DISTINCT name FROM table_name;
20 DML và DDL trong sql là gì? DML là viết tắt của Ngôn ngữ Thao tác Dữ liệu ( Data Manipulation Language): INSERT, UPDATE và DELETE là các câu lệnh DML.
DDL là viết tắt của Ngôn ngữ Định nghĩa Dữ liệu (Data Definition Language): CREATE, ALTER, DROP, RENAME là các câu lệnh DDL.
21 Lệnh nào để đổi tên một cột trong đầu ra của truy vấn SQL? Có sử dụng cú pháp sau đây.:
SELECT column_name AS new_name FROM table_name;
22 Thứ tự của SQL SELECT? Thứ tự các mệnh đề SQL SELECT là: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Trong đó SELECT và FROM là bắt buộc.
23 Giả sử một cột Student có hai cột, Name và Marks. Làm thế nào để có được Name và Marks của ba sinh viên top đầu. SELECT Name, Marks FROM Student s1 where 3 <= (SELECT COUNT(*) FROM Students s2 WHERE s1.marks = s2.marks)
24 SQL comments là gì? Khi muốn ghi chú thích vào câu truy vấn SQL, để làm cho câu truy vấn ấy trở nên rõ ràng và dễ hiểu hơn, thì sử dụng SQL comment.
SQL comments có thể được đặt bởi hai dấu nối liên tiếp (-) hoặc /* …. */
Khi câu truy vấn được thực thi thì trình biên dịch sẽ tự động bỏ qua những dòng có comment.
25 Sự khác biệt giữa các lệnh TRUNCATEDELETE và DROP? DELETE xóa một hoặc tất cả các hàng từ một bảng dựa trên điều kiện và có thể được phục hồi lại.
TRUNCATE xóa tất cả các hàng từ một bảng bằng cách phân bổ các trang bộ nhớ và không thể phục hồi lại
DROP xóa hoàn toàn một bảng từ cơ sở dữ liệu.
26 Các thuộc tính của một giao dịch là gì? Nói chung các thuộc tính này được gọi là thuộc tính ACID bao gồm:
Tính nguyên tử (Atomicity)
Tính nhất quán (Consistency)
Cô lập (Isolation)
Độ bền (Durability).
27 ROWID nghĩa là gì? Đó là một cột giả dài 18 ký tự gắn liền với mỗi hàng của một bảng.
28 Xác định UNION, MINUS, UNION ALL, INTERSECT? MINUS – sử dụng để kết hợp 2 câu lệnh SELECT, nó trả về tất cả các bản ghi chỉ thuộc vào bảng của câu truy vấn SELECT đầu tiên, những bản ghi giao nhau và những bản ghi của câu truy vấn SELECT thứ 2 thì không được lấy vào kết quả..
UNION – Bạn viết hai hay nhiều câu truy vấn SELECT khác nhau nhưng bạn muốn nó trả về một danh sách kết quả duy nhất thì bạn phải sử dụng toán tử UNION
UNION ALL – trả về tất cả các hàng được chọn bởi một trong hai truy vấn, giữ lại các kết quả trùng
INTERSECT – lấy ra những bản ghi nào mà nó hiện diện ở trong cả 2 bảng (có trong bảng này và cũng có trong bảng kia)
29 Giao dịch ( transaction) là gì? Một giao dịch là một dãy mã chạy trên cơ sở dữ liệu. Cần có cơ sở dữ liệu từ một trạng thái nhất quán sang trạng thái khác.
30 Sự khác nhau giữa UNIQUE và PRIMARY KEY constraints là gì? Một bảng có thể chỉ có một PRIMARY KEY và có thể không có hoặc có mộ hay nhiều UNIQUE keys.
PRIMARY KEY không thể chứa giá trị Null , UNIQUE có thể chứa giá trị Null.
31 Khóa tổng hợp (Composite primary key) là gì? Khóa chính được tạo trên nhiều cột được gọi là khóa chính tổng hợp.
32 Index là gì? Index (Chỉ mục) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian và hiệu suất thực hiện các truy vấn.
Index có thể được tạo ra trên một hoặc nhiều cột của một bảng.
33 Subquery là gì? Truy vấn con (còn được gọi truy vấn phụ hay truy vấn lồng nhau) là một truy vấn bên trong truy vấn SQL khác và được nhúng bên trong mệnh đề WHERE.
34 Tối ưu hoá truy vấn là gì? Tối ưu hóa truy vấn là một quá trình trong đó hệ thống cơ sở dữ liệu so sánh các chiến lược truy vấn khác nhau và chọn truy vấn với chi phí thấp nhất.
35 Collation là gì? Bộ quy tắc định nghĩa cách dữ liệu được lưu trữ, cách phân biệt chữ hoa chữ thường và ký tự Kana có thể được xử lý như thế nào.
36 Tính toàn vẹn tham chiếu là gì? Tập các quy tắc hạn chế các giá trị của một hoặc nhiều cột của các bảng dựa trên các giá trị của khóa chính hoặc khóa duy nhất của bảng tham chiếu.
37 Hàm Case là gì? Trường hợp tạo điều kiện logic kiểu if-then-else trong SQL. Nó đánh giá một danh sách các điều kiện và trả về một trong nhiều biểu thức kết quả tốt.
38 Xác định một bảng tạm thời? Một bảng tạm là một cấu trúc lưu trữ tạm thời để lưu trữ dữ liệu tạm thời.
39 Làm thế nào chúng ta có thể tránh trùng lặp hồ sơ trong một truy vấn? Bằng cách sử dụng từ khoá DISTINCT sao chép hồ sơ trong một truy vấn có thể tránh được.
40 Giải thích sự khác nhau giữa Đổi tên (Rename) và Bí danh (Alias)? Đổi tên là một tên thường xuyên cho một bảng hoặc cột
Bí danh là tên tạm thời cho một bảng hoặc cột.
41 View là gì? Một khung nhìn là một bảng ảo chứa dữ liệu từ một hoặc nhiều bảng. Lượt xem hạn chế quyền truy cập dữ liệu của bảng bằng cách chỉ chọn các giá trị được yêu cầu và thực hiện các truy vấn phức tạp một cách dễ dàng.
42 Lợi ích của Views là gì? Ưu điểm của Views:
Chế độ xem hạn chế quyền truy cập vào dữ liệu vì chế độ xem có thể hiển thị các cột được chọn từ bảng.
Có thể sử dụng chế độ xem để truy vấn các kết quả tìm kiếm phức tạp. Ví dụ: chế độ xem có thể được sử dụng để truy vấn thông tin từ nhiều bảng mà không có sự hiểu biết của người dùng.
43 Liệt kê các đặc quyền khác nhau mà người dùng có thể cấp cho người dùng khác? SELECT, CONNECT, RESOURCES.
44 Schema trong sql là gì? Lược đồ là tập hợp các đối tượng cơ sở dữ liệu của Người dùng.
45 Bảng trong sql là gì? Một bảng là đơn vị cơ bản của lưu trữ dữ liệu trong hệ thống quản lý cơ sở dữ liệu. Dữ liệu bảng được lưu trữ trong hàng và cột.
46 Chế độ xem (View) có chứa dữ liệu không? Không, View là cấu trúc ảo.
47 Chế độ xem có thể dựa trên chế độ xem khác không? Chế độ xem dựa trên một Chế độ xem khác.
48 Sự khác biệt giữa mệnh đề Having và mệnh đề Where? Cả hai đều chỉ định điều kiện tìm kiếm nhưng mệnh đề Having chỉ được sử dụng với câu lệnh SELECT và thường được sử dụng với mệnh đề GROUP BY. Nếu mệnh đề GROUP BY không được sử dụng thì Havingn sử dụng giống như mệnh đề WHERE.
49 Sự khác nhau giữa bảng tạm cục bộ (Local) và bảng tạm toàn cầu (Global) là gì? Nếu được định nghĩa bên trong câu lệnh hợp chất,
Một bảng tạm thời cục bộ tồn tại trong 1 kết nối. Khi kết thúc kết nối thì bảng tạm này sẽ tự động được xóa. Tên của bảng tạm kiểu Local được bắt đầu bằng ký tử #
Một bảng tạm thời toàn cầu tồn tại vĩnh viễn trong db nhưng các hàng của nó biến mất khi kết nối được đóng lại. Tên bảng tạm kiểu Global được bắt đầu bằng ##.
50 CTE trong sql là gì? Biểu thức bảng CTE ( Common Table Expression) hoặc bảng chung là một biểu thức có chứa tập kết quả tạm thời được định nghĩa trong câu lệnh SQL.
    Có thể bạn muốn xem thêm:

Jenkins là gì? Build và deploy code nhanh chóng với Jenkins

Jenkins là gì?

Jenkins là một opensource dùng để thực hiện chức năng tích hợp liên tục (gọi là CI – Continuous Integration) và xây dựng các tác vụ tự động hóa.

Nó tích hợp các source code của các members trong team lại nhanh chóng một cách liên tục, theo dõi sự thực thi và trạng thái thông qua các bước kiểm thử (Integration testunits test). Tất nhiên là nhằm giúp sản phẩm chạy ổn định.

jenkins
Credit: Dzone

Quá trình hình thành

Năm 2004, Kohsuke Kawaguchi – một lập trình viên Java tại Sun vào một ngày cảm thấy mệt mỏi vì các mã nguồn của mình thường xuyên bị fail.

Ông ta muốn tìm cách biết là trước khi đưa code vào deploy, liệu code có hoạt động hay không.

  Continuous Integration with Jenkins - Bài 1: Giới thiệu về CI và Jenkins
  Xây dựng hệ thống Jenkins với hàng chục nghìn job

Vì vậy, Kawaguchi đã xây dựng một hệ thống server tự động hóa cho chính server và cho Java có thể kiểm tra tình trạng code trước khi deploy, được gọi là Hudson. Hudson trở nên phổ biến tại Sun và thịnh hành sang các công ty khác dưới dạng opensource.

Đến năm 2011, với việc Oracle mua lại Sun gây nên sự tranh chấp với cộng đồng nguồn mở, Jenkins được forked từ Hudson sau đó. Cả Hudson và Jenkins đều tiếp tục tồn tại, mặc dù Jenkins có phần phổ biến hơn.

Năm 2014 Kawaguchi trở thành CTO của CloudBees, một công ty cung cấp các sản phẩm dựa trên nền tảng Jenkins.

CI là gì? CD là gì?

jenkins
Credit: Dzone

CI là viết tắt của Continuous Integration

Là tích hợp liên tục, nhằm liên tục tích hợp các source code của các thành viên trong team lại một cách nhanh chóng.

Giúp kiểm soát được tình hình phát triển thông qua các bước kiểm thử unit tests, Integration tests.

Chu trình làm việc

  1. Bước đầu tiên, các thành viên trong team dev sẽ bắt đầu pull code mới nhất từ repo về branch để thực hiện các yêu cầu chức năng nhất định.
  2. Tiếp đó là quá trình lập trình và test code để đảm bảo chất lượng của chức năng cũng như toàn bộ source code.
  3. Thành viên code xong thì sẵn sàng cho việc commit vào branch develop của team.
  4. Thành viên cập nhật code mới từ repo về local repo
  5. Merge code và giải quyết conflict.
  6. Build và đảm bảo code pass qua các tests dưới local.
  7. Commit code lên repo
  8. Máy chủ CI lắng nghe các thay đổi code từ repository và có thể tự động build/test, sau đó đưa ra các thông báo (pass/failure) cho các thành viên.

CD là viết tắt của Continuous Delivery

  Xây dựng hệ thống Jenkins với hàng chục nghìn job

Continuous Delivery là chuyển giao liên tục, là 1 tập hợp các kỹ thuật để triển khai tích hợp souce code trên môi trường staging ( một môi trường rất giống với môi trường production).

Với cách này ta có thể đảm bảo source code được review, kiểm thử một cách tỉ mỉ trước khi deploy lên môi trường production.

Build, deploy với Jenkins và Docker

Các bạn có thể tham khảo thêm về Image này:

https://hub.docker.com/r/topdevvietnamit/jenkins_ci

Có thể bạn muốn xem thêm:

Xem thêm Top Việc làm Developer trên TopDev

Hé lộ những topics “cực chất” tại Vietnam Mobile Day năm thứ 9

HÉ LỘ DANH SÁCH CHỦ ĐỀ CHÍNH THỨC CỦA VIETNAM MOBILE DAY NĂM NAY!!!

<<Liên tục cập nhật>>

  • Hoành tráng hơn!
  • Đặc sắc hơn!
  • Chất lượng và ứng dụng hơn!

Hãy đánh dấu sẵn những topics “hợp gu” trước khi tham gia Vietnam Mobile Day 2019 bạn nhé!!!

vietnam mobile day vietnam mobile day vietnam mobile day vietnam mobile day

Nhưng quan trọng là bạn đã có vé chưa?? Những slots giới hạn còn lại vẫn đang được bán ra mỗi ngày. Nếu còn chưa đăng ký thì nhanh tay giữ lấy chìa khóa vàng bước vào thế giới dành riêng cho các tín đồ công nghệ.

Còn nơi nào tốt hơn VMD2019 để gặp gỡ và giao lưu trực tiếp với 100+ chuyên gia của các lĩnh vực technology, marketing & business, đón đầu các xu hướng mới trên thế giới, cùng hàng trăm các ưu đãi hấp dẫn khác. Vậy thì ngần ngại gì mà không đăng ký ngay nào!!!!

============================

🔎 Website: https://mobileday.vn/
📌 Time: Hồ Chí Minh – 06/06/2019 | Hà Nội – 14/06/2019
🔥VÉ COMBO dành cho nhóm 5-10-20-30 người với những giá cực ưu đãi nhưng vẫn giữ nguyên quyền lợi TIÊU CHUẨN!!!

ĐỘC GIẢ TOPDEV BLOG ĐĂNG KÝ VÉ VỚI MÃ CODE TOPDEVBLOG@VMD19: ƯU ĐÃI GIẢM 30% GIÁ VÉ

8 tips giúp tăng hiệu suất làm việc với Github

lam-viec-voi-github

Bài viết được sự cho phép của tác giả Ngo Thang

Chắc hẳn ai trong số chúng ta cũng đã từng làm việc với Github. Nhưng ít ai biết đến các phím tắt cũng như 1 số tính năng giúp làm việc hiệu quả hơn.

Nào cùng xem đó là những phím tắt nào nhé.

Tìm kiếm file nhanh trong Repository

Đây là 1 trong những phím tắt mà mình thấy hay và tiện lợi nhất trên Github. Nó có thể giúp ta tìm kiếm bất kì file nào trong Repository 1 cách nhanh chóng.

Đầu tiên bạn mở 1 Repository nào đó. Sau đó ấn phím “t” nó sẽ đi đến màn hình tìm kiếm. Ở màn hình này bạn chỉ cần nhập tên file muốn tìm kiếm vào là được.

Quick fuzzy file

Suggest thay đổi code trong Pull Request

Khi chúng ta comment vào 1 phần code nào đó trong Pull Request. Chúng ta có thể đề xuất thay thế code bằng việc sử dụng tính năng ”Suggested Changes”. Người tạo Pull Request có thể apply trực tiếp phần đề xuất thay đổi code của bạn mà không cần phải dời Github.

Để tạo ra 1 lời đề xuất thì chỉ cần bao quanh đoạn code của bạn bằng thẻ Markdown, với thẻ tag là suggestion.

suggestions in pull request 1

Bây giờ người tạo Pull Request có thể thay đổi file trực tiếp trên Github mà không nhất thiết phải thay đổi bằng tay.

suggestions in pull request 2

Hiển thị Github như trong IDE

Với những người nào quen dùng IDE đều thấy nó tổ chức thư mục theo dạng hình cây (sidebar tree).

Trên Github cũng có thể làm như thế được, nhưng các bạn cần phải cài 1 extension trên Chrome là Octotree extension

sidebar tree github

Nhẩy đến function khi đang review code

Ai đã từng review code rồi cũng đều biết, khi review 1 đoạn code nào đó. Thì việc xem các function liên quan đến đoạn code đó là điều hoàn toàn không thể tránh khỏi.

Bình thường chắc mọi người sẽ mở ra 1 tab mới trên trình duyệt rồi xem function muốn xem. Cách này cũng được nhưng khá mất thời gian. Có 1 cách nhanh hơn giúp các bạn có thể xem được function liên quan bằng cách ấn phím “t”. Khi đó sẽ hiển thị ra 1 cái dropdown và bạn chọn function muốn xem là được.

jump to function github

Nội dung hoặc đường dẫn đến 1 file trong Github có thể bị thay đổi. Ví du như hôm nay dùng file này. Nhưng đến ngày mai file đó có thể không dùng và bị xoá đi. Vậy làm thế nào có thể share đường dẫn của 1 file đến cho người khác mà không sợ đường dẫn đó bị thay đổi.

Trong Github có thể giúp bạn làm điều này 1 cách rất đơn giản. Đầu tiên bạn mở file đó trên Github.

Ví dụ file của mình có đường dẫn như sau:

https://github.com/nooptr/docker-rails-mysql/blob/master/Dockerfile

Sau đó các bạn ấn phím “y” nó sẽ tự động biến cái đường dẫn trên thành đường dẫn kiểu như này:

https://github.com/nooptr/docker-rails-mysql/blob/34bd44a48b0b66519fcbdfa2165d115a379db84a/Dockerfile

Và đây chính là đường dẫn static và không bị thay đổi. Kể cả file kia của bạn có bị xoá đi chăng nữa.

Thực chất làm được điều này là do cái 34bd44a48b0b66519fcbdfa2165d115a379db84a chính là mã commit của file lúc đó mà thôi. Nên bạn có xoá file đi thì commit cũ vẫn còn lại nên đương nhiên là vẫn xem được rồi.

Xem lịch sử thay đổi của 1 file

Nếu bạn muốn xem lịch sử thay đổi của 1 file trên Github bạn có thể làm bằng cách ấn phím “b”. Khi đó nó sẽ hiển thị xem ai đã thay đổi dòng nào trong file vào thời gian nào. Cái này không khác gì git blame cả. Nhưng xem trên giao diện mình thấy nó dễ nhìn hơn nhiều.

shortcut git blame

Github đánh chỉ mục hầu hết các đoạn code và cung cấp chức năng tìm kiếm mạnh mẽ trên nó. Nếu bạn muốn tìm kiếm 1 đoạn text nào đó trên Github, bạn chỉ cần ấn nút ”/” và nhập từ muốn tìm kiếm là được.

Powerful code search

Dùng lại reply đã lưu

Nếu bạn muốn comment bằng comment mấy ngày trước đó để tiết kiệm thời gian, đỡ phải gõ. Thì Github cũng cung cấp cho bạn tính năng lưu lại comment trước đó bằng cách tạo 1 saved replies. Lần tới khi muốn dùng lại comment trước đó thì bạn chỉ cần chọn từ dropdown là được.

saved replies github

Kết luận

Cảm ơn các bạn đã đọc bài. Hi vọng qua bài viết này sẽ giúp các bạn làm việc trên Github 1 cách hiệu quả hơn.

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers hot nhất tại TopDev

Bài viết gốc được đăng tải tại Nghệ thuật coding

  1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++
  Front end Optimization – 9 tips để cải thiện Web Performance

Tối ưu UX/UI bằng Animation – những khung hình “biết nói”

hoàng nguyễn Tối ưu UX/UI bằng Animation

“Designing for delight is designing for moments. The animation will be an effective way to create those moments better.

Nghiên cứu chỉ ra rằng có đến 90% người dùng đã ngừng sử dụng một ứng dụng do hiệu suất kém, 86% người dùng đã xóa bỏ một ứng dụng khi họ gặp phải vấn đề về thiết kế hay chức năng. Ngược lại, có đến 86% người dùng đánh giá cao những ứng dụng có trải nghiệm đặc biệt. Từ những con số này, không khó để hiểu được lý do tại sao các công ty tập trung vào User Experience như Apple, Google, Adobe, Dropbox và Amazon vẫn luôn dẫn đầu trong lĩnh vực của họ.

❌ Đừng đánh giá thấp Animation của ứng dụng khi bạn chưa biết những điều sau:

+ Người dùng có thể thư giãn nếu App bạn đang load
+ Sự chuyển động sẽ giúp người dùng tập trung hơn vào đối tượng cần chú ý.
+ Sự kết nối mạch lạc khiến người dùng thích thú.
+ Làm nổi bật lỗi khi thông báo hoặc tác vụ hoàn thành.

Xem tin tuyển dụng UI UX designer lương cao trên TopDev

Song, người dùng luôn bận rộn đồng nghĩa với việc bạn chỉ có một chút ít thời gian để thu hút họ Vậy nên, nếu chúng ta có thể tận dụng được khoảnh khắc đó, chúng ta có thể có thêm những khách hàng tiềm năng với giá trị to lớn. Vậy bạn có đồng ý với quan điểm “Designing for delight is designing for moments. The animation will be an effective way to create those moments better” không? Hãy cùng làm rõ cùng anh HOÀNG NGUYỄN – Senior Product Designer của Interactive Labs, Design Coach của GEEK Up, với topic How the animation delights user experience” được diễn ra tại sự kiện Vietnam Mobile Day 2019.


‍ ĐÔI CHÚT VỀ DIỄN GIẢ:

Nói về một trong những người tiên phong trong lĩnh vực UI/UX Design không thể thiếu anh Hoàng Nguyễn. Anh hiện là Senior Product Designer của Interactive Labs kiêm Design Coach của GEEK Up. Trong nhiều năm chinh chiến, anh đã xây dựng một background “khủng” về lĩnh vực này, trong đó nổi bật nhất là:

Anh từng làm việc với những khách hàng đầu ngành và các startups.
Anh từng là Technical Adviser về UI/UX Design tại Behance Portfolio.
Anh là tác giả của một số đầu báo cho GAM7 – tạp chí về design và marketing của Việt Nam, và một số tạp chí nước ngoài khác.
Bạn có thể “thỉnh giáo” những dự án của anh tại https://dribbble.com/Hoanguyen hoặc https://www.behance.net/hoanguyen27e97)

Với những kinh nghiệm về animation,  art direction, graphic design, interaction design, print design, product design, web design anh sẽ chia sẻ những vấn đề thường gặp về UI/UX Design cũng như trả lời cho câu hỏi “Animation giúp làm hài lòng trải nghiệm người dùng như thế nào?”

Bạn sẽ thấy tiếc nếu bỏ lỡ chủ đề “xịn xò” này cũng như cơ hội giao lưu và học hỏi những kiến thức bổ ích từ anh Hoàng Nguyễn.

Sự kiện về công nghệ & mobile đang đến gần, bạn đã có vé chưa? Chưa thì đăng ký ngay và luôn để giữ chỗ cho mình ngay nào!!

===

Vietnam Mobile Day năm thứ 9 trở lại với quy mô hoành tráng cùng đội ngũ speakers hot sẽ chia sẻ các chủ đề mới lạ xoay quanh 6 nội dung chính:

➖ Digital Transformation & Mobilization
➖ Woman in Tech
➖ 5G & Internet of things, Machine Intelligence and future of Mobile Technology
➖ Fin-Tech/ Mobile Payment/Ecommerce & Mobile commerce
➖ Digital Marketing & Mobile Marketing
➖ Mobile content (AR/VR/Livestream) and gaming

===

Book now: http://topdev.vn/s/X5D57UHI
Website: https://mobileday.vn/
Time: Hồ Chí Minh – 06/06/2019 | Hà Nội – 14/06/2019/

ĐỘC GIẢ TECHTALK ĐĂNG KÝ VÉ VỚI MÃ CODE TOPDEVBLOG@VMD19: ƯU ĐÃI GIẢM 30% GIÁ VÉ

Workshop: Triển khai CI/CD cho một dự án phần mềm lớn

Một giám đốc dự án cần đánh giá được tiến độ, chất lượng để có điều chỉnh kịp thời, nhà phát triển cần một hệ thống hỗ trợ coding, danh mục kiểm tra tự động, bộ phận kiểm định chất lượng cần một hệ thống theo dõi đủ sâu và dễ tiếp cận nhất có thể… Tất cả những vấn đề này đều có thể giải quyết triệt để với CI/CD.

Hiện nay, để đảm bảo độ ổn định nhất quán, kiểm soát tình hình kịp thời thì việc tích hợp liên tục các source code của các members trong team lại nhanh chóng, đảm bảo source được kiểm thử một cách tỉ mỉ trước khi deploy lên môi trường production thì CI/CD diễn ra vô cùng phổ biến.

Trong khoảng 5 năm trở lại đây, Docker trở nên khá hot trong giới lập trình vì là một open source có công nghệ container hoá giúp cho việc đóng gói service vào container nhẹ và nhanh hơn. Các hãng lớn như Amazon, IBM, Google, Microsoft, … đã bắt đầu hỗ trợ Docker trên nền tảng của họ.

Song, thách thức khiến mọi nhà phát triển đau đầu là làm sao để cải tiến liên tục về cả độ mượt và chất lượng của sản phẩm họ làm ra. Trong khi đó CI/CD được thiết lập trên nền tảng Docker được xem là một trong những giải pháp hiệu quả nhất.

*CI (Continuous Integration): tích hợp liên tục các source code của các members trong team để kiểm soát tình hình kịp thời.

*CD (Continuous Delivery): chuyển giao liên tục, cho phép triển khai tích hợp source code trên môi trường staging trước khi deploy lên môi trường production.

Có một số công cụ có thể giúp bạn xây dựng một pipeline CI / CD đủ khả năng để đáp ứng tất cả các yêu cầu xây dựng, triển khai, phân phối nhanh và liên tục của bạn và Jenkins, Microsoft VSTS, Bamboo, GitLab, Codeship,… là một số Essential Container CI/CD tools được sử dụng nhiều và phổ biến nhất tính đến thời điểm hiện tại.

Vì vậy, bây giờ nếu câu hỏi của bạn là nên đi với lựa chọn nào? Yếu tố nào bạn quan tâm nhất, sự đơn giản, bảo mật hay dễ dàng hòa hợp với đám mây AWS? Bạn đang chờ đợi điều gì? Hãy thử sức với “TRIỂN KHAI CI/CD CHO MỘT DỰ ÁN PHẦN MỀM LỚN TRONG 3 GIỜ“. Nhanh tay giữ ngay slot tham dự

Thắng Chung Phương Lê

CHUYÊN GIA PHẦN MỀM TẠI NASHTECH VIETNAM SẼ GÓP MẶT TẠI SỰ KIỆN “TRIỂN KHAI CI/CD CHO MỘT DỰ ÁN PHẦN MỀM LỚN TRONG 3 GIỜ“

Bộ đôi Thắng Chung – Phương Lê từ NashTech Việt Nam với nhiệm vụ xây dựng skills mới cho NashTech, hỗ trợ cộng đồng NashTech cập nhật với các xu hướng công nghệ mới nhất như: Microservices, DevOps, Cloud & AI.

Cùng tìm hiểu đôi chút về các chuyên gia nhé:

 Làm việc tại công ty TNHH HarveyNash VietNam nắm giữ chức vụ quan trọng là Engineering Manager, anh Phương Lê hiện đã có hơn 15 năm kinh nghiệm trongviệc xây dựng chu kỳ phát triển phần mềm (full-life cycle), đặc biệt yêu thích các vấn đề liên quan đến giải pháp phần mềm.

 Anh Thắng Chung hiện đang giữ vai trò Solution Architech với hơn 10 năm kinh nghiệm trong việc phát triển phần mềm đặc biệt tập trung vào những kiến trúc mới như n-tiers, microservices và cloud-native application, ngoài ra anh còn sở hữu một Github có trên 23 mã nguồn mở với hơn 3000+ lượt share trên khắp toàn cầu.

Hãy cùng 2 chuyên gia từ Nashtech tìm hiểu những thú vị về CI/CD bởi những kinh nghiệm và trải nghiệm trong background của các chuyên gia.

Cùng bộ đôi Thắng Chung và Phương Lê tìm hiểu và trực tiếp thực hành tại workshop “TRIỂN KHAI CI/CD CHO MỘT DỰ ÁN PHẦN MỀM LỚN TRONG 3 GIỜ“ để thu thập những bí kíp thật sự xịn về CI/CD bạn nhé!

=======

Thời gian: 18:00 ngày 30/05/2019
Địa điểm: Saigon Innovation Hub – 273 Điện Biên Phủ – P7 – Q3 – HCM
Link đăng ký: https://meetup.vn/e/RzR?src=s
CODE GIẢM 50.000Đ DÀNH CHO ĐỘC GIẢ TOPDEVBLOG@CICD