Home Blog Page 183

Bạn có đang dùng git hiệu quả hay không?

dùng git hiệu quả

“Bạn có thể mang developer ra khỏi CVS, chứ chả cách nào lấy CVS RA khỏi tay họ được đâu.” – trong trường hợp này là tôi

  Git - Học nghiêm túc một lần (Phần 1)
  Cấu hình SSH Key cho Github

Sai là sai chỗ nào? 

Có lẽ bạn cho rằng tôi kiểu ngạo nhưng tôi cho rằng hầu như mọi người đều đang dùng Github sai cách! Sao mà ta có thể biết được mình đang dùng Github sai? Làm sao để dùng Git hiệu quả

Xem thêm Git là gì?

Trắc nghiệm thử nhé! Bạn thấy mình trong những trường hợp nào dưới đây?

  • Project nào bạn cũng có một cái repository online
  • Repository / repositories của bạn có branch mà ai cũng dùng và còn developer nhiều thay đổi khác lên nó. 
  • Bạn có một process mà ai cũng phải follow để review code; chỉ có một review system và chỉ có một nơi cố định để chạy tất cả các test.

Nếu tất cả những điều trên bạn đều “dính” thì tôi xin chia buồn với bạn đã thuộc nhóm dưới đây:

CVS vs DCVS

Bạn có còn nhớ CVS không? Nó viết tắt cho Concurrent Versions System*. Ở đây, Concurrent chính là từ khoá trọng tâm. Nếu như tất cả những gì bạn thao tác với source control là phải centralize nó, thì concurrency có lẽ là cột mốc xa nhất bạn có thể đạt được.

*Chú thích: CVS cho phép nhiều lập trình viên và các thành viên khác trong một nhóm phát triển phần mềm làm việc trơn tru với nhau. Trong đó, mỗi developer thay đổi nội dung các tập tin bên trong phiên bản copy của dự án của chính họ và sau đó gởi những thay đổi của họ về máy server. Để tránh việc người này ghi đè lên những thay đổi của người khác, server chỉ chấp nhận những thay đổi đối với phiên bản gần đây nhất của một file

Mặt khác, Git lại áp dụng Distributed version control, hay còn được gọi là Distributed revision control system (DRCS) (Hệ thống các phiên bản phân tán), hoặc Distributed version control system (DVCS).

*Chú thích: Khác với hệ thống tập trung như CVS, với DCVS nếu như máy chủ ngừng hoạt động, thì bạn hoàn toàn có thể lấy kho chứa từ bất kỳ máy khách nào để sao chép ngược trở lại máy chủ để khôi phục lại toàn bộ hệ thống. Mỗi checkout thực sự là một bản sao đầy đủ của tất cả dữ liệu của kho chứa từ máy chủ.  

Có lẽ tại một thời điểm nào đó khi Git trở nên nổi tiếng, nhiều người quên mất lí do vì sao nó được ra đời. Và giờ đây họ dùng Git như một CVS gây lãng phí bộ nhớ vì cứ phải copy toàn bộ lịch sử code ở khắp mọi nơi.

Cái mà tôi muốn nhấn mạnh chính là điểm khác biệt giữa Git so với các công cụ quản lý source trước đây nằm ở sự đối lập giữa:

Concurrent Model – tạo ra các thay đổi trong codebase chung tại cùng một thời điểm VS Distributed Model phát triển code một cách độc lập rồi share các thay đổi sau.

Đây là điểm khác biệt mấu chốt. Trong Distributed Model, từng developer phải càng tự chủ động và tự lập càng tốt, cái gì cần thống nhất thì thông qua việc giao tiếp với nhau chứ không phải là kiểm soát.

Có thể các bạn cho rằng chúng không khác nhau là mấy, nhưng nó ảnh hưởng tới cả văn hóa của dân lập trình. Nó sẽ thay đổi từ việc chọn cái nào để review trên source control system trước, đến cách bạn tạo ra build system, cũng như cách để giao tiếp, review, setup testing, etc.

DVCS chính là phiên bản nâng cấp của CVS. Bạn không nhất thiết phải áp dụng toàn bộ mọi thứ của DVSC model, nhưng dùng nó rồi thì sẽ giúp ích cho bạn rất nhiều. 

Những dấu hiệu cho biết nó đang có vấn đề

Bạn đã bao giờ đi review code, rồi phải đưa ra feedback còn dài hơn – lâu hơn việc bạn tự đi sửa nó chưa? 

Đã bao giờ bạn đã sửa xong phần mà cả team đang cần, nhưng vẫn chưa dùng được vì bạn chưa “nhập nó lên master branch“, bởi những phiền phức với các tool hiện tại, cũng như các quy trình lằng nhằng mà bạn phải thực hiện?

Bạn có gặp phải bug trên “master branch”, nhưng lại chỉ ảnh hưởng đến một số developer, hay thỉnh thoảng lại fail mà không bị phát hiện ra khi test?

Có khi nào bạn rơi vào tình huống bế tắc không thể làm gì khi master branch hỏng? 

Rốt cuộc nên dùng Git hiệu quả kiểu gì?

Model phát triển phần mềm của bạn nên áp dụng theo model phát triển Linux Kernel. Nó chính là cách mà Git được tạo ra và trở nên thịnh hành như bây giờ. Nó cho phép việc phát triển code độc lập, tiện lợi giữa nhiều người. Hoạt động tốt với hơn 15 triệu dòng code, là ngôi nhà chung cho hàng ngàn developer khác nhau, từ không chuyên cho tới chuyên nghiệp. Thế nên nó cũng sẽ rất có lợi cho project của bạn.

Thay đổi code

Đừng nên chỉ có một “master branch” mà tất cả mọi người đều sử dụng chung, bởi nó kết nối tất cả với nhau và chỉ cần “Một con ngựa đâu là cả tàu bỏ cỏ”. Khi code trong master branch thay đổi hay crash thì tất cả mọi thứ xung quanh đều sẽ bị ảnh hưởng.

Việc thay đổi code nên được diễn ra một cách thoải mái và dễ dàng giữa mọi người. các team và developer có thể tự do trao đổi các patches hoặc là cả branch nếu hợp lý tùy theo tình huống. Thường thì những thay đổi này sẽ bắt đầu từ dưới đi lên và lan ra. Nhờ mà ta sẽ có thời gian test và theo dõi trước khi những thay đổi đó được đưa vào “master branch”.

Ví dụ:

  • Đi từ dưới lên (Bottom-up): Junior developers nên push những thay đổi trong code qua cho senior developer review chúng. Nếu được chấp nhận thì sẽ đưa lên cho leader xem, rồi manager xem. Cứ thế cho đến hết một qui trình.
  • Lan ra (Across): UI team sẽ trao đổi patches, review và test liên tục giữa các thành viên trong nhóm, và thường sẽ phải xin manager phụ trách để merge chúng lại. Các backend developer thì có thể giữ những thay đổi của họ dù UI có thay đổi hay không.
  • Kết hợp (Mixed): Những contributor đóng góp feature cross-project sẽ gửi những thay đổi đến chủ của các project đó.

Nghe thì có vẻ rất lộn xộn nhưng trên thực tế nó lại khá đồng bộ, hay nói cách khác: một hệ thống đồng nhất.

Reviews

Tôi không đồng tình lắm với cách sắp xếp và tổ chức code review.

Tôi tin rằng cái giá phải trả để phát triển một software thành công luôn bị đánh giá thấp.

Rõ ràng bạn không hề muốn một app đầy bug, và lập trình viên thì chỉ là con người : mà con người thì luôn luôn mắc lỗi. Vì thế mà việc review là việc rất cần thiết. Thế nhưng nếu developer cho rằng việc này gây phiền hà và không cần thiết thì sẽ ảnh hưởng không nhỏ đến hiệu quả công việc của mình.

Do đó, bản thân code-review cũng chính là một rào cản mà các developer phải vượt qua khi làm project, chúng thường bao gồm:

  • Những tool thô, chỉ phù hợp một số trường hợp nhất định
  • Web UIs vừa xấu vừa dỏm
  • Quan liêu COCC max level
  • Trễ nãi do review nhiều vòng và phải fix liên tục từ nhiều phía 

Trước tiên, developers đã có git  và môi trường để họ phát triển. Đó là tất cả những gì họ cần để thay đổi code, vốn bao gồm phải đọc lại những code cũ. Vậy thì sao họ lại phải cần những tool để đọc code, khi đang review chúng? Việc bắt các developer phải học thêm một phần mềm khác với chức năng tương tự chỉ khiến tổ tốn thời gian thêm.

Và tại sao phải ép buộc developer phải review code như nhau? Làm gì có chuyện ai cũng thích cùng một màu và cùng một web interface mà bạn chọn được? Bạn có ép họ phải xài chung một text editor luôn không?… Trong một team với distributed model thì các developer nên được phép dùng bất cứ tool gì phù hợp với họ để làm việc, bao gồm cả code review.

Quá trình review code diễn ra như sau: Bằng cách tìm output của diff command, nằm trong web-browser, và xác định được những lỗi rõ ràng thì được xem là vừa không hiệu quả vừa thiếu sót. Để review một thay đổi được hiệu quả, hãy download nó xuống, rồi dùng git checkout, mở IDE/text editor lên và xem những đoạn code mới này, chạy test hay thậm chí viết ra một số đoạn mới của chúng để thử, thao tác thỏa ý muốn của bạn. Chỉ khi đó thì ta mới thật sự gọi đó là “review code”.

Review nên tập trung về việc giao tiếp và hợp tác, chứ không phỉa về xăm xoi và chỉ trích. Một khi vấn đề đã được xác định rõ thì người review sẽ có thể sửa chúng ngay và gửi fix đó lại cho team. Nó sẽ nhanh hơn nhiều so với việc viết comment lí giải dài dòng và yêu cầu phải review lại thêm nhiều lần nữa. Hơn thế, kiểu “Tôi nghĩ rằng thay đổi mới này sẽ giúp bạn cải thiện code của mình” luôn dễ nghe hơn là kiểu “Code chú tởm lợm quá, đi mà fix nó đi”.

Testing

Bạn nên xem các developer như những người đóng góp fix sửa cho code chứ đừng cho rằng họ làm được tất cả mọi thứ ngay lập tức. Ngoài ra, hệ thống central testing cần được xem là bước cuối cùng của testing sau một loạt các bài test từ developer cũng như những người đóng góp khác. 

Nhờ đó mà nó giúp ta test được kĩ hơn và bảo đảm cho chất lượng của những thay đổi đó trước khi nó đến tay mọi người.

Để cho có hiệu quả, bạn cần phải bảo đảm việc testing giữa các member phải thật kĩ lưỡng, rõ ràng và có ích. Developers nên làm quen với việc chạy test hàng ngày. Những bài test luôn được thiết kế cho con người chứ máy móc không thể dùng test một cách hiệu quả được. Vì thế bạn nên cảm thấy thoải mái và có khả năng xác định những lỗi xuất hiện từ đâu và từ khi nào.

Kết luận

Những điều tôi nói ở trên không thể áp dụng được tất cả mọi tình huống. Và có lẽ nó chỉ đơn giản là vì bạn không khoái cái ý tưởng mà tôi đã đưa ra.

Dù vậy, CVS-es vẫn sẽ là lựa chọn tốt hơn CVS nhiều lần:

  • Dùng nó dễ hơn.
  • Developer sẽ không mất công cứ download toàn bộ lịch sử lại nhiều lần.
  • Bạn có những tính năng như: locking files hay kiểm tra sub-tree của project mình.

Tôi vẫn tin rằng cho dù bạn không thích hay ghét nó thì vẫn sẽ tốt hơn nếu bạn chịu tìm hiểu về chúng! 

Hy vọng qua bài viết này các bạn sẽ biết cách dùng Git hiệu quả nhất. Cảm ơn các bạn đã theo dõi bài viết!

Đừng bỏ lỡ những bài viết hay liên quan:

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

TopDev via Codecamp

  Combo các lệnh Git đủ dùng trong một dự án cho người mới bắt đầu
  Git - Học nghiêm túc một lần (Phần 1)

10 theme Sublime Text tốt nhất

10 theme Sublime Text tốt nhất

Sublime Text là một trong những trình biên tập code phổ biến nhất và được sử dụng nhiều nhất mọi thời đại. Sublime Text cung cấp cho các developer rất nhiều công cụ để giúp cho năng suất và quy trình công việc

Cùng với font chữ, việc chọn một theme tốt với các color scheme trực quan cũng góp phần đáng kể giúp tăng năng suất làm việc của lập trình viên. Nếu bạn đang dùng Sublime Text 3 thì đừng quên khám phá những themes và color scheme cực kì bắt mắt, thân thiện của text editor này nhé.

Cài đặt Theme Sublime Text 3

Để cài đặt theme, chỉ cần sử dụng package control. Quá trình sẽ là:

  1. ctrl + shift + p or cmd + shift + p
  2. Tìm kiếm Package Control: Install Package
  3. Tìm theme và enter
  4. Sau khi cài đặt xong, bạn có thể thiết lập giao diện bằng cách mở Command Palette. Set đặt giao diện trong Preferences -> Settings – User bằng cách chỉnh sửa json property calledtheme
{
    "theme": "Lanzhou.sublime-theme"
}

Khi cài đặt nhiều theme này sẽ mang lại các màu sắc mới vào Sublime, chúng sẽ không tự động được áp dụng. Chúng phải được set tại Preferences -> Color Scheme.

5. Mỗi giao diện — theme sẽ có thể có nhiều mẫu — color scheme khác nhau. Để thay đổi mẫu màu, bạn thay đổi thuộc tính color_scheme.

{
  // change color scheme
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Monokai.tmTheme"
}

hoặc bạn có thể thay đổi theme và color scheme bằng cách mở Command Palette và tìm UI: Select Theme hoặc UI: Select Color Scheme. Sau đây là 10 mẫu theme được sử dụng nhiều nhất trên Sublime Text.

GUNA

Guna là một theme cực kỳ sáng tạo cho Sublime Text 3. Nó hỗ trợ vài function thú vị sau: widgets (clock, weather) trên sidebar, theme colors có thể điều chỉnh theo cách thủ công hoặc thích ứng (adaptively), kiểm soát status bar label bằng api của chính nó.

Predawn

  • Predawn là dark interface và syntax theme cho Sublime Text.
  • Predawn là một trong những theme hay nhất cho sublime text 3.

Cài đặt

{
  // Predawn
  "theme": "predawn.sublime-theme",
 "color_scheme": "Packages/Predawn/predawn.tmTheme"
}

Boxy

  • Boxy cung cấp cho bạn một giao diện có thể tùy chỉnh và nó cũng đi kèm với các chủ đề có màu sáng và tối.
  • Bạn có thể tùy chỉnh trình chỉnh sửa với nhiều tùy chọn có sẵn để điều chỉnh nó theo sở thích của bạn.

Cài đặt

{
  // Boxy
  "theme": "Boxy Monokai.sublime-theme"
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Monokai.tmTheme",
}

Các Boxy theme chất lượng cao là:

  1. Boxy Monokai (Predawn)
  2. Boxy Solarized Dark (Code)
  3. Boxy Yesterday (Atom)
  4. Boxy Solarized Light (Iowa)
  5. Boxy Nova (Minimal)

Cài đặt:

{
  // Boxy Monokai
  "theme": "Boxy Monokai.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Monokai.tmTheme",
}
{
  // Boxy Solarized Dark
  "theme": "Boxy Solarized Dark.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Solarized Dark.tmTheme",
}
{
  // Boxy Solarized Light
  "theme": "Boxy Solarized Light.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Solarized Light.tmTheme",
}
{
  // Boxy Nova
  "theme": "Boxy Nova.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Nova.tmTheme",
}
{
  // Boxy Ocean
  "theme": "Boxy Ocean.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Ocean.tmTheme",
}
{
  // Boxy Tomorrow
  "theme": "Boxy Tomorrow.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Tomorrow.tmTheme",
}
{
  // Boxy Yesterday
  "theme": "Boxy Yesterday.sublime-theme",
  "color_scheme": "Packages/Boxy Theme/schemes/Boxy Yesterday.tmTheme",
}

Ayu

  • Theme đơn giản và dễ tìm.
  • Theme đi kèm 3 tùy chọn là mirage, light và dark.

Cài đặt

{
  // Ayu
  "theme": "ayu-light.sublime-theme"
  "color_scheme": "Packages/ayu/ayu-light.tmTheme",
}

Ba Ayu theme chất lượng cao là:

  1. Ayu Light
  2. Ayu Mirage
  3. Ayu Dark
{
  // Ayu light
  "theme": "ayu-light.sublime-theme",
  "color_scheme": "Packages/ayu/ayu-light.tmTheme",
}

{
  // Ayu migrate
  "theme": "ayu-mirage.sublime-theme",
  "color_scheme": "Packages/ayu/ayu-mirage.tmTheme",
}

{
  // Ayu dark
  "theme": "ayu-dark.sublime-theme",
  "color_scheme": "Packages/ayu/ayu-dark.tmTheme",
}

Agila

  • Agila là một theme nhiều màu sắc và phổ biến với rất nhiều tính năng cool.
  • Một trong những tính năng phổ biến nhất của nó là không gian rộng rãi giữa các thư mục trong file tree.
  • Có rất nhiều sự lựa chọn mà chúng ta có thể lựa chọn theo sở thích của riêng mình.

Cài đặt

{
  // Agila
  "theme": "Agila.sublime-theme"
  "color_scheme": "Packages/Agila Theme/Agila Oceanic Next.tmTheme",
}

Agila với 7 theme chất lượng cao gồm:

  1. Agila Origin Theme.
  2. Agila Monokai Theme.
  3. Agila Cobalt Theme.
  4. Agila Oceanic Theme.
  5. Agila Light Theme.
  6. Agila Neon Theme.
  7. Agila Classic Theme.

Material

  • Theme này có số lượng cài đặt rất cao.
  • Cũng bao gồm nhiều tùy chọn color scheme để sử dụng trên trình soạn thảo.

Cài đặt

{
  // Material
  "theme": "Material-Theme.sublime-theme"
  "color_scheme": "Packages/Material Theme/schemes/Material-Theme.tmTheme",
}

Materialize

  • Một theme thanh lịch được xây dựng dựa trên theme Material.
  • Dựa trên thiết kế Material Design của Google
{
  // Materialize
  "theme": "Materialize-Theme.sublime-theme"
}

Seti_UI

Một bản được lấy cảm hứng từ giao diện Seti trên Atom, Seti UI vẫn giữ được những cái hay của phiên bản gốc: giao diện tối đi kèm với 7 mẫu màu. Seti UI hỗ trợ khá nhiều tùy chỉnh mà bạn có thể tham khảo trong trang chủ của nó.

{
  // Seti_UI
  "theme": "Seti_UI-Theme.sublime-theme"
}

Spacegray

  • Các theme Spacegray có các lược đồ màu Base16.
  • Hình minimal và đơn giản.
  • Cài đặt sẵn có cho chỉnh sửa phông chữ, tab và thanh bên.
{
  // Spacegray
  "theme": "Spacegray light.sublime-theme"
}

Spacegray có ba chủ đề chất lượng cao bao gồm:

  1. Spacegray.
  2. Spacegray Light.
  3. Spacegray Eighties.

Afterglow

  • Một theme tối giản cho Sublime Text.
  • Theme Afterglow được dựa trên Spacegray.
  • Hỗ trợ các tab khác nhau, các tùy chọn màu sắc, các biểu tượng bên và cú pháp markdown.
{
  // Afterglow
  "theme": "afterglow.sublime-theme"
}

Arc dark

Cài đặt

{
  // Arc dark
  "theme": "Arc-Dark-Master.sublime-theme",
  "color_scheme": "Packages/User/Arc-Dark/schemes/Arc.tmTheme"
}

Tips cho việc chọn Theme

  • Mỗi người nhìn màu khác nhau, tìm một theme tạo ra sự tương phản tốt giữa nền và văn bản cho bạn.
  • Khi đôi mắt của bạn mệt mỏi trong đêm khuya, bạn nên xem xét một chương trình như Flux. Nó làm cho màu sắc của màn hình máy tính của bạn thích ứng với thời gian trong ngày, ấm áp vào ban đêm và giống như ánh sáng mặt trời vào ban ngày.
  • Hãy thử Colorublime, nó cho phép bạn thay đổi scheme màu hiện tại của bạn ngay lập tức từ bên trong Sublime Text.

Tổng kết

Danh sách này đã được thực hiện bởi các cuộc khảo sát và ý kiến của các lập trình viên về các diễn đàn, blog, chủ đề được tìm kiếm nhiều nhất và được đề cập nhiều nhất, mức độ và xếp hạng phổ biến ở kiểm soát package và số lượt cài đặt.

Tham khảo thêm các vị trí tuyển dụng ngành it hấp dẫn tại Topdev

[Update] 43 kho lưu trữ Github JS phổ biến nhất 2024 –  Bạn đã biết hết chưa?

Cấu hình SSH Key cho Github

Chắc chắn các bạn sẽ bất ngờ với số lượng project mã nguồn mở mà TopDev sẽ chia sẻ trong bài viết hôm nay. Và bạn sẽ còn bất ngờ hơn bởi chất lượng của chúng nữa đấy. Mỗi khi gặp một vấn đề gì đó, có thể tìm ra nhiều kho lưu trữ kho lưu trữ Github JS phổ biến hơn.

Trong bài viết này, TopDev sẽ giúp các bạn khám phá kho lưu trữ với các tiện ích thực tiễn tốt nhất của Node, tiện ích mở rộng trình duyệt hiển thị cây mã trên GitHub, render JavaScript, thư viện Node.js WebSocket, framework JS để làm game 3D cũng như nhiều dự án GitHub Javascript tinh gọn khác…

  Cấu hình SSH Key cho Github
  [Update] 43 kho lưu trữ Github JS phổ biến nhất 2024 -  Bạn đã biết hết chưa?

Github là gì?

GitHub được xem như một dịch vụ, công cụ hỗ trợ và cung cấp kho lưu trữ mã nguồn Git dựa trên nền tảng web cho các dự án phát triển phần mềm. Hiện nay, Github cung cấp cả các phiên bản có tính phí và không tính phí cho nhiều phân khúc người dùng khác nhau.

Github đã dần trở thành một sản phẩm tầm ảnh hưởng sâu rộng trong cộng đồng lập trình và phát triển các mã nguồn mở. Hiện tại, giới công nghệ đã bắt đầu xem nó như một chiếc CV đúng chất lập trình, thể hiện rõ nhất năng lực của mình. Trong thời điểm hiện tại, rất nhiều nhà tuyển dụng đã yêu cầu các lập trình viên phải gởi kèm link Github trong hồ sơ xin việc của mình.

Các kho lưu trữ Github JS phổ biến nhất

  1. Node.js best pracitces: Là một kho lưu trữ với đánh giá tốt nhất trên Node hiện nay. (28.833 sao cho đến nay)
  2. Octotree: Là một tiện ích mở rộng trên trình duyệt (Chrome, Firefox, Opera và Safari) hiển thị cây mã trên Github. Được sử dụng để truy cập vào mã nguồn trong dự án mà không cần phải tải xuống nhiều kho lưu trữ vào máy của bạn. (17.145 sao cho đến nay)
  3. html2canvas: Trình render JavaScript, tập lệnh cho phép bạn chụp ảnh màn hình của các trang web hoặc các phần bên trong nó một cách trực tiếp trên trình duyệt của người dùng. (16.752 sao cho đến nay)
  4. Svelte: Là một trình biên dịch lấy các thành phần khai báo của bạn và chuyển đổi chúng thành JavaScript hiệu quả, cập nhật nhanh chóng DOM (14.571 sao cho đến nay)
  5. forever: Công cụ CLI đơn giản để đảm bảo rằng một tập lệnh đã cho chạy vô hạn. (12.221 sao cho đến nay)
  6. ws: Rất đơn giản để sử dụng và đã được kiểm tra kỹ lưỡng việc triển khai máy khách và máy chủ Node.js Websocket. (11.420 sao cho đến nay)
  7. Nightwatch: Một framework tự động kiểm tra và tích hợp liên tục dựa trên Node.js, sử dụng giao thức Webdo. (9.266 sao cho đến nay)
  8. Babylon.js: Là một framework Javascript hoàn chỉnh để xây dựng các trò chơi 3D với HTML5 và WebGL. (9.171 sao cho đến nay)
  9. Dotenv: Là một module không phụ thuộc, tải các biến môi trường từ tệp .env vào process.env. Lưu trữ cấu hình trong môi trường tách biệt với code dựa trên phương pháp Ứng dụng 12 yếu tố. (8.916 sao cho đến nay)
  10. tui.editor: Trình biên tập WYSIWYG được đánh dấu. Kho lưu trữ cho trình soạn thảo UI TOAST. Đạt tiêu chuẩn + Biểu đồ GFM và mở rộng UML. (8.547 sao cho đến nay)
  11. Sheperd: Là một thư viện JavaScript để hướng dẫn người dùng thông qua ứng dụng của bạn. Nó sử dụng Tippy.js, một thư viện mã nguồn mở khác để render các hộp thoại cho mỗi “ step”. (7.429 sao cho đến nay)
  12. node-postgres: Một tập hợp các module Node.js để giao tiếp với cơ sở dữ liệu PostgreSQL. Nó có hỗ trợ cho các cuộc gọi lại, promises, asysc / await, kết nối, câu lệnh đã được chuẩn bị, kết quả phát trực tuyến, liên kết C/C++, phân tích cú pháp một cách phong phú. ( 7.325 sao cho đến nay )
  13. Nexe: Tiện ích dòng lệnh biên dịch ứng dụng Node.js của bạn thành một tệp thực thi duy nhất. ( 7.249 sao cho đến nay)
  14. Razzle: Công cụ để tạo các ứng dụng JS được máy chủ render mà không cần cấu hình. (7.089 sao cho đến nay).
  15. react-jsonchema-form: Một thành phần React đơn giản có khả năng xây dựng các biểu mẫu HTML từ lược đồ JSON và sử dụng Bootstrap theo mặc định. (6.740 sao cho đến nay). Xem thêm JSON là gì?
  16. MDX: Là một định dạng có thể ủy quyền cho phép bạn sử dụng liền mạch JSX trong các tài liệu đánh dấu của bạn. Bạn có thể nhập các thành phần, như biểu đồ hoặc thông báo tương tác và xuất siêu dữ liệu. (6.629 sao cho đến nay)
  17. Tippy.js: Thư viện công cụ và popover có thể tùy chỉnh được cung cấp bởi Popper.js. Nó tương thích với IE11 +, khoảng 99% người dùng máy tính để bàn và 97% người dùng di động. Nó có thể được sử dụng để tạo các chú giải công cụ văn bản tĩnh đơn giản hoặc các popovers HTML phức tạp sử dụng AJAX. (5,982 sao cho đến nay)
  18. sql.js: Là một port của SQLite đến Webassugging, bằng cách biên dịch mã SQLite C với Emscripten. (5,413 sao cho đến nay)
  19. Bootbox.js: Thư viện JS để tạo các hộp thoại lập trình bằng cách sử dụng các phương thức Bootstrap. (4.649 sao cho đến nay)
  20. CSS-Only Chat: Là một cuộc trò chuyện không đồng bộ trên web một cách quái dị, nó không sử dụng bất kỳ mã JS nào trên frontend. (4.295 sao cho đến nay)
  21. np: thì tốt hơn ‘ npm publish ‘ một tí. (4.277 sao cho đến nay)
  22. vue-multiselect: Là một thành phần chọn tổng thể / đa lựa chọn / gắn thẻ phổ biến cho Vue.js. (4.270 sao cho đến nay)
  23. PostGraphile: (Trước đây là “PostGraphQL”) là API GraphQL được hỗ trợ chủ yếu bởi cơ sở dữ liệu PostgreQuery của bạn. (7.233 sao cho đến nay)
  24. Cashmột bản thay thế nhỏ của jQuery cho các trình duyệt hiện đại (IE10 +) cung cấp cú pháp kiểu jQuery để thao tác DOM. (3,838 sao cho đến nay)
  25. Bowser: là một trình phát hiện trình duyệt. Đây là một thư viện JS được tạo để giúp phát hiện trình duyệt nào mà người dùng của bạn có và cung cấp cho bạn API thuận tiện để lọc người dùng bằng cách nào đó tùy thuộc vào trình duyệt của họ. (3.698 sao cho đến bây giờ)
  26. Comlink: Một thư viện nhỏ (1.1kB), giúp loại bỏ rào cản suy nghĩ về postMessage và giúp bạn ẩn khi đang làm việc với công nhân. Nó làm cho WebWorkers thú vị hơn. (3.249 sao cho đến nay)
  27. Choices.js: là một vanilla, nhẹ (được nén tầm 22kb), plugin chọn box / văn bản có thể định cấu hình. Tương tự như Select2 và Select kích thước nhưng không có phụ thuộc vào jQuery. (2.871 sao cho đến nay)
  28. vue-select: Mọi thứ bạn muốn phần tử <select> HTML có thể làm, được gói gọn trong một thành phần Vue nhẹ và có thể mở rộng. (2.733 sao cho đến nay)
  29. ReactPlayer: Là một thành phần React để chơi nhiều loại URL, bao gồm đường dẫn tệp, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia và DailyMotion. (2.501 sao cho đến nay)
  30. jquery.terminal: (jQuery Terminal Emulator) là một plugin để tạo trình thông dịch dòng lệnh trong các ứng dụng của bạn. (2.122 sao cho đến nay)
  31. autoComplete.js là một thư viện Javascript vanilla thuần túy được thiết kế để tích hợp liền mạch với nhiều dự án và hệ thống. (2.106 sao cho đến nay)
  32. Dockly là một terminal interface để quản lý các container và services của Docker. (2.062 sao cho đến nay)
  33. node-mssql là client của Microsoft SQL Server cho Node.js (1.479 sao cho đến nay).
  34. match-sorter là sự sắp xếp phù hợp nhất định của một mảng trong JavaScript. (1.313 sao bây giờ)
  35. Saber là một trình tạo trang web tĩnh để xây dựng các trang web nhanh hơn với Vue.js (1.261 sao cho đến nay)
  36. Node-convict là một thư viện quản lý cấu hình cho Node.js (1.170 sao cho đến nay)
  37. globby là một sự kết hợp người dùng trên toàn cầu lại với nhau. (1.086 sao cho đến nay)
  38. on-change là một thư viện để xem một đối tượng hoặc mảng để tiện việc thay đổi. Nó hoạt động đệ quy, do đó, nó thậm chí sẽ phát hiện nếu bạn sửa đổi một thuộc tính sâu như obj.a.b [0] .c = true (1.022 sao cho đến nay)
  39. Faast.js làm cho các chức năng thông thường trở thành các chức năng không có máy chủ trên AWS Lambda và Google Cloud. Nó xử lý việc tải lên các đoạn code của bạn một cách chi tiết, tạo cơ sở hạ tầng đám mây và dọn dẹp chúng. (1.021 sao cho đến nay)
  40. file-type là một thư viện để phát hiện loại tệp của Buffer / Uint8Array / ArrayBuffer. (1.014 sao cho đến nay)
  41. Gluegun là một bộ công cụ thú vị để xây dựng các giao diện dòng lệnh (CLI) dựa trên Node trong TypeScript hoặc JavaScript hiện đại (994 sao cho đến nay). Xem thêm TypeScript là gì?
  42. low.js: Là một port của Node.JS với yêu cầu hệ thống thấp hơn nhiều. (918 sao cho đến nay)
  43. bent: Một chức năng của client HTTP cho Node.js w / async / await. (666 sao cho đến nay)

Kết luận

Hy vọng những kho lưu trữ GitHub JS phổ biến mà mình đã liệt kê ở trên sẽ có ích cho các bạn lập trình viên. Cảm ơn các bạn đã theo dõi bài viết.

Xem thêm 50 dự án nguồn mở Github chất dành cho lập trình viên

Đừng bỏ lỡ những bài viết được cộng đồng quan tâm nhiều nhất về chủ đề GitHub:

Ngoài ra, đừng bỏ lỡ các việc làm Software Developers hot tại TopDev

  Những lập trình viên phiên bản X-men: Những code project "dị" nhất trên GitHub
  5 tip về GitHub cho lập trình viên

4 lý do để VS Code là Text Editor ưa thích của mọi lập trình viên

Ưu điểm của VS Code

Từ lâu tôi đã xem và đề xuất Visual Studio là tool số một để phát triển đa dạng use-case. Đâu là tool đầu tiên mà tôi lập trình C++, C# và cũng là tool mà tôi nhớ nhất khi quay trở lại làm việc với Python.

Dạo gần đây, tôi tự hỏi liệu mình có thể giải quyết cùng vấn đề như VS Code không. Vì sau một thời gian dài phân tích, tôi nghĩ rằng tôi thể dành chút thời gian để list ra các lí do tại sao tôi ngày càng thích VS Code.

Cùng khám phá các ưu điểm của VS Code trong bài viết này nhé!

Các settings riêng cho Workspace

Tôi cũng các đồng nghiệp đã từng tranh luận nhiều về các rule cơ bản nhưng quan trọng cho coding guidelines của chúng tôi (spaces vẫn tốt hơn).

Sau khi cài các indents (thụt dòng) rộng khoảng 8 space, tôi nhanh chóng nhận ra rằng tôi sẽ gặp phải vấn đề với Visual Studio: setting của text editor chỉ có thể set program-wide (trong phạm vi chương trình).

Tôi phải đổi đi đổi lại hoặc tìm một extension phù hợp để làm vậy nếu tôi muốn nó tương thích với những quy ước đã set trước đó.

Ưu điểm của VS Code

Trong VS Code, concept “workplace” cho phép chúng ta define bộ setting. Việc tạo một override cho một workplace cố định là khá đơn giản, tôi chỉ việc tạo folder mới và xác định một vài cái ghi đè. Nó cho phép sử dụng cùng format mà bạn define nó trên cấp user. Nó cho phép tiếp tục dùng setting của tôi cho các project cá nhân khi vẫn tương thích với các quy ước đã thỏa mãn.

  5 VS Code Extensions hữu ích cho React developers

Startup time nhanh tương đối

Ưu điểm của VS Code

Notepad là một text editor tuyệt vời cho mọi loại text có các lines kết thúc bằng CRLF, nhưng còn những loại còn lại thì sao? Edit mọi thứ mà không có các line-breaks phù hợp nghe như một cơn ác mộng vậy. Có một option đó là mở Visual Studio cho file hoặc folder đơn, nhưng bạn sẽ phải đợi một lúc. Đối với tôi thì câu trả lời là VS Code.

Run VS 2017 VS Code
1 3.5508 1.1607
2 2.9868 1.1258
3 3.4115 1.1736
4 2.4786 1.1928
5 3.3778 1.0983
6 2.9395 1.1373
7 3.1672 1.1528
8 2.8437 1.3238
9 3.4466 1.1818
10 2.9016 1.1408
Result VS 2017 VS Code
Avg 3.1104 1.1688
Min 2.4786 1.0983
Max 3.5508 1.3238

Đơn vị thời gian là trên giây.

Cross-platform support

Visual Studio chỉ hỗ trợ trên Windows, nhưng một bản khác dựa trên MonoDevelop thì hỗ trợ trên Mac. Trong khi đó Windows, Mac, và Linux đều được hỗ trợ chính thức bởi VS Code team. Điều này đồng nghĩa rằng có ít nhất thêm một tool mà chúng ta không còn bị phụ thuộc vào Windows!

Tính linh hoạt cao thông qua extensions và settings

Ưu điểm của VS Code

Một ưu điểm của VS Code nữa, đó là đã trở nên tiện dụng hơn rất nhiều, build lên cả hệ support cho các ngôn ngữ lập trình phổ biến như C++ và C# dưới dạng các packages lẻ, mặc dù TypeScript đã mặc định bao gồm trong đó.

Các interface gồm một set API tiêu chuẩn cung cấp một loại hoàn thiện code phổ biến và functionality tìm symbol mà bạn muốn từ bất kì IDE nào có support cấp cao cho ngôn ngữ.

Kết

Sau những phân tích trên, VS Code chắc chắn không dành cho tất cả lập trình viên. Tôi tin tưởng vào việc tìm solution hoặc tool phù hợp nhất để đạt được mục tiêu thay vì làm việc trong hạn chế của một tool nào đó.

Nếu bạn được quyền chọn solutions, điều quan trọng là phải phân tích xem liệu có cái gì khác tốt hơn ngoài kia không để chuyển sang nó.

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

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

Thuật toán Quick Sort là gì?

Thuật toán Quick Sort là gì

Thuật toán Quick Sort là gì?

Thuật toán Quick Sort là một thuật toán sắp xếp, còn được gọi là sắp xếp kiểu phân chia (Part Sort). Là một thuật toán hiệu quả dựa trên việc phân chia mảng dữ liệu thành các nhóm phần tử nhỏ hơn.

Phân loại: Giải thuật sắp xếp
Phức tạp thời gian: Trung bình O(n log n)
Xấu nhất: O(n2)
Phức tạp dữ liệu: Khác nhau tùy vào cách hiện thực
Tối ưu: Thỉnh thoảng

Giải thuật sắp xếp nhanh chia mảng thành hai phần bằng cách so sánh từng phần tử của mảng với một phần tử được gọi là phần tử chốt. Một mảng bao gồm các phần tử nhỏ hơn hoặc bằng phần tử chốt và một mảng gồm các phần tử lớn hơn phần tử chốt.

Quá trình phân chia này diễn ra cho đến khi độ dài của các mảng con đều bằng 1. Với phương pháp đệ quy ta có thể sắp xếp nhanh các mảng con sau khi kết thúc chương trình ta được một mảng đã sắp xếp hoàn chỉnh.

Kỹ thuật chọn phần tử chốt

Kỹ thuật chọn phần tử chốt ảnh hưởng khá nhiều đến khả năng rơi vào các vòng lặp vô hạn đối với các trường hợp đặc biệt. Tốt nhất chọn phần tử chốt nằm ở trung vị của danh sách. Khi đó, sau log2(n) lần chia ta đạt được kích thưởng mảng con bằng 1.

Dưới đây là một số cách chọn phần tử chốt:

  • Chọn phần tử đứng đầu hoặc đứng cuối làm phần tử chốt.
  • Chọn phần tử đứng giữa danh sách làm phần tử chốt.
  • Chọn phần tử trung vị trong ba phần tử đứng đầu, đứng giữa và đứng cuối làm phần tử chốt.
  • Chọn phần tử ngẫu nhiên làm phần tử chốt. Tuy nhiên cách này rất dễ dẫn đến khả năng rơi vào các trường hợp đặc biệt.

Ý tưởng thuật toán Quick Sort

Thuật toán Quick Sort là gì
Thuật toán Quick Sort là gì
  1. Chọn phần tử chốt.
  2. Khai báo 2 biến con trỏ để trỏ để duyệt 2 phía của phần tử chốt.
  3. Biến bên trái trỏ đến từng phần tử mảng con bên trái của phần tử chốt.
  4. Biến bên phải trỏ đến từng phần tử mảng con bên phải của phần tử chốt.
  5. Khi biến bên trái nhỏ hơn phần tử chốt thì di chuyển sang phải.
  6. Khi biến bên phải nhỏ hơn phần tử chốt thì di chuyển sang trái.
  7. Nếu không xảy ra trưởng hợp 5 và 6 thì tráo đổi giá trị 2 biến trái và phải.
  8. Nếu trái lớn hơn phải thì đây là giá trị chốt mới.

Thuật toán Quick Sort là gì

Giải thuật

Dưới đây là chương trình mô phỏng thuật toán đệ quy viết trên ngôn ngữ lập trình java:

public class QuickSort {
  public static void main(String[] args) {
    int[] x = {6, 2, 3, 4, 5, 9, 1};
    printArray(x);

    int left = 0;
    int right = x.length - 1;

    quickSort(x, left, right);
    printArray(x);
  }

  public static void quickSort(int[] arr, int left, int right) {
    if (arr == null || arr.length == 0)
      return;

    if (left >= right)
      return;

    int middle = left + (right - left) / 2;
    int pivot = arr[middle];
    int i = left, j = right;

    while (i <= j) {
      while (arr[i] < pivot) {
        i++;
      }

      while (arr[j] > pivot) {
        j--;
      }

      if (i <= j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        i++;
        j--;
      }
    }

    if (left < j)
      quickSort(arr, left, j);

    if (right > i)
      quickSort(arr, i, right);
  }

  public static void printArray(int[] arr) {
    for(int i = 0; i < arr.length; i++) {
      System.out.print(arr[i] + " ");
    }

    System.out.println();
  }
}

Lượt dịch từ:

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

Xem thêm Software Developers hot nhất trên TopDev

TopDev via viblo

Framework Hapi.js là gì? Làm quen với Hapi.js cơ bản

Framework Hapi.js là gì

Bài viết này sẽ giới thiệu cho bạn Framework Hapi.js là gì. Bên cạnh đó sẽ cũng cấp cho bạn một số bước làm quen với Hapi.js cơ bản.

Cùng bắt đầu nhé!

  Top 8 Framework Web Development hot nhất 2024
  Nhập môn Nodejs API (Authentication - CRUD) cho người mới học

Framework Hapi.js là gì?

Hapi.js (còn được gọi là hapi) là một open-source framework dùng để xây dựng các ứng dụng web. Việc sử dụng hapi phổ biến nhất là xây dựng các API service. Xem thêm Framework là gì?

Tại sao nên sử dụng hapi.js?

Hapi có cấu trúc đơn giản, dễ dàng làm quen và sử dụng. Cộng đồng lập trình viên sử dụng đông đảo nên bạn sẽ nhận được nhiều support. Hệ thống plugin của hapi vô cùng phong phú và mạnh mẽ, cho phép bạn thêm các tính năng mới và sửa lỗi với tốc độ nhanh. Hapi cho phép bạn xây dựng các API có thể mở rộng, đây là một điểm cộng rất lớn cho các ứng dụng lớn.

Bắt đầu nhanh với hapi.js

Cài đặt hapi

Hapi là một framework node.js, cho nên các bạn cần chắc chắn đã cài đặt nodejs và npm. Các bước cài đặt hapi vô cùng đơn giản và tương tự với các project nodejs khác. Bạn tạo mới một thư mục với tên project (trong ví dụ này là hello-hapi) và thực hiện các bước sau:

  • Đi vào thư mục project: cd hello-hapi
  • Khởi tạo mới project: npm init
  • Cài đặt package hapi.js: npm install @hapi/hapi

Tạo một server hapi cơ bản

Từ thư mục project, các bạn tạo một file index.js với nội dung như sau:

const Hapi = require('@hapi/hapi');
const init = async () => {
  const server = Hapi.server({
    port: 3000,
    host: 'localhost'
  });
  await server.start();
  console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
  console.log(err);
  process.exit(1);
});
init();

Đầu tiên, bạn require hapi và khởi tạo mới một server Hapi.server() có chứa thông tin về port và host. Sau đó bạn start server và log ra thông báo.

Chi tiết về các thuộc tính khi khởi tạo server các bạn có thể tham khảo tại đây: https://hapijs.com/api#-serveroptions

Thêm một route xử lý request

Sau khi các bạn chạy server ở bước trên, thì mới chỉ nhận được log thông báo server đang chạy. Để xử lý các request gọi lên server, các bạn cần thêm các route cho server.

const Hapi = require('@hapi/hapi');
const init = async () => {
  const server = Hapi.server({
    port: 3000,
    host: 'localhost'
  });
  server.route({
    method: 'GET',
    path: '/',
    handler: (request, h) => {
      return 'Hello World!';
    }
  });
  await server.start();
  console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
  console.log(err);
  process.exit(1);
});
init();

Sửa lại file index.js với nội dung như trên và start lại server. Lúc này, khi truy cập vào trình duyệt với url http://localhost:3000 các bạn sẽ thấy dòng text 'Hello World!' hiển thị trên màn hình.

Các bạn có thể nhận thấy, để thêm một route vào ứng dụng hapi rất dễ dàng, tên các thuộc tính của route cũng đã gợi ra các chức năng tương ứng. Để biết thêm các thuộc tính của route và cách dùng, các bạn tham khảo tại đây: https://hapijs.com/api#route-options

Tổ chức thư mục

Về cách tổ chức thư mục dự án thì mỗi người có một phong cách khác nhau. Không có một cách nào là tốt nhất cho tất cả, nó chỉ phù hợp cho đa số mà thôi. Đối với dự án hapi mình thường đi theo cách tổ chức thư mục như sau:

Framework Hapi.js là gì

Lời kết

Bài viết này cho các bạn cái nhìn cơ bản về framework hapi.js là gì. Cảm ơn các bạn đã dành thời gian cho bài viết này!

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

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

TopDev via codemoingay.com

SDKMan là gì? Tại sao lập trình viên Java nên cài đặt SDKMan?

SDKMan là gì

Bài viết giúp bạn hiểu thêm khái niệm SDKMan là gì, lý do tại sao lập trình viên Java nên cài đặt nó. Bên cạnh đó cung cấp cho bạn một số lệnh cơ bản sử dụng trong SDKMan. Cùng bắt đầu thôi!

SDKMan là gì?

SDKMan (Software Development Kit Manager) là một công cụ dùng để quản lý song song các phiên bản của các bộ phát triển phần trong lập trình Java.

Ví dụ bạn có thể cài nhiều phiên bản Java trên máy. Khi muốn dùng version nào thì bạn chuyển sang version đó. Hay muốn cài Java thì chỉ cần chạy lệnh của SDKMan là nó tự động cài phiên bản Java stable mới nhất hoặc theo phiên bản bạn chỉ định.

SKDMan cung cấp chuẩn giao tiếp dòng lệnh (Command Line Interface – CLI) và các api để cài đặt, xóa, chuyển đổi hiển thị danh sách SDK.

  Gitignore là gì ? Tại sao nó lại rất quan trọng trong teamwork
  Cryptography - Nó là gì và hoạt động như thế nào?

Những tính năng và ưu điểm của SDKMan

  • Giúp cho việc cài đặt dễ hơn: bạn không cần phải download, giải nén tạo các biến môi trường
  • Hỗ trợ đầy đủ các gói phát triển Java: SDKMan có thể cài được các SDK cho JVM (Xem thêm JVM là gì?) như Java, Groovy, Scala, Kotlin… Các trình quản lý thư viện Java như Ant, Gradle, Maven… (Xem các SDK mà SDKMan hỗ trợ quản lý tại đây)
  • SKDMan rất nhẹ: SDK được viết cho giao diện dòng lệnh (bash), chỉ yêu cầu chạy được lệnh curl, zip/unzip
  • SDKMan có thể chạy trên tất cả platforms UNIX: Mac OSX, Linux, Cygwin, Solaris and FreeBSD

Một số lệnh cơ bản của SDKMan

Liệt kê các sdk mà SDKMan hỗ trợ

sdk list

SDKMan là gì

Cài đặt bộ phát triển phần mềm (sdk)

Cài đặt bản stable nhất sdk install sdk_name:

Ví dụ mình muốn cài bản Java stable mới nhất thì sẽ dùng lệnh:

sdk install java

Hoặc muốn chỉ rõ một version nào đó thì bạn sử dụng sdk install sdk_name sdk_version

Ví dụ

sdk install scala 2.12.1

Hiển thị danh sách các version của sdk

Hiển thị danh sách các version của một bản sdk: sdk list sdk_name

Ví dụ mình muốn xem các version của gradle đang hỗ trợ:

sdk list gradle

SDKMan là gì

Xóa SDK

sdk uninstall sdk_name sdk_version

Ví dụ mình muốn xóa bản scala version 2.11.6

sdk uninstall scala 2.11.6

chuyển đổi giữa các version SDK

sdk default sdk_name sdk_version

Ví dụ trên máy mình có nhiều bản scala, mình muốn chuyển sang bản scala 2.11.6 làm bản mặc định

sdk default scala 2.11.6

Hy vọng qua bài viết này, các bạn có thể hiểu được SDKMan là gì. Cảm ơn các bạn đã theo dõi bài viết!

TopDev via stackjava.com

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

Xem thêm vị trí Java Developers hot nhất tại TopDev

API là gì? Tại sao API được sử dụng nhiều hiện nay?

thiết kế API

Hiện nay API nói chung và Web API nói riêng đang được ứng dụng ngày càng nhiều. Kiến trúc ứng dụng hiện đại ngày nay ngày càng phân tán, không phụ thuộc ngôn ngữ đã thúc đẩy việc ứng dụng API.  Vậy API là gì? Nguồn gốc và ưu điểm của nó là như thế nào?

API là gì?

API là các phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Nó là viết tắt của Application Programming Interface – giao diện lập trình ứng dụng. API cung cấp khả năng truy xuất đến một tập các hàm hay dùng. Và từ đó có thể trao đổi dữ liệu giữa các ứng dụng.

API là gì

Tham khảo thêm: việc làm API lương cao lên đến 3000 USD

API thường ứng dụng vào đâu?

  • Web API: là hệ thống API được sử dụng trong các hệ thống website. Hầu hết các website đều ứng dụng đến Web API cho phép bạn kết nối, lấy dữ liệu hoặc cập nhật cơ sở dữ liệu. Ví dụ: Bạn thiết kế chức nằng login thông Google, Facebook, Twitter, Github… Điều này có nghĩa là bạn đang gọi đến API của. Hoặc như các ứng dụng di động đều lấy dữ liệu thông qua API.
  • API trên hệ điều hành: Windows hay Linux có rất nhiều API, họ cung cấp các tài liệu API là đặc tả các hàm, phương thức cũng như các giao thức kết nối. Nó giúp lập trình viên có thể tạo ra các phần mềm ứng dụng có thể tương tác trực tiếp với hệ điều hành.
  • API của thư viện phần mềm hay framework: API mô tả và quy định các hành động mong muốn mà các thư viện cung cấp. Một API có thể có nhiều cách triển khai khác nhau và nó cũng giúp cho một chương trình viết bằng ngôn ngữ này có thể sử dụng thư viện được viết bằng ngôn ngữ khác. Ví dụ bạn có thể dùng Php để yêu cầu một thư viện tạo file PDF được viết bằng C++.

API có thể sử dụng cho computer hardware, or software library, database system, web-based system, operating system. Bên cạnh đó, API cũng có rất nhiều dạng khác nhau, nhưng nhìn chung bao gồm một số đại diện đặc tả cho: data structures, variables, object classes, routines hoặc remote calls.

Tài liệu cho các API thường được cung cấp để tạo sự thuận lợi cho việc triển khai và sử dụng. Web API hiện đang được các doanh nghiệp lớn sử dụng cho khách hàng hoặc chính nội bộ công ty họ.

Một số khái niệm khác:

  • API hiện nay đều tuân thủ theo tiêu chuẩn REST và HTTP, tạo sự thân thiện dễ sử dụng với nhà phát triển. Giúp người dùng dễ dàng truy cập, dễ hiểu hơn. Web API hiện đại dùng cho các đối tượng cụ thể, chẳng hạn như mobile developer với document, version khác nhau.
  • API key: Đây là loại code (string) được truyền tải bởi các chương trình máy tính gọi là API để xác định chương trình, nhà phát triển hoặc người dùng nó tới trang web. Các API key được sử dụng với mục đích nhằm giới hạn, kiểm soát sử dụng API. Chẳng hạn như ngăn chặn sự việc lạm dụng API.

API Key thường hoạt động như một mã định danh duy nhất và mã thông báo bí mật để xác thực và thường sẽ có một bộ quyền truy cập trên API được liên kết với nó. Các API Key có thể dựa trên hệ thống định danh duy nhất toàn cầu (UUID) để đảm bảo chúng sẽ là duy nhất cho mỗi người dùng.

Web API là gì?

Web API là một phương thức dùng để cho phép các ứng dụng khác nhau có thể giao tiếp, trao đổi dữ liệu qua lại. Dữ liệu được Web API trả lại thường ở dạng JSON hoặc XML thông qua giao thức HTTP hoặc HTTPS.

Những điểm nổi bật của Web API

Web API hỗ trợ restful đầy đủ các phương thức: Get/Post/put/delete dữ liệu. Nó giúp bạn xây dựng các HTTP service một cách rất đơn giản và nhanh chóng. Nó cũng có khả năng hỗ trợ đầy đủ các thành phần HTTP: URI, request/response headers, caching, versioning, content format.

Tự động hóa sản phẩm

Với web API, chúng ta sẽ tự động hóa quản lý công việc, cập nhật luồng công việc, giúp tăng năng suất và tạo hiệu quả công việc cao hơn.

Khả năng tích hợp linh động

API cho phép lấy nội dung từ bất kỳ website hoặc ứng dụng nào một cách dễ dàng nếu được cho phép, tăng trải nghiệm người dùng. API hoạt động như một chiếc cổng, cho phép các công ty chia sẻ thông tin được chọn nhưng vẫn tránh được những yêu cầu không mong muốn.

Cập nhật thông tin thời gian thực

API có chức năng thay đổi và cập nhật thay đổi theo thời gian thực. Với công nghệ này, dữ liệu sẽ được truyền đi tốt hơn, thông tin chính xác hơn, dịch vụ cung cấp linh hoạt hơn.

Có tiêu chuẩn chung dễ sử dụng

Bất kỳ người dùng, công ty nào sử dụng cũng có thể điều chỉnh nội dung, dịch vụ mà họ sử dụng.

Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test.

Web API hoạt động như thế nào?

  1. Đầu tiên là xây dựng URL API để bên thứ ba có thể gửi request dữ liệu đến máy chủ cung cấp nội dung, dịch vụ thông qua giao thức HTTP hoặc HTTPS.
  2. Tại web server cung cấp nội dung, các ứng dụng nguồn sẽ thực hiện kiểm tra xác thực nếu có và tìm đến tài nguyên thích hợp để tạo nội dung trả về kết quả.
  3. Server trả về kết quả theo định dạng JSON hoặc XML thông qua giao thức HTTP/HTTPS.
  4. Tại nơi yêu cầu ban đầu là ứng dụng web hoặc ứng dụng di động , dữ liệu JSON/XML sẽ được parse để lấy data. Sau khi có được data thì thực hiện tiếp các hoạt động như lưu dữ liệu xuống Cơ sở dữ liệu, hiển thị dữ liệu…

Nói thêm về Web API, hiện nay các lập trình viên website thường tự viết API riêng cho dự án của mình. Chủ yếu để thao tác với Database được xây dựng sẵn từ sản phẩm trước đây, nhằm phục vụ cho những tính năng tương đồng ở các dự án khác trong tương lai (Ví dụ Api để lấy thông tin toàn bộ bài viết theo ngày). Nó còn gọi là tái sử dụng những tài nguyên mà công ty đã xây dựng sẵn hoặc sử dụng API từ các nhà cung cấp như Microsoft hay Google, điển hình và phổ biến nhất có thể kể đến là Google Maps API hoặc Facebook Api…

Ưu và nhược điểm của Web API

Mỗi một ứng dụng bất kỳ đều có những ưu nhược điểm riêng, hỗ trợ tốt cho các ứng dụng. Vì vậy mà web API cũng không ngoại lệ:

1. Ưu điểm

  • Web API được sử dụng hầu hết trên các ứng dụng desktop, ứng dụng mobile và ứng dụng website.
  • Linh hoạt với các định dạng dữ liệu khi trả về client: Json, XML hay định dạng khác.
  • Nhanh chóng xây dựng HTTP service: URI, request/response headers, caching, versioning, content formats và có thể host trong ứng dụng hoặc trên IIS.
  • Mã nguồn mở, hỗ trợ chức năng RESTful đầy đủ, sử dụng bởi bất kì client nào hỗ trợ XML, Json.
  • Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test.
  • Giao tiếp hai chiều được xác nhận trong các giao dịch, đảm bảo độ tin cậy cao.

2. Nhược điểm

Do web API còn khá mới nên chưa thể đánh giá nhiều về nhược điểm của mô hình nay. Tuy nhiên, có hai nhược điểm dễ dàng nhận thấy:

  • Web API chưa hoàn toàn phải là RESTful service, mới chỉ hỗ trợ mặc định GET, POST
  • Để sử dụng hiệu quả cần có kiến thức chuyên sâu, có kinh nghiệm backend tốt
  • Tốn thời gian và chi phí cho việc phát triển, nâng cấp và vận hành
  • Có thể gặp vấn đề về bảo mật khi hệ thống bị tấn công nếu không giới hạn điều kiện kỹ.

Lời khuyên tiếp theo là bạn nên đọc thêm các bài ở dưới đây để cập nhật toàn bộ kiến thức về API:

Xem thêm tuyển dụng API từ các công ty HOT hấp dẫn trên TopDev

  Call API trong VueJS theo cách thông minh nhất

Agenda khu vực miền Bắc – Vietnam Mobile Day chính thức đổ bộ Hà Nội vào ngày 14/06/2019!

agenda hà nội offline

Không để team Hà Nội chờ đợi quá lâu, Agenda khu vực miền Bắc (dự kiến) được công bố, bạn quan tâm đến topic nào? Vấn đề mà bạn và các chuyên gia của chúng tôi quan tâm có cùng quan điểm hay không? Cùng check qua những topics nào sẽ được trình làng tại Vietnam Mobile Day khu vực Hà Nội bạn nhé:

agenda hà nội offlinevietnam mobile day

Thay vì nóng lòng chờ đợi một mùa Vietnam Mobile Day nữa thì hãy giữ ngay cho mình một slot tham dự cùng bạn bè nào, cùng nhau cập nhật những kiến thức mới bạn nhé! Đăng ký ngay để không bỏ lỡ một trong những sự kiện công nghệ lớn nhất năm với code vé từ TopDev Blog giảm 50.000đ:

THỜI GIAN:
Hồ Chí Minh: 06/06/2019  | Hà Nội: 14/06/2019

THÔNG TIN CHI TIẾT VÀ ĐĂNG KÝ:
Website: https://mobileday.vn/

THÔNG TIN CHI TIẾT
Event team: event@applancer.net | 028 6681 3236
Ms. Thoa | thoa.nguyen@applancer.net | 038 5098 969

Tham khảo thêm: Việc làm mobile, tuyển mobile developer

Tăng tốc website. Bí kíp tối ưu Web Performance

tang-toc-website

Tối ưu web performance luôn là một câu hỏi mà bất kỳ lập trình viên nào cũng quan tâm. Có thể nói, công nghệ Web ngày càng phát triển hơn và cho tới ngày hôm nay, chúng ta đã có hàng triệu website trên thế giới và rất nhiều user đang đợi load những website.

Không còn gì khó chịu hơn khi bạn phải ngồi chờ những page này load lâu hơn thời gian dự tính chỉ vì kết nối internet chậm hoặc vì một nguyên nhân nào đó. Theo nghiên cứu, thời lượng quan tâm của user chỉ kéo dài khoảng 5 giây.

Hãy tưởng tượng nếu bạn phải đợi khoảng 3 phút để website đó load, thì chỉ có nghĩa là performance của nó “lởm”, và lượng user chắc chắn sẽ giảm xuống và đó không phải là điều mà chúng ta mong muốn.

Web Performance là tốc độ mà các trang web được tải xuống và hiển thị trên trình duyệt web của người dùng.

Tại sao Performance lại quan trọng?

Web Performance là chủ đề khá thú vị nếu bạn hỏi mình, mình nghĩ nó là một trong những điều và developer nên chú ý, vì sau cùng, chúng ta cũng chỉ build web để user có thể sử dụng bất kể trở ngại hay thách thức nào.

Ngày nay, nhiều user sử dụng Internet với mạng 2G, 3G, 4G và kết nối LTE, còn chúng ta thì phải cố gắng đưa web đến họ trong cùng một tốc độ. Performance cần thiết và quan trọng đối với user của chúng ta vì những lý do sau:

  • User là ưu tiên hàng đầu và họ là lý do để chúng ta build lên tất cả từ đầu. Nếu không có user lên webpage, mình chắc chắn là chẳng có lý do gì để lập trình web cả. Vì chúng ta đang làm web cho user, nên user phải là vấn đề để ta cân nhắc trong mọi bước phát triển và mục tiêu hàng đầu là họ có thể sử dụng website của chúng ta một cách thuận lợi nhất.
  • Cải thiện tỷ lệ chuyển đổi. Khi website được tối ưu về tốc độ và cách sử dụng, chúng ta sẽ thấy được một lượng traffic duy trì khổng lồ, user sẽ tiếp tục lên web vì họ có trải nghiệm tốt ở lần đầu ghé qua. Nhưng ngược lại, thử nghĩ nếu web của bạn chưa tối ưu Performance, điều gì sẽ xảy ra?

Vậy làm cách nào để đảm bảo được user của mình sẽ vui vẻ lên website của mình và sẽ vui vẻ quay lại vì thích nó và Performance của nó tuyệt vời? Mình sẽ hướng dẫn bạn vài tip và các bước để chúng ta có thể xây dựng web nhanh hơn nhé.

Tăng tốc website

Bỏ bớt HTTP Requests

Có một vài trường hợp, phần lớn thời gian tải web xuất phát từ các HTTP request bên ngoài. Tốc độ tải tài nguyên bên ngoài có thể thay đổi tuỳ theo cơ sở hạ tầng hoặc vị trí máy chủ của nhà cung cấp hosting.

Mục tiêu chung ở đây là đảm bảo rằng chúng ta có thể giảm được các HTTP request bên ngoài, nên chúng ta cần kiểm tra các request này và loại bỏ những tài nguyên không có lợi cho trải nghiệm người dùng như những hình ảnh không cần thiết, code JavaScript và CSS không cần thiết…

Code Splitting và Tree Shaking

Code Splitting và Tree Shaking là 2 kỹ thuật nữa được dùng để cải thiện Performance. Chúng ta phải tách code hay tree shake như thế nào cho đúng? Bạn có thể sử dụng các công cụ như Webpack, Rollup.

Code Splitting là một tính năng cho phép bạn chia code của mình thành nhiều nhóm hoặc thành phần khác nhau, sau đó có thể load theo yêu cầu hoặc load song song, còn Tree Shaking là loại bỏ code không cần thiết hoặc đã chết.

Lazy Loading

Lazy Loading là một mẫu Web Performance làm chậm quá trình load hình ảnh trên trình duyệt cho tới khi nào user cần nhìn hình đó và nó cũng là một cách tuyệt vời để tối ưu Performance. Nó đảm bảo website của bạn không quá cồng kềnh, và user của bạn có thể nhanh chóng download hình mà họ muốn xem.

Xem thêm Lazy Loading là gì.

Defer Scripts

Trì hoãn (defer) một script có nghĩa là chặn nó load đến khi nào mà các phần tử khác đã load hết. Khi bạn defer những file lớn hơn, như Javascript, bạn phải đảm bảo rằng phần còn lại của nội dung của bạn có thể load mà không bị chậm do chờ đợi các file lớn hơn load. Để thực hiện bạn chỉ cần thêm defer trong thẻ script như bên dưới:

  <script defer></script>

Tối ưu hình ảnh

Tối ưu hình ảnh trên web rất quan trọng. Theo HTTP Archive, 61% dung lượng page của website đến từ hình ảnh. Giờ chúng ta không muốn tất cả hình của mình chiếm hết chỗ trống đúng không nào.

CDN

Chúng ta có thể tối ưu đáng kể thời gian load page trên website bằng cách sử dụng Content Delivery Network. Một CDN có thể sử dụng để lưu trữ tài nguyên như hình ảnh và video mà chúng ta thường xuyên load trực tiếp vào webpage.

Khi bạn sử dụng CDN, bạn link nội dung tĩnh trên website của bạn đến một mạng lưới máy chủ mở rộng trên toàn cầu. CDN cho phép người truy cập site của bạn load dữ liệu từ server gần nhất của họ.

Nếu bạn sử dụng CDN, các tệp trên site của bạn sẽ tự động nén để chạy nhanh trên toàn cầu.

  CDN - Chỉ 1 giây làm đổi thay tâm trí khách hàng
  Cấu hình Redis Caching để tăng tốc site WordPress của bạn

Xài Caching

Caching là một kỹ thuật được sử dụng để lưu trữ tạm thời các page của web để giảm băng thông và cải thiện performance. Khi một user ghé qua website của bạn và page đó đã được lưu trữ vào cache.

Một trang được lưu trữ tương tự sẽ hiển thị đến user khi người đó quay lại lần nữa trừ khi nó được đổi kể từ lần lưu trữ cuối cùng. Việc này giúp tiết kiệm thời gian user phải đợi cho page load và làm mọi thứ nhanh hơn.

Prefetch Resources (tìm nạp trước tài nguyên)

Tìm nạp trước tài nguyên có thể cải thiện trải nghiệm dùng web của user và cải thiện đáng kể performance bằng cách tìm nạp các tài nguyên cần thiết và dữ liệu có liên quan trước khi cần đến chúng. Có 3 cách prefetch chính:

  • Link Prefetching: Nếu bạn chắc chắn là user sẽ click vào link riêng để điều hướng đến một vài trang, bạn có thể áp dụng cách prefetch này. Phương pháp này hữu ích cho những user có tương tác ổn định, như là chuyển đến trang shopping cart sau khi đã chọn một hoặc một vài món đồ.
<link rel="prefetch" href="/img/cat.png">
  • DNS Prefetching: Phương pháp này cho phép trình duyệt phân giải trước tên miền thành địa chỉ IP. Điều này giảm độ delay khi người dùng click vào link với DNS đã được prefetch, họ không cần phải đợi quá trình DNS tra cứu như thông thường.
<link rel="dns-prefetch" href="https://www.keycdn.com">
  • Prerendering: Phương pháp này là hiển thị toàn bộ trang hoặc một số yếu tố của nó trước.
<link rel="prerender" href="/second-page.html">

Các công cụ để đo lường tốc độ Web

Biết cách đo lường tốc độ website cũng quan trọng như việc cải thiện tốc độ nếu chúng ta không thoả mãn với tốc độ page hiện tại. Có thể sử dụng các công cụ chuyên dụng có sẵn để kiểm tra tốc độ. Một vài cái mình xin liệt kê bên dưới:

Kết luận

Tối ưu Web Performance có thể cải thiện đáng kể trải nghiệm người dùng trên web của bạn và quan trọng hơn nữa cho phát triển web của bạn khi mà các ứng dụng càng lớn và phức tạp.

Xem thêm việc làm web developer cực kỳ hấp dẫn tại TopDev

  Một số mẹo ít người biết để trang web chạy nhanh hơn gấp đôi!
  Học lập trình web với 13 tài liệu lập trình PHP không thể bỏ qua

26 công cụ và kỹ thuật trong Big Data có thể bạn chưa biết

cong-cu-va-ky-thuat-trong-big-data

Hôm nay mình sẽ giới thiệu đến các bạn một danh sách cực kỳ thú vị về công cụ và kỹ thuật trong Big Data, cũng như tất cả các tool mà Data Scientist và Data Engineer có thể sẽ cần để tạo platform và model.

  Chia sẻ Cuốn sách Khoa học Khám phá - Dữ Liệu Lớn (Big Data)

  Tổng hợp Cheat Sheets cho AI, Neural Networks, Machine Learning, Deep Learning và Big Data

Nhưng trước tiên, hãy tìm hiểu về Big Data, Machine Learning, Trí tuệ nhân tạo và Deep Learning thật sự là gì nhé:

Big Data là gì?

Big Data là một phương thức thu thập một lượng dữ liệu từ một hoặc nhiều nguồn. Từ đó, dùng dữ liệu để phân tích và đưa ra những giải pháp phù hợp nhất đúng với ngữ cảnh. Những tập dữ liệu lớn này có thể bao gồm các dữ liệu có cấu trúc, không có cấu trúc và bán cấu trúc, mỗi tập có thể được khai thác để tìm hiểu insights của khách hàng cũng như người dùng.

Có ba thành tố Big Data thường đặc trưng

  • Khối lượng dữ liệu: doanh nghiệp và tổ chức thu thập dữ liệu từ nhiều nguồn, gồm các giao dịch, social media, các kênh marketing truyền thống cũng như những kênh phổ biến và không phổ biến khác.
  • Nhiều loại dữ liệu đa dạng: Dữ liệu đến từ nhiều nguồn, nhiều dạng, hình ảnh, email, audio, cookies, số điện thoại, địa chỉ, điền form, các giao dịch online, v.v
  • Vận tốc mà dữ liệu cần được xử lý và phân tích để đáp ứng được nhu cầu sử dụng và tương tác với dữ liệu của tổ chức.

Tìm hiểu chi tiết Big Data là gì?

Liên hệ giữa Trí tuệ nhân tạo, Machine Learning và Deep Learning

  • Trí tuệ nhân tạo (AI): Là tên chung của lĩnh vực liên quan đến việc xây dựng các hành vi thông minh cho máy móc.
  • Machine Learning: Là một phần thuộc trí tuệ nhân tạo, sử dụng dữ liệu để tạo ra AI.
  • Deep Learning: 1 phương pháp của Machine Learning tiếp cận một dataset lớn.

công cụ và kỹ thuật trong big data

Xem thêm về Trí tuệ nhân tạo và Machine Learning tại Apple

Với cách hiểu này, chúng ta hãy cùng khám phá danh sách ngày hôm nay nhé:

Các công cụ và kỹ thuật hữu ích trong Big Data

Athena

AWS Athena là một dịch vụ được dùng để truy vấn trực tiếp các file trong S3 bucket bằng cách “dùng tới đâu, trả tới đó.” Sẽ dễ dàng để truy vấn data ở nhiều format khác nhau mà không cần phải sử dụng công cụ ETL để load nó trong database.

Dịch vụ này cũng có thể được sử dụng riêng, tích hợp với AWS Glue như là một Data Catalogue hoặc tích hợp với AWS Lambda như là một phần của cấu trúc lớn hơn.

Batch Processing (Xử lý hàng loạt)

Dự án Big Data phụ thuộc vào khả năng Data Scientist có thể xử lý terabyte hay petabyte của data. Các công cụ như Apache Flink có thể giúp bạn hoàn thành công việc sử dụng các dòng data hoặc xử lý hàng loạt.

Compute

Cần phải có các cơ sở hạ tầng để các Data Scientist xử lý các tập Data lớn. Chúng ta có thể sử dụng tự động hoá để đảm bảo có đủ khả năng xử lý khối lượng data.

Để việc quản lý AWS dễ dàng hơn, mình xin giới thiệu với các bạn công cụ Predictive Auto Scaling, sử dụng Machine Learning để mở rộng quy mô tính toán các tài nguyên hỗ trợ Machine Learning.

Docker

Việc chia sẻ kết quả của các thí nghiệm khoa học dữ liệu chưa bao giờ là dễ dàng cả. Các hệ điều hành và các thư viện R không phải lúc nào cũng tương thích tuỳ thuộc vào người bạn đang chia sẻ. Tính bảo mật cũng là một vấn đề khi chia sẻ các bộ Data và dashboard cuối cùng giữa những người dùng.

Và đó là lý do Docker ra đời. Các Data Engineer có thể cung cấp cho Docker những hình ảnh “đóng băng” hệ điều hành và các thư viện để các sandbox hoặc sản phẩm cuối cùng được chia sẻ an toàn.

Xem thêm Docker là gì?

Nguyên tắc đạo đức

Sử dụng thông tin cá nhân của khách hàng trong việc phân tích cần phải được thực hiện nghiêm túc và phải có nguyên tắc để đảm bảo an toàn. Việc này không chỉ đơn thuần là tuân thủ theo các yêu cầu pháp lý, mà các mô hình không nên có bất cứ loại sai lệch nào, và người tham gia cũng phải biết rõ dữ liệu của họ đang được sử dụng ở đâu.

Fuzzy Logic

Fuzzy Logic được sử dụng để tính khoảng cách giữa 2 string. Nó cũng giống cách sử dụng ký tự đại diện trong SQL và các biểu thức chính quy trong những ngôn ngữ khác.

Trong thế giới của khoa học dữ liệu, chúng ta có thể sử dụng thư viện Fuzzy Wuzzy Python trên các tập dữ liệu lớn.

GPU

Graphics Processing Units (GPUs) được thiết kế để xử lý hình ảnh, vì chúng được tạo thành từ nhiều lõi. Chúng có thể xử lý các lô dữ liệu khổng lồ và thực hiện cùng một nhiệm vụ nhiều lần, và đó cũng là lý do chúng có thể được sử dụng trong Khoa học dữ liệu.

Hadoop

Dự án Hadoop nguồn mở là một tập hợp các tiện ích tách riêng với Lưu trữ và Tính toán để chúng có thể được thu nhỏ hay mở rộng khi cần thiết.

Hadoop Distributed Files System (HDFS) – hệ thống phân phối file Hadoop – chia các file thành các khối logic cho lưu trữ, Spark, MapReduce hoặc công cụ khác có thể tiếp quản để xử lý (mình sẽ nói rõ hơn ở phần sau).

Fun fact: Hadoop là tên của con voi đồ chơi của con trai người tạo ra nó (Hình bên dưới).

Hadoop - công cụ và kỹ thuật trong big data

Nhận diện hình ảnh

Tensorflow là một framework Machine Learning được sử dụng để train các mô hình dùng Neural Networks để nhận dạng hình ảnh.

Neural Networks chia input thành nhiều vector mà có thể dùng để giải thích, phân cụm và phân loại.

Jupyter Notebook

Jupyter Notebook chạy code, thực hiện phân tích thống kê và trình bày dữ liệu trực quan tất cả ở cùng một nơi. Nó hỗ trợ 40 ngôn ngữ và được đặt tên là Jupyter, giống như cách mà những quyển sổ của Galileo ghi lại các mặt trăng của Jupiter.

Kaggle

Nếu bạn đang tìm kiếm công cụ để luyện tập hoặc cần một bộ dữ liệu cho một dự án, thì Kaggle chính là nơi dành cho bạn. Luyện tập với một vài bộ data trên đó là bạn đã có thể tham gia các cuộc thi. Cộng đồng trên đây vô cùng thân thiện và bạn có thể sử dụng các công cụ mà bạn tự chọn.

Kỹ thuật hồi quy tuyến tính

Hồi quy là một trong những kỹ thuật thống kê được sử dụng trong Khoa học dữ liệu để tiên đoán một biến ảnh hưởng đến biến khác như thế nào. Hồi quy tuyến tính có thể sử dụng để phân tích mối quan hệ giữa các hàng xếp hàng trong siêu thị và sự thoả mãn của khách hàng, hay giữa nhiệt độ và giá bán kem.

Nếu bạn nghĩ có một mối quan hệ nào đó giữa 2 thứ nào đó, bạn có thể dùng hồi quy để chứng minh nó.

Xem thêm các thuật toán trong Machine Learning dành cho người mới bắt đầu

MapReduce

MapReduce là một phần tính toán của hệ sinh thái Hadoop. Khi chúng ta lưu trữ data có sử dụng HDFS, chúng ta có thể sử dụng MapReduce để xử lý sau đó. MapReduce xử lý data trong các khối logic, sau đó xử lý chúng song song trước khi tổng hợp các khối trở lại.

Natural Language Processing (NLP)

NLP như là cánh tay phải của AI, có liên quan đến việc làm thế nào máy tính có thể hiểu được ý nghĩa của ngôn ngữ con người nói. Nếu bạn đã từng dùng Suri, Cortana hay Grammarly, bạn đã gặp NLP rồi đấy.

Xem thêm về kỹ thuật NLP điều khiển các thiết bị IoT

Overfitting

Cả overfitting lẫn underfitting đều dẫn đến việc tiên đoán kém.

Overfitting – xảy ra khi một model quá phức tạp hoặc quá nhiễu. Model ghi nhớ và khái quát hoá tất cả dữ liệu đang train và không thể làm cho khớp giữa các tệp dữ liệu với nhau được.

Underfitting – xảy ra khi một model quá đơn giản và không có đủ thông số để nắm bắt xu hướng.

Pattern Recognition (Nhận dạng Pattern)

Nhận dạng Pattern được dùng để phát hiện sự tương đồng hoặc bất thường trong các tập dữ liệu. Ứng dụng thực tế của nó là trong nhận diện dấu vân tay, phân tích hoạt động địa chấn và nhận diện giọng nói.

Định lượng và định tính

Nếu bạn từng là kỹ sư và  bước vào lĩnh vực Khoa học dữ liệu, có thể bạn sẽ cần kiểm tra lại số liệu thống kế của mình đấy. Tìm hiểu thêm về các kỹ năng cần thiết để chuyển vai trong cuộc phỏng vấn hấp dẫn này với Julia Silge của Stack Overflow.

Real Time

Apache Kafka là một hệ thống chính/phụ cho phép stream data từ log, hoạt động web và hệ thống giám sát.

Kafka được ứng dụng để:

  • Tạo các đường stream data real-time đáng tin cậy giữa các hệ thống và ứng dụng.
  • Tạo các ứng dụng stream real-time để biến đổi hoặc phản ứng lại các dòng data.

Spark

Apache Spark, giống MapReduce, là một công cụ để xử lý data.

Spark – có thể xử lý bộ nhớ trong nhanh hơn nhiều. Sẽ hữu ích nếu data cần được xử lý lặp đi lặp lại và trong thời gian thực.

MapReduce – Phải đọc và ghi vào đĩa nhưng có thể hạot động với các tập dữ liệu lớn hơn nhiều so với Spark.

Testing

AI có những ứng dụng thực tế trong Marketing với các đề xuất sản phẩm real-time, trong Sales với hệ thống VR giúp người mua hàng đưa ra quyết định và hỗ trợ khách hàng với NLP.

Và một ứng dụng mới phổ biến khác của AI đó là kiểm thử phần mềm. AI có thể được dùng để xếp ưu tiên thứ tự test, tự động hoá và tối ưu hoá các trường hợp và giúp QA bớt tẻ nhạt hơn.

Tìm hiểu thêm Kiểm thử phần mềm là gì

Dữ liệu phi cấu trúc

Dữ liệu có cấu trúc có thể được lưu trữ trong CSDL quan hệ là các cột, hàng và bảng.

Khi trở thành dữ liệu phi cấu trúc gồm hình ảnh, video, text, việc lưu trữ sẽ thay đổi. Data Lakes có thể giúp bạn lưu trữ cả 2 loại mà chỉ với ít chi phí.

Data được lưu trữ ở đây được lấy ra và đọc khi có yêu cầu và cũng tổ chức dựa trên nhu cầu, điều này làm cho nó phổ biến với nhiều Data Scientist, những người thà giữ những điều kỳ quặc thay vì làm sạch và tổng hợp lại.

Khối lượng và vận tốc

Năm 2001 Big Data được định nghĩa bởi 3 chữ V:

  • Volume (Khối lượng)
  • Velocity (Vận tốc)
  • Variety (Sự đa dạng)

Cho đến ngày nay thì có thêm một vài chữ V nữa là:

  • Value (Giá trị)
  • Veracity (Độ chính xác)
  • Variability (Sự thay đổi)
  • Visualisation (Hình dung)

Đã có tranh luận về việc liệu những thứ này có liên quan hay thực sự mô tả Big Data không. Nhưng nếu bạn đang nghiên cứu về ngành này thì chắc chắn chúng sẽ xuất hiện thôi.

Web Scraping

Các trường hợp cần quét web trong các dự án Big Data là:

  • Kéo data từ các trang social media hoặc diễn đàn để phân tích cảm tính
  • Lấy giá và sản phẩm để so sánh
  • Phân tích nội dung site để xếp hạng và so sánh nội dung

Để bắt đầu sử dụng Python, cài đặt Scrapy để trích xuất dữ liệu có cấu trúc từ các trang web.

XML

Định dạng XML và JSON phổ biến trong Big Data vì giúp lưu trữ và vận chuyển dữ liệu. Để sử dụng với Python, hãy tìm hiểu trên ElementTree để phân tích XML và json để phân tích JSON

NumPy

NumPy được sử dụng trong Python để tích hợp với CSDL, thực hiện các tính toán khoa học và thao tác với các mảng.

ZooKeeper

Apache ZooKeeper luôn giữ cho các cluster chạy và available. Nó duy trì mạng bằng cách gửi tin nhắn qua lại và đảm bảo:

  • Tính nhất quán tuần tự. Cập nhật từ khách hàng sẽ được áp dụng theo thứ tự mà chúng được gửi.
  • Tính nguyên tố. Cập nhật thành công hoặc thất bại. Không có kết quả một phần.
  • Hiển thị hình ảnh hệ thống đơn. Một khách hàng sẽ thấy cùng một chế độ xem bất kể máy chủ nào mà nó kết nối.
  • Tính tin cậy. Khi bản cập nhật đã xong, nó sẽ tồn tại cho đến khi khách hàng ghi đè lên lại.
  • Tính kịp thời. Quan điểm của khách hàng về hệ thống được đảm bảo cập nhật trong một thời gian nhất định.

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

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

  Thời của Big Data: Càng to thì càng tốt

  Lương IT nghìn USD nếu thành thạo Cloud, Big Data, AI

Top 5 kỹ năng mềm mà các kỹ sư phần mềm cần phải biết

  Rèn giũa mindset của một Data Scientist
  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

Cũng giống như với các kỹ năng về kỹ thuật chuyên môn, kỹ năng mềm cho Software Developer cũng vô cùng quan trọng.

Không ai có thể làm việc một cách đơn độc được. Mọi người đều phải có sự giao tiếp với đồng đội, đồng nghiệp, quản lý,… trong quá trình làm việc. Do đó, kỹ năng giao tiếp giữa mọi người trong team với nhau cũng rất cần thiết.

Kỹ năng mềm bao gồm những kỹ năng như giao tiếp tốt, trung thực, làm việc nhóm, liêm chính, có tổ chức, sự đồng cảm,…

Dưới đây là 5 kỹ năng mềm hàng đầu mà TopDev muốn chia sẻ với các kỹ sư phần mềm.

Khả năng phân tích sắc bén

Từ ngày đầu tiên trong công việc của bạn, chúng ta sẽ phải đối mặt với rất nhiều vấn đề, hết lần này đến lần khác, có thể nói là liên tiếp. Để giải quyết chúng, chúng ta phải sẵn sàng phân tích từng vấn đề một cách khách quan nhất.

Và với khả năng phân tích của bản thân sẽ giúp chúng ta hiểu tất cả các yếu tố thiết yếu của vấn đề, cũng như sẽ giúp chúng ta đưa ra nhiều giải pháp, từ đó có thể chọn lựa ra giải pháp phù hợp nhất để giải quyết các vấn đề đó.

Do đó, khả năng phân tích sắc bén là nền tảng của tất cả các hoạt động giải quyết vấn đề đối với lập trình viên.

Đổi mới và sáng tạo

Trong những lần chúng ta nỗ lực giải quyết các vấn đề, chúng ta sẽ dần dần phát hiện ra kỹ năng mềm này. Có thể xem kỹ năng này là tài sản quý giá nhất của một người nào đó.

Đối với nhiều vấn đề thường gặp trong quá trình làm việc của bạn, chính suy nghĩ thăng tiến sẽ thúc đẩy bạn đưa ra một giải pháp phù hợp. Tuy nhiên, trong một lúc nào đó, chúng ta sẽ gặp phải một vấn đề kỳ lạ mà các giải pháp thông thường sẽ không mang lại cho chúng ta kết quả tốt. Nói chính xác hơn, để giải quyết những vấn đề này, cần thêm tư duy và cách tiếp cận sáng tạo.

Xem thêm cách tư duy như một programmer

Nhiệt tình

Kỹ năng mềm này cần bạn để tâm nhiều đến thái độ của mình. Sự nhiệt tình trong công việc giúp chúng ta duy trì một thái độ tích cực mọi lúc mọi nơi. Đó là một bí mật thành công lớn trong cuộc sống cũng như trong sự nghiệp của bạn sau này.

Hãy nuôi dưỡng sự nhiệt tình của mình!

Làm việc theo nhóm

Mặc dù các nhà phát triển dành phần lớn thời gian của mình để làm việc độc lập, nhưng cộng tác với một nhóm nào đó vẫn rất quan trọng. Hơn nữa, đó luôn được xem là cách tốt nhất để tạo ra một sản phẩm tuyệt vời, và dĩ nhiên chỉ khi làm việc nhóm với nhau hiệu quả thì điều đó mới xảy ra.

Trong trường hợp này, các nhà phát triển nên ghi nhớ và có ý thức về các mục tiêu của nhóm đề ra cũng như cố gắng làm việc để đạt được chúng.

Bên cạnh đó, có nhiều cách để tương tác với nhau mà không cần làm việc trực tiếp nhưng vẫn đạt hiệu quả cao.

Ví dụ: làm việc trực tuyến với Slack, Hangouts, Zoom, Miro,… là những cách tuyệt vời để giữ liên lạc và cập nhật thông tin với nhau trong nhóm mà không cần gặp mặt.

Sẵn sàng phát triển bản thân thông qua các lời phê bình

Chúng ta không muốn bị ai đó chỉ trích, tất cả mọi người đều như vậy. Tuy nhiên, việc bị chỉ trích là điều không thể tránh khỏi đối với tất cả chúng ta, nhưng nhờ nó mà chúng ta có thể phát triển bản thân và làm việc chuyên nghiệp hơn sau này.

Thật đúng là như vậy. Thông qua việc thu thập thông tin phản hồi về bản thân, chúng ta luôn được khuyến khích duy trì sự cởi mở và trung thực trong nhóm, từ đó niềm tin được xây dựng theo thời gian là sự đền đáp xứng đáng cho chúng ta sau này.

Thay vì bảo vệ lợi ích của bạn thân, một nhóm có thể tập trung vào việc cải thiện sự hợp tác giữa các thành viên với nhau, cùng nhau giải quyết các vấn đề, tăng năng suất làm việc và đạt được các mục tiêu chung.

Nói chung, kỹ năng mềm cho Software Developer rất quan trọng, giúp làm việc nhóm hiệu quả hơn cũng như duy trì mối quan hệ với những người khác. Công việc sẽ mất đi ý nghĩa vốn có của nó nếu bạn làm việc mà không tương tác với mọi người xung quanh.

Cảm ơn bạn đã đọc bài viết!

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

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

TopDev

  Junior developer là gì? Những quy tắc bất biến giành cho Junior developer
  Bài học về kỹ năng giải quyết vấn đề - Hãy tư duy như một Lập trình viên!

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/