Home Blog Page 142

Visual Studio Code Extensions

visual studio code

Bài viết được sự cho phép của tác giả Khiêm Lê

Bài viết này là bài viết chia sẻ nhanh về các Visual Studio Code (VSCode) extensions mà mình đang sử dụng và có thể các bạn cũng sẽ thích nó. Hãy cùng vào nội dung bài luôn nhá!

Theme

Chắc chắn theme là một yếu tố cũng quan trọng khi các bạn quyết định sử dụng một Code Editor nào đó. Nếu như nhìn vào một cái theme đẹp, trực quan, dễ đọc code, thân thiện với mắt hơn khi có Dark Mode thì chắc chắn bạn sẽ thích hơn là code bằng cái Notepad ?, dĩ nhiên rồi.

Theme mà mình đang sử dụng là Material Theme, đây không chỉ là một theme duy nhất mà là một pack có nhiều Color Palatte cho các bạn thoải mái theo sở thích. Cá nhân mình thì thích dùng Ocean High Contrast và Palenight High Contrast, khi dùng High Contrast thì các thành phần khác Edit Area như Terminal, Debug Console, Sidebar… sẽ có màu sắc đậm hơn, các bạn sẽ dễ phân biệt hơn.

Ngoài Material Theme thì mình cũng có đổi một số theme khác cho đỡ nhàm chán như Dracula OfficialGithub ThemeNight Owl. Hầu hết các theme mình dùng đều là Dark Theme để code buổi tối cho đỡ mỏi mắt.

Cài rồi thì nhớ active nó lên nha ?!

settings.json
{
    "workbench.colorTheme": "Theme Name"
}

Icon Pack

Đã nói đến Theme thì không thể nào bỏ qua Icon Pack được. Nếu như các bạn cài Material Theme thì nó cũng đã có kèm theo sẵn một vài Icon Pack cho các bạn lựa chọn phù hợp với theme đó luôn. Tuy nhiên thường thì mình sử dụng Pack khác chứ không dùng nó.

Có 2 gói Icon Pack phổ biến nhất mà mình cũng thường switch qua lại cho đỡ nhàm là Material Icon Theme và vscode-icons. Khi sử dụng thì bạn cũng nên lưu ý có thể màu của Icon bị trùng tông với nền Sidebar nên cần chọn theo theme sao cho nó dễ nhìn nữa.

Let’s active it!

settings.json
{
    "workbench.iconTheme": "Icon Pack Name"
}

Font

Đã custom theme và icon pack thì không thể nào bỏ qua phần font chữ được. Font chữ mình sử dụng cho hầu hết IDE và Editor trong máy mình đó chính là Fira Code, hoặc các bạn cũng có thể tải về từ Google Fonts.

Cái hay của font này đó chính là nó hỗ trợ ligratures, như một lập trình viên, bạn có thể hiểu được các ký tự như >=, <=, !=… nhưng nó lại không đúng theo cách mà mình học toán học. Do đó, khi cài Fira Code Font, các ký tự ấy sẽ được chuyển thành những dấu đúng như trong toán học chúng ta đã học.

Visual Studio Code Extensions
Ligratures Demo

Mặc định VSCode không bật tính năng Font Ligatures nên bạn sẽ cần bật nó lên.

settings.json
{
    "editor.fontFamily": "'Fira Code'",
    "editor.fontLigatures": true
}

Prettier – Code formatter

Prettier – Code formatter có thể nói là một extension cực kỳ hữu ích, nó giúp code của bạn có một style chuẩn, không bị thiếu, thừa dấu tab, cách, đặt dấu ngoặc lung tung… Hoặc khi các bạn paste code vào, có thể nội dung đoạn code rất dài, format lại rất mất thời gian thì Prettier sẽ giúp bạn.

Nói chung là cực kỳ hữu ích, đặc biệt là với mấy bạn lười format lúc code. Theo cá nhân mình thì bạn vẫn nên tập thói quen code theo style chuẩn, đừng quá ỷ lại vào plugins, extensions, khi mà không có nó thì bạn sẽ code như một newbie đấy ?.

Thường thì mình sẽ bật Format On Save và Format On Paste để nó luôn format mỗi lần mình save file hay paste code vào.

settings.json
{
  "editor.formatOnSave": true,
  "editor.formatOnPaste": true
}

Code Spell Checker

Code Spell Checker chắc chắn không thể nào thiếu với một người dốt Anh Văn mà học đòi sài tiếng Anh như mình được ?. Code mà bị sai chính tả thì nó không thể nào chấp nhận được, vậy nên Code Spell Checker sẽ giúp bạn phát hiện ra những từ bị sai và underline nó. Nếu như đó là một từ mới hoặc từ viết tắc… mà Code Spell Checker không hiểu, bạn cũng có thể thêm nó vào Dictionary để nó không warning nữa.

Visual Studio Code Extensions
Code Spell Checker Example
Visual Studio Code Extensions
Code Spell Checker Suggestion

Better Comments

Better Comments là một extension cực kỳ hữu ích, nó giúp bạn highlight comment để dễ đọc hơn, mỗi loại comment sẽ có một màu sắc khác nhau, bạn sẽ không bao giờ bị nhầm giữa đống comment như rừng trong khi code nữa. Ngoài ra, bạn có thể custom màu theo sở thích của bạn, cá nhân mình thấy màu sắc mặc định khá là đẹp và hợp lý rồi nên mình không custom cái gì cả.

Visual Studio Code Extensions
Better Comments

Bracket Pair Colorizer

Bracket Pair Colorizer là một extension highlight khác nữa, extension này sẽ giúp bạn highlight các dấu ngoặc, những cặp dấu ngoặc thì đương nhiên chúng sẽ cùng màu, tuy nhiên, chắc chắn bạn đã từng gặp trường hợp như vậy:

print(max(a, max(b, max(c, d))))

Một loạt các dấu ngoặc rất khó nhìn và nhận biết nó kết thúc của dấu nào trước đó, Bracket Pair Colorizer sẽ giúp bạn highlight chúng với các màu khác nhau và từ đó, bạn có thể dễ dàng phân biệt được chúng. Extension này thì có 2 phiên bản, Bracket Pair Colorizer và Bracket Pair Colorizer 2, cái nào cũng có thể sử dụng được tốt, nhưng mà có cái mới dại gì mà không dùng ?.

Ngoài ra thì nó còn có các line chạy từ dấu mở đến đóng ngoặc, tức là bao quát block mà các bạn đang code, vậy nên mọi thứ sẽ cực kỳ clear. Các bạn cũng có thể custom lại các màu của dấu nếu muốn.

Visual Studio Code Extensions
Bracket Pair Colorizer

Code Runner

Code Runner là một extension giúp bạn run code dễ dàng hơn, không cần dùng comment. Ví dụ như bạn làm việc với python, tất cả những gì bạn cần làm là nhấn ctrl + alt + N, và code của bạn được thực thi ngay lập tức mà không cần phải “python path_to_file” phiền phức.

Ngoài ra thì Code Runner hỗ trợ rất nhiều ngôn ngữ khác nhau, các bạn có thể tham khảo trên VSCode Marketplace. Mặc định thì khi run bằng Code Runner, nó sẽ run và in kết quả ra tab Output nên bạn không thể tương tác với console app được. Thêm nữa là khi chạy code mình hay quên save lại nên nó chạy code cũ. Để giải quyết thì mình bật Save All File Before Run và chạy app trong Terminal để mình có thể tương tác được.

settings.json
{
  "code-runner.runInTerminal": true,
  "code-runner.saveFileBeforeRun": true,
  "code-runner.saveAllFilesBeforeRun": true
}

Live Server

Mình không phải là một web developer, mình chỉ biết sơ về web thôi, mình dùng những CSS, HTML, JS đơn thuần để custom một chút trên blog khiemle.dev của mình, vậy nên Live Server là một extension cực kỳ hữu ích.

Với Live Server, khi bạn code file .html, bạn có thể nhấn Go Live, ngay lập tức một localhost sẽ được tạo và một brower tab sẽ mở file html của bạn. Bạn có thể chỉnh sửa thoải mái file html và khi bạn nhấn Save, trình duyệt sẽ tự động refresh, rất là hữu ích đúng không nào!

Tổng kết

Trên đây là những extensions mà mình sử dụng, mình còn sử dụng thêm một số extension khác, tuy nhiên không phải ai cũng cần và mình chỉ liệt kê những extension mình nghĩ ai cũng nên dùng. Không biết mình còn thiếu extension nào không, các bạn đang sử dụng extension nào, hãy comment phía bên dưới để mình biết nha! Cảm ơn các bạn đã theo dõi bài viết!

Bài viết gốc được đăng tải tại khiemle.dev

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

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

10 Lý do nên học Python trong năm 2024

python
10 Lý do nên học Python trong năm 2020

Bài viết được sự cho phép của tác giả Nguyễn Chí Thức

Từ năm 2016, Python đã thay thế Java trở thành ngôn ngữ phổ biến nhất trong các trường cao đẳng và đại học trên thế giới và kể từ đó Python chưa bao giờ dừng lại.

Python đang phát triển và lớn mạnh hơn theo thời gian. Nếu bạn đọc tin tức về lập trình và công nghệ hoặc bài đăng trên blog thì bạn có thể nhận thấy sự tần suất Python xuất hiện ngày càng tăng.

Bởi vì nhiều cộng đồng lập trình viên phổ biến bao gồm StackOverflow và CodeAcademy đang đề cập đến sự trỗi dậy của Python như một ngôn ngữ lập trình chính.

Nhưng, câu hỏi lớn nhất là TẠI SAO một lập trình viên nên học Python?

Python đang phát triển mạnh. OK, điều này tốt không? TỐT.

Nhưng điều này không có nghĩa là Java đang đi xuống hoặc C ++ đang suy giảm.

Đối với người mới bắt đầu học lập trình, hãy bắt đầu với Python vì nó rất dễ học và đủ mạnh để xây dựng một ứng dụng web và xây dựng các quy trình tự động hóa.

Trên thực tế, một vài năm trước, Script là lý do chính để học Python và đó cũng là lý do đầu tiên và quan trọng nhất mà Python thu hút mình hơn Perl.

Đối với các lập trình viên có kinh nghiệm hoặc ai đó đã biết về Ruby, Java hoặc JavaScript, học Python có nghĩa là có được một công cụ mới và mạnh mẽ trong kho vũ khí của mình.

Và trong số những người mình biết, mình vẫn chưa thấy ai nói “KHÔNG” với một công cụ tốt cả.

Theo như cuốn sách “Tự động hóa những thứ nhàm chán với Python” đã nói, Python cung cấp khả năng tự động hóa những việc tầm thường và cho phép bạn tập trung vào những thứ thú vị hơn.

Nếu bạn là một lập trình viên có kinh nghiệm, bạn hoàn toàn có thể tự động hóa quy trình với rất nhiều ngôn ngữ lập trình.

Nhưng không nhiều ngôn ngữ cung cấp đủ nhiều công cụ để làm việc với APIs, Thư viện, Framework, Data Sicense, Machine Learning, Web …

Các việc làm lập trình python cho bạn

10 Lý do nên học Lập trình Python

Nếu bạn đang suy nghĩ để học Python nhưng không chắc tại sao bạn mình lại nên học thì đây là 10 lý do làm nổi bật lợi ích của việc học Python vào năm 2024.
Mặc dù, các câu hỏi phụ thuộc nhiều hơn vào việc người đang hỏi là ai, muốn gì…

Ví dụ: Đối với người mới bắt đầu học lập trình, nên học Python vì đơn giản là Python rất dễ học.

Tương tự, đối với một lập trình viên có kinh nghiệm đang muốn học về Khoa học dữ liệu và Học máy, nên chọn Python vì Python đã trở thành ngôn ngữ lập trình được sử dụng nhiều nhất, nó có các API và thư viện mạnh mẽ có sẵn cho AI, Khoa học dữ liệu và Học máy.

1. Data sai ần (Data Sicense) là cần có “Pai thần” (Python)

Đây là lý do duy nhất, lớn nhất khiến nhiều lập trình viên muốn học Python vào năm 2024. Mình biết nhiều bạn bè của mình đã chán công việc lập trình Java, lập trình PHP.

Bởi vì đã hàng chục năm học làm việc với nó rồi. Họ muốn tìm kiếm thứ gì đó thú vị, thử thách và cơ hội cao hơn nữa.

Nhưng, Tại sao Python lại là ngôn ngữ yêu thích cho Khoa học dữ liệu và Học máy?

Không phải là ngôn ngữ lập trình R đã được coi là tốt nhất cho mảng này cách đây không lâu à?

Mình nghĩ là các thư viện và framework phong phú mà Python cung cấp, ví dụ: PyBrain, NumPy và PyMySQL trên AI, DataScience và Machine learning chính là một trong những lý do đó.

Một lý do khác là sự đa dạng, Python cho phép bạn làm được nhiều hơn R.

Ví dụ: Bạn có thể tạo tập lệnh tự động hóa, lập trình web, lập trình ứng dụng…

  Viết 1 Test Case Đơn Giản Với Python Selenium WebDriver

2. Học Python thì làm Machine Learning dễ hơn

Đây là một lý do khác khiến các lập trình viên đua nhau học Python vào năm 2024.

Sự phát triển của Học máy (Machine Learning) là một hiện tượng trong vài năm qua và nó nhanh chóng thay đổi mọi thứ xung quanh chúng ta.

Các thuật toán trở nên tinh vi từng ngày, ví dụ tốt nhất là Thuật toán tìm kiếm của Google, giờ đây Google có thể trả lời chính xác những gì bạn đang muốn tìm kiếm.

Xu hướng chatbot, trợ lý ảo và Facebook hoàn toàn được điều khiển bởi Thuật toán tương tự.

Nếu bạn quan tâm đến học máy, muốn thực hiện một dự án hoặc chỉ muốn thử nghiệm, Python chính là ngôn ngữ lập trình chính duy nhất giúp việc này trở nên dễ dàng hơn.

Mặc dù có các thư viện Học máy cũng có sẵn trong Java, nhưng bạn sẽ tìm thấy nhiều nội dung hơn khi tìm hiểu về Python vì cộng đồng lập trình viên Python nghiên cứu về Khoa học dữ liệu và Máy học nhiều hơn bất cứ cộng đồng nào khác.

3. Python có thể Lập trình Web

Bạn muốn lập trình web một lý do khác để nên học Python. Nó cung cấp rất nhiều thư viện và framework tốt, ví dụ: Bạn có thể dễ dàng lập trình web với Framework Django và Flask.

Các nhiệm vụ mất hàng giờ PHP mới xử lý được thì có thể được hoàn thành trong vài phút đối với Python.

Python cũng được sử dụng rất nhiều để xây dựng các trang web dạng như mạng xã hội. Reddit chính là một trong số đó

Note: Theo báo cáo khảo sát của Stack Overflow thì Reddit là mạng xã hội phổ biến nhất đối với các Lập trình viên.

4. Nói Python dễ học Thứ Hai thì không ngôn ngữ nào dám chọn Thứ Nhất

“Dễ học” chính là lý do để người mới bắt đầu học lập trình chọn học Python.

Khi bạn lần đầu tiên bắt đầu với lập trình, bạn chắc chắn không muốn bắt đầu với một ngôn ngữ lập trình có cú pháp khó, trừu tượng đâu.
Python vừa dễ đọc vừa đơn giản. Việc cài đặt cũng rất dễ dàng, bạn không cần phải xử lý bất kỳ vấn đề về đường dẫn nào như trong lập trình Java hoặc các vấn đề về trình biên dịch như trong C ++.

Chỉ cần bấm Cài đặt Python và bạn đã hoàn tất.

Trong khi cài đặt, nó chỉ yêu cầu thêm một bước cài đặt PATH nhỏ, nếu bạn muốn chạy Python ở bất cứ đâu trên máy tính của mình mà thôi.

  71 trích đoạn code Python cho các vấn đề hàng ngày của bạn

5. Python có cộng đồng lập trình viên cực kỳ lớn

Học lập trình là một quá trình tự học rất nhiều. Nhưng không phải tự học là bạn chỉ mua sách về đọc.

Những lúc bí code hay muốn tìm tài liệu, muốn xem video hướng dẫn thì bạn chẳng phải chạy lên Google, Youtube, Stack Overflow mà hỏi hay sao?

Tất cả những tài nguyên, tài liệu, video trên Internet đó là do cộng đồng lập trình viên họ thảo luận, họ đăng tải, họ up lên.
Tài nguyên nhiều tương đương với Cộng đồng Python lớn.

Lý do là vì:

  • Thời gian phát triển đã lâu, từ năm 1991
  • Số lượng người đóng góp lớn thứ 3 trên Github
  • Công nghệ phổ biến thứ 4 theo Khảo sát của Stack Overflow năm 2019

6. Python có một bộ thư viện và Framework siêu to khổng lồ

Một trong những điểm tương đồng giữa Python và Java là có lượng lớn các thư viện, Framework và modules nguồn mở có sẵn để làm bất cứ điều gì bạn muốn làm.

Nó làm cho việc phát triển ứng dụng thực sự dễ dàng. (Chỉ cần Copy – Paste là xong )

Bạn thử tưởng tượng, bạn muốn lập trình một trang web mà không có Spring trong Java hoặc Django và Flask trong Python xem.

Nó quá Khổ.

Có Framework làm cho công việc của bạn đơn giản, vì việc của bạn lúc này là chỉ cần tập trung vào Business logic thôi.

Python có nhiều thư viện cho các nhu cầu khác nhau. Django và Flask là hai trong số phổ biến nhất để lập trình web. NumPy và SciPy là phổ biến nhất dành cho Khoa học dữ liệu.

Trên thực tế, Python có một trong những bộ sưu tập tốt nhất về thư viện Khoa học dữ liệu và Học máy như TensorFlow, Scikit-Learn, Keras, Pandas và nhiều hơn thế nữa.

Nếu bạn thấy thú vị và muốn tìm hiểu thêm ngay về các thư viện Học máy của Python, mình khuyên bạn trước tiên, hãy học Python cơ bản ngay nhé.

Sau đó chỉ cần học “Sử dụng Framework” là xong.

7. Khả năng tự động hóa trong Python rất Pro

Khi lần đầu tiên mình biết về Python là do mình có nhu cầu viết một đoạn Script. Mình đã làm việc với một ứng dụng nhận tin nhắn qua UDP và nó có một vấn đề, đó là không thấy tin nhắn trong nhật ký.

Mình muốn kiểm tra xem liệu mình có nhận được bất kỳ traffic UDP nào trên box đó và port đó hay không nhưng mình không thể tìm thấy một lệnh UNIX tiện dụng để làm điều đó.

Một người bạn của mình, người ngồi cạnh mình đang học Python và anh ấy đã viết một extension chỉ trong 5 phút để chặn tin nhắn UDP bằng một trong các Module của Python.

Lúc đó, mình đã rất ấn tượng với thời gian anh ấy viết một công cụ như vậy. Tốc độ này đã làm nổi bật lên sức mạnh của Python khi viết Script, công cụ và tool tự động hóa.

8. Python là Đa-zi-năng

Một trong những điều mình thích về Python là tính Đa-zi-năng của nó.

Nó không bị ràng buộc với chỉ một nhiệm vụ, ví dụ: R rất tốt về Khoa học dữ liệu và Học máy nhưng lặn mất tăm khi nói đến lập trình web.

Học được Python có nghĩa là bạn có thể làm rất nhiều thứ.

Bạn có thể lập trình các trang web của mình bằng Django và Flask, có thể thực hiện nhiệm vụ Phân tích dữ liệu bằng NumPy, Scipy, Scikit-Learn và NLTK.

Ở mức tối thiểu, bạn có thể sử dụng Python để viết các tập lệnh để tự động hóa nhiều công việc hàng ngày của bạn.

9. Python có nhiều công việc và khả năng phát triển lớn

Python đang phát triển rất nhanh và đang định nghĩa xu hướng mới.

Có ai mà không muốn học một ngôn ngữ lập trình lớn vẫn đang tiếp phát triển mạnh ở thời điểm mới bắt đầu sự nghiệp lập trình viên cơ chứ?

Nó không chỉ giúp bạn có được một công việc nhanh chóng mà còn giúp tăng tốc sự nghiệp của bạn.

Và…

Đối với người mới bắt đầu, đây mới là lý do quan trọng nhất để chọn học lập trình Python.

10. Lương Lập trình viên Python cao ngất ngưởng

Các lập trình viên Python là một trong những lập trình viên được trả lương cao nhất, đặc biệt là về Khoa học dữ liệu, Học máy và Lập trình web.

Trung bình, họ được trả lương rất tốt, từ 70.000 USD đến 150.000 USD tùy thuộc vào kinh nghiệm, địa điểm và lĩnh vực chủ chốt của họ.

Tại việt Nam, theo Khảo sát của Top Dev, Kỹ sư Khoa học dữ liệu được trả lương lên tới 2.500 $ mà vẫn khó kiếm người.

Nếu bạn quan tâm đến việc tìm hiểu thêm về các công việc công nghệ có mức lương cao, mình khuyên bạn nên học Python ngay hôm nay!

Lời kết

Đó là tất cả về 10 lý do quan trọng nên học lập trình Python vào năm 2024.

Như mình đã nói, điều quan trọng là phải biết lập trình trong thế giới mà công nghệ thông tin làm chủ. Nếu bạn muốn làm nghề lập trình nhưng chưa từng học lập trình thì…

Khóa Học Python miễn phí của ucode.vn là một cách tốt nhất để bắt đầu nghề lập trình và chinh phục các lĩnh vực bạn mong muốn.

Đối với các lập trình viên đã biết lập trình Java hoặc C ++, học Python không chỉ giúp bạn trở thành lập trình viên tốt hơn mà còn cung cấp cho bạn một công cụ mạnh mẽ để viết các tập lệnh, tạo một ứng dụng web và mở ra một lĩnh vực thú vị về Khoa học dữ liệu và Học máy.

Nói tóm lại, nếu bạn chỉ có thể học một ngôn ngữ lập trình vào năm 2024 thì hãy học Python ngay.

Bài viết gốc được đăng tải tại ucode.vn

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

Xem thêm vị trí tuyển dụng lập trình viên hấp dẫn tại TopDev

Làm thế nào để bắt đầu Blog lập trình của bạn?

blog lập trình

Bài viết được sự cho phép của tác giả Phạm Văn Nguyên

Vì vậy, bạn muốn tạo blog lập trình đầu tiên của bạn?

Đây là một ý tưởng tuyệt vời. Tôi tin rằng mọi nhà phát triển nên có một blog và tôi sẽ liệt kê các lý do tại sao không lâu nữa.

Trong bài viết này, tôi sẽ giả định rằng bạn là người mới bắt đầu tuyệt đối  chưa bao giờ xây dựng một trang web trước đây.

Tôi sẽ hướng dẫn bạn chính xác cách xây dựng blog lập trình từng bước, bắt đầu từ việc chọn máy chủ web, đăng ký tên miền, chọn nền tảng blog tốt cho nhà phát triển, cho đến cách bạn bắt đầu viết và quảng bá bài viết của mình .

Nếu không có thêm rắc rối, hãy nhảy ngay vào nó.


Tại sao mỗi lập trình viên nên có một Blog?

Trước tiên, tại sao bạn nên tạo blog mã hóa của mình ngay từ đầu?

Tôi hiểu rồi.

Kỹ sư phần mềm ghét viết.

Thậm chí rất khó để khiến chúng tôi nhận xét mã của riêng mình.

Vậy tại sao trên Trái đất bạn sẽ bắt đầu một blog lập trình ?

Thực sự, bắt đầu một blog lập trình sẽ có lợi cho bạn theo nhiều cách.

Hãy thảo luận về một số lợi ích.

1. Cải thiện kỹ năng kỹ thuật của bạn

Có một nguyên tắc tiếng Latin cổ xưa nổi tiếng Cách tốt nhất để học một cái gì đó là dạy nó .

Tôi thấy nguyên tắc này trực tiếp là rất đúng.

Trong nhiều năm, tôi đã từng dạy môn Khoa học Máy tính cho sinh viên chưa tốt nghiệp.

Tôi không đùa bạn, mỗi lần tôi dạy một khóa học, tôi cũng trở nên tốt hơn với những gì tôi đang dạy.

Dạy học thúc đẩy bạn tìm hiểu thêm về chủ đề của bạn, điều này không chỉ tốt cho sinh viên của bạn mà còn cho chính bản thân bạn.

Bắt đầu một blog lập trình rất giống với giảng dạy bởi vì trong blog của bạn, bạn sẽ dạy thế giới về lập trình và khoa học máy tính.

Tôi chỉ thích dạy học.

Nếu bạn muốn trở thành một lập trình viên tốt hơn, hãy dạy lập trình thông qua blog của bạn

2. Kiếm một số thu nhập phụ

Có một blog cho phép bạn có một nguồn thu nhập phụ tốt mà bạn không có.

3. Tự tiếp thị

Thay vì tôi bập bẹ về cách bạn có thể sử dụng blog của mình để tiếp thị bản thân, hãy xem THỰC SỰ một nghiên cứu trường hợp thực tế.

Bạn có biết Jeff Atwood là ai không?

Nếu bạn làm trong ngành công nghiệp phần mềm và bạn không biết Jeff Atwood là ai, thì bạn đã sống dưới một tảng đá.

Chỉ trong trường hợp để tôi nói với bạn rằng Atwood, cùng với Joel Spolsky, là người sáng lập Stack Overflow .

Bây giờ tôi chắc chắn bạn biết Stack Overflow là gì.

Nếu không, thì bạn chắc chắn chưa sẵn sàng để bắt đầu một blog lập trình

Nhưng bạn có biết Jeff Atwood thực sự được biết đến vì điều gì không?

Blog của anh, Coding Horror , mà anh tạo ra năm 2004 là một trong những blog lập trình phổ biến nhất trên internet.

Không chỉ vậy, mà blog của anh ấy là lý do tại sao anh ấy gặp Spolsky ngay từ đầu!

Đừng lấy nó từ tôi, hãy nhìn vào những gì Atwood tự nói :

Blog của bạn sẽ mở ra những cơ hội kinh doanh và kết nối khác nhau mà bạn có thể không tìm thấy.

4. Học cách viết và trình bày ý tưởng của bạn

Dù bạn có tin hay không nhưng sự nghiệp phần mềm của bạn phụ thuộc rất nhiều vào việc bạn giỏi giao tiếp và trình bày ý tưởng của mình như thế nào.

Đừng hiểu sai ý tôi, nếu bạn là một lập trình viên nhạc rock, bạn vẫn sẽ làm tốt nhưng tiềm năng nghề nghiệp của bạn chắc chắn sẽ bị hạn chế bởi khả năng trình bày và truyền đạt ý tưởng của bạn.

Một trong nhiều cách bạn có thể cải thiện kỹ năng giao tiếp của mình là thông qua viết .

Nếu bạn cảm thấy rằng bạn không biết viết ngay từ đầu, thì điều này phổ biến hơn bạn nghĩ.

Chỉ cần giữ nó và theo thời gian bạn sẽ cải thiện và trở nên tốt hơn.

5. Trở thành người có thẩm quyền trong lĩnh vực của bạn

Có một blog Lập trình giúp bạn xây dựng uy quyền trong lĩnh vực của mình.

Và trở thành người có thẩm quyền giúp bạn nổi bật giữa các kỹ sư phần mềm khác và mở ra cánh cửa cho vai trò lãnh đạo.

6. Tìm hiểu về tiếp thị trực tuyến

Để có một blog thành công, bạn sẽ cần phải tiếp thị nó.

Tiếp thị blog của bạn thực sự không phải là một nhiệm vụ dễ dàng và đòi hỏi bạn phải học hỏi nhiều về tiếp thị trực tuyến.

Tôi thấy tiếp thị trực tuyến là một kỹ năng cực kỳ quý giá mà các kỹ sư phần mềm cần phải có trong tiết mục của họ.

Điều này tự nó làm cho việc bắt đầu một blog là một mục tiêu xứng đáng theo ý kiến của tôi.


OK, bây giờ làm thế nào bạn có thể tạo một blog lập trình?

Bây giờ hãy nói cụ thể về những gì bạn cần làm để đưa blog của bạn lên và chạy nhanh .

Khóa học đầu tiên của hành động là chọn một máy chủ web .

Bước một: Chọn máy chủ web

Bạn là một lập trình viên nên tôi sẽ giả sử bạn biết web hosting là gì và mục đích của nó là gì.

Nhưng chỉ trong trường hợp bạn không, lưu trữ web về cơ bản là máy tính (hoặc máy tính) sẽ lưu trữ các tệp tạo blog của bạn.

Một blog (hoặc bất kỳ trang web nào cho vấn đề đó) không có gì ngoài một số tệp (ví dụ: HTML, javascript, CSS) sống trong một máy có thể truy cập từ internet.

Và máy này phải hoạt động 24/7 hoặc nếu không người dùng của bạn sẽ không thể truy cập trang web của bạn mọi lúc.

Có rất nhiều tùy chọn ngoài kia cho các dịch vụ có thể lưu trữ trang web của bạn nhưng tôi sẽ thu hẹp chúng cho bạn hai tùy chọn mà cá nhân tôi sử dụng và vô cùng hài lòng.

Tùy chọn 1 (Chọn web server, hosting, domain với Z.com )

Z.com – Thương hiệu toàn cầu của tập đoàn GMO Internet. Nhà cung cấp tên miền, hosting hàng đầu châu Á với thành tích hơn 12 triệu tên miền và 750,000 Hosting được đăng ký. Chúng tôi luôn đảm bảo chất lượng dịch vụ hàng đầu, đáng tin cậy với giá cả cạnh tranh.

Đặc điểm:

• Sử dụng bảng điều khiển đa chức năng cPanel được cả thế giới tin dùng: không cần các câu lệnh phức tạp, chỉ cần vài thao tác đơn giản để khởi động. Ngoài ra rất nhiều chức năng khác cũng được tích hợp như Mail, File Manager, Back-up, Access Log Analyzer.

• Trung tâm dữ liệu được đặt tại nhiều quốc gia. Trước đây, Z.com có Data Center (DC) được đặt tại Singapore, Mỹ, Nhật. Ngày 1/12/2016, đã chính thức ra mắt thêm DC tại Việt Nam, nhằm mang đến đường truyền ổn định hơn, tốc độ nhanh hơn hơn cho khách hàng.

• Bộ lọc Spam mail: Z.com sử dụng Cloudmark Authority được đánh giá tiêu chuẩn cao nhất trên thế giới, có thể đối ứng nhanh chóng với những mối đe dọa tối tân, block được trên 98% các cuộc tấn công.

Tùy chọn 2 (với Bluehost )

blog

Nếu bạn muốn bắt đầu viết blog của mình ngay lập tức và bạn không muốn dành thời gian của mình để làm một số công cụ kỹ thuật tuyệt vời thì tôi khuyên bạn nên dùng Bluehost .

Bluehost sẽ làm cho quá trình tạo trang web và blog của bạn trở nên dễ dàng đến không ngờ vì mục tiêu chính của họ là những người không có kỹ thuật; những người có lẽ không bao giờ mã hóa một chương trình Hello world trong cuộc sống của họ.

Bạn chỉ có thể tưởng tượng nó sẽ đơn giản như thế nào đối với bạn.

Bây giờ hãy xem những gì Bluehost thực sự cung cấp cho bạn.

Bluehost cung cấp các loại lưu trữ khác nhau.

Một trong những tôi đặc biệt nói về được gọi là  lưu trữ chia sẻ.

Nhưng trước khi tôi cho bạn biết lý do tại sao tôi khuyên bạn nên chia sẻ lưu trữ từ Bluehost, trước tiên hãy để tôi giải thích ý nghĩa của từng tùy chọn này:

Lưu trữ được chia sẻ  có nghĩa là trang web của bạn sẽ sống cạnh các trang web khác trên cùng một máy ảo . Nói cách khác, Một máy ảo sẽ phục vụ trang web của bạn cùng với các trang web khác cùng một lúc.

VPS hoặc Virtual Private Server  chỉ là một từ ưa thích cho một máy ảo. Trong ưu đãi này, về cơ bản bạn sở hữu toàn bộ máy ảo và bạn có quyền truy cập root vào nó. Bạn có thể kết nối từ xa với máy ảo này, cài đặt ứng dụng và làm bất cứ điều gì bạn muốn như thể bạn đang làm việc trên máy tính xách tay của riêng mình. Không cần phải nói, máy ảo này sẽ chỉ phục vụ trang web của bạn và trang web của bạn.

Chuyên dụng  có nghĩa là bạn sẽ thuê toàn bộ máy vật lý  (không phải ảo).

Bây giờ hãy quay lại lưu trữ được chia sẻ .

Chia sẻ lưu trữ chắc chắn có lợi thế và bất lợi của nó.

Ưu điểm lớn nhất là nó rẻ một cách lố bịch nên nó là một lựa chọn tuyệt vời đặc biệt nếu bạn đang bắt đầu hoặc nếu bạn chỉ muốn chơi xung quanh và thoải mái với việc tạo trang web.

Nhưng có một số nhược điểm lớn.

Đầu tiên, bạn mất quyền kiểm soát vì bạn không sở hữu máy ảo mà blog của bạn đang chạy.

Thứ hai, lưu trữ chia sẻ sẽ không phải là một lựa chọn khả thi khi blog của bạn bắt đầu phát triển và một số lượng lớn người bắt đầu đến trang web của bạn.

Vì vậy, quá trình hành động tốt nhất là gì?

Đây là chiến lược của tôi: đối với mọi ý tưởng trang web mà bạn có, bạn nên luôn bắt đầu với giải pháp lưu trữ chia sẻ Bluehost giá rẻ và ngay khi bạn nhận thấy rằng trang web của bạn bắt đầu có lưu lượng truy cập đáng kể , hãy nghĩ đến việc nâng cấp lên giải pháp cấp cao hơn.

Vì tôi cảm thấy thoải mái với công nghệ, tôi thường chuyển các trang web hiệu suất cao của mình sang Z.com .

Tiếp theo hãy chọn tên cho trang web của bạn!

Bước hai: Đăng ký tên miền của bạn

Trong bước này, bạn sẽ đăng ký tên miền của bạn .

Nói một cách đơn giản, tên miền của bạn là tên trang web của bạn

Nhưng chúng ta hãy tìm hiểu một chút và giải thích cách tên miền thực sự hoạt động.

Mỗi máy tính trên internet có một địa chỉ gọi là địa chỉ IP .

Ví dụ: để tìm địa chỉ IP của google.com , bạn có thể làm như sau:

ping google.com

Lưu ý rằng google.com thực sự có nhiều địa chỉ IP và đây chỉ là một trong số đó.

Để có thể giao tiếp với bất kỳ máy nào qua internet, bạn cần biết địa chỉ IP của máy đó.

Vì vậy, khi bạn nhập ‘google.com’ trên trình duyệt của mình, HĐH của bạn sẽ tự động cố gắng dịch tên ‘google.com’ sang địa chỉ IP của nó.

Điều này xảy ra bằng cách truy vấn một cái gì đó gọi là máy chủ DNS .

Bạn có thể nghĩ về một máy chủ DNS như một cơ sở dữ liệu phân tán chịu trách nhiệm ánh xạ tên miền thành địa chỉ IP .

Được rồi, bây giờ với thông tin này trong tâm trí, đây là những gì bạn sẽ làm trong bước này.

1- bảo lưu tên miền cho chính bạn để không ai khác có thể sử dụng nó.

2- cấu hình tên miền để ánh xạ tới địa chỉ IP của máy bạn có từ máy chủ web.

Bạn có thể mua tên miền ở đâu?

Đầu tiên, trước khi bạn đi mua sắm xung quanh, hãy đảm bảo kiểm tra xem máy chủ của bạn có cung cấp một tên miền miễn phí hay không.

Đôi khi các công ty lưu trữ sẽ cung cấp cho bạn một tên miền miễn phí trong một năm để khuyến khích bạn lưu trữ với họ.

Ví dụ: Bluehost cung cấp cho bạn một tên miền miễn phí khi bạn lưu trữ với họ.

Một điều khác bạn phải biết là việc đăng ký một tên miền cho phép bạn sở hữu tên miền đó chỉ trong một năm.

Vì vậy, bạn sẽ cần gia hạn đăng ký hàng năm để giữ cho tên miền của bạn tồn tại.

Nếu không, tên miền của bạn đã biến mất!

Đừng quên làm điều đó  hoặc những điều xấu có thể xảy ra .

Nó chỉ giống như 10 đô la một năm dù sao đi nữa.

Một lần nữa bạn sẽ tìm thấy rất nhiều dịch vụ mà bạn có thể sử dụng để đăng ký tên miền của mình.

Đây là hai cái duy nhất tôi sử dụng:

1- Namecheap

Namecheap là một lựa chọn cực kỳ phổ biến đơn giản vì tên miền rất rẻ so với các tên miền khác.

Nó có một giao diện người dùng dễ sử dụng tuyệt vời và hỗ trợ khách hàng tuyệt vời.

Để bắt đầu, hãy truy cập trang web của họ và nhập tên miền bạn muốn và hy vọng nó không được sử dụng

Nếu bạn may mắn, tên miền của bạn sẽ có sẵn và bạn có thể, và nên, đặt trước nó ngay lập tức!

Ngoài ra, hãy đảm bảo chọn một tên tương đối ngắn, dễ nhớ và có thể tạo thương hiệu cho trang web của bạn.

Tên miền của bạn là thương hiệu của bạn, vì vậy hãy đối xử với nó như vậy.

2- Tên miền Google

Một dịch vụ tuyệt vời khác mà tôi thường xuyên sử dụng những ngày này là tên miền Google .

Nó cũng có một giao diện rất đẹp và siêu dễ sử dụng.

blog

Cho dù bạn đi với tên miền Namecheap hoặc Google (hoặc bất kỳ dịch vụ nào khác cho vấn đề đó), bạn sẽ cần định cấu hình tên miền của mình để ánh xạ tới địa chỉ IP của bạn.


Bước ba: Cài đặt WordPress

Hãy xem lại những gì bạn có cho đến nay.

Bạn có một máy từ máy chủ web được kết nối với Internet 24/7 và sẵn sàng phục vụ trang web của bạn.

Bạn cũng có một tên miền để mọi người có thể truy cập trang web của bạn bằng cách nhập tên miền này vào trình duyệt của họ.

Bây giờ đã đến lúc ngồi xuống, thư giãn và bắt đầu viết bài đăng trên blog tuyệt vời của bạn.

Là một lập trình viên tuyệt vời mà bạn đang có, bạn xắn tay áo và tự suy nghĩ: Cuối cùng! đã đến lúc thể hiện các kỹ năng HTML, CSS và javascript của tôi ????

Hmm tốt, không thực sự.

Mặc dù tôi khuyên bạn nên học HTML, CSS và javascript cho dù bạn có muốn bắt đầu blog lập trình của mình hay không, hãy để tôi dừng bạn ngay tại đó trong một giây.

Nếu bạn muốn xây dựng blog của mình từ đầu bằng cách sử dụng HTML, CSS và javascript, nó sẽ rất gian khổ.

Vì vậy hãy sử dụng 1 CMS hoặc 1 framework nào đó.

Nếu bạn dùng PHP có rất nhiều CMS nổi tiếng, WordPress  là một ví dụ điển hình. Nếu bạn muốn xấy dựng blog riêng bằng frameword thì có thể sử dụng 1 php framework bất kỳ, như: Yii, Laravel, Codeigniter, CakePHP, Phalcon, …

Nếu bạn dùng Python có thể sử dụng: Flask, Django,..

Nếu bạn dùng Ruby có thể dùng Ruby On Rails.

Nếu bạn dùng  NodeJS có thể dùng framework: Express,..

Nếu bạn dùng Go (Golang) thì có thể sử dụng các framework như: gin-gonic, Begoo, Iris, echo, revel,…

Hoặc dùng ASP.NET/ASP.NET MVC, JSP.

Xây dựng bằng bất kỳ ngôn ngữ/framerork gì cũng được miễn là thứ mà bạn thông thạo nhất.

 Ví dụ sau sử dụng WordPress thay thế.

Đây là cách nền tảng trông như thế nào.

blog

Như bạn có thể thấy, nó có giao diện người dùng rất sạch sẽ.

Nó cũng đáng tin cậy, miễn phí, mã nguồn mở và rất thuận tiện để sử dụng.

Với WordPress, bạn hoàn toàn có thể xuất bản bài viết đầu tiên của mình vào cùng ngày bạn đăng ký máy chủ web.

Bây giờ hãy xem cách bạn có thể cài đặt WordPress trên Bluehost và trên Digital Ocean.

WordPress trên Bluehost

Chúng tôi đã nói chuyện trước đó với Bluehost, bạn sẽ có được sự thuận tiện .

Trong trường hợp, Bluehost không yêu cầu bạn phải cài đặt WordPress. Nó được cài đặt sẵn với tài khoản của bạn.

Bạn có thể xắn tay áo và bắt đầu viết blog ngay lập tức!

WordPress trên Đại dương số

Digital Ocean là một con thú hoàn toàn khác.

Hãy nhớ rằng với Digital Ocean, bạn sẽ có được sự kiểm soát với chi phí thuận tiện.

Điều này có nghĩa là cài đặt WordPress thực sự là ít lo lắng nhất của bạn.

Trước khi lo lắng về WordPress, trước tiên bạn cần cài đặt và định cấu hình máy chủ web ( apache hoặc nginx ).

Sau đó, bạn cần cài đặt cơ sở dữ liệu MySQL và định cấu hình chính xác cho WordPress.

Và cuối cùng, bạn cần phải tự cài đặt và định cấu hình WordPress .

Ngoài ra, Digital Ocean có một hình ảnh WordPress được tạo sẵn mà bạn có thể sử dụng ngay.


Bước bốn: Thiết lập các chủ đề và plugin WordPress

Bây giờ bạn đã có tất cả các công cụ bạn cần trong vành đai của mình, đã đến lúc bắt đầu làm quen với nền tảng WordPress.

Nhưng đừng lo lắng, nó thực sự khá cơ bản và bạn có thể tự học nó khá nhanh chỉ trong vài giờ.

Tôi khuyên bạn nên bắt đầu bằng cách viết một vài bài đăng trên blog cho đến khi bạn hiểu rõ về nó.

WordPress thực sự có rất nhiều plugin

Điều này có nghĩa là bạn có thể cài đặt các công cụ của bên thứ ba có thể tích hợp với trang web WordPress của bạn và giúp bạn mọi thứ.

Ví dụ: các themes WordPress có nghĩa là để tăng cường hình ảnh của blog của bạn.

Các plugin , mặt khác, có nghĩa là để mở rộng chức năng của trang web WordPress của bạn.

Trong phần tiếp theo, tôi sẽ nói về các chủ đề và các plugin mà bạn cần cho blog lập trình của bạn.

Chọn themes đề WordPress

Câu chuyện dài, đừng sử dụng các themes WordPress miễn phí.

Themes miễn phí rất tốt khi bạn bắt đầu và bạn không biết mình đang làm gì nhưng ngay khi bạn quyết định nghiêm túc thì bạn sẽ cần phải chuyển sang các chủ đề tốt hơn (thường không miễn phí).

Hãy nhớ rằng themes của bạn chỉ ra mức độ hấp dẫn trực quan của trang web của bạn và đây là điều bạn không muốn tiết kiệm trên ngay cả đối với một blog kỹ thuật.

Vì vậy, những themes WordPress nào tôi khuyên bạn nên?

Tôi đánh giá cao Divi

blog

Divi có lẽ là chủ đề WordPress phổ biến nhất trên internet.

Để có thể tải xuống Divi, bạn cần tham gia Eleganttheme .

Bạn có thể đăng ký thuê bao hàng năm hoặc đăng ký trọn đời của họ.

Với đăng ký trọn đời, bạn chỉ phải trả tiền một lần và bạn có quyền truy cập trọn đời vào tất cả các themes và plugin cao cấp của họ , bao gồm cả Divi .

Làm cho mình một ưu tiên và làm nghiên cứu của riêng bạn trước khi chọn một chủ đề, bởi vì di chuyển sau này có thể thực sự đau đớn.

Bây giờ, hãy chuyển đổi bánh răng và nói về một plugin cơ bản mà bạn thực sự cần cho bất kỳ blog lập trình nào .

Một trong đó sẽ cho phép bạn viết đoạn mã trong bài viết blog của bạn

Plugin này sử dụng  thư viện Google Code Prettify  và cực kỳ dễ sử dụng.

Sau đó, tất cả những gì bạn cần làm là đặt mã của bạn giữa các thẻ <pre> và <code>và nó sẽ định dạng chính xác mã của bạn một cách chính xác.

Về sau, tôi cũng có một số CSS tùy chỉnh mà tôi áp dụng cho đoạn mã của mình để làm cho chúng trông đẹp hơn.

Vì vậy, đây là điều mà bạn nên thử nghiệm.

Bây giờ mọi thứ đã ổn định, hãy nói về logo của bạn!


Bước năm: Thuê ngoài thiết kế logo và thiết kế đồ họa

Đến bây giờ, bạn nên có tất cả các khối xây dựng cơ bản của blog của mình.

Nhưng có một cái gì đó thiếu.

Bạn cần một logo.

Trang web của bạn phải hấp dẫn trực quan.

Có một logo chuyên nghiệp, được thiết kế tốt sẽ không chỉ tăng tính thẩm mỹ cho trang web của bạn mà còn tạo dựng niềm tin với độc giả của bạn.

Hãy nghĩ về nó, bạn đã tắt trang web bao nhiêu lần chỉ vì logo và thiết kế đồ họa của họ hơi sơ sài? Có lẽ nhiều lần.

Một logo tốt là một phần không thể thiếu trong thương hiệu cá nhân hoặc doanh nghiệp tổng thể của bạn, nó giúp bạn được chú ý trên thế giới và giữa các đồng nghiệp.

Bây giờ tôi không biết về bạn nhưng kỹ năng nghệ thuật của tôi gần như không tồn tại

Và vì lý do đó, đây là những gì tôi làm cho tất cả các thiết kế logo và tác phẩm nghệ thuật truyền thông xã hội của mình: tôi thuê ngoài chúng .

Có hai nơi mà cá nhân tôi sử dụng để thuê ngoài bất kỳ thiết kế đồ họa nào.

1. Fiverr

blog

Fiverr  là một trong những thị trường trực tuyến lớn nhất dành cho các dịch giả tự do với các dịch vụ bắt đầu từ năm đô la.

Nó chắc chắn là về phía rẻ hơn, và các dịch vụ được cung cấp trên Fiverr bao gồm rất nhiều loại.

Và tất nhiên một trong những loại này là logo và thiết kế đồ họa, hãy kiểm tra nó .

Một điều cần xem xét nếu bạn quyết định sử dụng Fiverr là kiểm tra cẩn thận các đánh giá và lịch sử làm việc của các dịch giả tự do mà bạn sẵn sàng làm việc.

Fiverr tương đối rẻ, nhưng bạn có trách nhiệm kiểm tra những người làm việc tự do tốt từ những người xấu.

2. 99 thiết kế

99Designs là một lựa chọn tuyệt vời khác để thuê ngoài thiết kế đồ họa của bạn.

Tùy chọn này sẽ đắt hơn Fiverr nhưng cách thức hoạt động thì hoàn toàn khác.

Thay vì thuê một freelancer cụ thể để thiết kế logo của bạn, bạn tạo ra một cuộc thi thiết kế.

Sau khi bạn tạo ra cuộc thi thiết kế của mình và chỉ định rõ loại thiết kế bạn đang tìm kiếm, hàng chục nhà thiết kế sẽ cạnh tranh với nhau để giành chiến thắng trong cuộc thi bằng cách gửi các thiết kế phù hợp với tiêu chí mà bạn đã chỉ định.

Bạn nhận được hàng tấn thiết kế, bạn quyết định người chiến thắng và sau đó bạn có quyền đối với thiết kế.

Nó thật đơn giản!

Cá nhân tôi đã sử dụng 99 mẫu thiết kế nhiều lần bao gồm cả thiết kế logo cho trang web này.


Bước sáu: Tiếp thị Blog lập trình của bạn

Bạn thấy đấy, đó là một điều phải trải qua tất cả các bước tạo blog của bạn, đó là một điều khác để thực sự đưa người đọc đến blog của bạn.

Tiếp thị blog của bạn đòi hỏi một bộ kỹ năng không liên quan gì đến lập trình.

Bạn cần tìm hiểu về Marketing trực tuyến.

Trên thực tế, tiếp thị trực tuyến là một chủ đề lớn và không có cách nào tôi có thể thực hiện công lý chủ đề bằng cách trình bày nó trong một bài viết.

Tuy nhiên, tôi sẽ dạy cho bạn một số mẹo sẽ giúp bạn quảng bá blog của mình và đưa nó lên khỏi mặt đất.

Truyền thông xã hội

Cách dễ nhất bạn có thể làm là chia sẻ các bài viết trên blog của mình với bạn bè trên Facebook , Twitter hoặc Linkedin .

Bạn cũng có thể chia sẻ các bài viết của mình trên Reddit nhưng lưu ý rằng người dùng Reddit ghét tự quảng cáo và quảng cáo nói chung. Vì vậy, chỉ chia sẻ bài viết của bạn trên Reddit nếu chúng có liên quan (ví dụ: ai đó hỏi một câu hỏi lập trình mà bạn đã viết một bài viết về).

Ngoài ra, bạn có thể trả lời câu hỏi trên Quora . Bằng cách này, bạn không chỉ quảng bá blog của mình mà còn thiết lập chính mình như một người có thẩm quyền trong khi giúp đỡ người khác.

SEO

SEO có nghĩa là Tối ưu hóa Công cụ Tìm kiếm.

Bằng tiếng Anh, điều này có nghĩa là có lưu lượng truy cập vào trang web của bạn từ Google

Đây là nguồn lưu lượng tốt nhất cho blog của bạn vì hầu hết lưu lượng truy cập nhất quáncủa bạn sẽ thực sự đến từ Google.

Thay vì bạn chủ động quảng bá blog của mình, Google có thể quảng bá blog của bạn thay mặt bạn nếu Google nghĩ rằng bài viết của bạn trả lời các câu hỏi mà người dùng đang tìm kiếm.

Thật đáng kinh ngạc! Nhưng đừng hiểu sai ý tôi, điều đó không dễ và cần có thời gian.

Bạn thấy đấy, khi người dùng tìm kiếm trên Google, họ thường nhấp vào một trong 4 kết quả đầu tiên!

Bạn càng thấp trong bảng xếp hạng, người dùng sẽ càng ít truy cập trang của bạn.

Nếu bạn đang ở trang thứ hai của Google, có lẽ bạn sẽ không nhận được lưu lượng truy cập nào. Tin tôi đi, tôi biết

Bây giờ đây là ba mẹo để giúp bạn SEO:

1. Viết bài về các chủ đề mà mọi người đang tìm kiếm

Hãy đối mặt với nó, không phải mọi chủ đề bạn sẽ muốn viết là điều mà người khác sẽ tìm kiếm.

Để thành công, bạn cần đảm bảo rằng bạn đang viết bài về các chủ đề mà mọi người đang tìm kiếm.

Bạn có thể sử dụng các công cụ như công cụ lập kế hoạch từ khóa của Google để giúp bạn xác định các chủ đề mà mọi người đang tìm kiếm.

blog

Nhưng hãy đợi một phút, điều đó có nghĩa là bạn không nên viết về các chủ đề mà bạn đam mê nếu những chủ đề này không có đủ lượng tìm kiếm?

Tuyệt đối không.

Điều tôi đang nói là rất có thể bạn sẽ cần phải dựa vào các phương pháp quảng bá loại bài viết này bên ngoài Google.

Ví dụ: bạn có thể sử dụng phương tiện truyền thông xã hội, Reddit, hacker news hoặc thậm chí liên kết đến các bài viết này từ các bài viết thân thiện với SEO khác trên blog của bạn;).

2. evergreen content

Đọc thêm vể evergreen content ở đây

3. Viết bài tuyệt vời

Điều này thực sự quan trọng.

Thành thật mà nói, Google đang làm một công việc tuyệt vời để đưa những bài viết hay nhất lên đầu kết quả tìm kiếm của họ (hầu hết thời gian).

Điều này có nghĩa là bạn nên tập trung vào việc viết các bài viết tốt hơn so với các bài viết của đối thủ cạnh tranh của bạn.

Nếu bạn làm điều đó, bạn sẽ ổn thôi. Nó thực sự là đơn giản mà. Chất lượng hơn số lượng.

Một điều cuối cùng, hãy kiên nhẫn.

Đôi khi có thể mất tới 6 tháng trước khi một bài viết mới trên blog của bạn có thể mang lại bất kỳ lưu lượng truy cập nào từ Google.

SEO là một cuộc đua marathon, không phải là chạy nước rút, nhưng nếu bạn thực sự thích viết và dạy mọi người về lập trình và khoa học máy tính, thì việc kiên nhẫn sẽ không khó đến thế.

Phần kết luận

Bắt đầu một blog lập trình có thể rất hữu ích cho bạn ở rất nhiều cấp độ.

Để có thể bắt đầu viết blog ngay lập tức, bạn cần chọn một máy chủ web tốt, tên miền có thương hiệu, themes WordPress trực quan hấp dẫn và cài đặt một số plugin sẽ giúp bạn viết đoạn mã trong blog của mình.

Bạn cũng cần tìm hiểu về nghệ thuật và khoa học để quảng bá blog của mình, cho dù thông qua SEO hay phương tiện truyền thông xã hội.

Chúc may mắn với blog của bạn.

Bài viết gốc được đăng tải tại nguyenpv.com

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

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

HTTP là gì? Các khía cạnh cơ bản của HTTP

http là gì

Liệu HTTP là gì? Có lẽ điều quen thuộc nhất khi chúng ta bắt gặp khi sử dụng trình duyệt để truy cập Internet chính là HTTP. Chắc các bạn cũng đã biết khi thấy 1 địa chỉ web đều bắt đầu với http:// hay https://.

Hôm nay qua bài viết này, TopDev sẽ giới thiệu cho các bạn về những điều cơ bản nhất của HTTP nha.

HTTP là gì?

HTTP là từ viết tắt của Hyper Text Transfer Protocol nghĩa là Giao thức Truyền tải Siêu Văn Bản được sử dụng trong www. HTTP là 1 giao thức cho phép tìm nạp tài nguyên, chẳng hạn như HTML doc.

Nó là nền tảng của bất kỳ sự trao đổi dữ liệu nào trên Web và cũng là giao thức giữa client (thường là các trình duyệt hay bất kỳ loại thiết bị, chương trình nào) và server (thường là các máy tính trên đám mây). 1 doc hoàn chỉnh được tái tạo từ các doc con khác nhau được fetch – tìm nạp, chẳng hạn như văn bản, mô tả layout, hình ảnh, video, script v..v..

  HTTP status code là gì? Danh sách đầy đủ HTTP status code
  Http Methods: thất tinh bắc đẩu trận
http là gì
Ảnh mô tả việc fetching 1 trang web. Nguồn: Mozilla

Được thiết kế lần đầu từ những năm 90, HTTP là 1 giao thức có thể mở rộng vốn đã phát triển dần theo thời gian. 1 giao thức lớp ứng dụng được gửi thông qua nền tảng TCP/IP , hay qua 1 kết nối TCP được mã hóa TLS. Mặc dù về mặt lý thuyết, bất kỳ giao thức truyền tải đáng tin cậy nào cũng có thể được sử dụng.

Nhờ vào khả năng mở rộng của nó, HTTP được sử dụng để không chỉ tìm nạp các tài liệu siêu văn bản mà còn cả hình ảnh và video hoặc để đăng tải nội dung lên server, giống như với các kết quả form HTML. HTTP cũng có thể được sử dụng để tìm nạp các phần của các doc nhằm cập nhật các trang web theo yêu cầu.

Khía cạnh cơ bản của HTTP

HTTP là gì? HTTP là 1 giao thức tuy đơn giản nhưng khá mạnh mẽ nhờ vào các đặc trưng cơ bản sau đây.

HTTP đơn giản:

HTTP thường được thiết kế để trở nên đơn giản và thân thiện để con người có thể đọc được, ngay cả khi có thêm sự phức tạp được giới thiệu trong HTTP/2 bằng cách đóng gói các HTTP message thành các frame. Với các HTTP message, chúng ta có thể được đọc và hiểu được, cung cấp khả năng testing hơn cho các dev và giảm thiểu độ phức tạp cho bất cứ người mới nào.

HTTP có thể mở rộng:

Được giới thiệu trong HTTP/1.0, các header HTTP làm cho giao thức này dễ dàng mở rộng và thử nghiệm hơn nữa. Chức năng mới thậm chí có thể được giới thiệu bằng 1 thỏa thuận đơn giản giữa 1 client và 1 máy chủ về ngữ nghĩa của 1 header mới.

HTTP là stateless, nhưng không sessionless:

Không có liên kết giữa 2 yêu cầu được thực hiện liên tiếp trên cùng 1 kết nối. Điều này ngay lập tức có khả năng trở thành vấn để với người dùng cố gắng tương tác với các trang nhất định 1 cách mạch lạc, chẳng hạn như sử dụng shopping cart trên các trang e-commerce, tức thương mại điện tử.

Nhưng trong khi cốt lõi bản thân HTTP là stateless, các cookie HTTP cho phép sử dụng các session trạng thái. Sử dụng khả năng mở rộng header, các cookie HTTP được thêm vào quy trình vận hành, cho phép tạo các session trên mỗi yêu cầu HTTP để chia sẻ cùng 1 ngữ cảnh hay cùng 1 trạng thái.

Cấu trúc cơ bản của HTTP

Qua sơ đồ bên dưới, các bạn sẽ thấy được cấu trúc khá đơn giản của 1 ứng dụng web và miêu tả cụ thể vị trí của HTTP là gì:

http là gì
Cấu trúc cơ bản của 1 ứng dụng web. Nguồn: Tutorialspoint.

Giao thức HTTP là gì? HTTP còn là 1 giao thức Yêu cầu – Phản hồi dựa trên cấu trúc Client – Server. Client và Server giao tiếp với nhau bằng cách trao đổi các message độc lập (trái ngược với 1 luồng dữ liệu). Các message được gửi bởi client, thông thường là 1 trình duyệt web, được gọi là các yêu cầu và message được gửi bởi server như 1 sự trả lời, được gọi là phản hồi.

Các bạn có thể tìm hiểu thêm về các mã trạng thái HTTP – HTTP status code và hiểu rõ về danh sách các HTTP status code để biết rõ hơn về các Yêu cầuPhản hồi tại đây nha.

Kết nối của HTTP

1 kết nối được kiểm soát tại layer truyền tải, do đó về cơ bản nằm ngoài phạm vi của HTTP. Dù HTTP không yêu cầu giao thức truyền tải cơ bản phải dựa trên sự kết nối, vì chỉ yêu cầu nó đáng tin cậy hoặc không bị mất message (ít nhất là trình báo 1 lỗi). Trong số hai giao thức truyền tải phổ biến nhất trên Internet, TCP thì đáng tin cậy còn UDP thì không. HTTP do đó dựa vào tiêu chuẩn TCP vốn là connection-based (dựa trên sự kết nối).

http-la-gi-5
Kết nối HTTP. Nguồn: Geeks for Geeks.

Trước khi 1 client và server có thể trao đổi 1 cặp yêu cầu – phản hồi HTTP, chúng phải thiết lập 1 kết nối TCP, 1 quá trình vốn yêu cầu 1 số vòng lặp. Hoạt động mặc định của HTTP/1.0 là mở 1 kết nối TCP riêng biệt cho từng cặp yêu cầu – phản hồi HTTP. Điều này làm nó kém hiệu quả hơn việc chia sẻ 1 kết nối TCP đơn lẻ khi nhiều yêu cầu được gửi liên tiếp.

Để giảm thiểu lỗ hỏng này, HTTP/1.1 đã giới thiệu pipelining (nhưng được chứng minh là khá khó để thực hiện) và kết nối liên tục: kết nối TCP bên dưới có thể được kiểm soát 1 phần bằng cách sử dụng tiêu đề Connection. HTTP/2 đã tiến 1 bước xa hơn bằng cách ghép các thông báo qua 1 kết nối duy nhất, giúp giữ cho kết nối ổn định và hiệu quả hơn.

Các thử nghiệm đang được tiến hành để thiết kế một giao thức truyền tải tốt hơn phù hợp hơn với HTTP. Ví dụ: Google đang thử nghiệm QUIC được xây dựng trên UDP để cung cấp giao thức truyền tải cũng đáng tin cậy và hiệu quả hơn.

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

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

MCG và cơ hội cho các lập trình viên trổ tài tại sàn đấu giá trực tuyến – Chozoi

mcg
MCG và cơ hội cho các lập trình viên trổ tài tại sàn đấu giá trực tuyến - Chozoi.vn

Với mong muốn mang đến cho thị trường Việt Nam các sản phẩm công nghệ tiên tiến và trải nghiệm hoàn toàn mới về phong cách sống hiện đại, MCG không ngừng sáng tạo và phát triển các nền tảng công nghệ, mang đến các sản phẩm hỗ trợ đắc lực cho cuộc sống con người, tạo nên một xã hội hiện đại, phồn thịnh.

mcg
MCG và cơ hội cho các lập trình viên trổ tài tại sàn đấu giá trực tuyến – Chozoi

MCG và sự ra đời của “sàn đấu giá trực tuyến” tiên phong tại Việt Nam

Được thành lập vào năm 2014, công ty cổ phần MCG là công ty công nghệ chuyên về lập trình máy tính với đội ngũ bao gồm những Software Engineer bước ra từ các dự án lớn tại Việt Nam. Từ khi thành lập đến nay, MCG không ngừng sáng tạo để đem đến các sản phẩm hỗ trợ đắc lực cho cuộc sống con người.

Hiểu được rằng sự phát triển của Internet chính là động lực để thúc đẩy sự tăng trưởng kinh tế toàn cầu, cùng với kinh nghiệm nhiều năm xây dựng nền tảng ECommerce, MCG ấp ủ tham vọng tạo ra những trung tâm mua sắm trực tuyến uy tín hàng đầu trong khu vực và tạo đột phá trong lĩnh vực thương mại điện tử tại Việt Nam.

Đến đầu năm 2018, với tinh thần mạnh mẽ, lòng nhiệt huyết và quyết tâm dám bứt phá, MCG chính thức “lấn sân” và phát triển sang mảng thương mại điện tử. Từ đó xây dựng một hệ sinh thái thông minh, coi người dùng là trung tâm và cho ra đời sản phẩm mang tên “Chợ zời”.

Chozoi – Đồ tốt giá hời, lựa chọn tuyệt vời cho “tín đồ mua sắm”

Chozoi là dự án Thương mại điện tử được ra đời dựa trên sự kế thừa và phát huy những điểm mạnh của các sàn TMĐT lớn đã có. Kết hợp với các đặc điểm của “Chợ giời” truyền thống tại miền Bắc (Việt Nam), Chozoi là nơi mỗi cá nhân có thể thỏa sức mua bán với vô vàn sản phẩm đa dạng thuộc nhiều lĩnh vực khác nhau, thoải mái “deal giá hời” và trải nghiệm mua sắm online một cách mới mẻ.

Đặc biệt, ngoài tính năng mua, bán như các trang thương mại điện tử khác trên thị trường, tại Chozoi người dùng còn đươc “chủ động” trong việc quyết định mức giá cho mỗi món đồ và tạo điều kiện săn lùng các sản phẩm Độc – Lạ – Hiếm trên thị trường.

Với tính năng “đấu giá chỉ từ 1k” hoàn toàn mới, sàn Thương mại điện tử đến MCG đem đến cho người dùng những trải nghiệm mua sắm “hạnh phúc” khi nắm trong tay những món đồ ưng ý với mức giá “cực hời”. Tại sàn đấu, mọi món hàng đều có mức giá khởi điểm là 1000 VND, với đa dạng hàng hóa chủ yếu thuộc ngành hàng điện tử như tai nghe, loa kéo, điện thoại, laptop …

Quan tâm đến chất lượng sản phẩm và sự an toàn cho người dùng, MCG đưa ra những chính sách kiểm duyệt và rà soát chặt chẽ, đảm bảo Chozoi là cầu nối công bằng, đáp ứng lợi ích cho cả người mua và bán. Trong đó, một số yêu cầu của MCG bao gồm các loại giấy chứng nhận hợp pháp, giấy tờ chứng minh nguồn gốc sản phẩm, hình ảnh mô tả rõ ràng sản phẩm, giúp người mua yên tâm mua sắm và có những trải nghiệm thú vị nhất.

Không chỉ mang đến không gian mua sắm tuyệt vời, MCG còn xứng đáng là “điểm đến” lý tưởng cho các nhân tài công nghệ phát huy tiềm năng

mcg-2
MCG tự hào là điểm đến lý tưởng cho các tài năng công nghệ

MCG tham vọng mang đến một bước đột phá lớn trong lĩnh vực thương mại điện tử ở Việt Nam. Với phương châm: ”Think big – Make great”, MCG không ngừng tự hoàn thiện và đương đầu với thử thách phía trước, góp phần thể hiện khát vọng tạo ra một trung tâm mua sắm uy tín số 1 trong khu vực, xây dựng một hệ sinh thái thông minh, hỗ trợ người dùng trong kỉ nguyên mới.

Và để chinh phục được mục tiêu đó, MCG luôn tìm kiếm nhân tài công nghệ, những người cùng đồng hành trên con đường phát triển sản phẩm chozoi, đem đến cho người dùng không gian để thỏa sức mua sắm những mặt hàng vừa đa dạng, vừa chất lại rẻ đến không ngờ.

MCG có ngay những vị trí hấp dẫn cho bạn bùng nổ đam mê:

Đến với MCG, bạn chỉ cần thỏa sức thể hiện tài năng, công ty sẵn sàng trao bạn những đãi ngộ hấp dẫn nhất, xứng đáng nhất với những nỗ lực của bạn.

>>> Cùng khám phá những điều thú vị đang chờ bạn tại MCG:

  • Mức lương hấp dẫn dựa trên năng lực cùng nhiều khoản thưởng hấp dẫn và nhiều đợt đánh giá tăng lương định kỳ dựa trên thành tích và đóng góp của bạn;
  • Cơ hội trở thành một phần của đội ngũ trẻ trung, năng động, đem đến cho bạn nhiều cơ hội phát triển bản thân, khai phá tiềm năng;
  • Cơ hội làm việc trong ngành công nghiệp đang thịnh hành và là xu hướng trong ở hiện tại, trong một dự án có thể mở rộng để phục vụ lượng người dùng lớn, tiếp cận nhiều công nghệ như Big Data, AI, blockchain…
  • Và nhiều cơ hội thăng tiến không giới hạn, thúc đẩy sự nghiệp bạn vươn xa.

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Top 5 câu hỏi phỏng vấn JavaScript Developer nào cũng nên biết

JavaScript
Top 5 câu hỏi phỏng vấn JavaScript Developer nào cũng nên biết

Bài viết của tác giả Eric Elliott

Giới thiệu

Lựa chọn trở thành một JavaScript Developer sau khi đã từng là dev ở các ngôn ngữ lập trình khác như Java hay C++, vô hình chung có thể khiến các lập trình viên dễ gặp tình huống thiếu kiến thức toàn diện về JavaScript và không update được những thông tin mới liên quan đến công việc của mình. Từ đó khiến các dev khó pass qua các vòng phỏng vấn và tìm được công việc mong muốn.

javascript cơ bản
Trả lời đúng trọng tâm vấn đề giúp bạn thể hiện được nhiều hơn với nhà tuyển dụng

Trong những cuộc phỏng vấn gần đây với các ứng viên, tôi đã đưa ra một số câu hỏi liên quan đến ngôn ngữ lập trình JavaScript cơ bản có thể đánh giá đúng được tiềm năng của các dev trong lĩnh vực này. Đây là một số cách trả lời mà các bạn nên tham khảo để được đánh giá cao hơn bởi nhà tuyển dụng.

  'Toát mồ hôi' phỏng vấn tuyển dụng vào Apple

Những câu hỏi phỏng vấn JavaScript và cách trả lời gây ấn tượng với nhà tuyển dụng

1. Bạn có thể kể tên hai mô hình lập trình quan trọng đối với các JavaScript app developers không?

JavaScript là một ngôn ngữ lập trình được sử dụng để tạo ra những trang web tương tác mà chúng ta vẫn sử dụng hàng ngày như Facebook, Tweeter,… Nó được tích hợp và nhúng trong HTML, hỗ trợ lập trình hướng đối tượng (OOP) và lập trình chức năng.

Với câu hỏi này, ứng viên nên trình bày các vấn đề liên quan đến lập trình dựa trên nguyên mẫu cũng như thuộc tính prototype và các nguyên tắc lập trình chức năng. Những câu hỏi mang đậm tính kỹ thuật như thế này nếu ứng viên không đề cập đến prototypal hay các kiến thức chuyên môn của mình sẽ khó gây ấn tượng với nhà tuyển dụng.

Xem thêm Javascript Prototype là gì?

2. Sự khác biệt giữa classical inheritance và prototypal inheritance?

Class Inheritance (tính kế thừa lớp): Nó cho phép xây dựng một lớp mới dựa trên các định nghĩa của lớp đã có. Có nghĩa là lớp cha có thể chia sẻ dữ liệu và phương thức cho các lớp con. Các phiên bản thường được khởi tạo thông qua các hàm khởi tạo với từ khóa “new” . Kế thừa lớp có thể có hoặc không sử dụng từ khóa “class” từ ES6.

Prototypal inheritance (kế thừa nguyên mẫu): Prototype là cơ chế mà các object trong javascript kế thừa các tính năng từ một object khác. Nó thường được thực hiện bằng lệnh “Object.create ()”. Các phiên bản có thể được tạo từ nhiều đối tượng khác nhau, cho phép dễ dàng kế thừa có chọn lọc.

Trong JavaScript, prototypal inheritance – kế thừa nguyên mẫu đơn giản và linh hoạt hơn so với class inheritance – kế thừa lớp.

Xem thêm Functors trong JavaScript là gì?

Ở câu hỏi này, ứng viên nên trình bày về tác dụng của class như một khớp nối tạo liên kết chặt chẽ cho chương trình và đề cập đến tính kế thừa, phân cấp chức năng, thành phần đối tượng của prototypes. Sự cần thiết của 2 yếu tố này là như nhau và không có sự ưu tiên đối với inheritance nào cả.

3. Lập trình không đồng bộ là gì và tại sao nó lại quan trọng trong JavaScript?

Lập trình không đồng bộ là loại bỏ các điều kiện và lệnh gọi hàm, mã được thực hiện tuần tự từ trên xuống dưới, chặn các tác vụ chạy dài như yêu cầu mạng và I / O đĩa. Về bản chất, giao diện người dùng là không đồng bộ và dành phần lớn thời gian của họ để chờ thông tin nhập của người dùng làm gián đoạn vòng lặp sự kiện và kích hoạt trình xử lý sự kiện.

Node.js là không đồng bộ theo mặc định, Node.js được xây dựng dựa trên JavaScript runtime. Node.js ra đời khi các developer đời đầu của JavaScript cơ bản mở rộng nó từ một thứ chỉ chạy được trên trình duyệt thành một thứ bạn có thể chạy trên máy của mình dưới dạng ứng dụng độc lập. Điều này rất quan trọng trong JavaScript vì nó phù hợp với mã giao diện người dùng và có lợi cho hiệu suất trên máy chủ.

  Cách tạo một Docker đơn giản cho Node.JS

Với câu hỏi này ứng viên nên trình bày các hiểu biết của mình về lập trình không đồng bộ và những lợi ích mà nó mang lại, tại sao nó lại quan trọng với mã giao diện người dùng.

4. Functional programming là gì?

Functional programming là một dạng mô hình lập trình, dựa trên các hàm toán học (function), tránh việc thay đổi giá trị của dữ liệu. Functional Programming hướng đến tính kết hợp (composability) các hàm (function) để tối đa hóa khả năng tái sử dụng (reusability) trong chương trình.

Ứng viên cho vị trí JavaScript Developer cần trình bày các chức năng chính của nó là gì, cách tránh những sai sót do quá trình lập trình tạo nên, thành phần chức năng ngắn gọn. Cũng như chia sẻ thêm về các ngôn ngữ chức năng như: Lisp, ML, Haskell, Erlang, Clojure, Elm, F Sharp, OCaml và các thành phần chính hỗ trợ mô hình lập trình. Nếu ứng viên nào không thể xác định được các đặc trưng của JavaScript trong mô hình lập trình ở câu hỏi này sẽ khó được đánh giá cao về năng lực chuyên môn.

javascript online
Lập trình chức năng có những lợi hại riêng trong ngôn ngữ lập trình JavaScript

5. Ưu, nhược điểm của lập trình chức năng và lập trình hướng đối tượng là gì?

Ưu điểm của OOP: OOP khá dễ hiểu với các khái niệm cơ bản về đối tượng, là một kỹ thuật lập trình cho phép lập trình viên tạo ra các đối tượng trong code trừu tượng hóa các đối tượng. OOP có xu hướng sử dụng kiểu mệnh lệnh hơn là kiểu khai báo, kiểu này giống như một tập hợp các hướng dẫn chuyển tiếp để máy tính làm theo.

Nhược điểm của OOP: OOP có thể khiến dữ liệu được xử lý tách rời, khi cấu trúc dữ liệu thay đổi sẽ dẫn đến việc thuật toán bị thay đổi theo. Bên cạnh đó, OOP không tự động khởi tạo và giải phóng dữ liệu động, không mô tả được đầy đủ và trung thực hệ thống trong thực tế.

Xem thêm Arguments object trong javascript là gì? Cách sử dụng?

Ưu điểm của FP: Với FP các dev có thể tránh được bất kỳ trạng thái chia sẻ nào để giúp loại bỏ các lỗi gây ra bởi nhiều chức năng cạnh tranh cho cùng một source. Các chức năng có xu hướng được đơn giản hóa hoàn toàn và dễ dàng đặt lại bố cục để mã có thể tái sử dụng thường xuyên hơn so với OOP.

Nhược điểm của FP: Việc khai thác quá mức các tính năng của FP như kiểu không điểm và bố cục lớn có thể làm giảm khả năng đọc vì mã kết quả thường được chỉ định trừu tượng hơn, ngắn gọn hơn và ít cụ thể hơn.

Kết luận

Bám sát vào câu hỏi và trả lời đúng trọng tâm kiến thức, thể hiện được những kinh nghiệm bạn đã có trong quá trình làm việc sẽ giúp các bạn dễ chinh phục các nhà tuyển dụng hơn. Ngoài ra, để nâng cao hiểu biết với một ngôn ngữ lập trình mới, các dev nên tham gia thêm các lớp học JavaScript online để tìm hiểu thêm cũng là giải pháp hiệu quả.

Bài viết gốc được đăng tải tại medium.com

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

Xem thêm các việc làm JavaScript Developer hấp dẫn tại TopDev

Cybersecurity: Sự thật bất ngờ về ngành an ninh mạng Việt Nam

Cybersecurity không mới tuy nhiên đây lại là một sự chọn hấp dẫn trong lĩnh vực IT. Nguyên nhân vì sao và cơ hội nghề nghiệp của Cybersecurity như thế nào? 

Về chuyên gia chia sẻ:

  • Anh là Trần Minh Quảng, hiện đang là Trưởng phòng Báo độc và Khai thác lỗi của Công ty An ninh mạng Viettel (Viettel Cyber Security – VCS).
  • Công việc của anh chuyên về nghiên cứu chuyên sâu các loại mã độc, lỗi phần mềm và các cuộc tấn công mạng; từ đó tìm cách phát hiện và phòng chống tấn công tới hệ thống mạng của Viettel và khách hàng.

Cybersecurity và những hướng đi?

Anh có thể cho biết vì sao anh lại theo đuổi mảng Cybersecurity này không?

Có ba lý do chính:

  1. Cơ hội nghiên cứu chuyên sâu
    Mình chọn mảng bảo mật vì đây là một lĩnh vực mới, một công nghệ mới. Khi theo đuổi mảng này, mình sẽ có cơ hội được nghiên cứu chuyên sâu và phát triển bản thân về mặt kỹ năng chuyên môn rất tốt.
  2. Cơ hội nghề nghiệp rộng mở
    Ngoài ra, cơ hội nghề nghiệp cũng rất rộng mở do nó là lĩnh vực mới, rất cần thiết cho hầu hết các tổ chức ở Việt Nam.
  3. Do Cybersecurity là một lĩnh vực mạnh của Việt Nam
    Đặc biệt, mảng bảo mật này có thể được coi là một lĩnh vực mạnh của người Việt Nam. Mình được biết là có rất nhiều các chuyên gia Việt Nam đạt được tầm cỡ thế giới nên khi làm trong lĩnh vực này mình sẽ có cơ hội được tiếp cận và học hỏi, nâng tầm bản thân.

Vậy theo anh, trên thế giới và tại Việt Nam, mảng Cybersecurity này đang có những hướng đi nào?

Theo mình đánh giá về CyberSecurity thì có thể chia thành 3 hướng đi khác nhau như thế này:

  1. Nghiên cứu chuyên sâu
    Thứ nhất là hướng đi nghiên cứu chuyên sâu, công việc chủ yếu sẽ là nghiên cứu sâu về các lĩnh vực bảo mật; từ đó tạo ra tri thức xây dựng các giải pháp, các phương án phòng chống tấn công mạng. Yêu cầu của mảng này là cần những kiến thức rất chắc, rất sâu về các lĩnh vực an toàn thông tin, phải có kỹ năng tự nghiên cứu tìm tòi rất tốt.
    Mảng này sẽ nằm trong số ít các công ty làm sâu về bảo mật và an toàn thông tin.
  2. Phát triển giải pháp
    Thứ hai là hướng về phát triển giải pháp. Công việc chủ yếu là xây dựng các giải pháp bảo mật dựa trên kiến thức chuyên ngành về an toàn thông tin kết hợp với kỹ năng phát triển giải pháp. Yêu cầu phải có kiến thức tốt về mảng bảo mật đồng thời cần có kiến thức kỹ năng lập trình và phát triển giải pháp. Công việc này chủ yếu ở các công ty chuyên cung cấp giải pháp bảo mật.
  3. Vận hành khai thác
    Thứ ba là hướng nghiêng về vận hành khai thác, công việc chủ yếu là triển khai, áp dụng và vận hành hiệu quả các giải pháp bảo mật trong tổ chức. Mảng này yêu cầu kiến thức cơ bản về bảo mật, đồng thời phải có ứng dụng phần mềm trong các cơ quan tổ chức. Mảng thứ 3 này có trong hầu hết các cơ quan tổ chức, doanh nghiệp công nghệ cần có nhu cầu bảo mật an toàn thông tin cho hệ thống mạng của mình.

Xem việc làm IT security mới nhất tại TopDev

Tấn công mạng được thực hiện và diễn ra như thế nào?

Trong quá trình làm việc, anh nhận thấy có những hình thức tấn công mạng nào phổ biến hiện nay?

Có tổng cộng 5 hình thức tấn công mạng phổ biến hiện nay:

  1. Tấn công sử dụng các mã độc
    Hiện nay trên thế giới cũng như ở Việt Nam có một số hình thức tấn công mạng rất phổ biến. Chẳng hạn như tấn công sử dụng các mã độc hại cài đặt lên máy tính người dùng, từ đấy thực hiện các hành vi đánh cắp thông tin cũng như đánh cắp dữ liệu.
  2. Tấn công lừa đảo
    Thứ hai là hình thức tấn công lừa đảo có thể qua các email gửi đánh lừa nạn nhân hoặc qua các công cụ chat OTT, tin nhắn mạng xã hội; từ đấy lừa nạn nhân cung cấp thông tin cá nhân hoặc cung cấp thông tin về thẻ tín dụng,…
  3. Tấn công dựa trên việc khai thác lỗ hổng bảo mật
    Hình thức thứ 3 nữa là tấn công dựa trên việc khai thác các lỗ hổng bảo mật trên các sản phẩm dịch vụ, trên các nền tảng để xâm nhập trái phép vào hệ thống mạng của 1 công ty hay tổ chức nào đó.
  4. Tấn công từ chối dịch vụ
    Một hình thức nữa là tấn công từ chối dịch vụ; tức là cố tình tạo ra một lưu lượng truy cập giả mạo, không chính thức đến trang web đấy, dẫn đến là trang web đó bị treo và không đáp ứng được truy cập thật của người dùng nữa.
  5. Tấn công từ chối dịch vụ
    Cuối cùng, hình thức rất phổ biến ở Việt Nam hiện nay đó là hình thức tấn công có chủ đích. Tấn công này nhắm vào các cơ quan tổ chức nhà nước, doanh nghiệp lớn, các cơ quan chính phủ,…

Xem thêm: Bảo mật web – Một số kiểu tấn công

Quá trình tấn công mạng được thực hiện theo những phương thức nào và cách VCS team ngăn chặn?

Một cuộc tấn công mạng thông thường hầu hết đều trải qua 6 bước cơ bản:

  1. Đầu tiên kẻ tấn công sẽ tiến hành điều tra về nạn nhân, chẳng hạn điều tra xem thói quen sử dụng máy tính của nạn nhân là gì, thường truy cập các website nào, sử dụng phần mềm chat nào.
  2. Thứ hai là kẻ tấn công sẽ tiến hành chuẩn bị các công cụ dùng để tấn công xâm nhập vào hệ thống mạng của nạn nhân.
  3. Thứ ba, khi đã chuẩn bị xong vũ khí rồi, họ sẽ tiến hành tấn công xâm nhập vào hệ thống máy tính của nạn nhân.
  4. Sau khi bước chân vào rồi thì bước thứ 4, kẻ tấn công sẽ tiến hành cài cắm các chương trình độc hại, các công cụ đ khai thác dữ liệu trên mạng.
  5. Bước thứ năm, khi đã chiếm được máy tính nạn nhân thì sẽ duy trì các kênh điều khiển từ xa cho các kẻ tấn công, để hacker có thể thường xuyên kiểm soát được hệ thống mạng của nạn nhân.
  6. Bước cuối cùng khi đã có sự kiểm soát rồi thì kẻ tấn công sẽ tiến hành khai thác mục tiêu của mình, chẳng hạn như thu thập thông tin, đánh cắp dữ liệu hoặc thực hiện các bước tấn công leo thang khác.

Để ngăn chặn điều này, Viettel Cyber Security có giải pháp ngăn chặn nhiều lớp:

Đầu tiên là về mặt giải pháp, VCS có hệ sinh thái giải pháp rất đa dạng, nhiều mức, như mức endpoint, mức network, mức gateway, trên nhiều nền tảng khác nhau, đầy đủ hệ sinh thái về giải pháp.

Thứ hai là về mặt quy trình, VCS có hệ thống giám sát an toàn thông tin 24/7 cho khách hàng. Hệ thống này đảm bảo luôn luôn có thể xử lý bất cứ sự cố nào trong ngày đồng thời luôn có những quy trình liên quan đến việc cập nhật tri thức mới cho giải pháp; update với tri thức của thế giới hay là các quy trình liên quan đến cải tiến nội tại sản phẩm để tối ưu và đáp ứng được yêu cầu của tổ chức.

Yếu tố thứ 3 là về con người, VCS luôn chú trọng đào tạo chuyên sâu, bài bản chất lượng nhân sự và hướng đến tinh thần trách nhiệm khi làm việc luôn luôn rất cao và hết mình với khách hàng. Đó là những giải pháp VCS có thể làm giúp khách hàng, tổ chức, doanh nghiệp tránh các cuộc tấn công mạng.

Vậy làm thế nào để hạn chế việc bị tấn công mạng?

Đối với cá nhân, khi sử dụng internet cũng nên có những kiến thức cơ bản về bảo mật, về cách thức hoạt động, các hình thức tấn công được thực hiện để tự phòng tránh cho chính mình. Cũng như không nên sử dụng các phần mềm lậu, các phần mềm không có bản quyền, các bản crack sẽ rất dễ lây nhiễm mã độc; đồng thời nên trang bị cho máy tính của mình những phần mềm diệt virus thông thường cũng như có thói quen cập nhật hệ điều hành máy tính thường xuyên.

Khi sử dụng các dịch vụ như dịch vụ ngân hàng hay các trang web online, nên có thói quen quản lý mật khẩu cá nhân tốt, mật khẩu mang tính chất khó đoán một chút và hết sức cảnh giác khi cung cấp các thông tin cá nhân lên mạng như thông tin về tài khoản ngân hàng, về mật khẩu, số thẻ ngân hàng,…

Ngoài ra, chúng ta cũng nên có các tình huống backup dữ liệu thường xuyên, như lên các kho lưu trữ dữ liệu trực tuyến cũng là cách tốt để phòng chống tấn công mã hóa dữ liệu.

Đối với các tổ chức, cơ quan, doanh nghiệp thì nên có sự đầu tư bài bản cả về con người, giải pháp, quy trình chính sách để có sự đầu tư cho bảo mật an toàn thông tin tương xứng với độ trưởng thành của các hệ thống công nghệ thông tin trong tổ chức của mình.

Tình hình an ninh mạng tại Việt Nam?

Theo anh, nhận thức về bảo mật an ninh mạng ở Việt Nam hiện tại đang ở mức nào?

Có thể nói là mức độ bảo mật của người dùng máy tính ở Việt Nam về cơ bản là vẫn còn yếu, chưa có ý thức tự bảo vệ mình trước các cuộc tấn công mạng.

Tuy nhiên nhận thức này đang có sự cải thiện khá nhanh nhờ sự vào cuộc của các phương tiện truyền thông đại chúng trong việc tuyên truyền nâng cao nhận thức cho người dùng máy tính về các cuộc tấn công mạng. Gần đây Chính phủ cũng đã có các chính sách, hành lang pháp lý về bảo mật dẫn đến sự đầu tư về nhận thức con người trong truyền thông xã hội đã được đẩy lên rất tốt. Nên có thể khẳng định nhận thức này dù vẫn còn yếu nhưng vẫn đang cải thiện rất nhanh.

Xem thêm: Lỗ hổng XSS – Tấn công lấy cắp phiên đăng nhập của người dùng

Anh có thể cho biết thực trạng tấn công mạng tại Việt Nam đang diễn ra như thế nào được chứ?

Việt Nam nằm trong top những quốc gia chịu sự tấn công mạng rất mạnh, kể cả các cuộc tấn công thông thường, các mã độc thông thường lẫn các cuộc tấn công có chủ đích.

Cũng là do một phần Việt Nam có những yếu tố “thuận lợi” cho các cuộc tấn công diễn ra; chẳng hạn như ý thức bảo mật thông tin của người dùng máy tính cũng chưa được cao, đồng thời tình trạng sử dụng phần mềm lậu cũng nhiều.

Ngoài ra Việt Nam cũng nằm trong khu vực nhạy cảm về chính trị, về tranh chấp chủ quyền lãnh thổ nên các hoạt động tấn công mạng diễn ra rất mạnh.

Vì sao các tổ chức ở Việt Nam mất gấp 3 lần thời gian so với thế giới mới phát hiện rằng hệ thống của mình đã bị xâm nhập?

Theo thống kê trên thế giới, thời gian trung bình để các tổ chức phát hiện hệ thống của mình đã bị xâm nhập là mất khoảng 7 tháng. Còn số liệu công bố tại Việt Nam lên đến 2.2 năm. Theo anh, vì sao lại có sự chênh lệch lớn như vậy?

Đúng là như vậy. Theo số liệu đã nêu thì thời gian trung bình để phát hiện tấn công mạng ở Việt Nam lâu gấp 3 lần so với thế giới. Lý do là vì an ninh mạng cũng là một lĩnh vực khá mới tại Việt Nam nên những trang bị về công cụ quản lý, công cụ giám sát, công cụ xử lý và phát hiện vấn đề về an toàn thông tin vẫn còn rất hạn chế trong các cơ quan, tổ chức, doanh nghiệp ở Việt Nam; trong khi lĩnh vực CNTT đã được phát triển từ khá lâu. Chính do sự thiếu hụt trang bị này mà việc phát hiện xâm nhập ở Việt Nam cũng rất muộn.

Yếu tố thứ hai là bản thân nhận thức và năng lực về an toàn thông tin của đội ngũ cán bộ vận hành khai thác các hệ thống cũng chưa tương xứng với trình độ trên thế giới, cũng như chưa tương xứng với độ trưởng thành của các dịch vụ, giải pháp công nghệ thông tin của mình. Do đó về mặt dịch vụ chúng ta có thể đảm bảo được tuy nhiên cũng khá khó khi năng lực về an toàn thông tin chưa đủ tốt để đáp ứng được việc quan sát và phát hiện vấn đề từ sớm.

Làm sao theo đuổi ngành Cybersecurity?

Sau một thời gian dài gắn bó với nghề, theo anh CyberSecurity có phải là một nghề “cool ngầu”?

Đối với mình, công việc về an ninh mạng này là một nghề hết sức thú vị, tính mới rất cao nên có nhiều cơ hội để mình thường xuyên sáng tạo, làm mới công việc.

Thứ hai là tri thức trong nghề này thay đổi rất nhanh, gần như ngày nào cũng có kiến thức mới, liên tục cập nhật, mình phải luôn luôn tìm hiểu theo nên dẫn đến việc mình cần làm mới bản thân để theo kịp tri thức đó.

Thứ ba là nghề này mang đến cho mình cảm giác khi chinh phục được các nghiên cứu chuyên sâu, có những mục tiêu đặt ra đòi hỏi mình phải tìm tòi từ ngày này qua ngày khác nên khi đạt được mục đích, cảm giác rất thỏa mãn và thú vị. Nên đối với mình việc này rất cool.

Vậy theo anh, những bạn muốn theo đuổi mảng này thì nên trang bị những kiến thức nào?

Đối với những bạn muốn theo đuổi mảng này theo mình nên tập trung tìm hiểu một số kiến thức chẳng hạn như nền tảng về máy tính, CNTT, lập trình, do ngành Cybersecurity vẫn dựa trên nền tảng về CNTT rất nhiều nên cơ bản các bạn phải có những kiến thức này.

Thứ hai là cần kiến thức chuyên ngành về Cybersecurity, như dịch ngược, các lỗ hổng phần mềm, lỗ hổng của ứng dụng web, mật mã, mã hóa, là những kiến thức chuyên ngành chúng ta cần tìm hiểu.

Ngoài ra, các bạn cũng nên có những kiến thức tổng quan về hệ thống mạng máy tính, máy chủ, các hệ thống dịch vụ trong môi trường doanh nghiệp, tổ chức vận hành như thế nào, sẽ là những kiến thức bổ trợ rất tốt nếu bạn muốn theo ngành Cybersecurity này.

Đối với nghề an ninh mạng này về cơ bản các bạn cũng nên tìm hiểu về các công nghệ mới, vì ngoài việc sử dụng công nghệ này áp dụng trong bảo mật ra thì bạn cũng nên tìm hiểu để đánh giá mức độ an toàn và sử dụng đúng trong các lĩnh vực khác về CNTT nói chung, như Blockchain, Big data, AI,… nó sẽ hỗ trợ rất tốt cho công việc của mình.

Anh có kinh nghiệm (tips & tricks) nào cho các bạn sinh viên đang theo đuổi ngành Cybersecurity không?

Về một số tips and trick khi theo đuổi ngành Cybersecurity mình có một vài chia sẻ như thế này:

Thứ nhất các bạn nên tham gia vào các hội nhóm thực hành nghiên cứu về bảo mật trong trường lớp hoặc các cộng đồng mạng, nó sẽ hỗ trợ rất tốt khi chia sẻ kinh nghiệm cho nhau, cùng nhau giải quyết các vấn đề thực tế.

Thứ 2 là các bạn cũng nên tham gia các cuộc thi về bảo mật chủ yếu dành riêng cho các bạn trẻ theo đuổi ngành Cybersecurity, giải các thử thách trên đó sẽ gia tăng thêm kinh nghiệm trong lĩnh vực này.

Ngoài ra khi còn là sinh viên các bạn cũng có thể tham gia thực tập, làm việc part-time tại các doanh nghiệp về bảo mật cũng sẽ cho các bạn thêm nhiều kinh nghiệm và tiếp xúc với các vấn đề bảo mật từ sớm, sẽ rất tốt cho lộ trình nghề nghiệp của bạn sau này.

Xem thêm:

Còn đối với những bạn muốn theo đuổi con đường hacking, anh có thể giới thiệu trang web nào để giúp “luyện tập” kỹ năng hacking được chứ?

Để luyện tập khả năng hacking của mình hiện nay có rất nhiều trang web chứa các thử thách bảo mật mô phỏng lại các nhiệm vụ trên thực tế để các bạn có thể rèn luyện khả năng tấn công của mình, chẳng hạn như:

  1. www.hackthissite.org
  2. www.reversing.kr
  3. www.root-me.org

Với các trang web này bạn có thể search thông tin một cách dễ dàng trên mạng và tham gia luyện tập được. Ngoài ra hàng năm, hàng tháng cũng có rất nhiều các cuộc thi được tổ chức rộng rãi trên thế giới, dành cho những người nghiên cứu về bảo mật tham gia và giải các thử thách trong các cuộc thi đó. Nó cũng khá là sát thực với các bài toán mà chúng ta phải đối mặt trên thực tế.

Để theo đuổi con đường hacking thì không biết đã có luật nào để phân biệt hacker mũ trắng và hacker mũ đen tại Việt Nam chưa?

Hacker mũ trắng và hacker mũ đen thật ra nó chỉ khác nhau về động cơ và những hành động phá hoại khi mình thực hiện hành vi hack thôi.

Gần đây Việt Nam vừa ban hành Luật an ninh mạng Việt Nam năm 2018, nó đã phân biệt và định nghĩa khá rõ những hành vi được phép và không được phép khi thực hiện tấn công trong môi trường mạng ở VN rồi. Chẳng hạn như bạn chỉ được phép tấn công vào đơn vị mạng của một tổ chức khác khi đã được sự cho phép của cơ quan chủ quản hệ thống CNTT đó và bạn đã có sự thông báo cũng như thống nhất phạm vi thực hiện, còn mọi hành vi xâm nhập trái phép vào các hệ thống mạng khác đều là không hợp lệ. Tương tự như vậy ở hầu hết các quốc gia trên các nước đều có luật an ninh mạng quy định cụ thể về những hành vi được phép và không được phép khi thực hiện tấn công trên môi trường mạng của các tổ chức quốc gia đó.

Theo anh nhu cầu tuyển dụng cho ngành Cybersecurity này sẽ thay đổi như thế nào ở Việt Nam trong tương lai?

Theo mình được biết thì hiện nay nhu cầu nhân lực chất lượng cao về Cybersecurity đang thiếu hụt khá là nhiều. Trong khoảng 5 – 10 năm mình nghĩ là nhu cầu nhân sự Cybersecurity chất lượng cao sẽ ngày càng tăng theo thực tế.

Do hiện nay nhận thức về bảo mật của các lãnh đạo đơn vị cơ quan, tổ chức đang được nâng lên một cách đáng kể nên sự đầu tư cho mảng bảo mật này cũng sẽ được tăng lên.

Thứ hai là do cơ chế chính sách của Việt Nam hiện nay đang rất khuyến khích nâng cao năng lực về bảo mật an toàn thông tin cho các hệ thống an toàn thông tin trong nước. Hiện nay có rất nhiều các vị trí về bảo mật trong hầu hết các doanh nghiệp làm về công nghệ thông tin, công nghệ tại Việt Nam cũng như khối nhà nước. Bạn có thể làm về bảo mật trong các bộ ban ngành, các cơ quan nhà nước của chính phủ hay làm bảo mật cho các ngân hàng, các công ty cung cấp các dịch vụ bảo mật thông tin cho khách hàng, làm về bảo mật chuyên sâu ở các công ty nghiên cứu phát triển sản phẩm, cung cấp giải pháp cho thị trường.

Câu hỏi cuối cùng, anh có thể chia sẻ career path điển hình cho một bạn muốn theo đuổi ngành Cybersecurity không?

Mình chia sẻ từ những kinh nghiệm của bản thân và quá trình làm việc đã tiếp xúc với các bạn trẻ; những nhà nghiên cứu; những người làm việc về bảo mật. Thật chất, career path của những người theo mảng bảo mật khác một chút so với các ngành CNTT khác; đó là nó bắt đầu từ khi còn là sinh viên chứ không phải khi các bạn đã ra trường rồi.

Khi còn là sinh viên các bạn nên chú trọng và định hướng hướng đi cho bản thân; tập trung phát triển và nghiên cứu để mình có thể tích lũy được những kỹ năng và kiến thức tối đa có thể trong các mảng Cybersecurity mình muốn theo đuổi.

Khi đã ra trường các bạn có thể ở level fresher, các bạn có thể tham gia những công việc đơn giản liên quan đến bảo mật ở các công ty; chẳng hạn như hỗ trợ nghiên cứu, vận hành giám sát hoặc tham gia xử lý một số sự cố,…

Tiếp theo, các bạn có thể phát triển lên level junior, senior, như làm việc độc lập được, phụ trách được một đầu việc lớn. Hoặc dần dần các bạn có thể lead được một team làm về bảo mật, một team đánh giá về ATTT hay một team về triển khai các giải pháp bảo mật cho doanh nghiệp.

Sau khi các bạn đã có đủ cả về kỹ năng và kinh nghiệm lẫn kiến thức am hiểu về hệ thống; các bạn có thể đến với một level cao hơn là một chuyên gia – Expert Cybersecurity. Ở mức là có thể phụ trách về bảo mật cho cả một doanh nghiệp, một tổ chức lớn được.

Theo mình đó là một career path khá là rõ ràng cho những bạn muốn tham gia vào mảng này.

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

Series TopDev TV được thực hiện bởi TopDev.vn

Cách tạo REST API với JSON Server

Rest API
Cách tạo REST API với JSON Server

Bài viết được sự cho phép của BBT Tạp chí Lập trình

Một công việc khá phổ biến đối với front-end developer là phải giả lập một backend REST service để nhận JSON data cung cấp cho ứng dụng front-end, và đảm bảo nó hoạt động như mong đợi trong khi đang chờ phía backend hoàn thiện service.

  3 bước tối ưu hiệu năng React App bằng các API mới của React
  10+ tools và extensions tuyệt vời cho GraphQL APIs

Bạn vẫn có thể cài đặt backend server đầy đủ, bằng cách sử dụng Node.js, Express và MongoDB, tuy nhiên việc này tốn khá nhiều thời gian và phức tạp. Trong khi đó JSON Server lại là một giải pháp khá hoàn thiện cho yêu cầu nhanh và đơn giản với đầy đủ các thao tác CRUD (Create Read Update Delete).

Vì vậy bài viết này sẽ hướng dẫn bạn cách cài đặt JSON server và publish một sample REST API.

Chuẩn bị

Cài node cho máy tính của bạn bằng cách tải gói phù hợp với hệ điều hành của bạn ở link sau https://nodejs.org/en/download/

Sau khi cài đặt xong chúng ta tiến hành kiểm tra version của node và npm bằng cách như sau:

 $ node -v $ npm –v

Nếu màn hình xuất hiện version của node và npm (Node Package Managerment) thì có nghĩa bạn đã cài đặt thành công

Cài đặt JSON Server

JSON Server được đóng gói như một NPM package. Vì vậy việc cài đặt có thể được thực hiện thông qua việc sử dụng gói node.js manager:

 $ npm install -g json-server

Tuỳ chọn -g sẽ giúp cho package được cài đặt ở level hệ thống.

Tạo JSON File

Tiếp theo, hãy tạo file JSON và đặt tên file theo cú pháp <tên file>.json ví dụ: data.json. Trong file này sẽ chứa những dữ liệu được trả về bởi REST API. Dưới đây là một ví dụ về file json này:

{
  "employees": [
    {
      "id": 1,
      "firstName": "Phuc",
      "lastName": "Lê",
      "address": "28 Nguyễn Tri Phương, Phú Nhuận, TP Huế",
	"profile": {
		"username": "phuc.le@codegym.vn",
      	"email": "phuc.le@codegym.vn",
	},
    },
    {
      "id": 2,
      "firstName": "Khanh",
      "lastName": "Lê",
      "address": "28 Nguyễn Tri Phương, Phú Nhuận, TP Huế",
	    	"profile": {
		"username": "khanh.le@codegym.vn",
      	"email": "khanh.le@codegym.vn",
		},
    },
    {
      "id": 3,
      "firstName": "Hoàng",
      "lastName": "Phan",
      "address": "28 Nguyễn Tri Phương, Phú Nhuận, TP Huế",
		"profile": {
		"username": "hoang.phan@codegym.vn",
      	"email": "hoang.phan@codegym.vn",
		}
    }
}

Cấu trúc trên mô tả employee object với các trường id, firstName, lastName, address và profile.

Khởi động Server

Hãy khởi động JSON server bằng việc chạy câu lệnh sau:

 $ json-server --watch data.json

Lưu ý: Nếu file json không nằm ở thư mục gốc thì chúng ta sử dụng lện cd để đặt con trỏ hệ thống tới thư mục chứa file data.json rồi mới thực hiện lệnh trên.

File data.json được truyền vào như một tham số trong câu lệnh trên, và option –watch được thêm vào nhằm đảm bảo server được chạy ở chế độ xem, ở chế độ này, server sẽ xem xét những thay đổi và cập nhật kết quả vào API một cách phù hợp.

Bây giờ hãy mở địa chỉ http://localhost:3000/employees trên browser và ta sẽ nhận được kết quả của file json mà ta đã tạo.

Những HTTP endpoints sau đây được tạo tự động bởi JSON server, ta có thể tuỳ chọn để sử dụng sao cho phù hợp với mục đích của mình:

GET    /employees
GET    /employees/{id}
POST   /employees
PUT    /employees/{id}
PATCH  /employees/{id}
DELETE /employees/{id}

Lưu ý:

  • Giá trị của id không được thay đổi, và nó sẽ được tăng dần sau mỗi POST request.
  • Nếu ta có cung cấp giá trị cho id cho PUT hoặc PATCH request thì giá trị đó sẽ được bỏ qua.
  • Các loại POST, PUT và PATCH request thì phải bổ sung thêm Content-Type: application/json trong body. Nếu không có thiết lập này thì dữ liệu sẽ không được cập nhật vào file data.json.

Một số thao tác truy vấn

Filter

Sử dụng dấu . để truy cập vào các thuộc tính

GET /employees?firstName=”Hoàng”&amp;lastName =”Phan”
GET /employees?id=1
GET /employees?profile.email=khanh.le@codegym.vn

Paginate

Sử dụng _page và tùy chọn _limit để trả về dữ liệu sau khi được phân trang. Mặc định _limit là 10

 GET /employees?_page=7 GET /employees?_page=7&amp;_limit=20

Sort

Sử dụng _sort và _order. Mặc định là sắp xếp tăng dần:

GET /employees?_sort=firstName&amp;_order=asc
GET /employees/1/?_sort=firstName&amp;_order=desc

Sắp xếp nhiều trường:

 GET /employees?_sort=firstName,lastName&amp;_order=desc,asc

Ngoài ra, để tìm hiểu sâu hơn về những hỗ trợ mà json server cung cấp, các bạn có thể tìm hiểu thêm ở đây https://github.com/typicode/json-server

Author: Nguyễn Hữu Anh Khoa

Bài viết gốc được đăng tải tại Tạp chí Lập trình

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

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

Top 5 Ngôn Ngữ Lập Trình Game Không Thể Bỏ Qua 2024

lập trình game
Top 5 Ngôn Ngữ Lập Trình Game Để Học Hiện nay

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

Giá trị thị trường của ngành công nghiệp game là 108 tỷ đô la vào năm 2017 và đạt 128 tỷ vào năm 2020. Năm 2018 đã chứng kiến ​​những tên tuổi lớn trong trò chơi điện tử như PUBG và Fortnite. Nếu bạn là một lập trình viên và mong muốn kiếm tiền trên thị trường game hàng tỷ đô la bạn cần đúng ngôn ngữ lập trình game. Nếu bạn muốn trở thành nhà phát triển trò chơi, đây là một số ngôn ngữ lập trình cần tham khảo.

lập trình game
Các ngôn ngữ lập trình game

C++

Nói thật thì đây là Ngôn Ngữ Lập Trình Game rất tốt cho những bạn mới lập trình lẫn lập trình game. Mình cũng học ngôn ngữ này đầu tiên để lấy nền tảng, lấy kiến thức cơ bản cho việc lập trình. Bạn có thể học nó ngay lúc mới bắt đầu C++ có thể vừa giúp bạn có kiến thức cơ bản, vừa lại lập trình game được mỗi mũi tên trúng 2 đích quả là ngon rồi còn gì. Engine Support thì có Unreal Engine, Godot Engine, Cocos2dx, Cry Engine, Panda 3D. Những Engine mà mình nói trên thì đều sử dụng ổn cho những bạn mới bắt đầu. Nó không khó lắm.

Tham khảo thêm: việc làm C++ lương cao cho bạn

  Vừa học vừa chơi! Top 15+ game lập trình miễn phí
  4 ngôn ngữ phát triển game indie phổ biến

C#

C# là ngôn ngữ hướng đối tượng. Ngôn ngữ này nếu chưa có căn bản mà nhảy vô thì rất khó với các bạn. Nếu có học c++ rồi thì nhảy vô con này thì cũng cũng dễ chứ không phải khó lắm. Nhưng nếu học nó thì bạn sẽ được là một mũi tên trúng 3 đích hơn cả c++. 1 là làm web, 2 là làm app nè, 3 làm game nữa lại ngon lành. Nếu dùng C# làm Ngôn Ngữ Lập Trình Game thì có những Engine sau đây hỗ trợ nó:

  • Unity: Con này thì hỗ trợ thôi rồi mình cũng chả còn gì để bàn về sự “support” của nó
  • Godot: Support vẫn khá còn yếu chưa được mạnh lắm
  • CryEngine: Đây là Engine được built từ c++ và nó hỗ trợ C#, Lua
  • WaveEngine: Đây là Engine mà được tạo ra dựa trên C# cho phép bạn tạo game đa nên tảng

Tham khảo thêm các vị trí tuyển dụng lập trình C# hấp dẫn tại Topdev.

Python

Đây thật sự là 1 Ngôn Ngữ Lập Trình Game dễ các bạn ạ. Dễ đến nỗi mà mình chưa học nó mà chỉ học ngôn ngữ dựa trên nó mà đã có thể làm quen được nhiều thứ, giải toán đồ,…. Dễ ẹt. Python không được ứng dụng trong game nhiều lắm đa số toàn mấy Engine game làm chán lắm.Python cũng được đánh giá khá cao trên bảng xếp hạng đấy chứ. Với Engine mà nó hỗ trợ thì có:

  • Godot Engine: Godot thì khỏi bàn luôn hỗ trợ như C# – Unity. Ngôn ngữ riêng của Engine này sử dụng GDScript dựa trên Python và Lua. Hầu hết là Python, Lua chiếm khá là ít luôn ý. Support 2D & 2.5D & 3D
  • Cocos2D Engine: Con này thì Support giống Godot.
  • Panda3D: nhắc tới anh này trên chỗ C++ rồi nhỉ. Con này thì 3D thôi
  • Pygame: anh này thì chắc chắn không thể không nhắc tới rồi làm game hơi kém tý nhưng vẫn ổn

JavaScript

Chắc chắc không không thể nhắc tới anh chàng này rồi. Một ngôn ngữ lập trình web, một ngôn ngữ cực kỳ là linh hoạt nhưng được sử dụng khá là nhiều trong lập trình game. Vậy thì nhưng Engine nào mà nó hỗ trợ:

  • Game Maker Studio: Chắc chắn không thể bỏ qua chàng trai này được. Engine mà mình làm game đầu tiên và cái game like sh*t :(.Còn này ngoài JavaScript còn sử dụng thêm là Game Maker Language. Làm game 2D – 3D. Nhưng 3D hỗ trợ rất rất rất kém. Nếu làm 3D game bằng con này thì khuyên bạn đổi Engine. Full plaform luôn nhé
  • Gamvas : Con này thì làm game nền tảng HTML5
  • GDevelop : Còn này 2D luôn, hỗ trợ hầu hết các nền tảng hiện nay.
  • PlayCanvas: Có anh này thì 3D đây, hỗ trợ như anh trên.
  • RPG Maker: Xém thì quên thằng này, làm game RPG bao ổn nhé các bạn.

Tham khảo thêm các vị trí tuyển lập trình Javscript mới nhất.

Lua

Ngôn ngữ lập trình game tuyệt vời. Mình có ấn tượng thật sự sâu sắc đến với ngôn ngữ này:vv.Lua là ngôn ngữ được sử dụng nhiều VD như: Phần mềm PC  Adobe’s Photoshop Lightroom, hệ thống nhúng hay chính tựa game mưa gió 1 thời  World of Warcarft addons và Angry Birds. Lua  là ngôn ngữ hàng đầu sử dụng trong game.Engine mà nó hỗ trợ thì có khá là nhiều và NGON:

  • CryEngine; con này vừa C++vừa lua nên khá ngon , chỉ hỗ trợ 3D
  • Codea: Con này 2D chỉ dành cho iOS
  • Defold : 2D-3D, đa nền tảng chỉ chạy bằng lua
  • Leadwerks: 3D, Hỗ trợ nền tảng linux và windows
  • Lumberyard: 3D con này hỗ trợ PS 4, PC,Xbox
  • ShiVa: Con này 3D. Hỗ trợ nền tảng Windows,PS3,PS4 Xbox 360,Xbox One

Bài viết gốc được đăng tải tại anonyviet.com

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

Xem tuyển dụng Game Developer tại các công ty hàng đầu trên TopDev

Tôi đã thiết kế ra design pattern Trứng có trước hay Gà có trước như thế nào

Design Pattern

Bài viết được sự cho phép của tác giả Phạm Công Sơn

Nhắc đến design pattern thì có lẽ đã quá quen thuộc với dân lập trình rồi. Ngay từ ngày nhập học ở FPT APTECH vào năm 2005 tôi vẫn nhớ rất rõ lời thầy Thành giám đốc trung tâm rằng “Các bạn sẽ được đào tạo để làm việc với ngôn ngữ lập trình hướng đối tượng”. Tuy chưa hiểu mấy cho đến khi trải qua môn Java, C# tôi cũng đã bắt đầu dần hiểu về OOP và tiếp xúc với design pattern. Tại thời điểm đó trang web mà tôi học về design pattern là https://www.dofactory.com/. Hồi còn đi học nói chung là có rất nhiều tài liệu trên internet để tham khảo, nhưng có lẽ dofactory là một huyền thoại đối với tôi, vì nó là trang web duy nhất giúp tôi học lập trình mà còn nhớ từ hồi đó cho tới tận bây giờ.

Xem thêm tuyển dụng designer hấp dẫn tại TopDev

Tiếp cận từ sớm, ngay từ lúc còn mới học code tuy vậy cũng phải mất tới vài năm đi làm tôi mới có thể sử dụng được một vài design pattern trong một số trường hợp, bài toán. Còn lại cũng nhiều design partern có biết, có học cho tới nay vẫn chưa được sử dụng. Vì không phải design pattern nào cũng có thể đưa vào thực tế. Tôi cũng đã có một khoảng thời gian chỉ làm Frontend và chả động tí gì tới design pattern luôn.

Khi chưa được vào các dự án lớn thì nhu cầu dùng cũng sẽ là rất ít. Cho đến khi vào khoảng năm 2014 tôi vào làm việc tại một công ty định vị. Lúc này tôi phải làm việc nhiều tới xử lý số liệu, xử lý giao tiếp giữa các khối v.v… thì hầu như chỗ nào tôi cũng phải thiết kế code và sử dụng design pattern.

Liên tục sử dụng design pattern trong các dự án, thiết kế code trước khi thực hiện đã trở thành một thói quen của tôi. Lâu dần đã thành kỹ năng, và điển hình là tôi đã thiết kế được mô hình “Trứng có trước hay gà có trước” được sử dụng khá là nhiều nhưng ít nhất có 2 dự án lớn đó là: Dự án Phân tích dữ liệu hộp đen cho Taxi, Bus và Dự án Staxi xây dựng Server giao tiếp giữa các khối: Mobile, Tổng đài, Server.

Hôm nay tôi xin chia sẻ với các bạn về mô hình này.

  Design pattern là gì? Tại sao nên sử dụng Design pattern?
  10 kênh Youtube học lập trình không thể bỏ qua dành cho Junior Web Developer / Designer

1. Từ đâu mà tôi thiết kế mô hình này?

Trong lần nhận dự án xử lý dữ liệu logfile hộp đen cho Oto, Taxi, Bus tôi cần phải xây dựng 3 hệ thống phân tích data. Ở đây có thể hình dung có 3 hệ thống nhưng cách thức hoạt động sẽ là hoàn toàn giống nhau. Sự khác biệt ở đây chương trình phân tích chỉ là cấu hình, đầu vào và các xử lý khác nhau. Dẫn tới yêu cầu đặt ra khi viết các xử lý phân tích ở hệ thống nào thì sử dụng cấu hình, data đầu vào phải là của hệ thống đó. Chính vì điều này việc sử dụng interfaceabstract ở đây cho cấu trúc data và các xử lý là chưa đủ do tính ràng buộc chặt chẽ giữa các đối tượng trong cấu trúc hệ thống.

Nói thì có thể khó hiểu, chúng ta có thể xem qua ví dụ sau cho dễ hiểu

public class Family
{
    public IFather Father { set; get; }
    public IChild Child { set; get; }

    public void Happy()
    {
        Father.LoveChild(Child);
        Child.LoveFather(Father);
    }
}
public interface IFather
{
    void LoveChild(IChild child);
}
public interface IChild
{
    void LoveFather(IFather father);
}

Ví dụ này miêu tả quan hệ gia đình =)). Bố yêu con và con yêu bố. Tuy nhiên sẽ bị trường hợp bố yêu nhầm con ông hàng xóm. Các bạn hãy xem code kế thừa tiếp theo.

public class FatherVN : IFather
{
    public bool Nice { set; get; }
    public void LoveChild(IChild child)
    {
        // Không thể truy vấn thuộc tính child.Cry
        // Vì child ở đây chỉ là interface IChild
    }
}

public class ChildVN : IChild
{
    public bool Cry { set; get; }
    public void LoveFather(IFather father)
    {
        // Không thể truy vấn thuộc tính Nice
        // vì father ở đây chỉ là interface IFather
    }
}

public class FatherUSA : IFather
{
    public bool Strong { set; get; }
    public void LoveChild(IChild child)
    {
        // Không thể truy vấn thuộc tính child.Tall
        // Vì child ở đây chỉ là interface IChild
    }
}

public class ChildUSA : IChild
{
    public bool Tall { set; get; }
    public void LoveFather(IFather father)
    {
        // Không thể truy vấn thuộc tính Strong
        // vì father ở đây chỉ là interface IFather
    }
}

Giả sử chúng ta có 2 gia đình đại diện cho Việt Nam và Mỹ thì ta có những claas như sau FatherVNChildVNFatherUSAChildUSA ở đây có thể thấy tại các phương thức LoveChild chúng ta không thể truy vấn tới thuộc tính của biến father và tương tự phương thức LoveChild cũng không thể truy vấn tới thuộc tính của biến child.

Chúng ta xem tiếp phần sử dụng sau khi đã cụ thể hóa các class

var familyVN = new Family
{
    Father = new FatherVN { },
    Child = new ChildVN { }
};
familyVN.Happy();

var familyUSA = new Family
{
    Father = new FatherUSA { },
    Child = new ChildUSA { }
};
familyUSA.Happy();

Đây là khi sử dụng đúng hệ thống, có nghĩa là con ông nào thì thương bố ông ấy, bố ông nào thì thương con ông ấy. Nhưng nếu là như thế này thì sẽ có sự nhầm lẫn.

var familyUnknown = new Family
{
    Father = new FatherVN { },
    Child = new ChildUSA { }
};
familyUnknown.Happy();

Và giờ đây rất dễ thấy là bị nuôi con ông hàng xóm =)). Từ đó có thể thấy nếu sử dụng interface hay abstract một cách thông thường thì sẽ không đáp ứng được yêu cầu của hệ thống là các đối tượng phải liên kết chặt chẽ với nhau. Hệ thống nào có đối tượng nào thì chỉ sử dụng trong hệ thống đó thôi. Con tôi tôi nuôi, con ông hàng xóm ông hàng xóm nuôi. Không có chuyện lẫn lộn gia đình này với gia đình kia. Đó chính là nguyên nhân và cũng là mục đích tôi thiết kế ra mô hình “Trứng có trước hay Gà có trước”.

2. Cụ thể cách thức xây dựng mô hình

Vẫn là bài toán bố yêu con như trên nhưng để đảm bảo con ông nào ông ấy yêu thương, nuôi nấng thì tôi tổ chức các thành phần như sau

public interface IChild { }
public interface IFather { }

public interface IChild : IChild where TFather : IFather
{
    void LoveFather(TFather father);
}

public interface IFather : IFather where TChild : IChild
{
    void LoveChild(TChild child);
}

Như các bạn đã thấy, lúc này đối tượng đã có 1 sự liên kết nhẹ là con đã cụ thể yêu một ông bố nào đó, và ông bố cũng yêu cụ thể một ông con nào đó. Không còn mập mờ nữa. Tuy nhiên điều đó là chưa đủ. Còn cần phải khai báo một đối tượng Family để gói chặt 2 bố con lại với nhau như sau

public class Family<TFather, TChild>
    where TFather : IFather, IFather, new()
    where TChild : IChild, IChild, new()
{
    public TFather Father { set; get; } = new TFather { };
    public TChild Child { set; get; } = new TChild { };

    public void Happy()
    {
        Father.LoveChild(Child);
        Child.LoveFather(Father);
    }
}

Đến lúc này thì đúng là bố con đã trở về một gia đình. Không còn lẫn lộn bố con ông hàng xóm nữa. TFather phải là bố của TChild và TChild phải là con của TFather sự ràng buộc này luôn tạo một khối duy nhất. Và từ đó ta tạo ra các khối có chức năng tương tự nhau giống nhau, nhưng cụ thể xử lý là khác nhau.

public class FatherVN : IFather
{
    public bool Nice { set; get; }
    public void LoveChild(ChildVN child)
    {
        // Truy vấn được thuộc tính child.Cry
    }
}
public class ChildVN : IChild
{
    public bool Cry { set; get; }
    public void LoveFather(FatherVN father)
    {
        // Truy vấn được thuộc tính father.Nice
    }
}

public class FatherUSA : IFather
{
    public bool Strong { set; get; }
    public void LoveChild(ChildUSA child)
    {
        // Truy vấn được thuộc tính child.Tall
    }
}

public class ChildUSA : IChild
{
    public bool Tall { set; get; }
    public void LoveFather(FatherUSA father)
    {
        // Truy vấn được thuộc tính father.Tall
    }
}

var familyUSA = new Family<FatherUSA, ChildUSA> { };
familyUSA.Happy();

var familyVN = new Family<FatherVN, ChildVN> { };
familyVN.Happy();

Nếu như chúng ta cố tình như sau

var familyUnknown1 = new Family<FatherUSA, ChildVN> { }; // Bố Mỹ nhưng con Việt Nam
var familyUnknown2 = new Family<FatherVN, ChildUSD> { }; // Bố Việt Nam nhưng con Mỹ

Lúc này sẽ lỗi và không thể thực hiện biên dịch được. Và tên gọi “Trứng có trước hay Gà có trước” cũng từ đó mà tôi đặt tên cho mô hình này. Vì đơn giản là các class khai báo không biết là cái nào có trước cái nào có sau. FatherVN khai trước hay ChildVN khai trước? Khai báo FatherVN nhưng lại cần có ChildVN trước, nhưng khai báo ChildVN lại cần có FatherVN trước cơ. Ơ hại não nhỉ

3. Ứng dụng thực tế trong các dự án tôi đã thực hiện

Để xây dựng các hệ thống có chức năng tương tự nhau mà trong đó các thành phần được tổ chức liên kết chặt chẽ, nhằm mục đích các đối tượng truy vấn đến đích xác kiểu dữ liệu của các đối tượng mà không thông qua interface.

3.1 Cụ thể trong dự án phân tích dữ liệu logfile

public abstract partial class Adapter<TSystem, TClient, TClientInfo, TRawData> : IAdapter, IAdapter
        where TSystem : SystemBase<TClient, TRawData>, new()
        where TClient : ClientControlBase, new()
        where TRawData : RawData, new()
        where TClientInfo : IClientInfo
{
    // Code code
}
public abstract class ClientControl<TSystem, TRawData, TStatus> : ClientControlBase         where TRawData : RawData, new()
        where TStatus : ClientState, new()
        where TSystem : ISystem
{
    // Code code
}
public abstract partial class SystemBase<TClientControl, TRawData> : ISystem     where TClientControl : ClientControlBase, new()
    where TRawData : RawData, new()
{
    // Code Code
}
public abstract partial class ClientControlBase : ClientControlBase where TRawData : RawData, new()
{
    // Code code
}

Sau đây là cụ thể các hệ thống phân tích

// Hệ thống Taxi
public class TaxiAdapter : Adapter<TaxiSystem, TaxiClientControl, TaxiClient, TaxiRawData>
{
}
public class TaxiClientControl : ClientControl<TaxiSystem, TaxiRawData, TaxiState>
{
}
public class TaxiSystem : SystemBase<TaxiClientControl, TaxiRawData>
{
}
// Khai báo class nào trước bi giờ nhỉ :D
// Khai báo TaxiAdapter lại cần có TaxiSystem, TaxiClientControl trước
// Khai báo TaxiClientControl lại cần có TaxiSystem Trước
// Mà khai báo TaxiSystem lại cần có TaxiClientControl trước cơ

// Hệ thống Bus
public class BusAdapter : Adapter<BusSystem, BusClientControl, BusClient, BusRawData>
{
}
public class BusClientControl : ClientControl<BusSystem, BusRawData, BusState>
{
}
public class BusSystem : SystemBase<BusClientControl, BusRawData>
{
}
// Khai báo class nào trước bi giờ nhỉ :D
// Khai báo BusAdapter lại cần có BusSystem, BusClientControl trước
// Khai báo BusClientControl lại cần có BusSystem Trước
// Mà khai báo BusSystem lại cần có BusClientControl trước cơ

3.2 Cụ thể trong dự án Staxi, có các khối Mobile, Điều Hành, Server có chung chức năng truyền và nhận bản tin

public abstract class Connection<TCommand, TConnection, TCenter, TState> : Connection<TCommand, TConnection, TCenter>
    where TCommand : Command
    where TConnection : Connection
    where TCenter : ICenter
    where TState : ConnectionState, new()
{
    // Code Code
}
public abstract class Command<TConnection, TCommandInfo> : Command
    where TConnection : Connection
    where TCommandInfo : ICommandInfo, new()
{
    // Code Code
}
public abstract class Center<TThread, TCenter> : Messagable, ICenter, ICenterMessage
    where TThread : CenterThread
    where TCenter : class, ICenter
{
    // Code Code
}

Sau đây là cụ thể khối nhận bản tin từ Mobile lái xe gửi về Server

public class DriverServerCenter : Center<DriverServerWorker, DriverServerCenter>
{
}
public abstract class DriverServerWorker : CenterThread
{
}
public class DriverClient : Connection<Command, DriverClient, DriverServerCenter, DriverState>, IConnectionWithManager, TConnectionKey
{
}
public abstract class DriverCommand : Command<DriverClient, TCommandInfo> where TCommandInfo : ICommandInfo, new()
{
}
// Vậy khai báo class nào trước class nào sau các bạn nhỉ
// Khai báo DriverServerCenter thì lại cần DriverServerWorker trước, thậm chí là chính nó trước DriverServerWorker
// Khai báo DriverServerWorker thì lại cần DriverServerCenter trước
// Khai báo DriverClient lại cần DriverServerCenter trước, thậm chí lại cần chính nó trước luôn.

Cụ thể khối nhận bản tin từ Mobile khách hàng gửi về Server

public partial class CustomerServerCenter : Center<CustomerServerWorker, CustomerServerCenter>
{}
public abstract class CustomerServerWorker : CenterThread
{}
public partial class CustomerClient : Connection<Command, CustomerClient, CustomerServerCenter, CustomerState>, IConnectionWithManager, TConnectionKey
{}
public abstract class CustomerCommand : Command<CustomerClient, TCommandInfo> where TCommandInfo : ICommandInfo, new()
{}
// Vậy khai báo class nào trước class nào sau các bạn nhỉ
// Khai báo CustomerServerCenter thì lại cần CustomerServerWorker trước, thậm chí là chính nó trước CustomerServerCenter
// Khai báo CustomerServerWorker thì lại cần CustomerServerCenter trước
// Khai báo CustomerClient lại cần CustomerServerCenter trước, thậm chí lại cần chính nó trước luôn.

Cụ thể code thì bên trong xử lý rất nhiều. Tuy nhiên khi tôi dựng xong hệ thống, tôi chỉ việc viết thao tác xử lý các bản tin một cách rất nhẹ nhàng, còn lại là tầng base đã xử lý hết.

4. Nhược điểm của mô hình

Về ưu điểm thì tôi có thể tạo rất nhanh các khối có chức năng giống nhau và ở mỗi hệ thống chỉ việc viết các xử lý cụ thể. Tuy nhiên một nhược điểm là với mô hình này, ở lớp cụ thể cuối cùng chúng ta hoàn toàn không thể kế thừa thêm được nữa.

Chưa kể mô hình này chỉ áp dụng cho các ngôn ngữ native, tường minh và hỗ trợ Generic. Những ngôn ngữ không tường minh như Javascript thì nó trở lên vô nghĩa.

Nếu các bạn thấy bài viết hay bổ ích hãy like và chia sẻ nhé. Nếu chỗ nào không hài lòng vui lòng comment nhẹ nhàng để tôi có động lực viết thêm chia sẻ cho các bài tiếp theo.

Sơn 20

Bài viết gốc được đăng tải tại sonpc20.com

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

Thao tác với MongoDB trong các ứng dụng Java

MongoDB

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh

MongoDB là một NoSQL database, cho phép chúng ta có thể lưu trữ những kiểu dữ liệu phức tạp, không có cấu trúc nhất định. Trong bài viết này, mình sẽ hướng dẫn các bạn các bước cơ bản để làm việc với MongoDB trong các ứng dụng Java các bạn nhé!

  MongoDB là gì? Cơ sở dữ liệu phi quan hệ
  MongoDB là gì? Định nghĩa đầy đủ và chi tiết nhất về MongoDB

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

MongoDB
Maven project

Tương tự như các hệ thống database khác, để làm việc với Java, chúng ta cần khai báo để sử dụng Driver của MongoDB trong ứng dụng của mình.

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.7.0</version>
</dependency>

OK, bắt đầu thôi các bạn.

Để kết nối tới MongoDB, chúng ta sẽ sử dụng đối tượng MongoClient từ thư viện Driver của nó với khai báo như sau:

MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017");
MongoClient client = new MongoClient(uri);

Trong đó đối tượng MongoClientURI là một trong những đối tượng sẽ quản lý thông tin về MongoDB bao gồm IP address và port mà MongoDB đang chạy. Còn đối tượng MongoClient sẽ là đối tượng đảm nhiệm vai trò kết nối tới MongoDB đó.

Trong trường hợp, các bạn đang sử dụng MongoDB server với authentication mode, thì các bạn cần khai báo username và password đang được gán cho database mà các bạn đang định sẽ sử dụng, các bạn nhé.

MongoCredential credential = MongoCredential.createCredential("khanh", "mongodb", "abc123".toCharArray());
List<MongoCredential> auths = new ArrayList<MongoCredential>();
auths.add(credential);

Sau đó thì kết nối tới MongoDB với đoạn code sau:

ServerAddress serverAddress = new ServerAddress("localhost", 27017);
MongoClient client = new MongoClient(serverAddress, auths);

Mình sẽ sử dụng MongoDB server không chạy với authentication mode trong bài viết này, các bạn nhé!

Mặc định, MongoDB sẽ chạy trên port 27017 và nếu các bạn đang cài đặt MongoDB trên máy local thì chúng ta không cần phải khai báo đối tượng MongoClientURI các bạn nhé! Các bạn chỉ cần khai báo đơn giản như sau:

MongoClient client = new MongoClient();

Mình đang sử dụng MongoDB trên máy mình nên mình chỉ cần khai báo như trên mà thôi!

Lúc này, nếu chạy ứng dụng:

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();
    }
}

các bạn sẽ thấy kết quả như sau:

MongoDB
Kết quả hiển thị

Nhìn vào đoạn log, các bạn có thể thấy là ứng dụng của chúng ta đã kết nối được với MongoDB rồi đó các bạn!

Sau khi đã kết nối tới MongoDB xong, giờ thì các bạn có thể thao tác với nó.

Đầu tiên, các bạn có thể lấy được danh sách các database đang có trong MongoDB hiện tại của mình sử dụng phương thức listDatabaseNames().

Ví dụ:

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoIterable;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();

        MongoIterable<String> databaseNames = client.listDatabaseNames();
        MongoCursor<String> iterator = databaseNames.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

Kết quả:

MongoDB
Kết quả

Chúng ta có thể chọn database để thao tác sử dụng phương thức getDatabase() của đối tượng MongoClient.

Ví dụ, mình đang có một database tên là mongodb trong MongoDB, thì code của mình sẽ như sau:

MongoDatabase mongodb = client.getDatabase("mongodb");

Giống như khi thao tác sử dụng command line với MongoDB, nếu database mà chúng ta chọn để thao tác không tồn tại thì database này sẽ tự động tạo nha các bạn.

Đối tượng MongoDatabase sẽ là đối tượng nắm giữ mọi thông tin về các Collection có trong database mà chúng ta đang sử dụng. Do đó, từ đối tượng MongoDatabase này, các bạn có thể lấy được tên của tất cả các Collection sử dụng phương thức listCollectionNames().

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();

        MongoDatabase mongodb = client.getDatabase("mongodb");

        MongoIterable<String> collectionNames = mongodb.listCollectionNames();
        MongoCursor<String> iterator = collectionNames.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

Database “mongodb” của mình đang có những Collection sau:

MongoDB
Có những Collection sau

thì kết quả sẽ là:

MongoDB
Kết quả

Để thao tác với một Collection nào đó, các bạn có thể sử dụng phương thức getCollection() của đối tượng MongoDatabase để lấy đối tượng MongoCollection cho Collection đó.

Ví dụ của mình như sau:

MongoCollection<Document> student = mongodb.getCollection("student");

Nếu muốn insert một Document vào Collection thì các bạn có thể sử dụng các phương thức insertOne() để insert 1 Document hoặc insertMany() để insert nhiều Document cùng một lúc.

Một Document là một chuỗi JSON và chúng ta sẽ sử dụng đối tượng Document của MongoDB Driver API để build nó. Ví dụ, giờ mình muốn build một Document về thông tin sinh viên gồm tên và tuổi thì mình sẽ tạo đối tượng Document như sau:

package com.huongdanjava.mongodb;

import org.bson.Document;

public class Student extends Document {

    private static final String NAME = "name";
    private static final String AGE = "age";
    public static final String COLLECTION_NAME = "student";

    public String getName() {
        return getString(NAME);
    }

    public void setName(String name) {
        put(NAME, name);
    }

    public Integer getAge() {
        return getInteger(AGE);
    }

    public void setAge(Integer age) {
        put(AGE, age);
    }
}

rồi viết code để insert một Document mới:

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();

        MongoDatabase mongodb = client.getDatabase("mongodb");

        MongoCollection<Document> studentCollection = mongodb.getCollection(Student.COLLECTION_NAME);

        Student student = new Student();
        student.setName("Khanh");
        student.setAge(31);

        studentCollection.insertOne(student);
    }
}

Kết quả:

MongoDB
Kết quả

Tất nhiên, các bạn cũng có thể kiểm tra kết quả từ code bằng cách sử dụng phương thức find() của đối tượng MongoCollection.

Phương thức find() này có tham số là một đối tượng Document, đây chính là tiêu chí để tìm kiếm tất cả các Document trong Collection hiện tại có nội dung tương tự đó các bạn.

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();

        MongoDatabase mongodb = client.getDatabase("mongodb");

        MongoCollection<Document> studentCollection = mongodb.getCollection(Student.COLLECTION_NAME);

        Student student = new Student();
        student.setName("Khanh");
        student.setAge(31);

        FindIterable<Document> documents = studentCollection.find(student);
        MongoCursor<Document> iterator = documents.iterator();
        while (iterator.hasNext()) {
            Document next = iterator.next();
            System.out.println(next);
        }
    }
}

Trong ví dụ trên, mình tìm kiếm các Student Document theo 2 tiêu chí là name và age. Các bạn có thể mở rộng kết quả tìm kiếm bằng một trong 2 tiêu chí này cũng được.

Kết quả:

MongoDB
Kết quả

Các bạn cũng có thể update một hoặc nhiều Document cùng một lúc cũng được.

Chúng ta sẽ sử dụng các phương thức updateOne() hoặc updateMany() của đối tượng MongoCollection để làm điều này.

Có nhiều phương thức overload của 2 phương thức trên với các tham số khác nhau. Nhưng cơ bản thì có 2 tham số chính, đó là đối tượng Document để tìm kiếm các Document cần update, đối tượng Document thứ 2 chứa nội dung cần update.

Trong ví dụ của mình, giả sử mình cần update tuổi của các sinh viên tên Khanh lên 32 thì mình sẽ viết code như sau:

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.client.*;
import org.bson.Document;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();

        MongoDatabase mongodb = client.getDatabase("mongodb");

        MongoCollection<Document> studentCollection = mongodb.getCollection(Student.COLLECTION_NAME);

        Student studentFilter = new Student();
        studentFilter.setName("Khanh");

        Student student = new Student();
        student.setAge(32);
        Document updateObject = new Document();
        updateObject.put("$set", student);

        studentCollection.updateOne(studentFilter, updateObject);
    }
}

Như các bạn thấy, đối tượng Document chứa nội dung cần update cần được build với từ khoá “$set” và value của nó là thông tin sinh viên cần update.

Kết quả:

MongoDB
Kết quả

Và các bạn cũng có thể xoá một hoặc nhiều Document cùng một lúc sử dụng các phương thức deleteOne() và deleteMany().

Ví dụ:

package com.huongdanjava.mongodb;

import com.mongodb.MongoClient;
import com.mongodb.client.*;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;

public class Application {

    public static void main(String[] args) {
        MongoClient client = new MongoClient();

        MongoDatabase mongodb = client.getDatabase("mongodb");

        MongoCollection<Document> studentCollection = mongodb.getCollection(Student.COLLECTION_NAME);

        Student student = new Student();
        student.setName("Khanh");

        DeleteResult deleteResult = studentCollection.deleteOne(student);
        System.out.println(deleteResult.getDeletedCount());
    }
}

Kết quả:

MongoDB
Kết quả
Bài viết gốc được đăng tải tại huongdanjava.com
Có thể bạn quan tâm:
Xem thêm các việc làm Developer hấp dẫn tại TopDev

Mẫu CV IT Manager hoàn hảo cho ứng viên ngành IT

CV IT Manager

Nhiều quy chuẩn được đặt ra nhằm thiết lập một format hoàn thiện cho một CV IT. Đặc biệt, đối với CV IT Manager lại đòi hỏi những nội dung tương ứng. Bạn sẽ dễ dàng tạo được ấn tượng với nhà tuyển dung với một CV đạt chuẩn. Cùng TopDev xem qua đâu là format hoàn hảo nhất cho phiên bản CV IT Manager của bạn.  

Cách định đạng (Format) chuẩn dành cho CV IT Manager

Cách định dạng cũng chính là những lưu ý giúp bạn gia tăng thêm độ chuyên nghiệp, tính xác thực của CV IT của bạn. Thực tế cho thấy, có rất nhiều mẫu CV ngành IT để bạn lựa chọn.

Tuy nhiên, hầu hết các format đều chung chung và chưa nói lên rõ các yếu tố giúp cốt lỗi (core factors) để bạn nâng cao chất lượng CV của mình. 

cv it project manager
Đâu sẽ là phiên bản format chuẩn cho CV IT Manager của bạn?

Checklist những lưu ý viết CV IT project manager:

1. Các chi tiết để nhà tuyển dụng liên hệ

Thông tin, địa chỉ lý lịch cần đảm bảo độ chính xác.

2. Bản tóm tắt lý lịch (nếu doanh nghiệp yêu cầu)

Viết ngắn gọn và nên “chào đầu” bằng một tiêu đề hấp dẫn.

3. Kinh nghiệm làm việc (Lịch sử công việc)

Liệt kê các nhiệm vụ bản thân chịu trách nhiệm; các thành tích có liên quan. Đặc biệt nếu đã có kinh nghiệm làm freelancer IT, bạn có thể tự tin bổ sung vào CV của mình.

4. Trình độ học vấn

Không chỉ dừng lại ở việc nói về trường/cơ sở bạn học tập, nghiên cứu. Hãy nói thêm về các môn học quan trọng, khóa học chuyên sâu, các dự án thực tếcác giải thưởng danh dự (nếu có).

Dù bạn viết CV IT tiếng anh hay CV IT tiếng việt, các yếu tố được triển khai thêm đều có ý nghĩa giúp nhà tuyển dụng đánh giá sâu hơn về tiềm năng phát triển của bạn.

5. Kỹ năng

Tập trung vào các kỹ năng quan trọng như: 

+ Kỹ năng lãnh đạo, kỹ năng giao tiếp

+ Nghiên cứu và phân tích

+ Xây dựng và phát chiến lược CNTT 

+ Quản lý dự án 

+ Kỹ năng giải quyết vấn đề 

+ Teamwork 

+ Quản lý thời gian 

+ Kỹ năng tổ chức

+ Khả năng thích ứng

Ngoài ra, bạn nên đề cập đến các kỹ năng chuyên sâu trong CV xin việc CNTT:

+ An ninh mạng (Cyber Security)

+ Phát triển ứng dụng (Application Development)

+ Điện toán đám mây (Cloud Computing)

+ Điện toán lượng tử (Quantum Computing)

+ Quản lý Trung tâm Dữ liệu (Data Center Management)

+ Lập kế hoạch nguồn lực doanh nghiệp (ERP)

+ Phân tích dữ liệu kinh doanh (Business Analytics)

+ Quản trị Mạng (Network Administration)

+ Quản trị Cơ sở dữ liệu (Database Administration)

+ Vận hành phát triển hoạt động (DevOps)

6. Các chứng chỉ và giấy giới thiệu

Đây là các yếu tố không bắt buộc và cũng ít nhà tuyển dụng quan tâm. Tuy vậy, nếu bạn sở hữu các chứng chỉ khoa học chuyên ngành IT do nỗ lực bản thân, đừng ngần ngại việc đưa chúng vào CV của bạn.

  Cách viết CV giúp lập trình viên ghi điểm với nhà tuyển dụng
  Top 5 website giúp thiết kế CV chuẩn format, đủ nội dung

Các mẫu CV IT Manager trên TopDev

Bạn có thể tham khảo nội dung để hoàn thiện CV IT của mình

Tạo CV IT Online tại đây

cv it project manager
M1 – CV đa nhiệm
cv it project manager
M2 – CV đa nhiệm
M3 – CV đa nhiệm
cv it project manager
Mẫu CV cổ điển
Mẫu CV cổ điển
cv it manager
M1 – CV Pro
cv it
M2 – CV Pro
M3- CV Pro

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

Xem thêm việc làm cntt mới nhất hàng đầu tại TopDev

Tự viết hiển thị Helloworld đầu tiên bằng ReactJS

reactjs
Tự viết hiển thị Helloworld đầu tiên bằng ReactJS

Bài viết được sự cho phép của BBT Tạp chí Lập trình

Giới thiệu chung

ReactJS là một thư viện JavaScript dùng trong việc xây dựng giao diện người dùng và được phát triển bởi đội ngũ Facebook. Tới nay, ReactJS đã thu hút hàng triệu lập trình viên trên thế giới.

  Cách viết "Hello World" với 28 Ngôn ngữ Lập trình
  Đồng hành cùng các chuyên gia bảo mật của Worldstar tại Vietnam Mobile Day

React được sử dụng để xử lý ở tầng view cho các website và mobile app, cho phép ta tạo nên các Reusable UI components. React là 1 trong những thư viện JS phổ biến nhất hiện nay, có nền tảng vững chắc cùng với 1 cộng đồng developer vô cùng lớn đằng sau nó. Bạn sẽ không hối hận khi học nó đâu.

Không dài dòng nữa, chúng ta bắt đầu thôi!

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

  • Cài đặt NodeJS phiên bản mới >= 6 (LTS hoặc bản hiện tại – https://nodejs.org/en/download/)
  • Cài đặt Visual Studio Code/Sublime Text hoặc WebStorm (tùy chọn)

2/ Cài đặt

Chúng ta sẽ tiến hành cài đặt ReactJS thông qua Package đã được viết sẵn bằng cách gõ vào lệnh vào Command Prompt/Windows Powershell hay Terminal trên Mac và Linux:

 npm install -g create-react-app

Sau khi cài đặt hoàn tất, các bạn có thể gõ tiếp lệnh theo cú pháp sau:

 create-react-app my-app

Đây là kết quả sau khi cài đặt thành công:

reactjs
Đây là kết quả hiển thị

Bây giờ chúng ta có thể chạy thử:

 cd my-app yarn start

Như vậy là chúng ta đã hoàn tất cách cài đặt ReactJS. Chuyển sang tinh chỉnh một số File nào. Bạn hãy vào trong thư mục src  và tìm file App.js như hình:

reactjs
File app.js

Chúng ta sửa lại nội dung trong file App.js:

import React from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div>
            Hello World!!!
    </div>
  );
}

export default App;

Ngay lập tức sẽ hiển thị kết quả như sau:

reactjs
Kết quả hiển thị

Trong index.js chũng ta thấy đoạn code, ở đây được dùng load file App.js khi khởi tạo chương trình.

import React from 'react';

import ReactDOM from 'react-dom';

import './index.css';

import App from './App';

import * as serviceWorker from './serviceWorker';


ReactDOM.render(

  <React.StrictMode>

    <App />

  </React.StrictMode>,

  document.getElementById('root')

);

Bạn thắc mắc không biết Id root ở đâu? Bạn để ý trong project mình có 1 thư mục là public, bạn mở nó ra thấy 1 file index.html mở nó ra và bạn sẽ thấy 1 div với id root như hình:

Đây là file HTML chính của chúng ta, tất cả component sẽ được load ở đây.

Lời kết

Như vậy, chúng ta đã tìm hiểu ReactJS và cách cài đặt như thế nào, tự viết hiển thị Helloworld đầu tiên bằng ReactJS.

Các bạn chờ đợi bài tiếp theo nhé!

Author: Nguyễn Trung Kiên

Bài viết gốc được đăng tải tại Tạp chí Lập trình

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

Xem thêm các tuyển dụng ReactJS hấp dẫn tại TopDev

Yarn là gì? tại sao Yarn đang thay thế dần npm

yarn
Yarn là gì? tại sao Yarn đang thay thế dần npm

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

Trong thế giới mã nguồn mở, việc quản lý các gói phần mềm trong một dự án là rất cần thiết do các gói phần mềm dự án, các gói liên quan đến gói được cài đặt có thể thay đổi hoặc bạn cần cập nhật một phiên bản phù hợp. Công việc này nếu không có các công cụ quản lý gói phần mềm (package manager) thì rất đáng sợ do bạn thường xuyên phải vào nơi cung cấp các gói phần mềm kiểm tra xem có phiên bản mới không, tải về và cập nhật chúng vào dự án. Một dự án có thể sử dụng đến hàng trăm các gói phần mềm nguồn mở này, vậy quản lý chúng như thế nào? Đừng lo đã có các công cụ như yarn, npm…

  20 thuật ngữ chuyên sâu trong Quản lý Nhân sự nội bộ
  Agile là gì? Scrum là gì? Các công cụ quản lý dự án theo Agile mà bạn nên biết

Công cụ Quản lý gói phần mềm – câu trả lời cho Yarn là cái gì?

Yarn là công cụ quản lý gói phần mềm nguồn mở cho dự án của bạn, nó ngoài việc cho bạn sử dụng các gói phần mềm còn cho phép bạn chia sẻ các gói phần mềm do bạn viết với các lập trình viên trên toàn cầu. Yarn thực hiện các công việc với tốc độ rất nhanh, bảo mật cao và đáng tin cậy. Code được chia sẻ thường được gọi là package (gói phần mềm) hoặc module (mô đun phần mềm). Tất cả các gói được sử dụng sẽ được mô tả trong file package.json nằm trong thư mục gốc của dự án. Như vậy chúng ta đã có được câu trả lời Yarn là gì?

Cài đặt Yarn

Môi trường Windows

Có ba lựa chọn cài đặt trên Windows:

Cài đặt thông qua bộ cài

Tải bộ cài Yarn và thực hiện cài đặt, đây là một file thực thi trên Windows có phần mở rộng là .msi. Tuy nhiên, trước hết bạn cần cài đặt Node.js.

Cài đặt thông qua npm

Nếu bạn đã cài đặt npm và muốn chuyển sang yarn thì đơn giản hơn hết là bạn cài đặt yarn thông qua npm như sau:

npm install yarn --global

Cài đặt thông qua các package manager cho Windows như Scoop, Chocolatey

Trước tiên cần cài đặt Scoop hoặc Chocolatey là các công cụ quản lý gói phần mềm trên Windows. Sau đó thực hiện cài đặt Yarn:

scoop install yarn

Hoặc

choco install yarn

Chú ý, cần cài đặt Node trước tiên.

Môi trường Linux

Với hệ điều hành Debian / Ubutu:

Cấu hình repository:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

Sau đó thực hiện cài đặt yarn

sudo apt-get update && sudo apt-get install yarn

Với các hệ điều hành CentOS / Fedora / RHEL:

Các hệ điều hành này cài đặt thông qua RPM package repository:

sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo

Nếu đã cài đặt Node.js trên máy, bạn cần cấu hình Nodesource repository:

curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -

Sau đó thực hiện cài đặt yarn:

sudo yum install yarn

Môi trường MacOS

Cài đặt thông qua Homebrew là một package manager:

brew install yarn

Nó tự động cài đặt Node nếu máy bạn chưa cài.

Yarn và npm dùng cái nào?

npm là công cụ quản lý gói phần mềm mặc định cho Node.js còn Yarn là giải pháp quản lý gói phần mềm được Facebook phát triển riêng. Tiếp theo, chúng ta cùng so sánh một số tính năng khác biệt giữa yarn và npm giúp bạn có được sự lựa chọn tốt nhất.

File yarn.lock

Trong file package.json cả npm và yarn đều dựa vào file cấu hình này thực hiện theo vết các gói phụ thuộc trong dự án, phiên bản các gói không phải lúc nào cũng chính xác. Thay vào đó, thường xác định một khoảng các phiên bản cho phép, bằng cách này cho phép chọn một phiên bản cụ thể nhưng khi cài đặt npm thường chọn phiên bản mới nhất để khắc phục các lỗi phiên bản trước đó. Về lý thuyết, các phiên bản mới sẽ không phá vỡ các kiến trúc trong phiên bản cũ, nhưng thực tế không phải lúc nào cũng vậy. Sử dụng npm để quản lý gói phần mềm có thể dẫn đến trường hợp hai máy có cùng một file cấu hình package.json nhưng lại có các phiên bản của các gói khác nhau và nảy sinh các lỗi “bug on my machine”. Để tránh việc phiên bản không trùng khớp, một phiên bản chính xác sẽ được đưa vào trong file lock để quản lý. Mỗi khi một module được thêm vào, yarn sẽ tạo ra (nếu chưa có) hoặc cập nhật file lock. Bằngản cách này, yarn đảm bảo các máy khác nhau sẽ có cùng phiên bản chính xác trong khi vẫn có một loạt các phiên bản cho phép được định nghĩa trong file package.json. Ý tưởng này cũng giống như composer.lock được sử dụng trong Composer, công cụ quản lý gói phần mềm cho PHP. Với npm, lệnh npm shrinkwrap cũng tạo ra một tập tin lock và npm install sẽ đọc tập tin lock này trước khi đọc đến package.json, nó giống với cách yarn thực hiện bằng yarn.lock. Sự khác biệt ở đây là yarn luôn luôn tạo ra và cập nhật yarn.lock trong khi npm chỉ làm việc này khi thực hiện npm shrinkwrap hoặc tồn tại file npm-shrinkwrap.json.

Yarn cài đặt các gói song song

Khi npm và yarn cài đặt một gói phần mềm, có rất nhiều các tác vụ cần thực hiện, với npm các tác vụ này được thực hiện tuần tự, điều đó có nghĩa là npm sẽ đợi cho gói này được cài đặt xong đầy đủ mới tiếp tục cài đặt các gói khác. Yarn thì khác, nó xử lý các tác vụ song song, giúp tăng hiệu năng quá trình hoạt động. Để kiểm tra, tôi thực hiện cài đặt gói express sử dụng cả npm và yarn mà không sử dụng shrinkwrap hoặc yarn.lock và không có cache dữ liệu. Với yarn việc cài đặt mất 5.34s, còn npm hết 14s. Đây chỉ là một thử nghiệm với một gói, nếu dự án của bạn có hàng trăm gói, thực sự có một sự khác biệt lớn về thời gian cài đặt. ### Hiển thị thông tin cài đặt

Khi thực hiện cài đặt các gói bằng yarn, màn hình hiển thị các thông tin một cách rút gọn, các thông tin chi tiết về gói cài đặt có thể thực hiện thông qua lệnh khác. Trong khi đó npm đệ quy qua các phụ thuộc và in ra màn hình thông tin quá nhiều.

yarn
Màn hình hiển thị các thông tin một cách rút gọn

Yarn – npm bạn chọn cái nào?

Một thực tế trong quá trình phát triển ứng dụng của Facebook, npm đã đáp ứng rất tốt trong giai đoạn đầu, nhưng khi codebase và số lập trình viên phình ra nhanh chóng, xuất hiện những vấn đề về sự nhất quán, bảo mật và hiệu năng. Để giải quyết các vấn đề này, Facebook đã tự xây dựng một giải pháp cho riêng mình, và yarn ra đời. Với Yarn, các lập trình viên vẫn có thể truy xuất vào danh sách các gói được đăng ký cho npm. Thực tế sử dụng cho thấy, Yarn có rất nhiều ưu điểm, tuy nhiên cũng có những nhược điểm như do là lính mới trong lĩnh vực package manager nên Yarn còn tồn tại khá nhiều lỗi, nhưng cũng không có gì đáng lo khi cộng đồng sử dụng Yarn đang lớn dần, mọi lỗi gặp phải bạn có thể tìm kiếm trên Google hoặc vào phần Issue cùa Yarn trên Github, có rất nhiều các issue được đưa ra. Yarn tuy là một đứa trẻ trong lĩnh vực quản lý thư viện lập trình, nhưng nó đã nhanh chóng sửa đổi những gì thiếu sót từ những đàn anh đi trước, và một ngày không xa, yarn thực sự sẽ thay thế dần cho npm.

Bài viết gốc được đăng tải tại allaravel.com

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

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

Làm app giao diện đồ hoạ với Python

giao diện đồ họa
Làm app giao diện đồ hoạ với Python

Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng

Giao diện đồ hoạ (GUI – Graphic User Interface) vốn từng là một phần không thể thiếu khi nói về lập trình. Dù học ngôn ngữ lập trình nào, người ta cũng nghĩ tới chuyện “làm sao để có giao diện đồ hoạ”.

Thế giới thay đổi, thứ từng quan trọng của ngày hôm qua thì hôm nay chưa chắc đã cần tới. Thời đại tất cả mọi thứ đều chuyển lên web, thì web/app mobile trở thành giao diện để tương tác với người dùng, chứ không phải các phần mềm có giao diện chạy trên máy tính như trước kia. Giờ đây người ta: nghe nhạc trên web, xem film trên web, chơi game trên web, soạn thảo văn bản trên web… khó còn ứng dụng nào không đưa lên web nữa. Vậy nên về mặt “sự nghiệp”, có vẻ như bạn nên đầu tư vào kỹ năng làm web thay vì học để tạo một app trên desktop như cách đây chục năm.

Dĩ nhiên, GUI không ngay lập tức biến mất, vẫn có nhu cầu sử dụng, vẫn có người dùng, vẫn có hàng tá thư viện đồ hoạ tồn tại từ lâu (và vẫn tiếp tục phát triển), vẫn có những game mà chỉ chơi được trên máy tính do yêu cầu về hiệu năng mà web không đáp ứng nổi (như Half-Life/ đế chế / đua xe …).

Python hỗ trợ không ít các thư viện làm GUI app, có thể kể tới: Qt, WxWidgets, Tkinter, Kivy (làm cả app mobile)… xem đầy đủ tại:

Qt là nền tảng phát triển ứng dụng dùng trong công nghiệp, hỗ trợ mọi hệ điều hành phổ biến, và rất “xịn”. Nếu có nhu cầu làm ứng dụng desktop với Python, hãy đầu tư vào Qt để có một sản phẩm đẳng cấp, không kém bất kỳ nền tảng nào khác.

Tk là hệ thống thư viện đồ hoạ đơn giản, dễ dùng, chạy trên cả 3 hệ điều hành phổ biến: Windows, Ubuntu, OSX/MacOS và điều quan trọng nhất: thư viện tkinter đi kèm mọi bộ cài Python, nên muốn dùng không cần phải cài đặt gì thêm.

Bài viết hướng dẫn tạo một chương trình đồ hoạ sử dụng tkinter với Python 3.6, thực hiện trên MacOS Sierra (10.12.6).

Xem thêm các công việc python nhiều vị trí

Khái niệm cơ bản về một chương trình giao diện đồ hoạ.

Một chương trình có giao diện đồ hoạ là một chương trình luôn chạy cho tới khi người dùng thoát chương trình. Dễ suy ra ở đây có chạy 1 vòng lặp vô hạn để luôn hiển thị giao diện (gọi là main loop). Chương trình này hoạt động dựa trên những tương tác của người dùng và phản ứng với các tương tác đó (bấm nút này thì chạy cái kia). Loại chương trình như vậy thuộc loại mô hình “Event-driven programming”.

Các thao tác của người dùng được gọi là các event, các hành động tương ứng của chương trình (các function) được gọi là các callback, gắn vào các bộ phận giao diện. Gắn callback vào nút bấm thì khi ta bấm nút, callback sẽ được gọi.

Các bộ phận giao diện như nút bấm, chữ, ô nhập ký tự … được gọi là các widget.

  20 tài liệu học Python thiết thực để trở thành lập trình viên chuyên nghiệp

Lập trình GUI với Tkinter

Code gõ trực tiếp trên IPython:

In [1]: import tkinter as tk

In [2]: tk.Frame(tk.Tk()).mainloop()

Nếu Tk hoat động trên máy bạn, ngay lập tức một cửa sổ trắng tinh sẽ hiện ra.

giao diện đồ họa
Cửa sổ hiển thị

Tk() tạo một cửa sổ chính (main window), Frame là một widget có khả năng chứa các widget khác. Gọi function mainloop() để chạy giao diện mãi mãi cho tới khi người dùng đóng lại.

  Module trong Python

Các widget

Tkinter có sẵn 17 widget:

Button Canvas Checkbutton Entry Frame Label Listbox Menu Menubutton Message Radiobutton Scale Scrollbar Text Spinbox LabelFrame PanedWindow

Sau đây ta viết một GUI app có hiển thị tiêu đề (Label), có một ô nhập địa chỉ trang web (Entry), có một nút bấm để kiểm tra status của trang web (Button).

Bài viết sử dụng thư viện requests (cài bằng pip install requests), nếu chưa biết dùng pip hay không cài được, hãy xem ví dụ tương tự mà không kết nối internet tại đây.

# on Ubuntu, requires install: `sudo apt-get install -y python3-tk`
import tkinter as tk
import requests


class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.label = tk.Label(text="PyMi.vn checker")
        self.label.pack()

        self.entrythingy = tk.Entry()
        self.entrythingy.pack()

        self.contents = tk.StringVar()
        self.entrythingy["textvariable"] = self.contents
        self.entrythingy.bind("<Key-Return>", self.check_site)

        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Check web site up/down. Enter URL:"
        self.hi_there["command"] = self.check_site
        self.hi_there.pack()

        self.quit = tk.Button(self, text="QUIT", command=root.destroy)
        self.quit.pack()

    def check_site(self, event=None):
        url = self.contents.get().strip() or "https://pymi.vn"
        if not url.startswith("http"):
            url = "http://{}".format(url)

        resp = requests.head(url, timeout=3)
        print("{} response: {}".format(url, resp.status_code))


root = tk.Tk()
app = Application(master=root)
app.master.title("My checker app")
app.master.minsize(300, 200)
app.mainloop()

Code trên:

  • phần init chỉ là thủ tục
  • tạo một label với text cần hiển thị
  • tạo entry để người dùng nhập nội dung, gán giá trị người dùng nhập vào self.contents, bind widget entry với phím Enter (trên MacOS gọi là return), và chạy method check_site khi người dùng gõ enter.
  • tạo nút bấm với dòng chữ “Check site”, gọi method check_site khi người dùng bấm nút
  • tạo nút bấm “Quit” để thoát chương trình
  • set thanh tiêu đề title và kích thước cho chương trình qua app.master.

Kết quả:

giao diện đồ họa
Kết quả hiển thị

Danh sách đầy đủ các widget xem tại https://github.com/python/cpython/blob/3.6/Lib/tkinter/init.py – search (Widget (các subclass của class Widget).

Tk nhẹ gọn, có sẵn, dễ dùng, đủ dùng khi bạn thấy đủ. Bao giờ thấy ngột ngạt, có lẽ lại chuyển sang Qt, các khái niệm lập trình giao diện dù dùng library/framework nào cũng đều tương tự nhau.

Bài viết gốc được đăng tải tại pp.pymi.vn

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

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

5 app dù bị đánh giá thấp nhưng không nên bỏ qua

UI UX
5 app dù bị đánh giá thấp mà bạn không nên bỏ qua

ui ux Bài viết gốc của tác giả Richard So

Giới thiệu

Lập trình viên hay sử dụng một số app và phần mềm để tham khảo và tạo nên app của mình – sử dụng app để build 1 app khác. Khi làm việc, các dev cần đảm bảo được UI UX của phần mềm ở mức tối ưu nhất để tăng sự tương tác và người dùng sẽ cảm thấy hứng thú hơn khi trải nghiệm app hay web vừa được tạo.

Tuy nhiên chỉ vì có một số app đã trở thành chuẩn mực và được nhiều người sử dụng mà chúng ta hay bỏ qua các phần mềm hay ho khác. Dưới đây tôi sẽ giới thiệu với các bạn một số app dù bị đánh giá thấp nhưng lại rất hữu ích mà tôi thường sử dụng và tôi nghĩ các bạn cũng nên tham khảo, bổ sung thêm vào kho lưu trữ của mình.

Xem thêm Cách mà một dòng code đã thay đổi cuộc đời tôi!

5 app hữu ích các dev không nên bỏ qua

1. Termius

Tôi biết đến app này trong giai đoạn COVID-19 và phải work from home. Lúc đó vấn đề của tôi là làm thế nào để truy cập vào một máy tính hoặc máy chủ tại nơi làm việc của mình dù đang ở nhà? Sử dụng lệnh ssh vào máy chủ, bạn có thể cấp quyền truy cập vào các thiết bị đầu cuối cho mình. Nhưng với Termius bạn sẽ tiết kiệm được rất nhiều thời gian cho việc này.

Termius là một máy khách SSH cho giao diện của Windows, macOS, Linux, iOS và Android. Nó còn là một giải pháp dòng lệnh hoàn chỉnh xác định lại quyền truy cập từ xa cho các sysadins và các dev. Ứng dụng này hỗ trợ nhiều chủ đề, phông chữ, kích thước mà bạn có thể điều chỉnh để tạo nên UI UX ấn tượng cho sản phẩm, phù hợp với nhu cầu người dùng.

Xem thêm Series UI/UX cho developer – Phân biệt UI và UX

Một trong những tính năng đặc trưng nhất của Termius là tính năng port forwarding – chuyển tiếp cổng mà tôi thường sử dụng cho Jupyter. Ngoài ra, Termius cũng hỗ trợ đồng bộ hóa các dữ liệu trên thiết bị di động thông qua tài khoản miễn phí hoặc trả phí với nhiều tiện ích hơn.

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

2. Alacritty

Alacritty là app mô phỏng cục bộ các thiết bị đầu cuối mà tôi hay sử dụng, nó được hỗ trợ trên Windows, macOS và nhiều linux khác. Điểm hay nhất của Alacritty là giúp tăng tốc GPU, do đó mà user đều rất ấn tượng với tốc độ thực hiện của nó.

UI UX là gì
Alacritty là app mô phỏng cục bộ các thiết bị đầu cuối

Alacritty dù đơn giản hơn nhiều so với Termius nhưng vẫn đầy đủ các tùy chỉnh. Nó chấp nhận các tệp ở dạng .yml và cho phép bạn lựa chọn cách thiết kế từ phối màu, liên kết bàn phím đến làm mờ nền,… Chính sự tiện ích này của Alacritty sẽ giúp sản phẩm sau khi hoàn thành có giao diện người dùng thu hút hơn, những lợi ích của UI UX thậm chí có thể quyết định sự thành bại của project mà bạn đang thực hiện.

Xem thêm 9 công cụ siêu tiện lợi cho cả Developer và Designer

3. Byobu App

Về mặt kỹ thuật thì đây không hẳn là một app hay một phần mềm nhưng với rất nhiều tiện ích mà nó mang lại, tôi thường xuyên sử dụng Byobu trong công việc của mình. Byobu là một trình bao bọc dễ sử dụng xung quanh tmux (hoặc là screen), GNU – những nền tảng ghép kênh mà bạn có thể đã nghe đến. Nó giúp bạn dễ dàng mở nhiều cửa sổ và chạy nhiều lệnh trong một kết nối đầu cuối duy nhất.

Một sự thật thú vị là Byobu đang được vận hành bởi Alacritty. Vậy nên sẽ khá dễ dàng để tạo một giao diện UI UX và chuyển đổi giữa 2 app này. Các tính năng chính của Byobu gồm nhiều cửa sổ giao diện điều khiển, các ô tách trong mỗi cửa sổ, thông báo và huy hiệu trạng thái để hiển thị trạng thái của máy chủ và các phiên liên tục trên nhiều kết nối. Byobu sử dụng các phím chức năng F1, F2, F3,… là chủ yếu và rất linh hoạt trong quá trình làm việc.

4. Ungit

Mọi người đều biết rằng rất khó để quản lý kho lưu trữ Git thông qua giao diện dòng lệnh. Với một project trên 20 branch sẽ rất khó để theo kịp các commit của chúng, đó là chưa tính đến branching model. Thậm chí với các dev lần đầu sử dụng Git để quản lý version, một CLI còn khiến user không thể hiểu được Git thực sự làm được gì. Nhưng Ungit giải quyết được những điều đó.

Xem thêm Git là gì? Các lệnh git cơ bản mà mọi lập trình viên nên biết

Ungit có một giao diện thân thiện với user mà không làm mất đi tính linh hoạt của nó. Ungit cho phép user sử dụng thông tin các commit và branch ở dạng sơ đồ mạng nhện. Giao diện rõ ràng và trực quan của nó giúp git dễ hiểu hơn cũng như việc kiểm tra chéo giữa các branch sẽ đơn giản hơn. Lợi ích của UI UX từ Ungit cũng cho phép user xem được lịch sử các branch đang truy cập và hỗ trợ hợp nhất các branch, các tag khác nữa.

lợi ích của UI UX
Ungit có một giao diện thân thiện với user
  Bạn có đang dùng git hiệu quả hay không?

5. Spacedesk

Spacedesk về cơ bản là ứng dụng mở rộng không gian làm việc cho máy tính, biến thiết bị di động của bạn thành màn hình hiển thị thứ hai của máy tính, ipad. Rõ ràng ứng dụng này có thể giúp bạn tiết kiệm được nhiều chi phí và thời gian hơn thay vì mua thêm một màn hình nữa.

  Cách build một extension (tiện ích mở rộng) trên Chrome

Cá nhân tôi đã từng sử dụng app Spacedesk cho chiếc laptop cũ của mình và chúng hoạt động khá trơn tru và ít xảy ra lỗi. Vì Spacedesk là ứng dụng hỗ trợ kết nối không dây nên tất cả những gì bạn cần chuẩn bị là kết nối internet đủ tốt mà thôi.

Kết luận

Trên đây là một số chia sẻ về những ứng dụng dù bị đánh giá thấp nhưng lại sở hữu nhiều tính năng ấn tượng mà bạn nên sử dụng để build được những phần mềm có giao diện dễ sử dụng và thuận tiện cho người dùng. Để tìm hiểu thêm về UI UX là gì, tầm ảnh hưởng của nó với các sản phẩm mà dev tạo nên, bạn có thể xem tại bài viết Series UI/UX cho developer – Phân biệt UI và UX

Bài viết gốc được đăng tải tại codeburst.io

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

Xem thêm các việc làm App-Developer hấp dẫn tại TopDev

Mẫu IT Programmer CV ấn tượng cho lập trình viên

IT Programmer CV
IT Programmer CV

Nhiều người cho rằng ứng tuyển ngành lập trình không cần quá chú trọng về CV. Tuy nhiên, nhận định định đó là sai lầm. Bởi mỗi vị trí đều đòi hỏi các trình độ – kỹ năng khác nhau. Do đó, một chiếc CV IT Programmer cần đảm bảo đầy đủ tính chuẩn mực cần có. Vậy bạn đã biết cách tạo CV xin việc cho mình chưa? Bài viết sau, TopDev sẽ bật mí cho bạn mẫu IT Programmer CV ấn tượng nhất để chính phục nhà tuyển dụng.

Mẫu trình bày cơ bản –  IT Programmer CV

Tên của bạn (và các thông tin cá nhân)

Ví dụ: Raina Angela Barbie

raina.anbie@gmail.com | 111-xxx-xxx| Texas, NY

Mục tiêu nghề nghiệp

Đây là mục khá quan trọng đối với CV ngành IT của bạn. Nhà tuyển dụng sẽ đánh giá mức độ hoạch định mục tiêu phát triển của bạn. 

Ví dụ: Học hỏi và nâng cao trình độ chuyên môn về lập trình JavaScript, C++. Mong muốn trở thành chuyên gia nghiên cứu các giải pháp phát triển; hỗ trợ và đào tạo các lập trình viên trẻ tuổi.

Kỹ năng

Một số kỹ năng bạn mà IT Programmer CV của bạn có thể cân nhắc lựa chọn là:

  • Tư duy định hướng, làm việc nhóm
  • Đa nhiệm, sáng tạo
  • Phân tích và giải quyết vấn đề
  • Kỹ năng giao tiếp nâng cao (đồng nghiệp, đối tác,…) 
  • Khả năng thích ứng và chịu áp lực

Kỹ năng chuyên sâu

Vị trí này đòi hỏi bạn cần có nhiều kinh nghiệm hơn. Vì thế, quá trình tạo CV IT tiếng anh hoặc tiếng việt cũng chính là cơ hội bạn đánh giá lại các kỹ năng của mình.

cv ngành it
Ứng viên IT cần quan tâm nhiều hơn đến các kỹ năng chuyên sâu

Dưới đây là các kỹ năng chuyên sâu mà cần có cho vị trí IT Programmer:

– Hệ thống máy tính: Mac OS X, DOS, Window,…

– Các ngôn ngữ lập trình: React JS, C++, HTML, Python, SharePoint,…

– Cơ sở dữ liệu: MS Access, Oracle 9.x, FileMaker Pro, FoxPro, MySQL

Trình độ học vấn

Do là vị trí đòi hỏi nhiều kinh nghiệm, ngoài việc trình bày nơi học tập (tốt nghiệp Cử nhân…., điểm GPA (nếu muốn đề cập), bạn có thể chia ra các phần như:

  Cách viết CV giúp lập trình viên ghi điểm với nhà tuyển dụng
  Tips viết CV trái ngành chinh phục nhà tuyển dụng

Các khóa học có liên quan

+ Phát triển phần mềm (Software Development)

+ Coding cơ bản và nâng cao (Coding Basics, Advanced)

+ Quản lý dự án (IT Project Management)

+ An ninh Mạng (Cyber Security)

+ Quản lý bảo trì thiết bị (CMMS)

+ Xử lý sự cố (Troubleshooting)

Và các khóa học khác…

Dự án cộng đồng

Bạn nên trình bày các dự án có gắn liền với việc sử dụng chuyên một hay nhiều cơ sở dữ liệu hoặc các chuyên môn có liên quan. 

Ví dụ sử dụng FileMaker Pro để thiết kế các đơn nộp trực tuyến,…

Giải thưởng danh dự

Nói về các giải thưởng bạn/Team bạn đạt được nếu có.

Kinh nghiệm

Phần này tùy thuộc vào “tuổi nghề” mà bạn sở hữu. Hãy thông minh trong việc trình bày các kinh nghiệm có trong CV IT của mình. Nếu bạn là một freelancer IT, đừng ngần ngại chia sẻ trải nghiệm của mình vào CV IT nhé! đơn xin nghỉ việc, kỹ năng giao tiếp

Gợi ý cho bạn là có thể chia sẻ các trải nghiệm theo từng giai đoạn:

Thực tập sinh – Programmer Intern

Giai đoạn trình độ được nâng cao và phát triển (có thể chạm đến mức độ là IT Specialist – Chuyên viên)

Giai đoạn hợp tác và đại diện cho các khách hàng/đối tác lớn (nếu có)

Tạo CV IT online, chuẩn ATS miễn phí trên TopDev

Mỗi giai đoạn, bạn có thể trình bày:

+ Những nhiệm vụ bạn đã thực hiện một cách cụ thể

+ Các thay đổi tích cực qua số liệu

+ Những bài học đúc kết

Chứng chỉ

Liệt kệ ngắn gọn các chứng chỉ khoa học chuyên ngành cùa bạn nếu có.

Ví dụ: C++ Certified Associate Programmer, Java SE 8 Programmer,…

Các mẫu IT Programmer CV trên TopDev

Bạn có thể tham khảo nội dung để hoàn thiện CV IT của mình.

 

cv it tiếng anh
M1 – CV đa nhiệm
cv it
M2 – CV đa nhiệm
cv ngành it
M3 – CV đa nhiệm
cv it tiếng anh
Mẫu CV cổ điển
cv it
Mẫu CV cổ điển
cv ngành it
M1 – CV Pro
cv it tiếng anh
M2 – CV Pro
cv it
M3 – CV Pro

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

Xem thêm tuyển dụng it lương cao hàng đầu tại TopDev

Hỗ trợ đa ngôn ngữ trong Flutter

flutter

Bài viết được sự cho phép của tác giả Khiêm Lê

Hỗ trợ đa ngôn ngữ là gì?

Hiện nay, một ứng dụng phổ biến, được nhiều người sử dụng không chỉ là một ứng dụng phục vụ tốt nhu cầu trong nước, mà còn phải hỗ trợ nhiều ngôn ngữ khác để có thể chạm tới những đối tượng người dùng ngoại quốc. Hoặc ít nhất thì cũng phải hỗ trợ tiếng Anh, ngôn ngữ phổ biến nhất trên thế giới hiện nay, và đương nhiên là phải có tiếng Việt (mình người Việt mà ^^).

  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java
  Chat app đơn giản với Flutter

Vậy ít nhất ứng dụng của bạn phải hỗ trợ hai ngôn ngữ chính là tiếng Việt và tiếng Anh. Trong bài viết này, mình sẽ hướng dẫn mọi người cách hỗ trợ đa ngôn ngữ trong Flutter. Hãy cùng bắt đầu nào!

Tạo project và sửa file pubspec.yaml

Đầu tiên, hãy tạo một project flutter. Mình sẽ tạo project có tên là flutter_localization, bạn đặt tên gì cũng được, không nhất thiết phải đặt theo mình. Sau khi tạo xong, các bạn tạo một folder mới trong project, đặt tên là lang (hoặc languages, mình sẽ dùng lang cho nó ngắn). Trong thư mục lang, bạn tạo cho mình 2 file json là vi.json và en.json, hai file này chính là hai ngôn ngữ tiếng Anh (en.json) và tiếng Việt (vi.json) cho ứng dụng của chúng ta.

Các file .json này thường được đặt tên theo quy tắc <mã_ngôn_ngữ>.json, trong đó chứa ngôn ngữ đó. Ví dụ trong file vi.json mình sẽ có:

{
    "hello": "Xin chào!",
    "welcome": "Chào mừng bạn đến với Flutter"
}

Đồng thời mình sẽ có file en.json:

{
    "hello": "Hello!",
    "welcome": "Welcome to Flutter"
}

Dành cho bạn nào chưa biết thì cấu trúc của file json là một cái key nằm trong cặp ngoặc kép (“”) sau đó là dấu hai chấm (:) và cái value nằm trong cắp dấu ngoặc kép (“”) tiếp theo. Các cặp key-value này thì nằm trong dấu ngoặc nhọn và được ngăn cách với nhau bới dấu phẩy (,). Mỗi một file json là một ngôn ngữ mà ứng dụng của bạn hỗ trợ, bấy nhiêu ngôn ngữ thì sẽ có bấy nhiêu file json.

Cách thức hoạt động như sau, khi ngôn ngữ mặc định của máy bạn đang là tiếng Việt, ứng dụng sẽ lấy value của phần tử có key là key được truyền vào trong file vi.json để hiển thị . Khi bạn thay đổi ngôn ngữ sang tiếng Anh, chỗ hiển thị vẫn là key đó nhưng nội dung được lấy từ file en.json. Nghĩa là khi bạn muốn dịch từ tiếng Việt sang tiếng Anh, bạn phải sử dụng hai cái key giống nhau ở cả 2 file đó, khác nhau là phần value thôi.

Để sử dụng được hai file này, bạn cần khai báo nó trong file pubspec.yaml. Mở file pubspec.yaml lên, bạn thêm vào dưới cùng file đó đoạn code sau:

# Lưu ý tab vô một cái rồi mới assets nha
  assets:
    # thay chỗ này thành tên thư mục bạn đặt, như của mình đặt là lang
    # Chỗ này tab vô một lần nữa
    - lang/

Tiếp theo, chúng ta cần thêm một package có tên là “flutter_localizations”, dùng để xác định ngôn ngữ mặc định của máy. Bạn thêm đoạn code sau dưới phần dependencies, nhớ là tab vô một cái nha.

  flutter_localizations:
    sdk: flutter

Ok! Vậy là đã xong phần thêm file ngôn ngữ và package. Hãy sang phần tiếp theo!

Ứng dụng mẫu

Giờ bạn hãy mở file main.dart trong thư mục lib ra và copy đoạn code bên dưới mình đã code sẵn một ứng dụng demo. Ứng dụng đơn giản chỉ gồm một AppBar, hai dòng chữ ở chính giữa màn hình thôi nên mình sẽ không giải thích gì thêm.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter demo app'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          Text(
            'Xin chào!',
            textAlign: TextAlign.center,
            style: TextStyle(
              fontSize: 24.0,
            ),
          ),
          Text(
            'Chào mừng bạn đến với Flutter',
            textAlign: TextAlign.center,
            style: TextStyle(
              fontSize: 20.0,
            ),
          )
        ],
      ),
    );
  }
}

Chạy đoạn chương trình trên, ta sẽ có kết quả như thế này:

flutter
flutter_localization tiếng Việt

Bắt đầu code thôi

Thêm package chúng ta đã cài ban đầu là flutter_localizations vào:

import 'package:flutter_localizations/flutter_localizations.dart';

Trong Widget MaterialApp, bạn thêm một thuộc tính là supportedLocales, giá trị là một mảng chứa hai phần tử Locale như sau:

// ...
MaterialApp(
  // ...
  supportedLocales: [
    Locale('vi', 'VN'),
    Locale('en', 'US'),
  ],
  // ...

Mỗi một Locale là mỗi một ngôn ngữ mà ứng dụng của bạn hỗ trợ, tương ứng với đó là mỗi một file json khác nhau. Bên trong Locale, bạn truyền vào 2 tham số, đầu tiên là mã ngôn ngữ (ví dụ ‘vi’) kế đến là mã quốc gia (ví dụ ‘VN’). Ở đây mình chỉ ví dụ hai ngôn ngữ là tiếng Anh và tiếng Việt thôi nên chỉ có hai Locale. Tiếp theo bạn thêm thuộc tính localizationsDelegates có các giá trị như bên dưới:

// ...
MaterialApp(
  // ...
  localizationsDelegates: [
    AppLocalizations.delegate,
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
  // ...

AppLocalizations là một class mà chúng ta sẽ định nghĩa sau, nó dùng để đảm bảo rằng các file json đã được load để sẵn sàng sử dụng các cái chuỗi trong file đó để hiện thị ngôn ngữ đó. GlobalMaterialLocalizations được dùng để dịch các Widget được build sẵn chẳng hạn như một cái dialog thông báo có các nút Hủy hay Đồng ý dì đó, chúng ta sẽ không thể can thiệp, ứng dụng sẽ tự chuyển ngôn ngữ cho chúng ta nếu như bạn thêm dòng này. Và cuối cùng, GlobalWidgetsLocalizations là dùng để chuyển đổi giữa Left to right hoặc là Right to left, vì có một số ngôn ngữ sẽ đọc ngược lại với chúng ta (ví dụ Nhật Bản).

Dờ chúng ta cần kiểm tra xem là mã ngôn ngữ và mã quốc gia có nằm trong danh sách ngôn ngữ được hỗ trợ hay không bằng cách như sau: cho biến supportedLocale duyệt qua từng phần tử trong mảng supportedLocales (đã khai báo ở thuộc tính supportedLocales ở trên), nếu như mã ngôn ngữ và quốc gia trùng khớp thì trả về supportedLocal. Nếu như duyệt qua tất cả rồi mà vẫn không có khớp với phần tử nào, ta cần phải trả về một giá trị mặc định cho nó, ở đây mình sẽ trả về giá trị là phần tử đầu tiên của mảng supportedLocales (nghĩa là mặc định sẽ hiển thị tiếng Việt).

MaterialApp(
  // ...
  localeResolutionCallback: (locale, supportedLocales) {
    for (var supportedLocale in supportedLocales) {
      if (supportedLocale.languageCode == locale.languageCode &&
          supportedLocale.countryCode == locale.countryCode) {
        return supportedLocale;
      }
    }
    return supportedLocales.first;
  },
  // ...

Ok! Giờ là lúc thêm class AppLocalizations. Các bạn tạo file app_localizations.dart bên trong thư mục lib. Do đoạn này khá dài và phức tạp, bản thân mình cũng không hiểu rõ được nên mình sẽ để code phía bên dưới, giải thích một số chỗ quan trọng, các bạn chỉ cần copy vào file vừa tạo là được.

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class AppLocalizations {
  final Locale locale;
  AppLocalizations(this.locale);

  static AppLocalizations of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

  static const LocalizationsDelegate<AppLocalizations> delegate =
      _AppLocalizationsDelegate();

  Map<String, String> _localizedStrings;

  // Load file json vào bộ nhớ
  Future<bool> load() async {
    // Đọc file json dưới dạng chuỗi
    String jsonString =
        await rootBundle.loadString('lang/${locale.languageCode}.json');
    // Giải mã file json sang Map
    Map<String, dynamic> jsonMap = json.decode(jsonString);
    // Sau đó dùng hàm map() để đưa Map<String, dynamic> về Map<String, String>
    // và gán cho biến _localizedStrings
    _localizedStrings = jsonMap.map((key, value) {
      return MapEntry(key, value.toString());
    });
    // Đoạn này cũng không cần thiết phải trả về giá trị nào
    // Bạn có thể để Future không cũng được và không cần return
    return true;
  }

  // Đoạn này đơn giản chỉ là lấy giá trị đang
  // được lưu tại cái key được truyền vào
  String translate(String key) {
    return _localizedStrings[key];
  }
}

class _AppLocalizationsDelegate
    extends LocalizationsDelegate<AppLocalizations> {
  const _AppLocalizationsDelegate();

  
  bool isSupported(Locale locale) {
    // Bạn thêm tất cả các ngôn ngữ ứng dụng của bạn hỗ trợ tại đây
    return ['vi', 'en'].contains(locale.languageCode);
  }

  
  Future<AppLocalizations> load(Locale locale) async {
    // Gọi hàm load json được định nghĩa trong class bên trên
    AppLocalizations localizations = new AppLocalizations(locale);
    // Đợi load xong mới return về giá trị
    await localizations.load();
    return localizations;
  }

  
  bool shouldReload(_AppLocalizationsDelegate old) => false;
}

Mọi thứ gần như đã hoàn tất, giờ bạn chỉ việc sử dụng thôi. Hãy quay lại với file main.dart ban đầu, thêm file app_localizations.dart vào.

import 'app_localizations.dart';

Để sử dụng, bạn thay đoạn chuỗi trong Widget Text thành như sau:

AppLocalizations.of(context).translate(<key>)

Cài key chính là cái key trong file json bạn đã thêm, ở đây ban đầu mình có hai cái key là hello và welcome, như vậy thì nó sẽ lấy chuỗi tại phần tử có key này để hiển thị. Vậy mình sẽ có là:

Text(
  AppLocalizations.of(context).translate('hello'),
  // ...
),
Text(
  AppLocalizations.of(context).translate('welcome'),
  // ...

Có một lưu ý nhỏ các bạn chú ý, các cái Text được dịch phải nằm trong một Class khác không nằm trực tiếp trong thuộc tính home của MaterialApp nếu không sẽ gây lỗi. Nghĩa là bạn phải tách ra ví dụ như trong ứng dụng demo của mình là class HomePage, rồi mình gọi HomePage() trong thuộc tính home của MaterialApp chứ không đặt trực tiếp Widget vào thuộc tính home.

Vậy là mình đã hoàn thành xong rồi. Bạn có thể xem code trên github tại đây.

Tận hưởng thành quả

Giờ bạn có thể lưu tất cả lại và chạy ứng dụng. Khi máy mình đặt ở chế độ tiếng Anh thì ứng dụng sẽ như thế này:

flutter
flutter_localization tiếng Anh

Và khi đổi thành tiếng Việt, ứng dụng sẽ tự thay đổi mà không cần phải khởi động lại:

flutter
flutter_localization tiếng Việt

Và mặc định, nếu máy của chúng ta đang ở một ngôn ngữ nào đó không được hỗ trợ thì sẽ hiển thị tiếng Việt.

Tổng kết

Vậy là ở trong bài viết này mình đã hướng dẫn các bạn cách hỗ trợ đa ngôn ngữ trong flutter. Hi vọng bài viết của mình hữu ích với các bạn, hãy chia sẻ nếu bạn thấy hay vì nó luôn miễn phí. Cảm ơn các bạn đã đọc bài viết!

Bài viết gốc được đăng tải tại khiemle.dev

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

Xem thêm các IT Jobs in Vietnam hấp dẫn tại TopDev

Một cách phân tích sử dụng design pattern trong C++

design pattern

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh

Chào các bạn!

Lâu nay tôi không viết bài nên không biết các bạn đã quên tôi và blog này chưa. Hôm nay tôi giới thiệu tới các bạn là fan hâm mộ của C++ 1 design pattern mới. Tôi chả gọi tên nó là cái mẹ gì. Chỉ mong khi đọc xong bài bạn áp dụng được vào công việc của bạn.

  18 designer hàng đầu dự đoán về xu hướng UI/ UX trong năm 2022

  30 tiện ích Chrome cho designer và dev

Trước hồi sinh viên,  tôi học  kế thừa bằng ví dụ đơn giản như sau:
Có 3 lớp con người, chó, chim. Mỗi loại ăn 1 thứ. Ví dụ tôi có phương thức ăn. Lớp con người in ra màn hình là ăn cơm. Lớp chó là ăn cứt và lớp chim là ăn giun, chẳng hạn thế. Tôi nghĩ ngay tới việc tạo ra lớp Động vật chứa phương thức ăn và in ra: ăn cái gì đó. Sau đó các lớp kia kế thừa lại.
Mô tả code:

design pattern

Vấn đề ở đây là bạn cần tạo ra lớp Cá cũng ăn giun và bạn lại phải viết lại phương thức lớp Cá y hệt lớp Chim.
Nhiều con cùng ăn 1 loại thức ăn như Hổ, Báo đều ăn thịt các con khác. Vậy kế thừa ở trên chả giải quyết được vấn đề dùng lại code tý nào.
Vậy bây giờ bạn nghĩ ngay chuyện hay là tạo ra interface kiểu như này:

design pattern

Rồi cho các lớp con người, chó, chim kế thừa và bắt buộc phải viết lại hàm An. Nhưng cũng chả giải quyết được gì cả. Code vẫn phải viết lại!!!

Giải quyết như nào. Bây giờ bạn nghĩ, mình phải nghĩ tới cách tạo ra 1 lớp phân biệt ăn các loại thức ăn khác nhau, và khi loại động vật nào ăn cái gì thì bạn set cho loại đó.
Ví dụ bạn muốn con người ăn cơm thì bạn set cho ăn cơm, chó thích ăn cơm bạn cũng có thể set cho ăn cơm được. Linh hoạt hơn. Cách triển khai như sau:
Bạn tạo ra 1 lớp giao diện:

design pattern

Lớp này đảm bảo khi ông nào kế thừa lại nó thì bắt buộc phải viết lại hàm An().

Sau đó tạo ra các lớp ăn các loại thức ăn khác nhau như sau:

design pattern

Đấy là ví dụ 1 số kiểu ăn. Bạn có thể thêm ăn giun sán đỉa nhái sau này.

Bây giờ quay lại lớp động vật ban đầu bạn sẽ thiết kế như sau:

design pattern

Đến đoạn này bạn sẽ hỏi vì sao tôi thiết kế như vậy. Ở cái lớp động vật lúc vào bài, tôi dùng quan hệ kế thừa, is a. thì nay tôi sẽ dùng quan hệ bao hàm, has a. Nghĩa là sao? Tôi tách biệt ra để việc ăn uống như nào không ràng buộc các lớp động vật kế thừa nó. Tôi dùng con trỏ, tôi set cách hoạt động cho nó. Trong hàm ăn của lớp này, tôi gọi tới hàm ăn của cụm cách hoạt động. Sau này bạn có thể thêm 1 số cách khác như ỉa đái, quan hệ, sinh nở.v.vv

Bạn chú ý hàm hủy tôi để virtual vì để nó check hết các lớp kế thừa trước khi gọi nó. Trong hàm hủy tôi check biến con trỏ đó đã tạo chưa, nếu tạo thì mới tiến hành xóa. Ở hàm Ăn tôi cũng check trước khi in ra không là lỗi bỏ mịa nếu như nó không set trước mà đã gọi rồi.

Bạn cũng sẽ dễ hình dung khi bạn set cách hoạt động là ăn gì thì nó gọi tới hàm của thể loại ăn uống đó.  Rồi bây giờ ta tạo 2 lớp demo sau:

design pattern

Đấy, tôi kế thừa chó hay người đều từ động vật. Sau đó trong hàm main tôi làm demo như sau:

design pattern

Ở đây tôi tạo ra 2 đối tượng chó và người bằng con trỏ. Tôi new và tôi set cách ăn uống là ăn cơm hay cứt như trên. Sau đó bạn chạy thì nó ra con gì ăn cái gì. Bạn có thể set lại ăn cái gì đó tùy ý bạn.

Đây là kết quả:

design pattern

Vậy là bạn đã dùng  1 design pattern trong C khá là hay rồi đấy.

Full Code:

Link tải code ở đây

Bạn code đi code lại 100 lần bài này cho hiểu thì thôi nhé. Thanks

ps: Rõ ràng việc học code sẽ hay hơn nếu ta biết áp dụng vào công việc. Ở đây tôi nêu ra vài ví dụ anh em tự code xem:
Tạo 1 lớp hình học. Triển khai hàm draw cho các lớp kế thừa hình vuông, hình tròn,… theo cách trên.

happy! =))

Bài viết gốc được đăng tải tại quynhlaptrinhc.wordpress.com
Có thể bạn quan tâm:

Chờ đón Diễn đàn Mobile Marketing hoành tráng nhất trong năm – MMA IMPACT 2020

MMA IMPACT 2020

Diễn đàn Tiếp thị Di động Việt Nam 2020, thuộc chuỗi sự kiện MMA IMPACT sẽ được tổ chức tại TP. Hồ Chí Minh vào ngày 19/11/2020, với nhiều nội dung đột phá giúp các nhà tiếp thị phát huy hết các tiềm năng và chung tay kiến tạo tương lai của Tiếp thị hiện đại.

Diễn đàn về tiếp thị di động lớn nhất trong năm mà các marketers không thể bỏ qua

MMA Impact Việt Nam là một trong chuỗi sự kiện toàn cầu do Hiệp Hội Tiếp thị Di Động (MMA), Hiệp hội toàn cầu hàng đầu về tiếp thị di động đứng ra tổ chức, là cơ hội để các chuyên gia đầu ngành thảo luận và chia sẻ về các xu hướng và thách thức sắp tới của ngành tiếp thị di động. Năm nay, khi hầu hết các nước Châu Á Thái Bình Dương đều diễn ra trực tuyến, MMA Impact tại Việt Nam sẽ vẫn được tổ chức offline.

Được tổ chức bởi Hiệp hội Mobile Marketing (MMA) Việt Nam – đơn vị uy tín với hơn 45 công ty thành viên tại Việt Nam, đại diện cho đa phần hệ sinh thái Mobile Marketing, MMA Impact Việt Nam 2020 hứa hẹn sẽ quy tụ hơn 400 nhà lãnh đạo doanh nghiệp và các nhà tiếp thị hàng đầu đến từ nhiều lĩnh vực khác nhau. Ban điều hành của MMA bao gồm các đại diện tiêu biểu đến từ: Adtima, Abbott, Cốc Cốc, Dentsu Aegis Network, FrieslandCampina, FECredit, Google, GroupM, Unilever Vietnam, Suntory PepsiCo Vietnam, Biti’s, Pinetech…

Bằng hệ sinh thái và nền tảng của mình, MMA đã khẳng định vai trò dẫn đầu trong việc thúc đẩy ngành tiếp thị di động, kết nối các doanh nghiệp, và tạo sân chơi cho các doanh nghiệp Việt tìm kiếm cơ hội hợp tác và phát triển thông qua các sự kiện thường niên như MMA Impact (tên gọi cũ là MMA Forum).

MMA IMPACT 2020

MMA Impact 2020 và sứ mệnh kiến tạo tương lai của ngành tiếp thị hiện đại

Xoay quanh chủ đề “Kiến tạo tương lai của Tiếp thị hiện đại”, MMA Impact 2020 được thiết kế để nâng cao và xây dựng tiềm năng “modern marketing” (marketing hiện đại) của các nhà tiếp thị. Diễn đàn mang mục đích hội tụ các nhà tiếp thị, nhà phát triển công nghệ, các agency và toàn bộ hệ sinh thái để tìm hiểu và giải quyết những thách thức ngày càng lớn mà ngành tiếp thị di động phải đối mặt; đặc biệt là trong thời đại mà họ phải luôn bắt kịp tốc độ phát triển của công nghệ cũng như đáp ứng được kỳ vọng của người tiêu dùng ngày càng tiến bộ về công nghệ lẫn ý thức xã hội.

Rohit Dadwal, Giám đốc Điều hành MMA Châu Á Thái Bình Dương cho biết: “Tiếp thị hiện đại đã trở thành một phần quan trọng của hệ sinh thái đối với các thương hiệu và người tiêu dùng do tác động của COVID-19 lên ngành công nghiệp này. Từ sự thay đổi vai trò của công nghệ đến nhận thức của người tiêu dùng trong kỷ nguyên kỹ thuật số hiện nay, các nhà tiếp thị phải nắm rõ các chiến lược tiếp thị hiện đại để đạt được tăng trưởng kinh doanh. Tôi đặc biệt khuyến khích tất cả những cá nhân trong hệ sinh thái đăng ký tham gia MMA Impact để tìm hiểu họ kiến tạo tương lai của tiếp thị hiện đại bằng cách nào.”

MMA IMPACT 2020
Rohit Dadwal, Giám đốc Điều hành MMA Châu Á Thái Bình Dương

Lắng nghe và học hỏi từ những chuyên gia hàng đầu về tiếp thị di động

Đến với sự kiện có 1-0-2 này, người tham dự sẽ có cơ hội giao lưu trực tiếp với các diễn giả nổi tiếng, nhiều năm kinh nghiệm các công ty, tập đoàn, agency lớn. MMA Impact 2020 sẽ có sự tham gia của các nhà lãnh đạo từ lĩnh vực tiếp thị, quảng cáo và truyền thông. Một số diễn giả đã được xác nhận tại MMA Impact Việt Nam bao gồm bà Nguyễn Thị Bích Vân – Chủ Tịch của Unilever Việt Nam, ông Tom Simpson – Phó Giám đốc khu vực Châu á Thái Bình Dương của AdColony, Bessie Lee – Nhà sáng lập và CEO của Withinlink, ông Shankar Rajagopal – Giám Đốc Điều Hành của Mindshare Việt Nam, ông Nguyễn Vũ Anh – Phó Tổng Giám Đốc của Cốc Cốc, Bà Trâm Nguyễn – Giám Đốc Quốc Gia Việt Nam/ Lào/ Campuchia của Google.

MMA IMPACT 2020
Người tham gia sẽ có cơ hội networking với hơn 500 người tham dự là C- level rất nhiều nhãn hàng, agency trong hệ sinh thái mobile marketing trong nước và quốc tế

Một số chủ đề tiêu biểu sẽ được thảo luận và chia sẻ tại MMA Impact bao gồm:

  • Phát triển MarTech
  • Sự gia tăng của giọng nói và âm thanh
  • Dịch vụ đa phương tiện (OTT) và phát trực tuyến
  • Tương lai của thanh toán di động
  • E-commerce 4.0: Thời đại e-commerce bằng live streaming
  • Tiếp thị toàn cầu: Góc nhìn về công nghệ và truyền thông mới

Ngoài ra, người tham dự còn được tham gia vào một hệ sinh thái duy nhất dành riêng cho các công ty nội địa và thiết lập mối quan hệ chặt chẽ với các thành viên khác. Với bản danh sách “phong phú” những diễn giả, khách mời và doanh nghiệp, MMA Impact 2020 là dịp để người tham gia tìm cơ hội networking với các C-level của rất nhiều công ty, tập đoàn lớn trong và ngoài Việt Nam. Từ đó, nhiều cơ hội hợp tác kinh doanh mới sẽ được thiết lập, đóng góp vào sự phát triển ngày càng mạnh mẽ của mạng lưới các nhà tiếp thị Việt Nam.

MMA Impact Việt Nam 2020 sẽ được tổ chức vào lúc 8:00 – 12:00 ngày 19/11/2020 tại TP.HCM Tất cả các CEO và CMO từ các doanh nghiệp, nhãn hàng, agency, tập đoàn công nghệ, viễn thông,… đều được chào đón tại sự kiện.

Đặc biệt, hãy nhanh tay đăng ký ngay hôm nay để nhận được mức giá ưu đãi lên đến 20% tại https://www.mmaglobal.com/impactvietnam2020#register đến hết ngày 31/10/2020 hoặc liên

Và đừng quên tham dự Đêm trao giải Smarties để cùng theo dõi danh sách các chiến dịch tiếp thị di động xuất sắc nhất sẽ được vinh danh vào cùng ngày – 19/11/2020 sắp tới.

Giới thiệu về Hiệp hội Tiếp thị Di động (MMA)

MMA là hiệp hội tiếp thị di động thương mại phi lợi nhuận hàng đầu thế giới bao gồm hơn 800 công ty thành viên, đến từ gần 50 quốc gia trên thế giới. Các thành viên của chúng tôi đến từ mọi mảng trong hệ sinh thái tiếp thị di động, bao gồm brands marketer, agency, nền tảng công nghệ, công ty truyền thông,… Sứ mệnh của MMA là đẩy nhanh quá trình chuyển giao và đổi mới của marketing thông qua thiết bị di động, thúc đẩy tăng trưởng kinh doanh với sự tương tác mạnh mẽ hơn của người tiêu dùng. Dẫn dắt sứ mệnh của MMA là bốn trụ cột cốt lõi: Nuôi dưỡng cảm hứng bằng cách thúc đẩy sự đổi mới cho các CMO; Xây dựng tiềm năng tiếp thị di động cho các tổ chức tiếp thị thông qua việc cung cấp kiến thức và sự tự tin; Nâng cao hiệu quả và tác động của thiết bị di động thông qua nghiên cứu ROI hữu hình; và ủng hộ các nhà tiếp thị di động. Ngoài ra, các Committee của MMA còn hợp tác để phát triển và hỗ trợ các phương pháp tốt nhất và tiên phong trong những phát triển đúng tiêu chuẩn.

Các thành viên của MMA tại Việt Nam bao gồm Facebook, Google, CocCoc, Adtima, GroupM, Coca-Cola, Unilever,… và rất nhiều tên tuổi lớn khác. Trụ sở toàn cầu của MMA được đặt tại New York với các hoạt động khu vực ở Châu Âu / Trung Đông / Châu Phi (EMEA), Châu Mỹ Latinh (LATAM) và Châu Á Thái Bình Dương (APAC). Để biết thêm thông tin về MMA, vui lòng truy cập www.mmaglobal.com.

Xem thêm: Các công việc mobie hấp dẫn các ngành nghề