Home Blog Page 179

ASP.NET Core là gì?

asp-net-core-la-gi

ASP.NET Core là gì?

ASP.NET Core là gì? Nó là một open-source mới và framework đa nền tảng (cross-platform) cho việc xây dựng những ứng dụng hiện tại dựa trên kết nối đám mây, giống như web apps, IoT và backend cho mobile.

Ứng dụng ASP.NET Core có thể chạy trên .NET Core hoặc trên phiên bản đầy đủ của .NET Framework. Nó được thiết kế để cung cấp và tối ưu development framework cho những dụng cái mà được triển khai trên đám mây (clound) hoặc chạy on-promise.

  .NET core vs ASP.NET core: Phân biệt .NET Framework, .NET Core và Mono

Nó bao gồm các thành phần theo hướng module nhằm tối thiểu tài nguyên và chi phí phát triển, như vậy bạn giữ lại được sự mềm giẻo trong việc xây dựng giải pháp của bạn. Bạn có thể phát triển và chạy những ứng dụng ASP.NET Core đa nền tảng trên Windows, Mac và Linux.

Đồng thời nó đã trở thành một mã nguồn mở. Đây là một thay đổi rất lớn và theo mình là quan trọng nhất của ASP.NET Core. Điều mà trước đây khó có một lập trình viên nào có thể nghĩ đến. Có lẽ đó cũng là một xu thế mà các ngôn ngữ lập trình hiện nay đang hướng tới.

  Triển khai ứng dụng ASP.NET Core trên IIS

Tìm việc làm ASP.NET hấp dẫn nhất cho bạn tại Topdev

ASP.NET Core ra đời trong hoàn cảnh nào?

Bản phát hành đầu tiên của ASP.NET đã xuất hiện cách đây 15 năm trước, nó là một phần của .NET Framework. Từ đó, hàng triệu lập trình viên đã sử dụng nó để xây dựng những ứng dụng web tuyệt vời, và trên những năm đó Microsoft đã phát triển thêm nhiều tính năng mới.

ASP.NET Core có một số thay đổi kiến trúc lớn, đó là kết quả của việc học hỏi rất nhiều từ các framework module hóa khác. ASP.NET Core không còn dựa trên System.Web.dll nữa. Nó được dựa trên một tập hợp các gói, các module hay cũng được gọi là các Nuget packages.

Điều này cho phép bạn tối ưu ứng dụng của bạn để chỉ bao gồm những packages nào cần thiết. Lợi ích của nó là giúp cho ứng dụng nhỏ hơn, bảo mật chặt chẽ hơn, giảm sự phức tạp, tối ưu hiệu suất hoạt động và giảm chi phí, thời gian cho việc phát triển.

Với ASP.NET Core bạn đạt được những nền tảng cải tiến dưới đây:

  • Hợp nhất việc xây dựng web UI và web APIs
  • Tích hợp những client-side frameworks hiện đại và những luồng phát triển
  • Hệ thống cấu hình dựa trên môi trường đám mây thật sự
  • Dependency injection được xây dựng sẵn
  • HTTP request được tối ưu nhẹ hơn
  • Có thể host trên IIS hoặc self-host trong process của riêng bạn
  • Được xây dựng trên .NET Core, hỗ trợ thực sự app versioning
  • Chuyển các thực thể, thành phần, module như những NuGet packages
  • Những công cụ mới để đơn giản hóa quá trình phát triển web hiện đại
  • Xây dựng và chạy đa nền tảng (Windows, Mac và Linux)
  • Mã nguồn mở và tập trung vào cộng đồng

Xem việc làm fresher .NET lương cao tại TopDev

Xây dựng web UI và web API sửng dụng ASP.NET Core MVC

  • Bạn có thể tạo ra các ứng dụng web có thể testing theo mô hình MVC (Model-View-Controller)
  • Bạn có thể xây dựng HTTP services cái mà hỗ trợ nhiều định dạng và có đầy đủ hỗ trợ cho nội dung của dữ liệu trả về
  • Razor cung cấp một ngôn ngữ hiệu quả để tạo Views
  • Tag Helper cho phép code server side tham gia vào việc tạo và render phần tử HTML
  • Model Binding tự động ánh xạ dữ liệu từ HTTP request tới tham số của method action
  • Model Validation tự động thực hiện validate client và server

Phát triển client-side

ASP.NET Core được thiết kế để tích hợp một cách liên tục với nhiều client-side frameworks, bao gồm AngularJS, KnockoutJS và Bootstrap. Về phần này tôi sẽ giới thiệu với các bạn ở những bài viết sau

Xây dựng ứng dụng đầu tiên

Như vậy tôi đã giới thiệu một cách tổng quan các khái niệm của ASP.NET Core. Giờ là lúc chúng ta tìm hiểu cấu trúc một project ASP.NET Core MVC thông qua một ví dụ đơn giản

Cài đặt Visual Studio and .NET Core

Cài đặt Visual Studio Community 2017. Chọn phiên bản download Community. Bỏ qua bước này nếu bạn đã có Visual Studio cài đặt trong máy

Chạy bản cài đặt và chọn những workloads bên dưới:

  • ASP.NET và web development
  • .NET Core cross-platform development

ASP.NET Core là g

ASP.NET Core là g

Tạo một web app

Từ Visual Studio, chọn File > New > Project.
ASP.NET Core là g

Hoàn thành họp thoại New Project:

  • Trong phần bên trái, chọn .NET Core
  • Trong phần giữa, chọn ASP.NET Core Web Application (.NET Core)
  • Tên của project ví dụ là “MvcMovie”
  • Nhấn OK

ASP.NET Core là g

Visual Studio đã sử dụng một template mặc định cho dự án MVC bạn vừa tạo. Bạn có một ứng dụng làm việc bây giờ bằng việc điền tên dự án và một vài tùy chọn. Điều này là một dự án bắt đầu đơn giản. Nhấn F5 để chạy ứng dụng trong chế độ debug hoặc Ctrl-F5 trong chế độ non-debug.

Các bạn có thể quan sát kết quả của trang chủ. Thật đơn giản phải không ?
tuyển it

Visual studio bắt đầu với IIS Express và chạy ứng dụng của bạn. Chú ý rằng thanh địa chỉ hiển thị dạng localhost:port# và không phải kiểu như example.com.

Đó là bởi vì localhost là hostname chuẩn cho máy tính local của bạn. Khi Visual Studio tạo một dự án web, một ramdom port được sử dụng cho web server.

Trong hình trên, số cổng là 5000. Khi bạn chạy ứng dụng, bạn sẽ thấy một số cổng khác.

Việc chạy ứng dụng với Ctrl-F5(non-debug) cho phép bạn làm code thay đổi, lưu file, refresh trình duyệt và thấy ngay những thay đổi của code.

Nhiều lập trình viên thích sử dụng chế độ non-debug để nhanh chóng chạy ứng dụng và xem những thay đổi. Điều này là tương tự với ngôn ngữ thông dịch như php, python hay ruby,..

Chạy với chế độ self-host. Một điểm mới trong ASP.NET Core là các bạn có thể chạy server như một ứng dụng console thay vì host trên IIS.

Để dùng chế độ này, tại điểm bắt đầu với IIS chúng ta thay bằng bắt đầu với self-host(Tên chính là tên ứng dụng)
tuyển it

Cửa sổ console ứng dụng

tuyển dụng it

Kết luận ASP.NET Core là g?

Qua những giới thiệu về ASP.NET Core trong bài viết này, các bạn có thể thất đây thực sự là những thay đổi lớn cho những ai đã quen với ASP.NET trước kia. Giờ đây ASP.NET đã trở thành một open-source, đa nền tảng có thể chạy trên nhiều môi trường, thiết kế tối ưu cho clound, module hóa, hợp nhất ASP.NET và ASP.NET MVC làm một (chỉ còn phiên bản MVC) và rất nhiều thay đổi tuyệt vời khác.

Tôi hy vọng sẽ chia sẻ nhiều hơn đến các bạn. Chúc các bạn có những khám phá thú vị cùng ASP.NET Core

Link tham khảo:

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

Xem thêm tin tuyển dụng .NET trên TopDev

Debug là gì?

debug-la-gi

Bug là gì?

  • Bugs là ám chỉ các lỗi xảy ra trong logic, hay bất kỳ vấn đề gì gây ra việc làm cho ứng dụng không thực thi được hoặc thực thi sai.
  • Bugs luôn tiềm ẩn ở mọi nơi, và ta không thể lường trước được mọi tình huống có thể xảy ra mà chỉ có thể cố gắng làm giảm nó đến mức thấp nhất có thể tùy vào khả năng của ta tại thời điểm phát triển và bảo trì ứng dụng.

Debug là gì?

  • Debug là quá trình tìm kiếm ra lỗi hay nguyên nhân gây ra lỗi (bug ở đâu) để có hướng sửa lỗi (fix bug). Việc kiểm soát lỗi của rất nhiều các dòng code là việc không hề đơn giản với những người lập trình viên chưa có nhiều kinh nghiệm.
  • Chuyện xảy ra lỗi trong hàng nghìn dòng lệnh đó là chuyện bình thường đối với bất cứ 1 người làm lập trình nào. Chương trình có thể chạy không đúng ý người lập trình, hoặc chạy sai chức năng nó được quy định, gây cho chương trình bị đánh giá kém chất lượng. Vậy khi bị lỗi thì các lập trình viên phải debug để fix lỗi giúp cho chương trình (program) chạy tốt.

Mục đích của việc debug

  • Mục đích của Debug không chỉ là để loại bỏ lỗi (error) khỏi chương trình mà quan trọng hơn còn để giúp lập trình viên hiểu rõ hơn sự thực thi của chương trình. Một lập trình viên không có khả năng Debug hiệu quả thì cũng giống như bị mù vậy.

Các phương pháp debug

  • Debugging Tool – dùng công cụ để Debug – là phương pháp Debug đi sâu vào source code nhất. Thường thì chúng ta gọi những Debugging Tool này là Debugger. Những Debugger phần mềm thông dụng là Microsoft Visual Studio Debugger , GNU Debugger . Ngoài ra còn có những Debugger phần cứng được thiết kế kèm cho các hệ thống nhúng (Embedded System) bởi các thiết kế nhúng không phải là những thiết kế mang tính mục đích chung (General-purpose) mà thường được thiết kế trên các platform riêng biệt phục vụ các ứng ứng dụng riêng biệt nên cũng cần những Debugger đặc thù đi kèm.
  • Printlining: đơn giản là bạn thêm vào source code của bạn những dòng lệnh để in ra những thông tin mà bạn cần theo dõi trong quá trình thực thi. Chẳng hạn nếu bạn dùng Arduino IDE thì bạn sẽ không có Debugger và cách Debug phù hợp nhất là bạn dùng Serial.print().
  • Logging: tạo ra một biểu mẫu để ghi (log) lại những thông tin sau khi chương trình thực thi. Phân tích nguyên nhân lỗi dựa trên những thông tin này.
  • Ngoài ra thì còn một phương pháp mà cá nhân mình cho là rất hiệu quả đó là phương pháp – Nhờ người khác debug – là việc bạn vác đoạn code ra nhờ người có kinh nghiệm hơn debug dùm.

Mẹo viết code giúp chúng ta soát lỗi nhanh

  • Dùng comment (chú thích) sau khi viết xong 1 đoạn code về 1 phần nào đó để sau này dễ tìm và sửa.
  • Đặt tên các hàm các biến có ý nghĩa để dễ kiểm soát và tìm lỗi.
  • Hoặc có thể sử dụng Breakpoints để rà soát xem phần mềm của bạn chạy đến vị trí nào của code và đến đó có đúng không.
  • Đừng bỏ qua các Error Message nó sẽ giúp chúng ta có thể tìm ra số dòng code và sửa rất nhanh.

Debug là gì?

Jira Software – Tìm hiểu tính năng và cách sử dụng JIRA

JIRA là một công cụ phát triển phần mềm mạnh mẽ được sử dụng rộng rãi để quản lý dự án và theo dõi các vấn đề. Hiện nay, JIRA đang dần trở thành một trong những công cụ hàng đầu trong việc hỗ trợ các đội ngũ phát triển phần mềm quản lý công việc của họ. Trong bài viết sau, cùng TopDev tìm hiểu thật chi tiết về các tính năng cũng như cách sử dụng Jira.

Jira là gì?

Jira Software là ứng dụng làm việc cho phép các nhóm theo theo dõi các vấn đề (issue) cần xử lí, quản lý dự án và tự động hóa quy trình làm việc, do công ty phần mềm Atlassian của Úc phát triển.

Đây là một công cụ phổ biến trong các đội ngũ phát triển phần mềm để lập kế hoạch, theo dõi và phát hành các dự án phần mềm. JIRA cung cấp một nền tảng tập trung để quản lý các nhiệm vụ, lỗi và các loại vấn đề khác, giúp các đội ngũ tổ chức sắp xếp và ưu tiên công việc của họ.

Cùng xem video ngắn giới thiệu về Jira:

Tính năng chính của Jira

  1. Quản lý dự án linh hoạt: Jira hỗ trợ nhiều loại dự án khác nhau, từ phần mềm, kinh doanh đến các dự án phi kỹ thuật. Người dùng có thể tùy chỉnh quy trình làm việc (workflow) để phù hợp với nhu cầu cụ thể của dự án.
  2. Theo dõi vấn đề (Issue Tracking): Jira cho phép theo dõi và quản lý các vấn đề, lỗi, nhiệm vụ và các loại công việc khác nhau. Mỗi vấn đề có thể được gắn với người chịu trách nhiệm, trạng thái, mức độ ưu tiên và các thông tin liên quan khác.
  3. Báo cáo và phân tích: Jira cung cấp nhiều loại báo cáo và biểu đồ khác nhau, giúp người dùng theo dõi tiến độ, hiệu suất của nhóm và tình trạng dự án. Các báo cáo này có thể tùy chỉnh theo nhu cầu cụ thể của dự án.
  4. Bảng Kanban và Scrum: Jira hỗ trợ cả hai phương pháp Kanban và Scrum, cho phép người dùng sử dụng các bảng (boards) để quản lý công việc và theo dõi tiến độ. Người dùng có thể kéo thả các nhiệm vụ giữa các cột để cập nhật trạng thái.
  5. Tích hợp với các công cụ khác: Jira tích hợp tốt với nhiều công cụ khác như Confluence, Bitbucket, GitHub, Slack, Trello và nhiều công cụ khác, giúp tối ưu hóa quy trình làm việc và tăng cường sự cộng tác giữa các nhóm.
  6. Tùy chỉnh trường và màn hình: Người dùng có thể tùy chỉnh các trường thông tin và giao diện màn hình để phù hợp với nhu cầu cụ thể của dự án. Điều này giúp hiển thị đúng các thông tin cần thiết và tăng cường hiệu quả làm việc.
  7. Quản lý quyền truy cập: Jira cung cấp khả năng quản lý quyền truy cập chi tiết, cho phép người quản lý dự án kiểm soát ai có thể xem và chỉnh sửa thông tin trong dự án. Điều này đảm bảo an toàn và bảo mật thông tin.
  8. Tự động hóa quy trình: Jira hỗ trợ các quy tắc tự động hóa, giúp giảm bớt các công việc lặp đi lặp lại và tăng cường hiệu quả làm việc. Người dùng có thể thiết lập các quy tắc để tự động cập nhật trạng thái, gửi thông báo, hoặc tạo các nhiệm vụ mới.
  9. Quản lý sprint và backlog: Đối với các dự án Scrum, Jira cung cấp các công cụ để quản lý sprint và backlog, giúp nhóm dễ dàng lập kế hoạch, ưu tiên và theo dõi các nhiệm vụ trong từng sprint.
  10. Ứng dụng di động: Jira có ứng dụng di động cho cả iOS và Android, giúp người dùng dễ dàng theo dõi và quản lý công việc mọi lúc, mọi nơi. Điều này rất tiện lợi cho những người cần làm việc từ xa hoặc khi đang di chuyển.

Những tính năng trên giúp Jira trở thành một công cụ mạnh mẽ và linh hoạt cho việc quản lý dự án và theo dõi vấn đề, phù hợp với nhiều loại dự án và nhóm làm việc khác nhau.

Các thành phần cơ bản của Jira

  • Roles: Xác lập các role của dự án, Mục này xác nhận ai tham gia vào dự án, những người add vào role thì mới có thể tạo Resource Allocation và project team sau này. Nhiều người có thể vào 1 role.
  • Project: Chức năng này dùng để phân quyền approve worklog cho thành viên của dự án. Ai là team lead của group nào thì sẽ được approve worklog cho member của group đó. Project management được quyền approve cho toàn bộ thành viên dự án
  • Issue là thành phần cơ bản để theo dõi các công việc, lỗi, nhiệm vụ hoặc bất kỳ công việc nào cần được quản lý. Các issue có thể được phân loại thành nhiều loại khác nhau như Bug (lỗi), Task (nhiệm vụ), Story (câu chuyện), Epic (tính năng lớn), v.v.
  • Component là sản phẩm của dự án. Ở đây sẽ nhập tất cả sản phẩm của dự án lấy từ file kế hoạch doanh số. Nếu dự án làm theo Scrum thì sẽ là Product của Sprint tương ứng.
  • Workflow là chuỗi các trạng thái và chuyển đổi mà một issue có thể trải qua trong suốt vòng đời của nó. Workflows có thể được tùy chỉnh để phản ánh quy trình làm việc cụ thể của từng dự án.
  • Priority: Là mức độ ưu tiên của một defect. Có 4 mức, chọn theo datalist
  • Status: Đại diện cho các vị trí của vấn đề trong workflow
  • Resolution (Giải quyết): Kết quả cuối cùng của một issue, ví dụ: Fixed (Đã sửa), Won’t Fix (Không sửa), Duplicate (Trùng lặp).
  • Custom Fields (Trường tùy chỉnh): Jira cho phép người dùng tạo các trường tùy chỉnh để lưu trữ các thông tin đặc thù của dự án hoặc nhóm làm việc. Các trường này có thể được thêm vào các issue để cung cấp thêm thông tin cần thiết.
  • Reports and Dashboards (Báo cáo và Bảng điều khiển): Jira cung cấp nhiều loại báo cáo và bảng điều khiển để giúp theo dõi tiến độ, hiệu suất và tình trạng của dự án. Người dùng có thể tạo các báo cáo tùy chỉnh và bảng điều khiển để hiển thị các số liệu quan trọng và các thông tin cần thiết.

Các thuật ngữ thường gặp khi sử dụng Jira

Jira là phần mềm với khá nhiều thuật ngữ công nghệ:

  • Sprint: Một vòng lặp ngắn hạn (lý tưởng là 2-4 tuần) mà đội phát triển thực hiện đầy đủ các công việc cần thiết như lập kế hoạch, phân tích yêu cầu, thiết kế, triển khai để cho ra các phần nhỏ của sản phẩm.
  • Backlog: Danh sách tập hợp các user stories, bugs và tính năng cho một sản phẩm hoặc sprint.
  • Scrum: Một phương pháp Agile, nơi sản phẩm được xây dựng theo các lần lặp đi lặp lại trong một sprint.
  • Scrum of Scrums: Một kỹ thuật để mở rộng quy mô Scrum, các dự án đa đội – theo truyền thống gọi là program management.
  • Board: Công cụ dùng để hiển thị hoạt động công việc trong một quy trình làm việc cụ thể. Nó có thể thay đổi thích ứng với các phương pháp Agile khác nhau (ví dụ, một bảng Scrum sẽ hiển thị các công việc được di chuyển từ product backlog đến sprint backlog, trong khi đó một bảng Kanban thường có một quy trình làm việc ba bước: To do, In Progress, và Done).
Jira là gì
Giao diện scrum board trong Jira
  • Burndown Chart: Hiển thị số lượng ước tính và thực tế cho tổng số công việc phải hoàn thành trong một sprint.
  • Daily stand-up: Là một cuộc họp nhỏ 15 phút trước khi bắt đầu ngày làm việc, giúp mọi thành viên nắm bắt toàn bộ công việc của ngày hôm qua.
  • Epic: Một công việc lớn hơn mà cần được chia nhỏ thành nhiều issue hoặc câu chuyện người dùng (user story) nhỏ hơn. Người dùng có thể phải chạy nhiều sprint để hoàn thành một epic.
  • Issue: Một đơn vị công việc (task, bug, story, epic) trong Jira, hoạt động trong một quy trình từ khởi tạo đến khi hoàn thành.
  • Task (Nhiệm vụ): Một công việc hoặc hoạt động cụ thể cần được hoàn thành trong dự án.
  • Sub-task (Nhiệm vụ con): Một công việc nhỏ hơn, thuộc về một issue lớn hơn và cần được hoàn thành như một phần của issue đó.
  • User Story (Câu chuyện người dùng): Một yêu cầu từ quan điểm của người dùng cuối, thường được sử dụng trong các dự án Agile để mô tả chức năng mà sản phẩm cần cung cấp.
  • Swimlane: Phân loại các công việc để xem xét công việc nào nên tiến hành trước.
  • Velocity: Đo lường khối lượng công việc mà một đội có thể xử lý trong một thời hạn nhất định.
  • Cumulative Flow Diagram (CFD): Một biểu đồ thể hiện các trạng thái khác nhau của các mục công việc trong một khoảng thời gian cụ thể. Cột ngang x trong CFD định nghĩa là thời gian, và cột dọc y là mục công việc (issue). Mỗi vùng màu của biểu đồ tương đương với trạng thái luồng công việc (ví dụ một cột trong bảng).
  • Iteration: Dự án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại.
  • Wallboard: Một bảng (viết tay hoặc điện tử) lớn được đặt tại vị trí dễ thấy thể hiện dữ liệu quan trọng về hoạt động của đội development.
  • Epic: Một công việc lớn hơn mà cần được chia nhỏ thành nhiều issue hoặc câu chuyện người dùng (user story) nhỏ hơn.
  • Status (Trạng thái): Tình trạng hiện tại của một issue, ví dụ: To Do (Cần làm), In Progress (Đang làm), Done (Hoàn thành).
  • Label (Nhãn): Thẻ gắn vào các issue để giúp phân loại và tìm kiếm dễ dàng hơn.

Ưu nhược điểm của phần mềm Jira

Ưu điểm của Jira là gì?

  • Jira có chức năng phân quyền cực kỳ chi tiết, không chỉ phân quyền trong dự án chung, mà còn phân quyền đối với từng nhiệm vụ, giúp team công nghệ bảo vệ thông tin độc quyền của mình.
  • Dễ dàng tích hợp với các hệ thống khác (như Email, Excel, RSS,…)
  • Hệ thống module và bộ công cụ phát triển bổ trợ cho phép tùy biến, mở rộng và tích hợp Jira vào trong hệ thống hiện tại
  • Jira được phát triển sử dụng chuẩn HTML và được thử nghiệm với tất cả các trình duyệt phổ biến hiện nay.
  • Có thể chạy trên hầu hết các nền tảng phần cứng, hệ điều hành và cơ sở dữ liệu
  • Mỗi màn hình trong Jira có một phiên bản có thể in đảm bảo việc luân chuyển bản cứng một cách dễ dàng
  • Có thể tích hợp trực tiếp với code trên môi trường phát triển, là một công cụ hoàn toàn phù hợp với các developer.

Nhược điểm của Jira là gì?

  • Chi phí cao, sau 7 ngày dùng thử thì doanh nghiệp càng có quy mô lớn thì càng tốn nhiều chi phí: $10 mỗi tháng dành cho tối đa 10 tài khoản; từ 11-100 tài khoản là $7/tài khoản/tháng
  • Tốn nhiều thời gian và công sức để setup nên chỉ phát huy tối ưu hiệu quả với dự án lớn, không phù hợp với dự án vừa và nhỏ (dưới 3 tháng).
  • Khó sử dụng cho người mới: Đối với những người không quen thuộc với các công cụ quản lý dự án, Jira có thể gây khó khăn ban đầu do giao diện và các tính năng phong phú của nó.
  • Tải lên kích thước tập tin bị hạn chế.
  • Các báo cáo được tạo ra không thể sử dụng lại.
  • Ngôn ngữ tiếng Anh với nhiều thuật ngữ khó sử dụng.

Tóm lại, Jira là một phần mềm quản lý dự án khá đặc thù, đây sẽ là lựa chọn hoàn hảo cho các team làm việc theo phương pháp Agile, đặc biệt là các team công nghệ hoặc phát triển phần mềm.

Đối tượng nên sử dụng Jira Software

Jira có thể hỗ trợ nhiều nhóm và phòng ban trong nhiều ngành công nghiệp khác nhau. Các tính năng đa dạng của nó làm cho nó trở nên có giá trị đối với các nhóm tham gia vào quản lý dự án, phát triển phần mềm và các nhiệm vụ cộng tác khác. Một số nhóm có thể hưởng lợi từ việc sử dụng Jira bao gồm:

Software Development Teams

Jira có nguồn gốc từ phát triển phần mềm, khiến nó đặc biệt phù hợp với các nhóm phát triển. Nó giúp quản lý tác vụ, theo dõi lỗi, giám sát tiến độ và tạo điều kiện thuận lợi cho sự cộng tác giữa các nhà phát triển, người thử nghiệm và các bên liên quan khác.

IT Operations Teams

Các nhóm CNTT có thể sử dụng Jira để theo dõi và quản lý các sự cố, yêu cầu thay đổi và yêu cầu dịch vụ. Nó giúp hợp lý hóa các quy trình quản lý dịch vụ CNTT và đảm bảo giải quyết hiệu quả các vấn đề kỹ thuật.

Project Management Teams

Khả năng quản lý dự án của Jira không chỉ giới hạn ở phát triển phần mềm. Người quản lý dự án có thể tạo và theo dõi nhiệm vụ, phân bổ nguồn lực, đặt mức độ ưu tiên và giám sát tiến độ dự án trong nhiều ngành khác nhau.

Marketing Teams

Các nhóm tiếp thị có thể sử dụng Jira để lập kế hoạch và quản lý chiến dịch, theo dõi các mục tiêu, lên lịch nhiệm vụ và cộng tác tạo nội dung. Nó cung cấp khả năng hiển thị các dự án tiếp thị và đảm bảo các nhiệm vụ được thực hiện đúng thời hạn.

Product Management Teams

Quản lý sản phẩm có thể sử dụng Jira để xác định lộ trình sản phẩm, theo dõi các yêu cầu về tính năng, ưu tiên cải tiến và cộng tác với các nhóm phát triển để cung cấp các sản phẩm lấy khách hàng làm trọng tâm.

Manufacturing and Operations Teams

Jira có thể theo dõi quy trình sản xuất, giám sát bảo trì thiết bị, quản lý hàng tồn kho và đảm bảo kiểm soát chất lượng trong sản xuất và vận hành.

Làm thế nào để sử dụng JIRA?

Tạo tài khoản sử dụng Jira

Hãy xem cách sử dụng JIRA ngay từ đầu (tạo tài khoản Atlassian).

Bước 1: Tạo tài khoản Atlassian

1. Đi tới trang đăng ký của Atlassian, nhập thông tin xác thực người dùng cần thiết được yêu cầu trên trang web rồi nhấp vào nút Đăng ký.

tạo tài khoản jira

2. Để hoàn tất thiết lập và đăng nhập, hãy nhấp vào liên kết xác minh trong hộp email.

3. Thiết lập tài khoản Atlassian của bạn.

tạo tài khoản jira

4. Nhấp vào đăng ký sau khi điền thông tin chi tiết. Tài khoản đã được tạo. Người dùng được tự động chuyển hướng đến trang chủ.

tạo tài khoản jira

Bước 2: Tạo một dự án mới

1. Đăng nhập vào tài khoản Atlassian của bạn.

2. Trên trang chủ, nhấp vào phần mềm Jira và điền thông tin chi tiết được yêu cầu.

tạo project đầu tiên trên Jira

3. Trả lời một số câu hỏi cơ bản để thiết lập JIRA cho nhóm của bạn.

4. Chọn tên dự án và khung mẫu như Scrum hoặc Kanban, v.v. cho dự án của bạn.

tạo project đầu tiên trên Jira

5. Sau khi hoàn thành các bước trên, màn hình sau sẽ hiển thị giao diện làm việc của Jira:

tạo project đầu tiên trên Jira

Làm cách nào để tạo issue trong JIRA?

1. Chọn nút Tạo màu xanh lam nằm ở đầu mỗi trang.

tạo issue trên jira

2. Nhập mô tả ngắn gọn về sự cố trong phần Tóm tắt.

tạo issue trên jira

3. Hoàn thành tất cả các trường bắt buộc và tất cả các trường bắt buộc khác. Khi hoàn tất, hãy chọn Tạo.

tạo issue trên jira

So sánh Jira và Trello

Jira và Trello đều là công cụ quản lý dự án nổi tiếng của Atlassian, nhưng chúng có mục đích và đặc điểm sử dụng khác nhau. Jira chủ yếu dành cho các nhóm phát triển phần mềm và dự án phức tạp. Nó cung cấp khả năng quản lý chi tiết với các workflow tùy chỉnh và khả năng theo dõi issue chi tiết. Jira nổi bật với các công cụ báo cáo và phân tích phong phú, hỗ trợ tốt cho các phương pháp Agile như Scrum và Kanban, và tích hợp tốt với các công cụ DevOps. Tuy nhiên, Jira có thể khá phức tạp và khó sử dụng cho người mới, đòi hỏi nhiều thời gian để thiết lập và cấu hình ban đầu, và chi phí cấp phép cao hơn so với Trello. Jira phù hợp nhất cho các nhóm phát triển phần mềm và dự án kỹ thuật phức tạp.

Ngược lại, Trello là một công cụ quản lý dự án đơn giản và trực quan, phù hợp cho mọi loại nhóm, từ cá nhân đến nhóm nhỏ và không chuyên về kỹ thuật. Trello dễ sử dụng với giao diện thân thiện và trực quan, cho phép kéo thả các thẻ giữa các cột. Nó dễ dàng tùy chỉnh và có phiên bản miễn phí với nhiều tính năng cơ bản. Tuy nhiên, Trello thiếu các tính năng quản lý dự án phức tạp và báo cáo chi tiết, không lý tưởng cho các dự án lớn hoặc yêu cầu quản lý phức tạp. Trello có nhiều tích hợp nhưng không mạnh mẽ và đa dạng như Jira. Trello phù hợp nhất cho các nhóm nhỏ, cá nhân và các dự án đơn giản hoặc phi kỹ thuật.

Đặc điểm Jira Trello
Mục tiêu chính Dự án phát triển phần mềm phức tạp Quản lý dự án đơn giản, trực quan
Độ phức tạp Cao, yêu cầu kỹ năng kỹ thuật Thấp, dễ sử dụng
Quản lý Agile Hỗ trợ tốt (Scrum, Kanban) Cơ bản (Kanban)
Báo cáo và phân tích Chi tiết, đa dạng Hạn chế
Chi phí Cao hơn Thấp hơn, có phiên bản miễn phí
Đối tượng sử dụng Nhóm phát triển phần mềm Nhóm nhỏ, cá nhân, dự án đơn giản

Kết luận, Jira phù hợp với các tổ chức và nhóm làm việc yêu cầu quản lý dự án phức tạp và chi tiết, trong khi Trello lý tưởng cho các nhóm nhỏ và cá nhân cần một công cụ quản lý dự án trực quan và dễ sử dụng.

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

Xem thêm việc làm ngành cntt hấp dẫn lương cao tại TopDev!

Speed up Microservices 2: Tận dụng trình duyệt và cache

Cũng gần 9 tháng kể từ bài 1 ra mắt, trong bài này mình sẽ chia sẻ cách hệ thống Teamcrop đã tối ưu thế nào để tăng tốc cho hệ thống Microservices của mình. Cũng như bài 1 có đề cập, dữ liệu trong hệ thống microservices khá phân tán và khi cần lấy dữ liệu nếu không thiết kế tốt thì sẽ tốn rất nhiều thời gian cho các request lấy dữ liệu. Ví dụ lấy danh sách đơn hàng là một ví dụ rõ ràng nhất có nêu ở bài trước.

Teamcrop cũng lưu dữ liệu dạng này, trong một đơn hàng được lưu trong database thì chỉ lưu ID (Khóa ngoại) của các bảng như nhân viên, cửa hàng, nguồn đơn hàng…mà các thông tin này chỉ được cung cấp bởi các service liên quan như service Nhân viên, Store và Metadata. Để hiển thị thông tin như giao diện thì cần phải gọi thêm nhiều request (Restful) để fetch data từ các nguồn này và đây là cách hoàn toàn không hiệu quả bởi ảnh hưởng đến thời gian chờ của người dùng.

Trong kiến trúc của Teamcrop, các thông tin như nhân viên, cửa hàng, nhà kho, sản phẩm, … này được gọi là Tài nguyên công ty (Company Resource– CR) và hiện Teamcrop có khoảng gần 20 company resource.

Cách hoạt động của các Company Resource:

Các company resource cũng là dữ liệu và tất nhiên vẫn có các API như các resource khác, hầu hết đều được quản lý (CRUD) và có giao diện tương ứng để quản lý. Chỉ có một khác biệt là các company resource sẽ có thêm 1 web service cho phép lấy toàn bộ dữ liệu, gọi là api /fulldata. API này cho phép lấy toàn bộ dữ liệu resource, không phân trang.

Khi có một user truy cập vào website thì sẽ load toàn bộ các company resource và lưu trữ trong trình duyệt. Mình có thể setup thêm giao diện để thể hiện progress bar, khi nào toàn bộ company resource được load hết thì cơ chế router của web sẽ bắt đầu và tiến hành load giao diện tính năng đang truy cập. Hình dưới là ví dụ một action viết bằng PHP của việc lấy một company resource là Vendor (thương hiệu):

Company Resource sẽ ảnh hưởng thời gian tải trang

Nếu đọc đến đây thì sẽ có nhiều bạn thắc mắc là nếu mỗi truy cập đều phải load toàn bộ Company Resource thì sẽ chờ khá lâu bởi vì mỗi CR sẽ cần 1 request đến /fulldata và API này cũng phải lấy toàn bộ data của resource và response về.

Đối với phía server thì sẽ không có vấn đề nhiều vì mình sẽ tận dụng cache (Redis) để lưu kết quả vào memory và khi có request thì mình sẽ lấy từ cache ra mà thôi.

Ở phía client (trình duyệt) thì mới là vấn đề lớn, bởi dù server có nhanh thì có bao nhiêu company resource thì cũng sẽ tốn ngần ấy số request lên server để lấy /fulldata. Tuy nhiên, Teamcrop hầu như không tốn 1 request nào cho các company resource khi sử dụng…Service Worker của trình duyệt.

Đối với các API /fulldata thì script trong service worker của mình sẽ lấy từ cache trên trình duyệt ra mà không phải tốn 1 request nào lên server. Như vậy là tiết kiệm được mấy chục request và có được một số lượng data để hỗ trợ lấy dữ liệu.

Company Resource sẽ được lưu trữ thế nào?

Sau khi lấy được các dữ liệu company resource thì việc lưu trữ và sử dụng các dữ liệu này cũng là một vấn đề lớn. Bởi các company resource này sẽ được dùng cho việc tìm kiếm theo 1 ID (getById), tìm theo một số tiêu chí (search) và lấy toàn bộ danh sách (getList).

Để đảm bảo quá trình truy xuất, tìm kiếm thì nó phải nhanh cũng như gần gũi, dễ sử dụng nên mình đã chọn TaffyDB, được coi là một thư viện nhỏ gọn, In-memory Database, hỗ trợ tìm kiếm theo ID, điều kiện..và khá dễ dùng. Mỗi Company Resource sau khi lấy về sẽ trở thành 1 database và có thể truy xuất data thoải mái. Khá nhanh bởi vì nó là in-memory.

Như vậy thì từ giờ, mỗi khi có 1 dữ liệu có ID là ID của một company resource thì có thể tìm kiếm và lấy thông tin một cách nhanh nhất từ bộ nhớ của trình duyệt mà không phải tốn công JOIN bảng, request giữa các service hoặc client gửi request để lấy detail.

Tuy nhiên, một vấn đề lớn hơn đã xuất hiện đó là nếu dữ liệu company resource đã cache hoàn toàn ở trình duyệt thì khi có dữ liệu mới thì làm sao cập nhật (hay xóa cache). Đối với vấn đề này phát sinh 2 tình huống từ dễ đến khó, tình huống đầu tiên là xóa cache đối với người refresh lại trang web (reload) và tình huống thứ 2, đau đầu hơn là bởi vì Teamcrop là dạng Single Page App (SPA), nếu người dùng không reload trang thì làm sao cập nhật dữ liệu mới nhất. Mình sẽ xử lý lần lượt từng tình huống.

Xóa cache của Company Resource khi reload trang

Đối với trường hợp người dùng reload lại trang web thì chỉ cần thêm cơ chế versioning vào các company resource là giải quyết được.

Những thao tác thay đổi dữ liệu liên quan đến Company Resource (thêm, xóa, sửa) thì đều được gọi 1 API để nâng version của resource tương ứng.

Trước khi request các /fulldata API, hệ thống sẽ gửi request lấy thông tin version của các company resource, từ đó mới request để lấy full data. Do version được nối vào URL của fulldata nên Service Worker sẽ kích hoạt cơ chế cache theo URL, nếu version không đổi thì sẽ không request lên server, ngược lại thì sẽ request lên server.

Thậm chí còn làm tính năng nho nhỏ trên giao diện để debug version của các resource trong trường hợp không thể inspect được.

Xóa cache của Company Resource khi đang sử dụng và không reload

Đối với trường hợp một user vẫn “miệt mài” làm việc và không reload trang, bởi đặc thù của Single Page App là không reload mỗi khi chuyển tính năng nên xóa cache của company resource cho đối tượng này sẽ không theo cách thông thường. Bài toán đặt ra là làm sao trigger (thông báo) cho trình duyệt biết là có sự thay đổi là được bởi vì nếu được trigger thì chỉ cần gọi ajax lên Company Resource API sẽ lấy được bảng version của các resource và đối chiếu cái nào tăng thì lấy bản mới của /fulldata.

Suy nghĩ một hồi và nghĩ ngay đến giải pháp sử dụng Socket. Và Teamcrop sử dụng Pusher để cung cấp giải pháp socket bởi vì đây là một trong những dịch vụ tốt nhất hiện nay đối với dịch vụ socket.

Nhằm tận dụng cơ chế web socket sẵn có của Teamcrop (dùng cho cơ chế web notification) nên trình duyệt tiến hành “subscribe” để nghe trên một channel và mỗi khi version tăng thì server (PHP) của Teamcrop gửi một message cho trình duyệt đang lắng nghe ở một channel chung của công ty, tất nhiên thông qua Pusher API.

Sample code ở client (Javascript):

Sample code ở server (PHP):

Như vậy, mỗi khi company resource service nhận được yêu cầu nâng version thì sẽ trigger và client sẽ tự động cập nhật dữ liệu đang cache trên trình duyệt. Và giải quyết ổn thỏa bài toán cache data cho Company Resource.

Tiêu chí nào để trở thành Company Resource?

Như từ đầu đã chia sẻ, Company Resource sẽ lưu ở máy giúp  việc “phân giải” các ID khóa ngoại thành dữ liệu để hiển thị nhằm cải tiến performance chung của toàn hệ thống. Tuy nhiên, không phải tất cả tài nguyên đều có thể trở thành Company Resource.

Trước tiên, cần xác định rõ là Company Resource không phải là Transaction Data, ví dụ Đơn hàng, Khách hàng…không thể nào là ứng cử viên trở thành Company Resource bởi tính thay đổi cũng như số lượng của nó. Chỉ nên chọn những dữ liệu thường xuyên được tham chiếu, số lượng dữ liệu ít, tránh làm trình duyệt lưu quá nhiều dữ liệu vào bộ nhớ.

Lời kết, như vậy cùng với việc thay đổi mô hình microservice thì cũng phát sinh nhiều vấn đề mới liên quan đến kiến trúc này. Trên đây chỉ là một giải pháp cho một bài toán cụ thể mà Teamcrop gặp phải trong quá trình vận hành hệ thống của mình. Kỳ tiếp theo (kỳ 3) mình sẽ đề cập đến một bài toán cụ thể hơn là Export dữ liệu ra file (vd Excel). Bởi vì đặc thù là dữ liệu phân tán, nên export dữ liệu trong hệ thống cũng là một bài toán khá thú vị.

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

  Microservices là gì? Speed up Microservices 1: Tác dụng phụ và một số chiến lược cơ bản
  Giao tiếp hiệu quả giữa các Microservice
  Xác thực và phân quyền trong Microservices

Xem thêm việc làm Microsoft tại TopDev

Nguồn: Bloghoctap.com

Mẫu bảng mô tả công việc lập trình PHP

Mẫu mô tả công việc lập trình PHP

Lập trình PHP có nhiệm vụ chính là xây dựng các ứng dụng cấp doanh nghiệp, quản lí quá trình phát triển ứng dụng bằng PHP, đồng thời tham gia vào toàn bộ quá trình phát triển sản phẩm, từ lên ý tưởng, phân tích, thiết kế đến kiểm tra, vận hành thực tế theo kế hoạch. Hy vọng, Mẫu bảng công việc lập trình PHP này sẽ giúp các bộ phận nhân sự dễ dàng hơn cho việc tuyển dụng những vị trí này.

Về lập trình viên PHP: Để thành một PHP Developer giỏi, các lập trình viên cần nắm rõ cấu trúc dữ liệu và giải thuật, kỹ thuật lập trình hướng đối tượng cũng như có kiến thức hoặc kinh nghiệm về framework liên quan như Laravel, Zend, CI, Yii, CakePHP… để cùng tham gia nghiên cứu, thiết kế, phát triển và tích hợp các các giải pháp và hệ thống ứng dụng phục vụ công việc quản trị, vận hành và điều hành cho sản phẩm công ty/ khách hàng.

Mẫu bảng công việc lập trình PHP

YÊU CẦU CÔNG VIỆC

  • Có kinh nghiệm làm việc với PHP và framework liên quan như Laravel, Zend, CI, Yii, CakePHP. 
  • Có kiến thức ứng dụng các CSS và Javascript framework: jQuery, Boostrap…
  • Nắm vững cơ sở dữ liệu MySQL, NoSQL,.. 
  • Tinh thần trách nhiệm cao trong công việc, có thể làm việc dưới áp lực cao và tinh thần trách nhiệm cao.
  • Có sản phẩm thực tế là lợi thế.
  • Kỹ năng tư duy logic và thuật toán tốt, phân tích và giải quyết vấn đề
  • Có khả năng đọc hiểu tiếng Anh chuyên ngành

MÔ TẢ CÔNG VIỆC

  • Tham gia phát triển các ứng dụng, nâng cấp và triển khai các sản phẩm phần mềm theo xu hướng công nghệ trên nền tảng PHP. –
  • Tìm hiểu yêu cầu, phân tích, thiết kế, nghiên cứu công nghệ công nghệ mới và review source code, đưa ra giải pháp áp dụng vào sản phẩm dịch vụ của công ty
  • Duy trì và phát triển các website, code và cấu trúc dữ liệu có sẵn của công ty
  • Hỗ trợ các thành viên trong nhóm với các chức năng phức tạp, tham gia nhận xét, đánh giá source code của các thành viên trong nhóm.

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

Ginco đã sử dụng và tối ưu Cloud Functions như thế nào

sử dụng và tối ưu Cloud Functions

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

Hôm nay mình chia sẻ đến mọi người 1 case study khá hay mà Ginco đã thực hiện để quản lí giao dịch trong Blockchain bằng cách sử dụng hệ sinh thái Firebase.

Gần đây công ty mình cũng bắt đầu đưa Firebase vào hệ thống. Đúng quả thật dùng Firebase xong thấy yêu nó hẳn. Nó quả thực rất mạnh và cũng khá rẻ. Nên thời gian tới mình sẽ tập trung viết nhiều bài hơn nữa về Firebase để mọi người có cái nhìn tổng quan hơn về nó.

Bây giờ chúng ta cùng nhau tìm hiểu xem Ginco đã sử dụng Firebase để xử lí các bài toán liên quan đến giao dịch Blockchain như thế nào.

  Tối ưu việc load ảnh với RxJava

Mục tiêu bài viết:
・Hiểu được cách dùng Cloud Functions trong hệ thống
・Biết cách tối ưu Cloud Functions để đạt hiệu năng tốt nhất

Đối tượng hướng đến:
・Người có chút hiểu biết về Cloud Functions
・Người đã từng làm việc với Firebase

Ginco là công ty như thế nào?

Ginco là công ty Nhật Bản chuyên cung cấp hệ thống quản lí wallet tiền ảo 1 cách an toàn và bảo mật. Nó có thể gửi, nhận tiền ảo 1 cách đơn giản thông qua hệ thống Blockchain.

Ginco đã sử dụng và tối ưu Cloud Functions như thế nào

Cloud Functions là gì?

Cloud Functions là 1 sản phẩm của Google.

Cloud Functions cho phép bạn chạy code backend tự động trigger các event được kích hoạt bởi tính năng của Firebase (Google).

Ví dụ như khi chúng ta upload 1 ảnh lên Google Storage thì Cloud Functions sẽ tự động trigger sự kiện đó để xử lí 1 tác vụ nào đó. Ví dụ như resize ảnh chẳng hạn …

Các lợi ích khi sử dụng Cloud Functions:

  • Tạo API 1 cách đơn giản. (Xem thêm API là gì)
  • Mỗi 1 hàm được deploy đều được chạy trong 1 môi trường hoàn toàn khác nhau. Do đó chức năng của hàm này sẽ không ảnh hưởng đến hàm khác. Và việc thêm sửa xoá chức năng được thực hiện 1 cách khá đơn giản.
  • Dựa vào số lượng request mà hệ thống sẽ tự động được scale.

Ứng dụng Cloud Functions trong Ginco

Ở Ginco thì Cloud Functions đảm nhiệm 4 chức năng chính:

  • Cung cấp API gọi giao thức RPC của Blockchain.
  • Cung cấp API thu thập thông tin về market (giá cả thị trường, volume …).
  • Push Notification.
  • Thực hiện backup Firestore định kì.

Dưới đây là kiến trúc hệ thống xung quanh Cloud Functions trong Ginco:

Ginco đã sử dụng và tối ưu Cloud Functions như thế nào

Cung cấp API gọi giao thức RPC của Blockchain

Toàn bộ các node blockchain được chạy trên GKE.

Bởi vì các API trong các node blockchain (ví dụ như bitcoin, ethereum…) này hoàn toàn khác nhau. Nên họ đã cung cấp 1 API đã wrapper lại tất cả các API đó thành chung 1 interface để dễ dàng sử dụng.

Giai đoạn đầu thì họ đã dùng HTTP trigger, nhưng cái này có 1 nhược điểm là khi gọi API thì nó không tự động gửi access token của người dùng lên. Nên thành ra mỗi lần gọi API phải tự mình đính kèm access token vào header của request.

Họ đã dùng onCall trigger. Cái này thì nó tự động đính kèm access token của người dùng vào header. Nên khá dễ dàng để chứng thực người dùng.

Cung cấp API thu thập thông tin về market (giá cả thị trường, volume…)

Ginco sử dụng Firestore là cơ sở dữ liệu chính để lưu trữ thông tin về market (giá cả thị trường, volume …)

Các thao tác CRUD liên quan đến dữ liệu sẽ được thực hiện trực tiếp từ phía Client (sử dụng Firebase SDK)

Còn 1 số dữ liệu quan trọng cần tính bảo mật cao hơn thì sẽ không gọi trực tiếp từ SDK Firebase phía Client mà sẽ thông qua Cloud Functions.

Push Notification

1 số event liên quan đến lịch sử gửi nhận coin sẽ thực hiện việc gửi thông báo (push notification) đến người dùng.

Vì Cloud Functions có thể trigger được các sự kiện liên quan đến Firestore nên khi dữ liệu trong Firestore mà bị thay đổi nó sẽ detect được và tiến hành gửi thông báo đến người dùng.

Thực hiện backup Firestore định kì

Việc backup Firestore sẽ được thực hiện thông qua Cloud Functions.

Bằng việc trigger Cloud Pub/Sub, Cloud functions sẽ dễ dàng backup được dữ liệu của Firestore thông qua Firestore command line.

Chúng ta chỉ cần sử dụng cronjob trong App Engine để gửi message đến Pub/Sub. Khi đó Cloud Functions sẽ trigger được event đó và thực hiện backup.

Tối ưu Cloud Functions

Mặc dù Cloud Functions khá là tiện nhưng khi số lượng function tăng lên thì tốc độ response của nó cũng giảm xuống đáng kể (đôi khi mất 13s cho 1 request).

Ở đây mình sẽ nói qua 1 số vấn đề gặp phải và cách khắc phục nó.

Kiến trúc Cloud Functions

Cloud Functions được thực hiện như sau:

  • 1 request sẽ được xử lí bằng 1 instance.
  • Trong trường hợp nhận được request mới:
    • Nếu có instance còn trống thì sẽ gửi request đó đến instance trống đó
    • Nếu không có instance trống thì sẽ tạo instance mới, và gửi request đến instance đó
  • Nếu trong 1 khoảng thời gian nào đó mà instance không xử lí request thì instance đó sẽ bị xoá đi.

Và trường hợp tạo instance mới và xử lí request là tốn thời gian nhất. Trường hợp này người ta gọi là Cold Start. (Mặc dù bản thân việc tạo 1 instance mới chỉ mất tầm mấy trăm ms thôi)

Dưới đây là hình ảnh về hiện tượng Cold Start. Nếu không có instance nào trống thì sẽ tạo ra instance mới để xử lí request.

Ginco đã sử dụng và tối ưu Cloud Functions như thế nào

Cải thiện Cold Start

Cải thiện Cold Start của Cloud Functions

Sau khi tìm hiểu thì họ thấy được, bản thân của việc tạo 1 instance mới hoàn toàn không tốn quá nhiều thời gian (chỉ mất mấy trăm ms). Mà việc tốn nhiều thời gian nhất ở đây là việc load library.

Giả sử như file index.js của chúng ta có nội dung như sau:

 
# index.js
 
exports.Func1 = require('./funcs/func1');
exports.Func2 = require('./funcs/func2');

Nội dung của funcs/func1.js:

 
# funcs/func1.js
 
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
module.exports = functions.https.onRequest((req, res)=>{
    // ......
});

Nội dung của funcs/func2.js:

 
# funcs/func2.js
 
const functions = require('firebase-functions')
const google = require('googleapis');
const rp = require('request-promise');
const projectId = process.env.GCLOUD_PROJECT;
module.exports = functions.storage.bucket(`${projectId}-bucket`)
                     .object()
                     .onFinalize((obj)=>{
    // ......
});

Như ví dụ trên ta có thể thấy được, khi index.js được gọi thì func1, func2 cũng được gọi theo. Khi đó chúng ta sẽ mất thêm thời gian để load các thư viện trong func1, func2.

Và điều này sẽ làm cho thời gian response của chúng ta giảm xuống. Để giải quyết bài toán này thì rất đơn giản. Chỉ cho load những thư viện cần thiết thôi.

 
# index.js
 
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === 'Func1') {
    exports.Func1 = require('./funcs/func1');
}
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === 'Func2') {
    exports.Func2 = require('./funcs/func2');
}

Khi Cloud Functions được gọi thì khi đó biến môi trường FUNCTION_NAME sẽ được gán tên của hàm được gọi. Ví dụ như chúng ta muốn gọi func1 thì khi đó giá trị trong FUNCTION_NAME sẽ là func1.

Up version của module thành mới nhất

Cloud Functions sẽ luôn luôn cache module Nodejs lại và chia sẻ đến mọi function trên toàn thế giới. Vì vậy nếu module bạn đang sử dụng có trong cache của Google Cloud Functions thì khi đó sẽ được dùng luôn và không phải mất thời gian load nữa.

Vì vậy để có thể dùng được cache trong Cloud Functions thì chúng ta cố gắng update mọi module đến phiên bản mới nhất.

Thay đổi region trong Cloud Functions

Trước kia thì Cloud Functions chỉ support mỗi region ở Mỹ. Nhưng từ tháng 6 năm ngoái nó support thêm 1 số region khác nữa. Nên các bạn cố gắng chọn region nào gần với hệ thống của các bạn nhất.

Để setting region cho function thì chúng ta làm như sau:

 
const functions = require('firebase-functions');
module.exports = functions.region('asia-northeast1')
 .https
 .onRequest((req, res) => {
    // ……
});

Về danh sách region mà Cloud Functions đang support thì các bạn có thể xem tại đây.

Kết luận

Qua bài này mình đã giới thiệu cho các bạn về 1 case study mà Ginco đã sử dụng và tối ưu Cloud Functions trong hệ thống của họ như thế nào.

Hi vọng nó sẽ giúp ích cho các bạn 1 phần nào đó trong việc cải thiện hiệu năng.

Cảm ơn bạn đã theo dõi bài viết!

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

Xem thêm việc làm Software Developers trên TopDev

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

  Optimizing Laravel - Tối ưu hoá Laravel

Bài viết này giúp bạn hoàn thành mọi mục tiêu đề ra

Bài viết hôm nay mình muốn chia sẻ đến với các bạn một lý thuyết về đặt mục tiêu – nếu các bạn nắm vững lý thuyết này, các bạn sẽ có một năm rất tuỵệt vời. Bạn sẽ hoàn thành được mọi mục tiêu đặt ra trong năm và không bị trì hoãn như nhiều năm vừa qua nữa.

Một ngày chúng ta có 24 giờ đúng không nào? Thông thường chúng ta sẽ phân chia đơn giản như thế này:

  1. Ngủ: 8 tiếng (có bạn ngủ ít hơn, có bạn ngủ nhiều hơn chút)
  2. Làm: 8 tiếng (nếu chưa đi làm thì ta tính luôn việc học ở trường)
  3. Rảnh: 8 tiếng

Screen Shot 2018-01-16 at 5.40.32 pm.png

Vậy trong 8 TIẾNG RẢNH thì chúng ta thường làm những thứ gì:

  1. Chúng ta GIẢI TRÍ: bằng việc xem phim trên Pub, xem video trên YouTube, lướt Facebook, lướt Zalo, lướt Instagram.
  2. Chúng ta GẶP GỠ: với các hoạt động như đi xem phim với bạn bè, đi trà đá, đi trà sữa, đi cafe, nói chung là nói chuyện.
  3. Chúng ta làm VIỆC VẶT: ví dụ như là di chuyển từ chỗ này đến chỗ kia, nấu ăn giặt giũ tắm rửa các kiểu.

Screen Shot 2018-01-16 at 5.43.58 pm.png

Tiếp Xúc Nhiều Cái Gì, Chúng Ta Giỏi Cái Đó

Trong tâm lý học có một khái niệm tên là Cognitive Dissonance (Bất hòa nhận thức) có nghĩa là cảm giác không thoải mái của mỗi người chúng ta khi trong đầu có hai luồng tư tưởng khác nhau.

Ví dụ: Nhờ báo chí nói nhiều về thực phẩm bẩn, dầu ăn bẩn, tác hại có dầu ăn đến việc béo phí, dần dần chúng ta sẽ nhận thức được và cảm thấy không thoải mái khi ăn đồ ăn có nhiều dầu hay ăn đồ chiên bên ngoài đường. Từ đó ta thay đổi thói quen ăn uống một chút, hạn chế ăn bẩn lại.

Có thể hiểu đơn giản là, cho dù chúng ta không có ý định tìm hiểu về thực phẩm bẩn, nhưng việc vô tình thấy các bài báo hằng ngày, thấy mọi người nói chuyện, nghe ti vi đưa tin làm cho ta hiểu được cơ bản những thực phẩm như thế nào là bẩn.

Chốt lại, nếu ta tiếp xúc nhiều với thông tin gì đó một cách vô tình trong một thời gian dài, ta sẽ dần dần biết nhiều hơn về cái đó.

Quay lại với chuyện quản lý thời gian và đặt mục tiêu. Vấn đề của chúng ta ở đây là chúng ta không dành thời gian để tiếp xúc với những thứ giúp cải thiện cuộc sống của mình.

Xem TV, YouTube hay đi bar với bạn bè thì rất là vui, nhưng nó không giúp cho bản thân chúng ta tốt lên mỗi ngày được.

Khi không có sự tiếp xúc, ta sẽ không trải qua cảm giác không thoải máitừ đó rất khó để bản thân thay đổi thói quen.

Vậy chốt lại ở đây là: Hãy bớt một chút thời gian rảnh (không cần nhiều) để tiếp xúc với những thông tin có ích và liên quan đến mục tiêu và ta đang đề ra.

Chúng ta thường không hoàn thành được mục tiêu mà bản thân đề ra vì chúng ta đặt mục tiêu to lớn quá. Chúng ta thường tự hứa rằng mình sẽ bớt thời gian Facebook để đọc sáchhay bớt thời gian đi chơi với bạn bè để học tiếng Anh – được mấy ngày đầu thì hào hứng lắm, sau đó thì bỏ cuộc. Đơn giản vì nhu cầu con người, lúc nào cũng cần giải trí.

Screen Shot 2018-01-16 at 6.00.12 pm

Vậy lần tới khi quản lý thời gian, hãy giữ nguyên thời gian lướt Facebook hay hẹn hò lại, không phải cắt giảm làm gì.

Việc ta cần làm là thêm vào thời gian làm việc vặt những thông tin tự động và có liên quan đến mục tiêu. 

Ví dụ khi bạn đang Nấu ăn hay khi bạn đang ngồi xe bus hay khi bạn đang đi tắm, hãy mở podcast và NGHE những kênh YouTube liên quan đến việc giảm cân. Dần dần ngày qua ngày, đầu óc bạn sẽ được tiếp xúc nhiều với các thông tin giảm cân đó.

Và vì tâm lý Cognitive Dissonance, dần dần đầu óc bạn sẽ thấy không thoải mái nếu mình làm những thứ ngược với những gì mình được nghe như ăn nhiều đường, ăn nhiều dầu ăn, lười tập thể dục chẳng hạn.

Cứ như vậy, dần dần bạn sẽ có thêm nhiều kiến thức hơn nữa và hoàn thành được mục tiêu giảm cân của bản thân.

Nếu bạn muốn giảm cân, hãy nghe nhiều về Health, Nutrition và Fitness.

Nếu bạn muốn tiết kiệm, hãy thử tìm trang Financial Diet và nghe mỗi ngày.

Nếu bạn muốn nói chuyện tốt hơn, lên YouTube gõ từ khóa Public Speaking và nghe thật nhiều.

Nếu bạn muốn hạnh phúc và bình an, hãy nghe về Mediation và Mindfulness.

Sắp tới bạn sẽ nghe gì?

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

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

Nguồn: OneCV

  Quy tắc 24x3 cho sáng tạo trong lập trình!
  12 nguyên tắc làm lập trình của Joel để tạo nên phần mềm tốt hơn

Chặng đường 4 năm 1 sứ mệnh cùng cộng đồng IT Việt Nam của TopDev

Năm 2019 đánh dấu cột mốc kỷ niệm chặng đường 04 năm của TopDev – Một cột mốc quan trọng đánh dấu bước đi phát triển của TopDev cùng cộng đồng Công nghệ Việt Nam.

  • 04 năm – Với hệ sinh thái fanpage đã phủ sóng toàn cộng đồng Lập trình viên và người làm Công nghệ khắp đất nước.
  • 04 năm – Cùng hỗ trợ và hiện thực hóa ước mơ việc làm của không ít lập trình viên all level tại Việt Nam. Khi tất cả ứng viên – cộng đồng Developer đã có thể làm chủ giấc mơ và chủ động theo đuổi các mục tiêu thì TopDev mới hoàn thành sứ mệnh của mình.
  • 04 năm – Không chỉ mang cơ hội việc làm cho cộng đồng IT Talent Việt Nam, TopDev không ngừng tổ chức các sự kiện công nghệ và việc làm lớn với gần 25,000 lượt tham dự mỗi năm.

Nhân kỷ niệm 04 năm khởi động mạng lưới TopDev, trên Fanpage TopDev đang có chương trình Mini-Giveaway Mừng TopDev 4 Tuổi với 04 hạng mục giải thưởng, như một lời cảm ơn đến các bạn đã đồng hành cùng TopDev trong suốt thời gian vừa qua:

🔥Bàn phím rời đa năng của Logitech
🔥Balo đa năng kèm Ví + Cáp Sạc USB + Tai Nghe + Khóa Số Chống Trộm bản giới hạn
🔥Ly nước Avengers cực ngầu
🔥Lót chuột có đệm tay cho anh em nhà Developer OT không mỏi tay

Thể lệ tham gia Birthday Minigame Giveaway chỉ 04 bước “trong 01 búng tay”:
👉B1: Like fanpage TopDev
👉B2: Thêm khung ảnh/ frame “I’m A Developer” trên avatar cá nhân
👉B3: Comment 4 số bất kì để bốc thăm trúng thưởng
👉B4: Share lại bài post “Sinh nhật TopDev” để chế độ Public

HẠN CHÓT chốt comment: thứ Tư – ngày 14.08.2019

TopDev sẽ công bố danh sách trúng mỗi giải thưởng vào ngày thứ Năm 15/08. Đừng quên theo dõi và rủ thêm anh em hội tham gia nhé!

Cảm ơn và Chúc các bạn may mắn!

Thông tin chi tiết Giveaway Birthday: https://www.facebook.com/topdevvietnam/posts/2276564385726012

  Báo cáo toàn cảnh thị trường IT Việt Nam 2019 - Các công ty công nghệ tại Việt Nam đang làm gì?
  Tập trung vào kết quả cần đạt, chứ đừng chú trọng vào giờ giấc!

Growth Hacking dành cho Developer

TL;DR: Nếu bạn nghĩ rằng một developer thì không cần phải biết về Growth Hacking, thì bạn nên đọc bài viết này.

Đã bao giờ bạn nghe tới khái niệm “Growth Hacking” chưa?

Đã bao giờ bạn nghe tới khái niệm “Growth Hacking” và tự nhủ rằng “Đó là công việc của bọn làm marketing/SEO các kiểu, mình không cần phải quan tâm” chưa?

Đã bao giờ bạn tự hỏi “bản chất của một Growth Hacker, anh ấy là ai” chưa?

Đã bao giờ bạn tự hỏi “tại sao project của mình trên GitHub lại ít ‘sao’ đến thế?”, “tại sao bài blog mình viết ra không ai thèm đọc?”, “làm sao để quảng cáo cái side-project của mình ra cho mọi người vào sử dụng?” chưa?

Mà khoan đã, Developer thì cần gì biết mấy cái này?

Khái niệm “Growth Hacking” chắc là bắt đầu được nhắc tới nhiều trong khoảng 1, 2 năm trở về trước và đến bây giờ thì cũng không còn nóng lắm. Bản thân mình cũng rất ghét và tìm cách tránh đọc các bài liên quan tới “Growth Hacking” khi nó còn hot.

Cho tới cách đây 2 tháng, mình bị a @kiennt@huydx ở Kipalog dụ dỗ đọc cuốn Growth Hacker Marketing: A Primer on the Future of PR, Marketing, and Advertising, thì mình mới nhận ra một điều rất quan trọng là Growth Hacking là một kĩ năng thực sự cần thiết cho một developer chứ không đơn thuần là một nghề cho một nhóm người non-tech nào cả.

Growth Hacker, anh ấy là ai?

Nói sơ về cuốn sách trên một tí, tác giả của nó là một marketer kì cựu, và anh ấy nóng mặt khi thấy báo chí bắt đầu tung hô Growth Hacking như là một nghề sắp soán ngôi của marketing truyền thống, nên bắt đầu tìm hiểu xem nghề này thực sự nó là cái gì, và anh ấy viết sách để giải thích nó dưới góc nhìn của một marketer, cách mà các công ty công nghệ lớn như Dropbox, Google, Facebook, Uber kiếm được những khách hàng đầu tiên của mình mà không cần phải tốn đồng nào cho việc quảng cáo truyền thống.

“Not a blowout grand opening, but a strategic opening or a stunt that catches the attention of our core audience”

Và cuốn sách đưa ra một nhận định: Những người đầu tiên làm nên định nghĩa của một Growth Hacker không phải là những marketer truyền thống, mà chính là các Engineer.

Tại sao Growth Hacker lại là các Developer/Engineer?

Để trả lời cho câu hỏi trên, cuốn sách đưa ra vài quan điểm về công việc Growth Hacking:

  • Mục đích của Growth Hacking là: Kiếm được user cho sản phẩm của mình, và làm sao để từ một user sẽ kiếm thêm được 2 hay 100, 1000 users (growth)
  • Yêu cầu của Growth Hacking là: Làm cho nhiều người biết đến sản phẩm của mình mà không phải tốn một đồng nào cho việc quảng cáo (hack).
  • Cách để Growth Hacking là: Không có một công thức cụ thể nào cả, phương pháp thay đổi liên tục từng ngày theo sự biến động của công nghệ, nhưng có một điểm không thay đổi đó là Growth Hacking sử dụng công nghệ, và những người sử dụng được công nghệ (hacker), và không ai khác, đó chính là các engineers.

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

  Liệu bạn có đang mắc phải các sai lầm sau trong sự nghiệp lập trình?
  Tại sao nhiều lập trình viên giỏi không đưa ra lời khuyên để người khác có thể được như họ?

Người ta growth hacking như thế nào?

“Do it in a cheap, effective, and usually unique and new way”

Cuốn sách cũng có đề cập tới cách mà các công ty công nghệ đã ứng dụng growth hacking để tìm được user cho sản phẩm của mình, không cách nào giống cách nào, nhưng có một điểm chung đó là không ai phải bỏ ra 1 đồng nào cho những cách đó cả:

    • Hotmail khi mới ra mắt đã chèn vào phần cuối của mỗi email do user gửi đi một lời mời sử dụng dịch vụ thư điện tử của mình. Từ đó dùng chính user làm công cụ phát tán =)). Sau này thì Apple cũng bắt chước bằng cái chữ kí “Sent from my iPhone” thần thánh.
    • Google thì launch Gmail dưới hình thức invite-only, mỗi user sẽ được cấp cho 5 đến 10 invite và dùng nó để mời bạn bè mình tham gia vào dịch vụ, tạo ra tâm lý tò mò. Cái này chính bản thân mình cũng từng chạy đi hỏi khắp nơi xin cho bằng được cái invite Gmail hồi năm 2004.
    • Dropbox thì tự làm một video demo sản phẩm, với giọng điệu hài hước và post lên các diễn đàn mà dân xài công nghệ hay lui tới như là Digg, Slashdot, Reddit,… vài năm sau đó họ cũng lanch sản phẩm Mailbox bằng chính phương pháp tương tự và đã có 1 triệu users đăng kí trong vòng 6 tuần đầu tiên.

Growth hacking không phải là thứ chỉ dành cho các sản phẩm vừa mới launch, mà còn là chiến lước giúp lôi kéo, tìm thêm khách hàng cho những dịch vụ đã và đang hoạt động.

“This is not just about finding your first customers. Established brands and companies can use the same techniques to pull in more customers. Growth is growth.”

Ví dụ như eBay vào năm 2012 đã hợp tác với Gogo, một công ty cung cấp dịch vụ wifi trên máy bay để cung cấp chức năng truy cập vào eBay.com miễn phí cho các hành khách khi đang bay (nếu bay đường dài thì các bạn sẽ biết là Wifi trên máy bay thì ko có miễn phí), eBay nhắm tới hàng trăm ngàn hành khách phải ngồi bó gối trên máy bay suốt mười mấy tiếng (rất chán, không có việc gì làm ngoài nằm ngủ, xem phim) thông qua dịch vụ của người khác (đó, hack đó).

Hay Airbnb, viết tool để cho user có thể đăng thông tin cho thuê ở Airbnb của mình lên Craigslist, một dịch vụ rao vặt khá là nổi tiếng ở Mỹ (vâng, rất là thủ đoạn =))))

Hay như mình mỗi khi viết xong bài nào, dù là về JavaScript hay Rust thì cũng chạy vào room thảo luận Ruby của cộng đồng Ruby Việt Nam để quảng cáo, đơn giản vì trong này có gần 1k3 người, hoặc dùng luôn fan page JavaScript Việt nam để quảng cáo, nên khả năng ai đó rãnh rỗi vào đọc bài của mình cũng vì thế mà cao hơn rất nhiều :)))

Và còn rất nhiều những ví dụ khác nữa.

Tóm lại thì growth hack là phải làm đủ mọi thủ đoạn, mọi cách để giành giật từng user một. Ở đây là nói đến user – những người thực sự sẽ sử dụng sản phẩm của bạn, chứ không phải là bỏ ra 1 đống tiền chạy quảng cáo trên truyền hình để được nhiều người biết tới nhưng không ai dùng (ví dụ Google chẳng bao giờ đi quảng cáo Gmail trên tivi trước giờ chiếu phim Cô dâu 8 tuổi hết :)))

It doesn’t matter how many people know about you or how they find out about you. It matter how many sign up. If handing out flyers on the street corner accomplisheds that, then consider it growth hacking.

Thế thì chúng ta growth hacking như thế nào?

Vậy đám developer chúng ta cần áp dụng growth hacking để làm gì?

Câu trả lời hết sức đơn giản, để quảng cáo sản phẩm của mình!

Xem nào, một developer thì có thể đẻ ra những sản phẩm gì ta? Một cái blog về kĩ thuật, hoặc một project trên Github.

Tìm đúng nơi, share đúng người

Nếu bạn vừa làm xong một gem hay ho để cho các Ruby on Rails developer sử dụng, bạn sẽ làm gì?

  • Share vào các group lập trình Game mobile? -> Sai lầm hoàn toàn
  • Đem về khoe với người yêu? -> Cũng được, nếu người yêu bạn cũng là 1 Rails developer
  • Khoe với bạn gái của người yêu? -> Chà, những hành vi này thường mang lại những tai nạn không đáng có
  • Share vào các group lập trình Ruby? -> Chính xác!

Một sản phẩm làm ra (một project, hoặc một bài blog), luôn luôn nhắm đến một nhóm đối tượng nào đó rất cụ thể, như ví dụ ở trên thì chúng ta làm ra một sản phẩm cho các Rails developers, thì khi muốn quảng bá sản phẩm, chúng ta phải tìm tới những nơi mà các Rails developer hay lui tới, ví dụ:

  • HackerNews
  • Subreddit Ruby hoặc Rails ở Reddit
  • Các diễn đàn nhiều Rails developer lui tới
  • Các group lập trình web trên Facebook
  • Cộng đồng Ruby Việt Nam trên Slack

Nếu đọc đến đây, mà bạn nói: Mình không biết các Rails developer thường lui tới ở những đâu cả. Thế thì bạn chưa thực sự hiểu được nhóm đối tượng người dùng mà mình muốn nhắm đến, lời khuyên cho bạn lúc này là đừng làm nữa, bạn không thể làm một gem cho các Rails developer sử dụng nếu bạn không hiểu các Rails developer muốn cái gì và muốn dùng như thế nào.

Chú trọng vào chi tiết

Bạn chia sẽ đúng chỗ, nhưng chưa chắc người ta đã hưởng ứng sản phẩm của bạn.

Nếu bạn làm một project trên Github mà file README.md chỉ vỏn vẹn có 3 dòng chữ, không thèm mô tả xem project đó làm gì, bạn nắm chắc tấm vé rớt. Hãy bỏ chút thời gian viết hướng dẫn thật kĩ và thật chi tiết, nếu project của bạn hay và có hướng dẫn cực kì chi tiết thì không ai ngại gì mà không đi share với mọi người về sản phẩm của bạn cả.

Cách đây không lâu mình có viết 1 project nhỏ clone lại trò chơi Agar.io, và dành ra 2 ngày để viết một tài liệu hướng dẫn cực kì chi tiết để giúp cho người mới vào tìm hiểu về project dễ dàng hơn.

Hiệu quả của việc này là rất nhiều người đã đi share lại tài liệu này trong các cuộc thảo luận về làm game online, project của mình cũng vì thế mà được quảng bá miễn phí.

Hoặc như bác @quocnguyen trong một vài bài viết gần đây, nhờ vào cách viết dí dỏm thân thiện và hình minh họa home-made độc đáo đã thu hút được rất nhiều người tự nguyện share lại khắp nơi.

Hoặc bác @HuyHoangPham Tôi Đi Code Dạo làm ra ứng dụng nhận diện khuông mặt các diễn viên phim người lớn để giới thiệu loạt bài viết về xử lý ảnh/nhận diện của mình =)))

Còn gì nữa không?

Còn, rất nhiều, kể không hết được. Để lôi kéo được user cho sản phẩm của mình thì có rất nhiều cách, dễ có, rất khó cũng có. Và bản thân bài viết này cũng chưa nói hết toàn bộ các yếu tố cần thiết về Growth Hacking.

Cá nhân mình không phải lúc nào cũng thành công với những project trên Github hay các bài viết, có những lúc đơn giản chỉ là làm ra mà share không đúng thời điểm (đang có một bài top của người khác vừa ra lò, share vào cuối tuần không ai online,…) hoặc nội dung không được nhiều người quan tâm, không hiểu user mà mình nhắm tới, viết bài quá nhiều chữ khiến người xem đọc mệt =)))

Tóm lại, growth hacking là cả một quá trình, nó không phải là chuyện dành cho các marketer hay những người làm SEO chuyên nghiệp, mà đó là một kĩ năng cực kì cần thiết của một developer. Bạn nên tìm hiểu nó nếu muốn tạo ra các sản phẩm tốt và được nhiều người đón nhận.

TopDev via huyblog

  Cách chọn “GROWTH HACKING” channel phù hợp dựa trên Data
  Growth hacking một loại hình nghệ thuật mới dành cho lập trình viên

Thuật toán CNN là gì? Cấu trúc mạng Convolutional Neural Network

thuat-toan-cnn-convolutional-neural-network

CNN (Convolutional Neural Network) là gì?

CNN là gì? Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một trong những mô hình Deep Learning tiên tiến. Nó giúp cho chúng ta xây dựng được những hệ thống thông minh với độ chính xác cao như hiện nay.

Như hệ thống xử lý ảnh lớn như Facebook, Google hay Amazon đã đưa vào sản phẩm của mình những chức năng thông minh như nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái hay drone giao hàng tự động.

CNN được sử dụng nhiều trong các bài toán nhận dạng các object trong ảnh. Để tìm hiểu tại sao thuật toán này được sử dụng rộng rãi cho việc nhận dạng (detection), chúng ta hãy cùng tìm hiểu về thuật toán này.

Tìm hiểu Convolutional là gì?

Là một cửa sổ trượt (Sliding Windows) trên một ma trận như mô tả hình dưới:

Tìm hiểu Convolutional là gì?

 

Các convolutional layer có các parameter(kernel) đã được học để tự điều chỉnh lấy ra những thông tin chính xác nhất mà không cần chọn các feature.

Trong hình ảnh ví dụ trên, ma trận bên trái là một hình ảnh trắng đen được số hóa. Ma trận có kích thước 5×5 và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm của dòng và cột.

Convolution hay tích chập là nhân từng phần tử trong ma trận 3. Sliding Window hay còn gọi là kernel, filter hoặc feature detect là một ma trận có kích thước nhỏ như trong ví dụ trên là 3×3.

Convolution hay tích chập là nhân từng phần tử bên trong ma trận 3×3 với ma trận bên trái. Kết quả được một ma trận gọi là Convoled feature được sinh ra từ việc nhận ma trận Filter với ma trận ảnh 5×5 bên trái.

Tìm hiểu Convolutional là gì? Tìm hiểu Convolutional là gì?

Cấu trúc mạng CNN

Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong các node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo.

Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Trong mô hình mạng truyền ngược (feedforward neural network) thì mỗi neural đầu vào (input node) cho mỗi neural đầu ra trong các lớp tiếp theo.

Mô hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng toàn vẹn (affine layer). Còn trong mô hình CNNs thì ngược lại. Các layer liên kết được với nhau thông qua cơ chế convolution.

Layer tiếp theo là kết quả convolution từ layer trước đó, nhờ vậy mà ta có được các kết nối cục bộ. Như vậy mỗi neuron ở lớp kế tiếp sinh ra từ kết quả của filter áp đặt lên một vùng ảnh cục bộ của neuron trước đó.

Mỗi một lớp được sử dụng các filter khác nhau thông thường có hàng trăm hàng nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngoài ra có một số layer khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu ích hơn (loại bỏ các thông tin nhiễu).

Trong quá trình huấn luyện mạng (traning) CNN tự động học các giá trị qua các lớp filter dựa vào cách thức mà bạn thực hiện. Ví dụ trong tác vụ phân lớp ảnh, CNNs sẽ cố gắng tìm ra thông số tối ưu cho các filter tương ứng theo thứ tự raw pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để phân lớp ảnh.

Cấu trúc của mạng CNN

Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bất biến (Location Invariance) và tính kết hợp (Compositionality). Với cùng một đối tượng, nếu đối tượng này được chiếu theo các gốc độ khác nhau (translation, rotation, scaling) thì độ chính xác của thuật toán sẽ bị ảnh hưởng đáng kể.

Pooling layer sẽ cho bạn tính bất biến đối với phép dịch chuyển (translation), phép quay (rotation) và phép co giãn (scaling). Tính kết hợp cục bộ cho ta các cấp độ biểu diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng hơn thông qua convolution từ các filter.

Đó là lý do tại sao CNNs cho ra mô hình với độ chính xác rất cao. Cũng giống như cách con người nhận biết các vật thể trong tự nhiên.

Mạng CNN sử dụng 3 ý tưởng cơ bản:

  • các trường tiếp nhận cục bộ (local receptive field)
  • trọng số chia sẻ (shared weights)
  • tổng hợp (pooling).

Xem thêm: Tuyển dụng lập trình Network lương cao lên đến 3000 USD

Trường tiếp nhận cục bộ (local receptive field)

Đầu vào của mạng CNN là một ảnh. Ví dụ như ảnh có kích thước 28×28 thì tương ứng đầu vào là một ma trận có 28×28 và giá trị mỗi điểm ảnh là một ô trong ma trận. Trong mô hình mạng ANN truyền thống thì chúng ta sẽ kết nối các neuron đầu vào vào tầng ảnh.

Tuy nhiên trong CNN chúng ta không làm như vậy mà chúng ta chỉ kết nối trong một vùng nhỏ của các neuron đầu vào như một filter có kích thước 5×5 tương ứng (28- 5 + 1) 24 điểm ảnh đầu vào. Mỗi một kết nối sẽ học một trọng số và mỗi neuron ẩn sẽ học một bias. Mỗi một vùng 5×5 đấy gọi là một trường tiếp nhận cục bộ.

Một cách tổng quan, ta có thể tóm tắt các bước tạo ra 1 hidden layer bằng các cách sau:

  1. Tạo ra neuron ẩn đầu tiên trong lớp ẩn 1

  2. Dịch filter qua bên phải một cột sẽ tạo được neuron ẩn thứ 2.

    với bài toán nhận dạng ảnh người ta thường gọi ma trận lớp đầu vào là feature map, trọng số xác định các đặc trương là shared weight và độ lệch xác định một feature map là shared bias. Như vậy đơn giản nhất là qua các bước trên chúng ta chỉ có 1 feature map. Tuy nhiên trong nhận dạng ảnh chúng ta cần nhiều hơn một feature map.

Như vậy, local receptive field thích hợp cho việc phân tách dữ liệu ảnh, giúp chọn ra những vùng ảnh có giá trị nhất cho việc đánh giá phân lớp.

Trọng số chia sẻ (shared weight and bias)

Đầu tiên, các trọng số cho mỗi filter (kernel) phải giống nhau. Tất cả các nơ-ron trong lớp ẩn đầu sẽ phát hiện chính xác feature tương tự chỉ ở các vị trí khác nhau trong hình ảnh đầu vào. Chúng ta gọi việc map từ input layer sang hidden layer là một feature map. Vậy mối quan hệ giữa số lượng Feature map với số lượng tham số là gì?

Chúng ta thấy mỗi fearture map cần 25 = 5×5 shared weight và 1 shared bias. Như vậy mỗi feature map cần 5×5+1 = 26 tham số. Như vậy nếu có 10 feature map thì có 10×26 = 260 tham số. Chúng ta xét lại nếu layer đầu tiên có kết nối đầy đủ nghĩa là chúng ta có 28×28=784 neuron đầu vào như vậy ta chỉ có 30 neuron ẩn. Như vậy ta cần 28x28x30 shared weight và 30 shared bias. Tổng số tham số là 28x28x30+30 tham số lớn hơn nhiều so với CNN. Ví dụ vừa rồi chỉ mô tả để thấy được sự ước lượng số lượng tham số chứ chúng ta không so sánh được trực tiếp vì 2 mô hình khác nhau. Nhưng điều chắc chắn là nếu mô hình có số lượng tham số ít hơn thì nó sẽ chạy nhanh hơn.

Tóm lại, một convolutional layer bao gồm các feature map khác nhau. Mỗi một feature map giúp detect một vài feature trong bức ảnh. Lợi ích lớn nhất của trọng số chia sẻ là giảm tối đa số lượng tham số trong mạng CNN.

Lớp tổng hợp (pooling layer)

Lớp pooling thường được sử dụng ngay sau lớp convulational để đơn giản hóa thông tin đầu ra để giảm bớt số lượng neuron.

Thủ tục pooling phổ biến là max-pooling, thủ tục này chọn giá trị lớn nhất trong vùng đầu vào 2×2.

Như vậy qua lớp Max Pooling thì số lượng neuron giảm đi phân nửa. Trong một mạng CNN có nhiều Feature Map nên mỗi Feature Map chúng ta sẽ cho mỗi Max Pooling khác nhau. Chúng ta có thể thấy rằng Max Pooling là cách hỏi xem trong các đặc trưng này thì đặc trưng nào là đặc trưng nhất. Ngoài Max Pooling còn có L2 Pooling.

Cuối cùng ta đặt tất cả các lớp lại với nhau thành một CNN với đầu ra gồm các neuron với số lượng tùy bài toán.

 

2 lớp cuối cùng của các kết nối trong mạng là một lớp đầy đủ kết nối (fully connected layer) . Lớp này nối mọi nơron từ lớp max pooled tới mọi nơron của tầng ra.

Cách chọn tham số cho CNN

  1. Số các convolution layer: càng nhiều các convolution layer thì performance càng được cải thiện. Sau khoảng 3 hoặc 4 layer, các tác động được giảm một cách đáng kể
  2. Filter size: thường filter theo size 5×5 hoặc 3×3
  3. Pooling size: thường là 2×2 hoặc 4×4 cho ảnh đầu vào lớn
  4. Cách cuối cùng là thực hiện nhiều lần việc train test để chọn ra được param tốt nhất.

Hy vọng với thông tin bài viết trên sẽ tóm tắt được các kiến thức hữu ích cho bạn về CNN là gì? Cấu trúc mạng CNN và am hiểu hơn về mô hình CNN machine learning cơ bản. Chúc các bạn có những kinh nghiệm thật bổ ích cho nghề Dev của mình nhé!

Bạn có muốn tìm hiểu thêm các công việc lập trình Network có thể xem tại đây

Tham khảo thêm các việc làm lập trình lương cao tại Topdev

Tập trung vào kết quả cần đạt, chứ đừng chú trọng vào giờ giấc!

Việc làm việc từ xa có rất nhiều ưu điểm, nhưng có lẽ điểm mà tôi tâm đắc nhất đó là: bạn không cần phải thấp thỏm lo lắng xem có ai đang đứng sau lưng dòm bạn đang làm gì cả.

Hướng con người theo mục tiêu cần đạt được 

Nếu bạn cứ tập trung vào thời gian làm việc của team, thì okay, bạn sẽ đạt được 2 thứ: các thành viên đi làm đúng giờ nhất hệ, và luôn về nhà sau bạn (wow congrats… 😒). Nhưng liệu đây có phải là ưu tiên hàng đầu? Chẳng khác nào bạn đang đề cao việc đi làm đúng giờ đủ giờ hơn cả việc làm việc năng suất và có hiệu quả. Mục tiêu của việc đề ra bao nhiêu thời gian làm việc – ví dụ, từ 9h sáng đến 5h tối – là phải đi kèm với bấy nhiêu Năng suất/ Kết quả công việc mà bạn mong muốn có được.

Có một cách hay hơn để xử lý việc này. Nếu từ đầu bạn nêu rõ mục tiêu cần đạt được và một số phương tiện/ tool hỗ trợ giúp họ đạt được mục tiêu này, họ có thể sắp xếp thời gian lịch trình của mình thế nào cũng được miễn sao họ đem lại kết quả như mong muốn.

Ngoài ra sớm muộn bạn cũng sẽ trở nên ấn tượng hơn trong mắt khách hàng. Khi team được truyền tải về mục tiêu thay vì là nhiệm vụ, họ sẽ quan tâm nhiều hơn đến kết quả cần đạt được. Đôi lúc bạn – leader nhìn vào chúng và biết rằng mình có những cách khác hay hơn. Nhưng quan trọng là, bạn đang cho mọi người cơ hội để đánh liều, để mắc lỗi, để học và phát triển hơn so với “họ lúc đầu” (their old self). Vá không sớm thì muộn, bạn sẽ có được những đồng đội lành nghề nhất và nhanh chóng đạt được mục tiêu, trong khi bạn có thể lo được nhiều thứ khác nữa.

Kết quả có tệ cũng là một thành tựu 

Một mặt tối của việc tập trung vào kết quả, đó là các nỗ lực được bỏ ra sẽ không được để tâm đến (recognition). Nhưng cho dù thế, những kết quả không đạt vẫn là kết quả của một quá trình. Việc build sản phẩm bao giờ cũng là một quá trình dai dẳng lâu dài để “bớt lỗi” và đạt được cái người ta muốn.

Những dạng kết quả không đạt này vẫn nên được chấp nhận nếu như bạn học được gì đó từ nó. Bạn luôn cần phải tiến hành kiểm tra project hậu kì và tìm cho ra nguyên nhân sai sót. Có thể do concept tệ, hoặc không đủ resource, hoặc có factor bên ngoài ảnh hưởng lên timeline, hoặc là, do team làm không đủ tốt. Có cả trăm ngàn lí do tại sao nó fail, nhưng rất hiếm khi do một cá thể riêng biệt nào đấy. Nên hãy cố tìm cho ra, học về nó, sửa, và lặp lại.

Ứng dụng văn hoá làm việc từ xa, ngay cả khi đang ngồi cũng một chỗ 

Khi làm từ xa, bạn sẽ auto note lại mọi thứ đã làm, còn thiếu cái gì, chưa xong cái gì,… Quan trọng hơn là, để làm việc từ xa team phải có sự tin tưởng nhất định lẫn nhau và bỏ qua bớt các khâu giám sát nhỏ lặt vặt để build nên văn hoá team tốt hơn và để thông điệp, mục tiêu được truyền tải hiệu quả hơn.

Good luck, and happy coding!

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

Xem thêm việc làm Software Developers trên TopDev

  Dù là nhân viên hay ông chủ, bạn cũng cần phải nắm 4 nguyên tắc này để nâng cao chất lượng công việc

Mất dữ liệu qua máy fax và bình pha cà phê – Đâu mới là giới hạn của tấn công mạng?

Biên dịch: Đinh Quốc Hội

Hy vọng rằng bạn bảo vệ máy tính của bạn khỏi các cuộc tấn công trên mạng. Bạn có thể có phần mềm chống vi-rút trên điện thoại, máy tính bảng, máy tính xách tay hoặc máy tính để bàn. Bạn có thể tránh sử dụng chúng để truy cập các trang web đáng ngờ và cẩn thận bảo vệ các chi tiết đăng nhập khác nhau của bạn.

Nhưng nó không còn là những gì chúng ta thường nghĩ đến như máy tính được kết nối với internet và do đó có nguy cơ tấn công mạng. Và nếu nhiều thiết bị được kết nối với cùng một mạng trong nhà hoặc văn phòng của bạn, thì nếu một hacker xâm nhập vào một máy, họ có thể truy cập vào tất cả chúng.

Các nhà nghiên cứu bảo mật gần đây đã tuyên bố đã tấn công vào một mạng máy tính bằng cách gửi một bản fax độc hại. Và có nhiều cách khác dường như không chắc chắn mà một hacker có thể truy cập vào hệ thống của bạn. Bạn có thể có một cửa trước được bảo vệ tốt với internet, nhưng ai đó có thể vào được bằng một chiếc nắp được lắp đặt gần đây trong nhà kính?

  9 hiểu lầm "ngớ ngẩn" về machine learning

Máy in và màn hình nhỏ

Một số thiết bị mà chúng tôi nhận ra là có liên quan đến máy tính của chúng tôi, nhưng chúng tôi không nhất thiết phải nghĩ đến chúng như đang được kết nối với internet. Ngày nay, máy in thường có kết nối internet riêng của họ để cho phép họ nói chuyện với các thiết bị khác trong nhà hoặc văn phòng của bạn, thường không dây.

Kết nối này cung cấp bước đầu tiên để tin tặc truy cập từ xa mạng của bạn. Sau đó, họ chỉ cần để có được xung quanh bất kỳ điều khiển an ninh và họ có thể hack vào không chỉ máy in nhưng các thiết bị khác kết nối với nó. Lỗ hổng máy in đã được ghi nhận rõ ràng, với một hacker tuyên bố đã chia thành 150.000 máy in để nâng cao nhận thức về sự bất an của họ.

Tương tự như vậy, nhiều màn hình bé và camera an ninh hiện kết nối với internet để cho phép mọi người truy cập chúng từ bên ngoài nhà. Bộ phận người tiêu dùng của New York đã ban hành một cảnh báo công khai về an ninh theo dõi trẻ em sau một số sự cố được báo cáo rộng rãi về tiếng nói của người lạ được nghe qua chúng.

Đồ chơi và máy pha cà phê

Việc tạo ra cái gọi là Internet of Things có nghĩa là nó không chỉ là phụ kiện máy tính mà bây giờ được kết nối mà còn là thiết bị, thiết bị và đồ vật mà theo truyền thống chúng ta không thấy có liên quan gì đến loại công nghệ này. Và có vẻ như gần như ngay sau khi bất kỳ thiết bị nào được kết nối với internet, nó bị tấn công. Ví dụ gần đây bao gồm xe hơi , đồ chơi , bộ điều nhiệt , bộ cấy ghép y tế và thậm chí cả máy pha cà phê .

Một hacker thành công trong giao tiếp với một trong những thiết bị này sau đó có thể tiến hành bất kỳ số lượng các cuộc tấn công có thể. Họ có thể làm gián đoạn thông tin liên lạc, điều này sẽ gây khó chịu trong trường hợp máy pha cà phê, nhưng có khả năng đe dọa tính mạng trong trường hợp cấy ghép y tế. Họ cũng có thể truy cập dữ liệu được gửi đến thiết bị, có thể không quan tâm đến trường hợp đồ chơi, nhưng có thể là nguy cơ bảo mật nếu ai đó có thể tìm ra nơi chiếc xe của bạn có thể không được giám sát hoặc khi nhà của bạn trống (và hệ thống sưởi của bạn tắt).

Bạn có thực sự cần phải kiểm soát máy cà phê của bạn thông qua điện thoại của bạn? Shutterstock

Máy fax

Thật thú vị, ngay cả một số thiết bị không được cắm trực tiếp vào internet có thể bị tấn công. Như đã đề cập, gần đây đã báo cáo rằng các máy fax có thể bị tấn công bằng cách gửi các tệp hình ảnh được tạo cẩn thận đến chúng chứa mã độc. Khi hình ảnh này được chuyển đổi thành dữ liệu để truyền trong mạng máy tính nội bộ, mã bị ẩn trong dữ liệu này có thể chạy và gây thiệt hại cho nó.

Phương pháp xâm nhập này, bất kỳ thiết bị nào có kết nối bên ngoài với thế giới bên ngoài đều có khả năng dễ bị tấn công, cho phép tin tặc chèn phần mềm độc hại như vi-rút vào mạng máy tính được kết nối với thiết bị. Mã này có thể không chỉ được sử dụng để tấn công mạng thâm nhập, nhưng cũng có thể kết nối các thiết bị trên mạng với một mạng lưới phân tán rộng hơn các máy bị tấn công . Các tin tặc sau đó có thể sử dụng sức mạnh tính toán tập thể này để ăn cắp mật khẩu, tìm kiếm chi tiết thẻ ngân hàng, trang web ném bom với yêu cầu dữ liệu để phá vỡ dịch vụ của họ hoặc tấn công nhiều máy tính hơn.

Giữ an toàn

Tất nhiên, chỉ vì một cái gì đó có thể bị tấn công không có nghĩa là nó sẽ được. Một người dùng chuyên gia có thể sử dụng các công nghệ bảo mật mạng như tường lửa và các phương pháp xác thực mạnh để giảm thiểu rủi ro của người ngoài tấn công các thiết bị được kết nối internet. Nhưng hầu hết người dùng không phải là chuyên gia và mọi thiết bị chúng tôi kết nối đều tạo ra cơ hội mới cho bất kỳ ai cố gắng đột nhập vào hệ thống máy tính của chúng tôi.

Là một xã hội, chúng ta phải tự hỏi mình hai câu hỏi lớn. Đầu tiên, công nghệ nào sẽ thực sự mang lại lợi ích cho chúng ta khi kết nối internet? Một giám sát tim có thể được theo dõi bởi bác sĩ của bạn? Có lẽ. Một con búp bê có thể có những cuộc trò chuyện phức tạp nhưng cũng ghi lại mọi thứ con bạn nói? Ít hơn.

Thứ hai, đối với những công nghệ mà chúng tôi muốn kết nối, làm thế nào để chúng tôi có được các nhà sản xuất thiết bị thực hiện nghiêm túc an ninh mạng của họ? Hầu hết các sản phẩm kết nối internet mới đều thiếu tính bảo mật của các máy tính truyền thống hơn như máy tính xách tay và điện thoại. Câu trả lời có lẽ phụ thuộc vào áp lực của thị trường, điều này luôn mất thời gian để gây ảnh hưởng. Chúng tôi có thể tự mình thực hiện bằng cách đặt câu hỏi về bảo mật trước khi mua thiết bị mới nhưng cuối cùng, đó là nhà cung cấp phải đảm bảo an toàn cho thiết bị của họ.

Điều đó nói rằng, chỉ vì ấm đun nước của bạn có thể kết nối với internet, không có nghĩa là bạn phải để nó làm như vậy. Tuy nhiên, tôi sợ rằng chúng ta sẽ đọc về tủ lạnh không an toànlò nướng bánh mì có thể hack được trong một thời gian đáng kể.

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

Xem thêm việc làm Software Developers trên TopDev

TopDev via The Conversation

PHPExcel – Import và Export xử lý Excel

phpexcel

Đôi lúc chúng ta sẽ cần phải truy – xuất dữ liệu bằng file Excel như: xuất dữ liệu thống kê ra cho người dùng, hoặc import nhiều dữ liệu từ file excel vào Database. Thư viện được sử dụng nhiều nhất hiện nay là PHPOffice/PHPExcel.

Đọc và ghi file excel bằng PHP thuần

Đọc file excel

Các bạn tải file data mẫu excel này mà mình đã tạo sẵn, có nội dung hình dưới và đặt nó nằm cùng cấp với thư mục Classes:

phpexcel

Tiếp theo, bạn sẽ tiến hành đọc file này bằng cách tạo thêm 1 file mới tên là docfile.php cùng cấp với thư mục Classes, và gõ theo nội dung bên dưới:

<?php
//  Include thư viện PHPExcel_IOFactory vào
include 'Classes/PHPExcel/IOFactory.php';

$inputFileName = 'product.xlsx';

//  Tiến hành đọc file excel
try {
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
    die('Lỗi không thể đọc file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}

//  Lấy thông tin cơ bản của file excel

// Lấy sheet hiện tại
$sheet = $objPHPExcel->getSheet(0); 

// Lấy tổng số dòng của file, trong trường hợp này là 6 dòng
$highestRow = $sheet->getHighestRow(); 

// Lấy tổng số cột của file, trong trường hợp này là 4 dòng
$highestColumn = $sheet->getHighestColumn();

// Khai báo mảng $rowData chứa dữ liệu

//  Thực hiện việc lặp qua từng dòng của file, để lấy thông tin
for ($row = 1; $row <= $highestRow; $row++){ 
    // Lấy dữ liệu từng dòng và đưa vào mảng $rowData
    $rowData[] = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE,FALSE);
}

//In dữ liệu của mảng
echo "<pre>";
print_r($rowData);
echo "</pre>";

Tiếp theo bạn tiến hành thực thi file docfile.php này, sẽ thấy kết quả in ra màn hình là một mảng chứa tất cả thông tin của file excel product.xlsx.

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => STT
                    [1] => product_name
                    [2] => quantity
                    [3] => price
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => php ebook
                    [2] => 2
                    [3] => 100
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [0] => 2
                    [1] => java ebook
                    [2] => 1
                    [3] => 50
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [0] => 3
                    [1] => laravel 5
                    [2] => 3
                    [3] => 120
                )

        )

    [4] => Array
        (
            [0] => Array
                (
                    [0] => 4
                    [1] => angularjs
                    [2] => 5
                    [3] => 30
                )

        )

    [5] => Array
        (
            [0] => Array
                (
                    [0] => 5
                    [1] => python
                    [2] => 4
                    [3] => 60
                )

        )

)

từ đó bạn có thể sử dụng mảng này cho mục đích thích hợp của bạn, như lưu vào cơ sở dữ liệu chẳng hạn.

  10 điều bạn cần biết về PHP7

Ghi dữ liệu ra file excel

Tương tự như file excel, chúng ta sẽ tiếp tục dùng thư viện PHPExcel để ghi dữ liệu ra file.

Đầu tiên, các bạn tạo 1 file mới, đặt tên là ghifile.php và 1 file tên là product_import.xlsx (file này tạo ra và để trống, ko cần điền nội dung, vì chúng ta sẽ điền nội dung vào bằng thư viện PHPExcel) và đặt 2 file này cùng cấp với file docfile.php. Các bạn mở file docfile.php lên và gõ nội dung như sau :

Import dữ liệu từ file excel

Giả sử bài toán là 1 lượng lớn dữ liệu địa chỉ trong đó có phân cấp Tỉnh/Thành Phố, Quận/Huyện, Xã /Phường. Và ta đã biết 1 Tỉnh/Thành Phố có nhiều Quận/Huyện, 1 Quận/Huyện có nhiều Xã/Phường. Như vậy ta sẽ thiết kế DB với 3 bảng như sau: provinces, districts, wards.

phpexcel

Trong bài demo này mình sẽ sử dụng Laravel và dùng Seed để import dữ liệu. Mình đã tạo project, migrate các bạn có thể xem trong source code. Dữ liệu dùng để demo là Tổng hợp địa giới hành chính Việt Nam.

Trước hết ta cài đặt thư viện vào project Laravel bằng dòng lệnh:

composer require phpoffice/phpexcel

Nhìn vào dữ liệu của file excel trên ta thấy có 3 sheet tỉnh, huyện, xã đã được khai báo khá rõ ràng nên ta có thể tưởng tượng ra được cách làm là đọc dữ liệu từng sheet một và insert vào các bảng tương ứng. Hiện thực hóa ý tưởng trên ta được kết quả:

<?php

use Illuminate\Database\Seeder;
use App\Province;
use App\District;
use App\Ward;

class AddressSeeder extends Seeder
{
   /**
    * Run the database seeds.
    *
    * @return void
    */
   public function run()
   {
       $objPHPExcel = PHPExcel_IOFactory::load(base_path('addresses.xls')); // load file ra object PHPExcel
       $provinceSheet = $objPHPExcel->setActiveSheetIndex(0); // Set sheet sẽ được đọc dữ liệu
       $highestRow    = $provinceSheet->getHighestRow(); // Lấy số row lớn nhất trong sheet
       for ($row = 2; $row <= $highestRow; $row++) { // For chạy từ 2 vì row 1 là title
           Province::create([
               'id' => $provinceSheet->getCellByColumnAndRow(0, $row)->getValue(), // lấy dữ liệu từng ô theo col và row
               'name' => $provinceSheet->getCellByColumnAndRow(1, $row)->getValue(),
               'type' => $provinceSheet->getCellByColumnAndRow(2, $row)->getValue(),
           ]);
       }
   
   
       $districtSheet = $objPHPExcel->setActiveSheetIndex(1);
       $highestRow    = $districtSheet->getHighestRow();
       for ($row = 2; $row <= $highestRow; $row++) {
           District::create([
               'id' => $districtSheet->getCellByColumnAndRow(0, $row)->getValue(),
               'name' => $districtSheet->getCellByColumnAndRow(1, $row)->getValue(),
               'type' => $districtSheet->getCellByColumnAndRow(2, $row)->getValue(),
               'location' => $districtSheet->getCellByColumnAndRow(3, $row)->getValue(),
               'province_id' => $districtSheet->getCellByColumnAndRow(4, $row)->getValue(),
           ]);
       }
   
       $wardSheet = $objPHPExcel->setActiveSheetIndex(2);
       $highestRow    = $wardSheet->getHighestRow();
       for ($row = 2; $row <= $highestRow; $row++) {
           Ward::create([
               'id' => $wardSheet->getCellByColumnAndRow(0, $row)->getValue(),
               'name' => $wardSheet->getCellByColumnAndRow(1, $row)->getValue(),
               'type' => $wardSheet->getCellByColumnAndRow(2, $row)->getValue(),
               'location' => $wardSheet->getCellByColumnAndRow(3, $row)->getValue(),
               'district_id' => $wardSheet->getCellByColumnAndRow(4, $row)->getValue(),
           ]);
       }
   }
}

Ở đây mới chỉ sử dụng các hàm đơn giản của PHPExcel để đọc dữ liệu ra, mình có comment code rất dễ hiểu. Ngoài các hàm đơn giản trên thì PHPExcel hỗ trợ rất nhiều hàm liên quan đến việc đọc dữ liệu các bạn có thể xem document ở đây.

  10 Frameworks tốt nhất hiện nay cho PHP

Export dữ liệu từ DB ra file excel

Ở trên đã import dữ liệu từ file excel vào DB, bây giờ sẽ làm điều ngược lại. Để tăng độ khó bài toán ta sẽ không export ra file giống như cũ mà giả sử khách hàng yêu cầu mình export dữ liệu ra file excel có format như sau:

  • Tạo các sheet tương ứng với tên các tỉnh/thành phố.
  • Tương ứng với mỗi sheet ghi rõ tên quận/huyện và các xã/phường thuộc quận/huyện đó.

Tạo 1 artisan command để làm việc này. Nội dung như sau:

<?php

namespace App\Console\Commands;

use App\Province;
use Illuminate\Console\Command;

class ExportExcel extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'db:export_to_excel';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Export address to excel';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $provinces = Province::with('districts')->get();
        $objPHPExcel = new \PHPExcel();
    
        foreach ($provinces as $key => $province) {
            $objPHPExcel->createSheet(); // tạo 1 sheet mới
            $activeSheet = $objPHPExcel->setActiveSheetIndex($key);
            $activeSheet->setTitle($province->name); // đặt tên sheet là tên tỉnh
            $activeSheet->setCellValue('A1', 'Quận/Huyện')
                ->setCellValue('B1', 'Xã/Phường')
                ->setCellValue('C1', 'Kinh độ, vĩ độ'); // set title cho dòng đầu tiên
            $i = 2;
            $j = 2;
            foreach ($province->districts as $district) {
                $activeSheet->setCellValue("A$i", $district->type . ' ' . $district->name); // set tên quận/huyện
                foreach ($district->wards as $ward) {
                    $activeSheet->setCellValue("B$j", $ward->type . ' ' . $ward->name); // tương ứng mỗi quận huyện set tên xã/phường
                    $activeSheet->setCellValue("C$j", $ward->location);
                    $j++;
                }
                $rowMerge = $j - 1;
                if ($i < $rowMerge) {
                    $activeSheet->mergeCells("A$i:A$rowMerge"); // merge các cell có cùng 1 quận/huyện
                }
                $i = $j;
            }
            
            foreach (range('A', 'C') as $columnId) {
                $activeSheet->getColumnDimension($columnId)->setAutoSize(true);
            }
        }
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save(base_path('result.xlsx'));
    }
}

Kết quả nhận được là:

phpexcel

Tham khảo:

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

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

Top 20 API trong AI và Machine Learning bạn nên biết

API sử dụng trong AI

Application Programming Interface là một code được tạo sẵn để đơn giản hóa cuộc sống của một lập trình viên. Nó giúp số hóa các task đơn điệu và tự động hóa một số lượng lớn các function phức tạp, và kết quả là ta cắt giảm được chi phí sản xuất. Khi nói đến lập trình AI / ML, chúng ta thường thực hiện việc tích hợp API thương mại vào các platform hiện có. Nó cho phép tương tác với code snippet hiện tại, cho chúng tương tác với nhau và tất nhiên tương tác với user-base của bạn.

Trong bài viết này, tôi sẽ liệt kê những API ưa thích mà tôi thấy phù hợp với lập trình AI và ML nhất. Một điều cần lưu ý là danh sách này chỉ dựa trên mức độ hiệu quả, dễ sử dụng và chức năng của platform chứ không phải độ phổ biến của nó. Tôi cũng không liệt kê những tên tuổi lớn như các platform Google, IBM hay Microsoft bởi vì ai cũng biết về chúng cả.

Tìm việc làm Machine Learning lương cao 3000 USD

1. BigML

Tài liệu: https://bigml.com/developers

Công ty BigML đã mô tả sản phẩm Machine Learning của mình rất đơn giản và dành cho tất cả mọi người. Và nó đúng thực sự như vậy. Bạn có thể tìm thấy các feature như phát hiện bất thường (anomaly detection) hoặc SunBurst visualization cho các decision tree, và nhiều tính năng khác nữa. API này chính là một vũ khí hoàn hảo ngay cả khi bạn không hề có bất kỳ kinh nghiệm nào trước đó. Điều tôi thích nhất ở BigML là bạn có thể tìm thấy rất nhiều ví dụ về case cụ thể và hướng dẫn hoàn thành các task một cách chính xác hơn. Do đó, bạn có thể hiểu mọi thứ từ đầu và sử dụng API này mà không cần tấm bằng tiến sĩ.

2. PredictionIO

Documentation: https://predictionio.apache.org/datacollection/eventapi/

Demo: https://predictionio.apache.org/demo/community/

API này cho phép triển khai miễn phí, và cung cấp vô số template gần-như-hoàn-chỉnh để tiện cho việc tùy chỉnh theo các case sử dụng khác nhau. Bên cạnh đó, nó đáp lại các dynamic queries ngay lập tức khi được triển khai như là một web service. Nó cung cấp documentation được tổ chức tốt và rộng, bao gồm các chỉ dẫn dành cho developer, các bản hướng dẫn demo,… API luôn được cập nhập thường xuyên nên bạn có thể tìm thấy nhiều feature nâng cao hơn tại đây.

3. Anaconda

Documentation: https://docs.anaconda.com/

Là một API được cung cấp bởi Python, thích hợp cho các doanh nghiệp, an toàn và có thể điều chỉnh để đáp ứng nhu cầu lớn hơn trong tương lai, nó cung cấp quyền truy cập trực tiếp vào hơn 700 package dễ cài đặt. Điều bạn nhận được từ API này là khả năng kiểm soát đúng data science asset. Tuy nhiên, một trong những feature vượt trội của nó là triển khai các project vào các ứng dụng data tương tác, sổ ghi chép trực tiếp và ML-model

4. Blue Yonder Platform

Documentation: https://github.com/blue-yonder

Nếu task của bạn là tìm một API tuyệt vời cho ngành bán lẻ thì đây là lựa chọn tốt nhất cho bạn. Tại vì sao? Tại vì platform cho các ứng dụng dự đoán dựa trên cloud này sử dụng các phương pháp tiếp cận AI / ML dẫn đầu trên thị trường, cho phép phản hồi nhanh chóng để thay đổi động lực thị trường. Công ty cho biết các nhà bán lẻ có thể giảm tới 80% tỷ lệ xuất kho và khiến doanh thu và lợi nhuận của họ cải thiện hơn 5%. Ngoài ra, ngoại trừ việc xây dựng ứng dụng cần thiết, bạn cũng có thể tích hợp nó với hệ thống hiện có như ERP hoặc HR.

5. MLJAR

Documentation: https://docs.mljar.com/

Một API khác sẽ khiến bạn ấn tượng là MLJAR. Nó cung cấp một dịch vụ để tạo mẫu, phát triển và triển khai các thuật toán nhận dạng mẫu cần thiết. Tất cả những gì bạn cần làm chỉ là tải data lên, chọn các thuật toán ML cần thiết và sử dụng các module tốt nhất để dự đoán.

6. NuPIC

Documentation: http://nupic.docs.numenta.org/

API này là một nguồn cung cấp mở được viết bằng Python và C ++, thực hiện Thuật toán Numenta’s Cortical Learning và được duy trì bởi sự trợ giúp của Cộng đồng NuPIC. Lý do nó hấp dẫn tôi là vì nó là một công cụ đa năng mạnh mẽ cho phép các developer làm việc với các thuật toán raw, tập hợp nhiều lĩnh vực (như hierarchies) và tận dụng khả năng của các platform khác.

7. Recombee

Documentation: https://docs.recombee.com/

Recombee là một giải pháp SAAS và nó cung cấp các đề xuất thông qua API real-time trực quan. Recombee sử dụng khai thác records mining, ngôn ngữ câu hỏi và các thuật toán machine learning (ví dụ như tư vấn dựa trên nội dung) thông qua API RESTful. Quan trọng nhất là API Documentation rất thân thiện và sử dụng nó trong công việc rất thoải mái.

8. indico

Documentation: https://indico.io/docs/

Bạn không thể không biết indico vì nó là thuộc top những API phần mềm phân tích dự đoán phổ biến nhất. Bạn nhận được gì khi sử dụng nó? Nó có hai option chính: đánh giá văn bản (phân tích tâm lý đối tượng, sự tương tác, cảm xúc) và đánh giá ảnh (cảm xúc khuôn mặt, định vị khuôn mặt). Ưu điểm của API này là nó miễn phí và không yêu cầu training data, thế nên bạn có thể dùng thử ngay bây giờ.

  9 hiểu lầm "ngớ ngẩn" về machine learning

TOP API dùng để nhận diện khuôn mặt và nhận dạng khuôn mặt

9. Animetrics Face Recognition

Documentation: http://api.animetrics.com/documentation

Demo: http://api.animetrics.com/demo

Nếu bạn muốn tạo một phần mềm nhận dạng khuôn mặt hoặc đơn giản chỉ là tiến hành phân tích hình ảnh, thì Animetrics Face Recognition sẽ hỗ trợ bạn rất nhiều. Bạn có thể sử dụng nó để phát hiện khuôn mặt trong tấm hình hoặc hình ảnh nào đó và ghép chúng với một set khuôn mặt đã biết. Một lợi thế khác của nó là thông tin về các đặc điểm trên khuôn mặt hoặc các landmark được trả về dưới dạng tọa độ trên ảnh. Hơn thế nữa, API này cũng có thể tải lên hoặc hoãn một subject từ thư viện, và tải lên hoặc loại bỏ khuôn mặt khỏi một topic.

10. Eyedea Recognition

Documentation: http://face.eyedea.cz:8080/api/face/docs

Demo: http://cloud.eyedea.cz/api/face

Eyedea Recognition là tên khổng lồ trong lĩnh vực phát hiện đối tượng và nhận dạng đối tượng. API này xử lý một cách hoàn hảo các giải pháp phần mềm được chuẩn bị theo đặc điểm kỹ thuật của khách hàng và dựa trên kết quả nghiên cứu về Machine Learning và AI. Dịch vụ nhận dạng này rất linh hoạt, nó cung cấp phát hiện mắt, mặt, automobile, copyright và bảng biển. Giá trị tuyệt vời nhất của API là quyền truy cập thông tin tức thời của các object, khách hàng và hành vi.

11. Betaface

Documentation: https://www.betafaceapi.com/wpa/index.php/documentation

Demo: https://www.betafaceapi.com/demo.html

Tất cả những gì bạn cần biết về API này là nó là một platform mạnh mẽ và có thể mở rộng để quét các file đã được tải lên hoặc URL ảnh, phát hiện khuôn mặt và kiểm tra chúng. API này bao gồm các khả năng như phát hiện khuôn mặt, cắt xén khuôn mặt, phát hiện 123 điểm khuôn mặt (22 điểm cơ bản, một trăm lẻ một điểm nâng cao), xác minh khuôn mặt, cũng như tìm kiếm sự tương đồng trong các database rất lớn.

12. Imagga

Documentation: https://docs.imagga.com/

Demo: https://imagga.com/auto-tagging-demo

Đây là một API mạnh mẽ khác để phân tích hình ảnh, phân loại hình ảnh tức thì, khai thác màu sắc và cắt xén nội dung. Imagga cung cấp các API tự động gán thẻ cho ảnh của bạn và giúp hình ảnh của bạn dễ tìm thấy. Nó dựa trên một platform nhận dạng hình ảnh như một dịch vụ.

Video: IoT and AI Thinking Linking Things Age of VUI

API Phân tích văn bản và Natural Language Processing

13. Wit.ai

Documentation: https://wit.ai/docs

Demo: https://labs.wit.ai/demo/index.html

Đây là một platform NLP mở rộng. Nếu bạn muốn trao quyền cho các developer liên quan đến tự động hóa giọng nói, thì đây sẽ là lựa chọn tốt nhất. Cá nhân tôi là một fan lớn của API này. Lý do nó hấp dẫn tôi là sự tập trung của nó vào việc hiểu ngôn ngữ của con người từ mọi tương tác và thúc đẩy cộng đồng, điều đó có nghĩa là mọi thứ học được sẽ được chia sẻ giữa các developer. Wit tạo ra một giao diện giọng nói thông minh dùng cho các mục đích như tự động hóa gia đình, ô tô kết nối, robot, smartphone, thiết bị đeo,… Ngoài ra, nó miễn phí.

14. Bitext

Documentation: https://docs.api.bitext.com/

Demo: http://parser.bitext.com/

API Bitext là một tool phân tích ngôn ngữ sâu khác, cung cấp data mà dễ dàng export cho toàn bộ các tool quản lý dữ liệu. Sản phẩm của platform này có thể được sử dụng cho chatbot và assistant, CS và Sentiment, cũng như một số task NLP cốt lõi khác. Trọng tâm chính của nó là ngữ nghĩa, ngữ pháp, từ vựng và văn nói hay văn viết có sẵn cho hơn 80 ngôn ngữ. Thêm vào đó, khi nói đến việc tự động hóa phân tích feedback của khách hàng thì API này là tốt nhất. Công ty tuyên bố rằng nó cung cấp insight khách hàng với độ chính xác là 90%.

15. Geneea

Documentation: https://api.geneea.com/

Demo: https://demo.geneea.com/

Geneea thực hiện phân tích (Natural Language Processing) trên raw text được cung cấp, trên văn bản được trích ra từ URL đã cho hoặc trực tiếp từ tài liệu được cung cấp. Lợi thế nổi trội của nó là số lượng lớn các ngôn ngữ có sẵn (hơn 30). Geneea thực hiện các phân tích về các topic như ngôn ngữ, nhận dạng topic, phân tích tâm lý khách hàng, trích xuất thực thể, gắn thẻ tự động, cũng như thực hiện các điều chỉnh khác nhau.

16. Diffbot Analyze

Documentation: https://www.diffbot.com/dev/docs/

Demo: https://www.diffbot.com/

API này thực hiện nhận dạng, phân tích và trích xuất tự động mọi phần của data (văn bản, ảnh, video) từ bất kỳ URL nào một cách dễ dàng. Nó sử dụng một tập hợp lý tưởng của AI, ML, computer vision và NLP. Ngoài ra, bạn cũng có thể sử dụng nó với các API tùy chỉnh cho phép lấy data bằng các quy định thủ công.

17. Yactraq Speech2Topics

Demo: https://yactraq.com/contact-trial/

Đây là một platform phân tích giọng nói tuyệt vời với mục đích là giải phóng khả năng của dữ liệu âm thanh của bạn. API này chuyển đổi tài liệu nội dung nghe nhìn thành siêu dữ liệu subject thông qua nhận dạng giọng nói & NLP. Nó cung cấp một tập hợp các call operations solution cung cấp ROI quá mức, các ứng dụng thống kê lớn.

18. MonkeyLearn

Documentation: https://monkeylearn.com/api/v3/

Demo: https://monkeylearn.com/contact/

MonkeyLearn là một platform AI cho phép bạn phân loại và xuất data hành động từ các raw text như email, chat, webpage, document, tweet,… Nó đặc biệt tập trung vào việc giảm thiểu thời gian cần thiết cho tất cả các task này và vì vậy đây là một lựa chọn tốt dành cho bạn.

19. Hu:toma

Documentation: https://help.hutoma.ai/article/ym34wr87lx-hutoma-chat-api

Đây là một platform giúp đơn giản hóa việc truy cập data hành động thông qua các giao diện ngôn ngữ tự nhiên và trợ lý AI. Nếu bạn đang triển khai Natural Language Interface vào ứng dụng hoặc website của mình thì đây sẽ là ưu tiên số 1 của bạn. Lý do là bạn có thể dạy và đào tạo nó bằng cách cung cấp các ví dụ về các cuộc hội thoại (kịch bản phim,…).

20. nlpTools

Documentation: http://php-nlp-tools.com/documentation/

nlpTools là một open source framework xử lý văn bản đơn giản (một thư viện cho NLP được viết bằng php) để phân tích Ngôn ngữ tự nhiên. Nó decode online news media (mục đích chung, nhiều topic) để phân tích tâm lý đối tượng và phân loại văn bản.

Kết luận

Trong quá trình đọc, có lẽ bạn sẽ chọn được một vài cái để áp dụng. Nhưng trước khi kết thúc, tôi muốn nhắc tới một điều quan trọng. Các lập trình viên, đặc biệt là người mới bắt đầu không nên chỉ sử dụng một kế hoạch như vậy cho các giải pháp được đưa ra sẵn. Tại vì nếu bây giờ bạn không giải quyết các quy trình phức tạp hơn, bạn có thể không đối phó được với các task thực sự trong tương lai. Do đó, bạn cần giữ cân bằng giữa việc áp dụng những thứ này với việc thực hiện các công việc thực sự. 

TopDev via Medium

  Vì miếng ăn mà phá cả nồi cơm – Thực tại đáng lo của nghề lập trình

  Hành trình yêu lại từ đầu cùng Git

Cần trang bị những gì để trở thành một kỹ sư cho Google, Amazon, Facebook?

Trong bài viết này, tôi sẽ cho bạn thấy quy trình 6 bước để có được một công việc kỹ sư phần mềm không chỉ ở Google mà ở bất kỳ công ty công nghệ hàng đầu nào như: Amazon, Microsoft và Facebook. Ngoài ra, tôi cũng sẽ thảo luận về:

  1.   Cách học lập trình và đọc code
  2.   Những điều cần tìm hiểu sau khi học lập trình
  3.   Cách có công việc lập trình đầu tiên
  4.   Cách tốt nhất để xin vào vị trí software engineer
  5.   Cách tốt nhất để chuẩn bị cho các cuộc phỏng vấn lập trình
  6.   Bằng khoa học máy tính có quan trọng không?
  7.   Học tại đại học hàng đầu có cần thiết không?

Bước 1: Học cách viết code

Đây là trình độ tối thiểu tuyệt đối bạn cần phải có để trở thành kỹ sư phần mềm.

Đối với điều này, tôi khuyên bạn nên bắt đầu với một trang web học trực tuyến như Codecademy freeCodeCamp. Bạn có thể tìm hiểu hầu hết các kiến thức cơ bản của lập trình từ các trang web này.

Sau đó, bạn nên xem những video hướng dẫn để tìm hiểu thêm về các chủ đề nâng cao. Tôi khuyên bạn nên vào các trang như YouTube, Pluralsight, Lynda.com và Udemy. Trên các trang web này, bạn sẽ có thể tìm thấy các hướng dẫn về những chủ đề như:

  • Web development
  • Mobile development
  • Game development

Vậy thì tôi nên học ngôn ngữ lập trình nào trước tiên?

Câu trả lời ngắn của tôi là hãy chọn JavaScript hoặc Python, nhưng nó thực sự phụ thuộc vào sở thích của bạn.

Bước 2: Hãy làm một vài dự án cá nhân

Sau khi đã hoàn thành vài khóa lập trình trực tuyến thì bạn nên thực hiện một vài dự án cá nhân để vận dụng những kiến thức mình đã học.

Ví dụ: nếu bạn thích nhiếp ảnh, có thể bạn có thể tạo trang web để trưng bày tất cả các ảnh của mình. Nếu bạn thích cổ phiếu giao dịch, có thể bạn có thể xây dựng một hệ thống phân tích biểu đồ chứng khoán cho riêng mình. Hoặc, nếu bạn thích giải quyết vấn đề, bạn có thể thử cạnh tranh trong một cuộc thi lập trình.

Khi bạn làm project, trước hết hãy tự mình làm càng nhiều càng tốt. Sau đó, nếu gặp khó khăn, hãy kêu gọi sự trợ giúp từ người khác trên các diễn đàn trực tuyến.

Ví dụ: bạn có thể sử dụng Stack Overflow để hỏi các câu hỏi kỹ thuật cụ thể mà bạn đang mắc phải.

Bước 3: Nhận công việc lập trình đầu tiên hay chọn làm thực tập

Khi bạn đã xây dựng một vài dự án cá nhân của mình thì bạn cũng đã có thể nhận được công việc hoặc thực tập đầu tiên của mình. Với nó, bạn sẽ tích lũy một số kinh nghiệm trước khi bạn bắt đầu phỏng vấn với các công ty công nghệ hàng đầu.

Tất nhiên, bạn có thể nhận được công việc đầu tiên của mình tại một trong những công ty công nghệ hàng đầu, nhưng nó sẽ dễ dàng hơn khi vào một một công ty ít nổi tiếng trước.

Cách tốt nhất để xin vào vị trí software engineer

Tôi khuyên bạn nên sử dụng mạng xã hội của LinkedIn và mối quan hệ quen biết để có được công việc lập trình đầu tiên của bạn.

Trên LinkedIn, trước tiên hãy tìm nhà tuyển dụng của công ty bạn quan tâm. Sau đó, hỏi họ xem bạn có đủ điều kiện cho vị trí bạn quan tâm hay không. Bạn cũng nên hỏi họ cách bạn có thể chuẩn bị tốt hơn nếu như vẫn chưa đủ điều kiện.

Việc sử dụng mạng xã hội của LinkedIn sẽ rất hiệu quả nếu bạn đang nhắm tới các công ty vừa và nhỏ. Tuy nhiên, tôi nhận thấy rằng các chiến lược này kém hiệu quả hơn cho các công ty như Google và Facebook.

Đối với những công ty lớn này thì tôi khuyên bạn nên kết hợp ba chiến lược sau:

  1.   Tham gia hội chợ nghề nghiệp và sự kiện tuyển dụng tại các trường đại học
  2.   Nhờ vào sự giới thiệu từ những người bạn làm việc tại một trong những công ty này
  3.   Cứ việc đăng ký trực tuyến.

Kết hợp tất cả các chiến lược này sẽ giúp bạn tăng cơ hội có được một cuộc phỏng vấn với một trong những công ty công nghệ hàng đầu này.

Image result for engineers at big companies

Nguồn: engineering.com

Bước 4: Tìm hiểu cấu trúc và thuật toán dữ liệu

Các công ty công nghệ hàng đầu như Google và Microsoft thường đặt câu hỏi về cấu trúc dữ liệu và thuật toán trong các cuộc phỏng vấn của họ. Vì vậy, bạn nên tìm hiểu chúng.

Để tìm hiểu kiến ​​thức cơ bản, tôi khuyên bạn nên sử dụng series video này về cấu trúc và thuật toán dữ liệu.

Vì chỉ có 7 video trong loạt bài này nên bạn sẽ cần nhiều tài liệu hơn để tìm hiểu thêm về các chủ đề nâng cao.

Sau đây là một số lựa chọn tiêu biểu, bao gồm:

Các khóa học của Stanford trên Coursera

Khóa học MIT này trên YouTube

Sách hướng dẫn thiết kế thuật toán của Skiena

Algorithms

Bước 5: Chuẩn bị cho các cuộc phỏng vấn

Các cuộc phỏng vấn mã hóa tại các công ty như Google và Microsoft rất khó.

Khi bạn đã có kiến ​​thức vững chắc về cấu trúc và thuật toán dữ liệu, tôi khuyên bạn nên sử dụng ba khóa này để thực hành:

Leetcode – một nền tảng tương tác để thực hành các vấn đề về mã hóa thường được hỏi trong phỏng vấn.

Cracking the Coding Interview– một cuốn sách nổi tiếng về các cuộc phỏng vấn mã hóa.

Daily Coding Problem – Danh sách mail cung cấp cho bạn một vấn đề lập trình mỗi ngày.

Sau khi tập luyện trong vài tuần, bạn sẽ sẵn sàng để bắt đầu thử các buổi phỏng vấn giả.

Về cơ bản, ghép nối với bạn bè của bạn và đưa ra các vấn đề về lập trình từ 3 nguồn trên.

Sau đó, giải quyết từng vấn đề trên giấy và giải thích giải pháp của bạn cho họ nghe.

Khi bạn thực hiện được tầm 20 cuộc phỏng vấn giả thì có thể gọi là sẵn sàng rồi đấy!

Bước 6: Áp dụng, áp dụng và áp dụng lại

Sử dụng ba chiến lược tôi đã đề cập ở trên để xin vào làm cho các công ty công nghệ hàng đầu:

  1.   Sự kiện tuyển dụng / hội chợ nghề nghiệp
  2.   Nhờ bạn bè giới thiệu bạn
  3.   Và đăng ký trực tuyến.

Nếu bạn không nhận được trong lần đầu tiên, đừng lo lắng. Trong thực tế, bạn nên mong đợi một số thất bại bởi việc nhận được vào bất kỳ của các công ty này là rất khó.

Bản thân tôi cũng mất tới 5 lần trước khi được nhận vào Google tại vị trí công việc kỹ sư phần mềm.

Một vài lưu ý khác

 – Tôi có cần lấy bằng khoa học máy tính không?”

 – Không nhất thiết, Tuy nhiên, việc học chúng sẽ giúp ích cho bạn rất nhiều.

Ngoài ra, xin lưu ý rằng ngay cả khi bạn có bằng cấp đủ chuẩn cần phải mất rất nhiều thời gian để có được một công việc kỹ sư phần mềm tại một trong những công ty này.

 – Vậy tôi có cần học tại một trường đại học hàng đầu như MIT, Stanford, Carnegie Mellon, v.v. không?

Không. Nó có thể giúp một chút nhưng không hề cần thiết.

– Vậy Tôi có cần điểm GPA cao không?

Không.

Có điểm trung bình cao có thể giúp một chút để có được một cuộc phỏng vấn nhưng kinh nghiệm thực tế vững chắc và các dự án thú vị còn quan trọng hơn nhiều.

 – Làm thế nào để tôi có thể viết một CV – lý lịch tốt?

  – Nếu muốn, bạn có thể sử dụng bản CV – lý lịch mà tôi đã sử dụng để xin vào Google làm mẫu.

Đây là phiên bản PDF.

Đây là phiên bản Word.

Đây là phiên bản Pages.

Chúc cho những ước mơ còn dang dở sẽ sớm trở thành hiện thực. Thanks all!

TopDev via Medium

Thế nào là một lập trình viên Full-Stack?

full stack developer
Full-stack developer (FSD) là người có thể làm các công việc liên quan tới databases, servers, systems engineering và client work. Họ có thể là một FSD về di động (mobile stack), web (web stack) hoặc phần mềm (native applications).
full stack developer

Tham khảo thêm VỊ trí tuyển dụng Full Stack lương cao cho bạn

Full-stack Developer = Mr. Do It All!

Anh chàng FSD Full-stack Developer quen thuộc với tất cả các mảng trong quá trình phát triển phần mềm. Anh ta có kiến thức bao quát về Mạng, CSDL, User Interface, API, Security, … Một FSD không nhất thiết phải thông thạo mọi công nghệ của Front-end và back-end nhưng có thể học và ứng dụng vào dự án một cách nhanh chóng khi họ cần. Các công ty và start-up với nguồn lực giới hạn luôn tìm kiếm những “super hero” như thế này. Tuy nhiên, cơ hội tìm được họ là rất thấp.
Nói một cách cụ thể hơn, một FSD có thể đảm nhiệm các công việc liên quan đến:
  • Máy chủ, mạng, và hosting. Họ hiểu biết về các yêu cầu về phần cứng, hệ điều hành, thiết lập môi trường hệ thống để triển khai ứng dụng.
  • CSDL. Họ có thể phân tích và thiết kế CSDL, sử dụng các hệ quản trị CSDL (MySQL, SQLServer, NoSQL, …) và viết được các câu truy vấn.
  • API/ Back-end code. Họ có thể sử dụng một hay nhiều ngôn ngữ server-side như Ruby, Python, PHP, Java, … để viết các ứng dụng, dịch vụ web (web service).
  • Front-end code. HTML5, CSS3, Javascript và các frameworks như Bootstraps, Jquery, AngualarJS, …
  • UI/UX.
  • Client work. Họ có thể giao tiếp và lấy yêu cầu (requirement) từ khách hàng. Họ viết ra các tài liệu kĩ thuật (technical specs, architecture documents) và documentation.
Nếu bạn muốn tìm kiểu về khái niệm FSD một cách đầy đủ và hệ thống hơn, bạn có thể xem các bài viết sau:
  • Being a Full-stack Developer
  • What is a Full-stack Developer
  • What does the term Full-stack programmer mean

Xem ngay những tin đăng tuyển lập trình viên Full-stack

Bạn muốn trở thành một Full-stack Developer?

Nếu bạn muốn bước chân trên con đường để trở thành một FSD thì chúc mừng bạn vì bạn đang bước đi trên con đường gian nan, tiêu tốnnhiều thời gian nhưng kết quả thì rất khả quan đấy.
Trước hết, bạn hãy bắt đầu học về các ngôn ngữ lập trình phía Front-end. bao gồm HTML5, CSS3, và Javascript. Mục tiêu bạn cần đặt ra là có thể tạo được một website tĩnh.
Sau đó, bạn hãy bắt đầu học một ngôn ngữ lập trình phía Back-end. Vì bản thân mình là một PHP Developer và mình thấy rằng PHP là một ngôn ngữ dễ học nên mình sẽ hướng các bạn học và làm việc với PHP. Khi đã nắm vững được một ngôn ngữ lập trình rồi thì bạn có thể học các ngôn ngữ mới dễ dàng hơn. Kết hợp với kiến thức phía Front-end, lúc này bạn đã có thể xây dựng được một website giống như GeekBoy rồi đấy!
Trong quá trình phát triển, bạn cũng cần có các công cụ để quản lý code của mình. Có khá nhiều công cụ phục cho việc này như Git, SVN, Mercury. Mình khuyên các bạn nên học sử dụng Git.
Tiếp theo đó, bạn hãy học về CSDL để có thể lưu trữ nội dung cho website của mình.
Khi đã xây dựng xong website bên dưới máy của bạn rồi, điều bạn cần làm tiếp theo là học các kiến thức về tên miền cho website, hosting hoặc server để chứa source-code. Nếu bạn có server riêng (hoặc VPS), bạn cần học các kiến thức về quản trị server, bao gồm cài đặt hệ điều hành, cài đặt web server, …
Xong các bước ở trên rồi, bạn cũng cần phải nghiên cứu làm sao cho website của mình được người dùng tìm thấy qua Google, Bing, Yahoo. Quá trình được gọi là Tối ưu hóa công cụ tìm kiếm (Search Engine Optimization, SEO).
  Lộ trình trở thành Fullstack Developer cho người mới bắt đầu

Và còn nhiều điều nữa bạn cần phải học lắm!

Mình xin trích dẫn đoạn trích bài viết của anh Bùi Hải An, là người sáng lập start-up công nghệ SSS:
Để một bạn dev ở SSS có thể được gọi là 1 Full Stack Developer thì cần:Kiên trì Dũng cảm. Còn về kỹ năng, tất cả đều có thể tự học được!
Kiên trì để liên tục đẩy bản thân mình không ngừng nghỉ. Với tất cả những bạn học IT tốt nghiệp ra đi làm, hầu hết các bạn đều có đủ kiến thức cơ bản. Tuy nhiên giống như 1 self-timer vậy. Kiến thức này expire và obsolete cực nhanh. Do đó bạn phải kiên trì liên tục học cái mới. Mỗi tuần bạn không biết thêm và làm thêm 1 cái gì mới coi như bạn đang đi thụt lùi.
Kiên trì cho 1 chuyên môn, 1 ngôn ngữ nhất định thì dễ (như PHP, Ruby, Android, Python, iOS, …). Bạn cứ làm, cứ nghiên cứu thì cũng là tiến bộ rồi. Nhưng bạn có đủ kiên trì để học 2-3 ngôn ngữ, tìm hiểu 2-3 nền tảng cùng 1 lúc không? Bạn có đủ kiên trì để trải qua những cung bậc cảm xúc khi bắt đầu lại từ đầu với 1 ngôn ngữ mới không?
Kiên trì tìm cho mình cơ hội. Cơ hội để được làm, được thực hành. Ngồi đọc 10 bài trên StackOverflow, Reddit, HackerNews mà không bắt tay vào làm thử thì cũng vô dụng. Do đó, tìm cho mình mọi cơ hội để được làm, để được thử. Bạn có thể tự làm project của mình, hoặc xin sếp cho làm thêm 1 project, tìm project freelance,… Bạn có đủ kiên trì làm như vậy trong suốt 2-3 năm trời không?
Dũng cảm để chọn con đường hơi khác người. Bạn có đủ dũng cảm và tự tin để sale bản thân mình với 1 bộ skillset không giống lắm với những bạn bè của mình.
Dũng cảm để có thể bỏ toàn bộ code làm 5-6 tháng trời để nâng cấp lên một ngôn ngữ mới. Dũng cảm để không dùng Code generator mà tự code để hiểu được architecture và nền tảng chuyên sâu bên dưới.
Dũng cảm để trở thành lại 1 newbie trong khi mình đang là hardcore khi nhảy từ 1 nền tảng ruột (Android), sang 1 nên tảng lạ hoắc (iOS). Và phải đi tầm sự học đạo 1 bạn junior vì bạn đó giỏi hơn mình (trong cái mới này).
Tóm lại, về chuyên môn thì ai cũng có thể trở thành 1 Full Stack Developer được hết (ít ra là tự cho mình là vậy). Nhưng về thái độ và bản lĩnh, chưa chắc nhiều bạn sẽ dám dấn thân và thử thách bản thân mình đâu.”Còn bạn thì sao? Bạn đã sẵn sàng để trở thành một Full-stack Developer?

via geekboy

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

Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev

Developer tranh cãi việc học IT ở Việt Nam là “lỗi thời” và “lạc hậu”?

Việc du học luôn là mơ ước của nhiều người bởi cơ hội được tiếp xúc với nền văn hóa mới cũng như cách học và làm việc của nước bạn. Tuy vậy, ngành lập trình lại là một trong những ngành yêu cầu sinh viên phải tự học rất nhiều, đôi khi chiếm tới 90% thời lượng tiếp thu và thực hành. Do đó mà so với việc học IT ở Việt Nam, có rất nhiều người cho rằng việc đi du học gần như là không cần thiết nếu bạn muốn theo nghiệp làm developer.

Đây cũng là một topic khá hot trên fanpage của cộng đồng Lap Trinh Vien Confession khi có rất nhiều ý kiến trái chiều được đưa ra.

Bắt đầu với chính người đăng confession khi cho rằng việc học lập trình tại Việt Nam có vẻ gần như… lạc hậu so với các nước khác, cậu thổ lộ:

“Em mới đi du học một khoá lập trình tại Canada được gần một năm, lúc ở Việt Nam chưa học lập trình ở đâu hết.

Sang bên này học, em thấy họ dạy những thứ rất sát với thực tế. Họ lấy Java làm ngôn ngữ mũi nhọn để dạy nền tảng lập trình và OOP, và xung quanh đó họ dạy cái cơ bản của những thứ cần thiết như SQL, GNU/Linux, Javascript/HTML/CSS, PHP, một chút low-level, một chút networking, một chút COBOL, một chút Kotlin để phát triển Android…

Toán của họ dạy trình độ ngang với học sinh lớp 9 ở VN, chỉ có thêm một môn Technical Communication (giao tiếp trong môi trường kỹ thuật), còn lại không có ba cái môn lăng nhăng nào khác. Học tương đối đơn giản, GPA rất dễ lấy > 3.5 (trên thang 4).

Khoá học không quá nặng nề để sinh viên có thể bỏ thời gian tự tìm hiểu mảng lập trình mình thích, điểm số rất thuận lợi để sau này đi xin việc. Em chưa học lập trình ở VN bao giờ nên thắc mắc không biết giờ này mấy trường đại học công lập nhà mình đang dạy cái gì nhỉ? Cấu trúc của khoá học ra sao?

Em nghe nói vẫn có những trường ôm giáo trình của mấy chục năm trước để giờ học sinh vẫn phải học mấy thứ ba lăng nhăng như Pascal với toán rời rạc phải không? Và nghe nói nữa là họ dạy những thứ khó một cách không cần thiết, không thực tế và thậm chí có những giảng viên còn tư duy theo kiểu lỗi thời? Thực sự các bác thấy học như vậy có ổn không?”

Tuy vậy, nhiều thành viên khác thì hoàn toàn không cho rằng đây là một cách nhìn đúng đắn về vấn đề và còn có phần thiển cẩn.

“Muốn học mấy cái này thì cần gì qua nước ngoài tốn tiền vậy? Qua Nhất Nghệ, Aptech hoặc mấy trung tâm lập trình họ cũng dạy vậy thôi :)))

Note nhẹ là mình tốt nghiệp Thạc Sĩ Computer Science, bằng giỏi, đại học top 10 UK nên cũng từng trải nghiệm chuyện học/làm nước ngoài rồi nhé” – Bạn Huy Hoàng Phạm chia sẻ.

Mình nghĩ khóa học của bạn chỉ tương tự một khóa học nghề thôi. Chứ còn trình độ đại học thì chắc chắn là phải học toán, các môn lý thuyết mà bạn kêu “ba lăng nhăng” nhiều.

Không tin bạn xem chương trình học Computer Science của Stanford (Stanford đang là một trong những trường đại học kỹ thuật hàng đầu thế giới, hình như năm vừa rồi xếp thứ 2 hay sao ấy), nó sẽ còn nhiều thứ ” lăng nhăng” hơn. Nhìn chung là việc học ngôn ngữ, công nghệ là những thứ có thể tự học đc, ngôn ngữ hay công nghệ thì cũng chỉ là công cụ thôi.

Còn ở đại học người ta dạy cho mình cái nền tảng, cái tư duy là chính. Học đại học xong có thể bạn không code giỏi, nhưng bạn lại có thể (mình nói là có thể) thiết kế ra những hệ thống khủng, khiến những hệ thống đó hoạt động hiệu quả (thứ mà những người chỉ học lập trình gần như không làm hiệu quả được)”

Nhìn chung, đa phần ý kiến đều không đồng tình với chủ confession và tin rằng việc học lập trình không có quá nhiều sự khác biệt giữa trong nước và đi du học. Tuy vậy, mọi người đều đồng tình rằng nếu có cơ hội thì nên đi du học để có thể học hỏi nền văn hóa của nước bạn. Hãy cho chúng tôi biết ý kiến của các bạn ở phần comment.

Tìm việc làm IT HOT nhất Việt Nam

Quy tắc 24×3 cho sáng tạo trong lập trình!

Innovation vốn dĩ ám chỉ những sáng kiến mới mẻ. Đó là một nỗ lực để làm những việc khác với những gì từ trước đến nay. Thế nhưng con người lại có xu hướng chỉ tiếp nhận những thứ quen thuộc với mình.

Ngày nay, đổi mới là thứ mà hầu hết các tổ chức luôn tuyên bố rằng họ đang theo đuổi. Tuy vậy, đa phần chúng ta luôn cố gắng tìm ra những lí do chỉ trích để thực hiện chúng hơn là cách để cải thiện tình hình và đánh giá một ý tưởng mới theo con mắt khách quan.

Nói cách khác thì đó là phản ứng liên quan tới cảm xúc của chúng ta hơn là logic từ bộ não.

Tác giả Anthony Tjan ủng hộ một quá trình mà ông đề cập đến là tư duy 24 x 3. Nó có thể được giải thích với ví dụ đơn giản sau. Một người nào đó mang đến cho bạn 1 ý tưởng mới của họ, và bạn đầu tiên chờ 24 giây trước khi trả lời. Nếu bạn đã hiểu về ý tưởng đó thì hãy thử và chờ 24 phút trước khi có quyết định tiếp theo, và tiếp tục chờ chờ 24 giờ trước khi đưa ra quyết định có thực hiện ý tưởng mới.

Ông tin rằng thời gian này cho phép bạn phân tích một cách hợp lý ý tưởng và giá trị của nó hơn là ra một phê bình nhanh chóng như bản năng của chúng ta.

Tuy nhiên, đây thường là một thách thức đối với các nhà lãnh đạo. Thật vậy, một nghiên cứu gần đây đã phát hiện ra rằng khi người ta ngồi vào vị trí “leader”, các thành viên khác của nhóm cảm thấy leader đã nhận được số tiền không cân xứng trong các nhiệm vụ, với các cuộc thảo luận này cũng được đánh giá là kém hơn về các khía cạnh khác nhau . Dẫn tới những đóng góp cho hiệu suất kém hơn. Chính vì điều này mà họ rất sợ sự thay đổi và có cái nhìn tiêu cực đối với những thay đổi mới từ trong công ty.

Đây là một điều vô cùng đáng tiếc bởi chúng ta đang sống trong một thế giới mà các nhà lãnh đạo thường được đánh giá cao bởi quyết định của họ. Vì vậy hãy tạm dừng suy nghĩ chỉ trích một ý tưởng mới và tập thói quen đánh giá chúng một cách thận trọng.

TopDev

  Bài học tôi rút ra được từ việc "clone" ứng dụng Uber
  Một số mẹo ít người biết để trang web chạy nhanh hơn gấp đôi!

CMS là gì? List các CMS phổ biến hiện nay

cms là gì

Trong quá trình phát triển và vận hành trang web, chắc hẳn bạn sẽ thường xuyên nghe tới từ “CMS”. Tuy nhiên trong thực tế có khá ít người hiểu được ý nghĩa của CMS là gì?

Bài viết này sẽ giải thích những điều cơ bản về CMS cũng như giới thiệu cho các bạn những ưu, nhược điểm của nó và các CMS phổ biến hiện nay.

CMS là gì?

CMS là chữ viết tắt của Content Management System. Còn gọi là hệ thống quản trị nội dung nhằm mục đích giúp dễ dàng quản lý, chỉnh sửa nội dung. Nội dung ở đây là text, video, nhạc, hình ảnh, files… CMS là nơi người quản trị Website có thể cập nhật, thay đổi nội dung trên Website. Một hệ thống CMS tốt sẽ cho phép vận hành Website mà không cần sự can thiệp, hỗ trợ từ người lập trình trang web.

Hệ thống CMS giúp tiết kiệm thời gian quản lý, chi phí vận hành và bảo trì nên hiện nay có rất nhiều công ty sử dụng. Không chỉ là công ty mà hiện nay các blog cá nhân cũng ra đời nhiều, giải pháp sử dụng CMS giúp dễ dàng xây dựng website và quản lý nội dung. Bên cạnh đó còn tiết kiệm được chi phí xây dựng website.

cms là gì
cms là gì

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

CMS là nơi mà tất cả những người phụ trách liên quan đến các tính năng của Website phải sử dụng. Khi nhắc tới CMS bạn có thể hiểu nó như là phần quản trị (admin) của một Website. Nơi quản lý tất cả dữ liệu Website của bạn.

  Nhập môn lập trình web, có nên học Wordpress?
  Hướng dẫn cách fix và restore Wordpress bị shell hack hoặc chiếm quyền điều khiển

Chức năng cơ bản của CMS là gì?

CMS có các chức năng cơ bản sau:

  • Quản lý version
  • Quản lý nội dung
  • Sitemap
  • Tìm kiếm
  • Quản lý quyền sử dụng
  • Chức năng WYSIWYG
  • Cập nhật Homepage,…

Các loại CMS

1. CMS mã nguồn mở (Open Source)

Do sự phát triển của công nghệ và ngôn ngữ. Có rất nhiều mã nguồn mở được sử dụng phổ biến trên thế giới, giúp xử lý những bài toán xây dựng Website phục vụ cho cá nhân và doanh nghiệp như WordPress, Joomla, Drupal, Magento…

Do lợi thế của những ngôn ngữ trên là nền tảng mở, được phát triển và hoàn thiện trong một khoảng thời gian dài, nên việc quản trị Website trên những nền tảng này là khá thuận nhiều và có khả năng tùy biến nhiều thứ. Một người quản trị Website nếu có khả năng quản lý một trong các nền tảng trên thì rất dễ để quản trị những nền tảng và công cụ khác.

Đặc điểm của các CMS kể trên là ngay sau khi chủ website cài đặt nền tảng mở này lên trên Server (máy chủ) thì các tính năng cơ bản của nó đã có đầy đủ rất nhiều tính năng như: quản lý bài viết, quản lý trang, quản lý tài khoản, quản lý liên kết, tag, cấu hình….

2. CMS tự code hay xây dựng, Framework

Chúng hoàn toàn khác với các CMS Open Source kể trên. Khi tự xây dựng CMS, tất cả sẽ được xây dựng lại từ đầu. Mọi thứ sẽ vất vả hơn rất nhiều, nhưng đổi lại bạn có một CMS theo ý mình, có khả năng tùy biến linh hoạt nhất. Bạn có thể xử lý những bài toán đòi hỏi những thứ từ đơn giản tới phức tạp, theo mọi quy trình, mọi yêu cầu mà bạn muốn.

Nhưng có một vấn đề, thường những công ty xây dựng CMS bằng Framework, tự code họ có sự đầu tư, hiểu biết về trải nghiệm người dùng là khác nhau. Bởi vậy, CMS bạn sử dụng có thể thân thiện hoặc là không.

Do đó lời khuyên là nếu nhu cầu bài toán bạn cần là sử dụng CMS tự code, framework. Hãy xin đơn vị thiết kế Website một số demo CMS (phần quản trị) của họ và đánh giá.

3. CMS được build sẵn và mất phí

Đó là các CMS được build sẵn và đóng gói, bạn chỉ việc mua license, đóng phí support hàng năm và yên tâm làm nội dung hoặc bán hàng. Những việc như vận hành hệ thống, sửa lỗi hay nâng cấp đều do đơn vị cung cấp làm. Hệ thống có nhiều chức năng hữu ích có sẵn, hoạt động ổn định.

Các CMS thông dụng hiện nay

Phổ biến hiện nay người ta hay sử dụng WordPress, Magento (Opensource) hoặc làm shop có phí là Shopify…trong đó WordPress thích hợp với các website dạng blog, tin tức, giới thiệu công ty, shop bán hàng nhỏ và vừa… Magento thích hợp làm các website thương mại điện tử. Top các CMS nổi trội:

  • WordPress (Opensource)
  • Magento (Opensource)
  • Joomla (Opensource)
  • Drupal (Opensource)
  • Shopify (Có phí)
  • Và còn nhiều nữa…

Trong các website kể trên thì WordPress chiếm ưu thế hơn cả bởi tính đơn giản, dễ sử dụng và hỗ trợ nhiều plugin của nó.

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

Xem thêm việc làm CMS hấp dẫn lương cao tại TopDev!

Console không chỉ có phương thức log!

Bài viết gốc đăng tải tại CodeLabo.

Người viết: Nguyen Hai Duc

console là công cụ đắc lực hỗ trợ chúng ta trong quá trình phát triển ứng dụng, đặc biệt là khi tìm và sửa lỗi. Tuy nhiên, console còn rất nhiều phương thức khác cũng thú vị và hữu ích không kém. Hãy cùng CodeLabo tìm hiểu trong bài viết này nhé!

console.log

console.log có lẽ là phương thức được sử dụng nhiều nhất để in giá trị của biến ra màn hình.

const name = 'CodeLabo'
console.log('Hello', name) // Hello CodeLabo

Bên cạnh đó, console còn có 3 phương thức khác có tính năng tương tự: .warn.info, và .error.

console.info('CodeLabo - more experiments, more knowledge')
console.warn('Hãy like Facebook Page của CodeLabo nhé!')
console.error('Đừng quên share cho mọi người cùng biết nha!')

Ngoài việc in giá trị, .warn và .info hiển thị kết quả ở một định dạng khác, giúp bạn phân biệt “mức độ nghiêm trọng” của thông điệp, trong khi .error in ra stack trace, giúp bạn xác định lỗi xuất hiện ở đâu.


Bạn có thể dùng tính năng lọc để lựa chọn hiển thị kết quả theo từng loại thông điệp. Tính năng này có mặt ở hầu hết các trình duyệt.

console.trace

Chúng ta cũng có thể in ra stack trace bằng cách sử dụng console.trace.

function hello(name = 'CodeLabo') {
  console.trace('name:', name)
  return `Hello ${name}!`
}

hello()

Kết quả:

EHKOO @ FACEBOOK

Like us on Facebook

Tặng một like thể hiện tình cảm nha!

console.dir và console.dirxml

console.dir in ra JavaScript sau khi đã được định dạng đẹp đẽ.

const fancyThings = {
  car: '🏎️ Ferrari',
  watch: '⌚ Cartier',
  clothing: {
    shoes: '👠 Christian Louboutin',
    dress: '👗 Versace',
  },
  boat: '🛥️ Sunseeker',
}

console.dir(fancyThings)

Riêng console.dirxml thì in ra markup của nút DOM. Ví dụ:

<!DOCTYPE html>
<html lang="en">

<head>
  <!-- ... -->
</head>

<body>
  <main>
    <h1>hello</h1>
    <p>this is a <strong>text</strong></p>
  </main>

  <script>
    console.dirxml(document.body);
  </script>
</body>

</html>

Kết quả trên Google Chrome:

console.assert

console.assert sẽ nhận 2 tham số. Nếu tham số thứ nhất trả về false, tham số thứ 2 sẽ được in ra màn hình.

// 1 + 1 == 2, trả về true, không có gì được in ra cả
console.assert(1 + 1 === 2, '1 + 1 khác 2')

// 1 + 1 == 3 trả về false, '1 + 1 khác 3' sẽ được in ra
console.assert(1 + 1 === 3, '1 + 1 khác 3')

console.clear

Bạn có thể gọi phương thức console.clear() để xóa đi những kết quả đã được in ra trước đó. Hoặc bạn có thể nhấn Ctrl + L trong Chrome, hoặc Ctrl + Shift + L trong Firefox, để đạt được kết quả tương tự.

console.clear()

console.count và console.countReset

Mỗi lần bạn gọi đến console.count(), phương thức này sẽ tự động tăng lên 1. Bạn có thể truyền vào một nhãn tùy ý để đánh dấu các bộ đếm khác nhau. Và bạn dùng console.countReset(label) để quay ngược bộ đếm về lại 0.

const arr = [1, 2, 3, 4, 5]
arr.forEach(nb => {
  if (nb % 2 === 0) {
    console.count('chẵn')
  } else {
    console.count('lẻ')
  }
})

// lẻ: 1
// chẵn: 1
// lẻ: 2
// chẵn: 2
// lẻ: 3

Đo thời gian thực thi

Để đo thời gian thực thi của một đoạn mã, bạn có thể dùng console.time và console.endTime. Phương thức console.time(label) nhận vào một chuỗi dùng làm nhãn cho bộ đếm giờ. Sau đó gọi đến console.endTime(label) với nhãn cùng tên, để hiển thị thời gian thực thi.

console.time('fetching data')
fetch('https://jsonplaceholder.typicode.com/users')
  .then(d => d.json())
  .then(() => console.timeEnd('fetching data'))

// fetching data: 424ms

Đặt kết quả vào nhóm

Sử dụng console.group và console.groupEnd để nhóm các giá trị được hiển thị lại với nhau. Ta cũng có thể đặt tên cho các group, và group này có thể nằm trong group khác.

console.group('🖍️ colors')
console.log('green')
console.log('orange')
console.group('HEX')
console.log('#1AB374')
console.log('#FF7B5F')
console.groupEnd()
console.log('blue')
console.groupEnd()

console.table

Phương thức console.table giúp chúng ta hiển thị array hoặc object dưới dạng bảng.

function Single(title, singer, year) {
  this.title = title
  this.singer = singer
  this.year = year
}

const s = new Single('Có ai thương em như anh', 'Tóc Tiên', '2018')

console.table(s)

Sử dụng CSS Style

Có bao giờ bạn mở console khi đang xài Facebook và nhận được thông báo như thế này:

Họ đã làm điều đó như thế nào? Hóa ra, ta có thể áp dụng CSS style trong console.log bằng cách dùng kí tự đặt chỗ %c.

console.log(
  'Hello %cCodeLabo%c!',
  'color: #1ab374; font-weight: bold; font-size: 2rem; text-shadow: 0 0 5px rgba(0,0,0,0.2);',
  'color: #ff7b5f; font-weight: bold; font-size: 2rem; text-shadow: 0 0 5px rgba(0,0,0,0.2);',
)

Mỗi %c sẽ định dạng cho những ký tự phía sau nó. Kết quả là:

Bên cạnh %c, console còn hỗ trợ những kí tự đặt chỗ khác như %o%f hay %d. Bạn có thể xem chi tiết ở đây.

Kết

Ngoài việc cung cấp phương thức console.log() rất hữu dụng khi tìm và sửa lỗi, console còn có những phương thức khác cũng rất tiện dụng trong quá trình phát triển dự án. Bạn có biết cách sử dụng console nào sáng tạo hơn nữa không? Hãy cùng chia sẻ nhé.

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

Xem thêm việc làm IT job trên TopDev

TopDev via ehkoo