Home Blog Page 176

Cách sử dụng các plugins jQuery trong VueJS

Cách sử dụng các plugins jQuery trong VueJS

Người viết: Max

Hế lô! Sau 1 thời gian tu luyện trên núi mình đã quyết định xuống núi để quay lại chiến đấu cùng các anh em. Hôm nay mình xin giới thiệu đến các bạn 1 thứ hoàn toàn mới và khá hay ho mang tên “Viu gi ét” :))

Nếu bạn là một dev front-end chân chính thì chắc hẳn ít nhất một lần đã nghe và có thể là đang làm với framework này rồi nhỉ.

Mình cũng vậy, sau khi bị nó thả thính và bắt đầu mê nó nên mình đã quyết định áp dụng dùng thử nó với 1 plugin của WordPress.

Trước đây mình cũng đã từng dev AngularJS, rồi Angular 2+ và cũng suýt tẩu hỏa nhập ma với nó. Vì vậy mình đã xách mông lên tìm một môn võ mới mang tên VueJS. Sau 1 thời gian dev với VueJS thì mình đã phải thốt lên “Sao mày không đến với cuộc đời tao sớm hơn :))” bởi vì nó quá tuyệt vời và phù hợp với những nhu cầu của mình.

Và để bắt đầu với seri lầy lội cùng VueJS mình xin giới thiệu 1 trick khá hay mà VueJS có thể làm được đó là:

Cách sử dụng các plugins của Jquery trong ứng dụng VueJS một cách mượt mà.

Source code:

Các bạn có thể xem qua source code và demo tại đây.

Vấn đề

Hẳn là khi các bạn làm với các project áp dụng mấy framework kiểu như VueJS này thì một số thư viện cũng chưa hỗ trợ mà vẫn phải dùng thêm các plugins của jQuery đúng không nào?

Bình thường thì nếu bạn làm với ứng dụng Web kiểu Server-Side Rendering thì phần html đã được render ra khi người dùng load trang và chỉ cần áp dụng vài dòng code Javascript với Jquery là chạy ngay. Nhưng với các framework như VueJS thì cấu trúc DOM không được load ngay từ đầu nên ta không thể chạy các plugin của jQuery theo cách thông thường.

Ở đây mình xin demo 1 trường hợp sử dụng plugin select2 của Jquery để chạy trong ứng dụng VueJS.

Giải pháp

Ta sẽ tạo ra 1 component và wrap nó lại.

<script type="text/x-template" id="template-select2">
    <select class="vue-select2">
        <option v-for="option in options"
        :value="option.key"
        :selected="option.key=== selected">{{option.value}}</option>
    </select>
</script>
<script>
Vue.component('vue-select2', {
        template: '#template-select2',
        props: ['options', 'selected']
});
</script>

Component này sẽ có 2 props là options là list options để select và selected nếu muốn set 1 option nào đã được select.

Để làm được ta cần phải tìm hiểu 1 chút về life cycle của VueJS nhé.

Như các bạn thấy trong ảnh thì đến đoạn mounted là thời điểm mà Vue render html và replace vào cấu trúc DOM và đây chính là cơ hội để mình có thể chạy plugin select2. Và thời điểm thứ 2 ta cần quan tâm là lúc component chuẩn bị xóa đi khỏi DOM đó là beforeDestroy – đây là thời điểm tốt để các bạn xóa tất cả các sự kiện trên component đó đồng thời hủy select2 chạy trên component đó.

Vue.component('vue-select2', {
        template: '#template-select2',
        props: ['options', 'selected'],
        model: {
            prop: 'selected',
            event: 'change'
        },
        mounted: function() {           
            $(this.$el).select2();
        },
        beforeDestroy: function() {
            $(this.$el).off().select2('destroy');
        }
    });

Xong rồi đó, component đã có thể chạy được ngay. Nhưng vẫn còn một vấn đề nữa đó là bạn cần phải cập nhật sự thay đổi lên parent component chứ nhỉ. Để làm được điều đó ta bắt sự kiện change của select đó rồi dùng $emit để đẩy sự kiện cho thằng cha.

mounted: function() {
       	var vm = this;
          
		$(this.$el).select2();
           $(this.$el).on('change', function(e) {
           	vm.$emit('change', vm.$el.value);
           });
       },

Sau đó ở thằng cha bắt sự kiện @change để cập nhật trạng thái option đã được select (trong demo mình dùng tính kiểu two-way binding để chuyền ngược lại cho thằng cha luôn).

Xong rồi đó, ở demo trên kia thì mình có thêm 1 số tính năng nữa để demo khi thằng cha thêm option hoặc thay đổi option đang được select thì thằng con cũng cập nhật được trạng thái của nó.

Kết luận

Mình xin tổng kết lại nhé. Ở đây chỉ có 2 bước quan trọng là:

  1. Chọn thời điểm component được thêm vào DOM để chạy plugin của Jquery và thời điểm để hủy các sự kiện khi component đó bị hủy đi.
  2. Tìm sự kiện thay đổi trạng thái của component con để cập nhật lên compnent cha để biết sự thay đổi.

Quá đơn giản phải không nào. Mình cũng bắt đầu thích VueJS vì sự tương thích của nó với các plugin của jQuery vì jQuery nó đã quá to rồi và hệ sinh thái của nó quá lớn nên thời gian này mình vẫn còn phụ thuộc vào nó rất nhiều trong khi các thư viện hỗ trợ cho VueJS còn chưa nhiều.

TopDev via BlogK

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

Xem thêm tuyển dụng lập trình VueJS trên TopDev

Khi nào nên dùng Golang? Nó dùng tốt trong trường hợp nào?

khi-nao-nen-dung-golang

Bạn có biết khi nào nên dùng Golang? Dùng Golang đúng cách như thế nào? Sau 8 năm hoạt động, ngôn ngữ Go của Google ra mắt phiên bản 1.8.1 vào tháng 4 năm 2017 được lựa chọn bởi các chuyên gia lập trình để trở thành ngôn ngữ lập trình dành cho những dự án cloud-centric quan trọng nhất thế giới.

Tại sao Go được chọn bởi các nhà phát triển của những dự án như Docker và Kubernetes? Đặc điểm của Go là gì? nó khác gì với các ngôn ngữ lập trình khác và phù hợp cho loại dự án nào nhất? Trong bài này, chúng ta sẽ khám phá những tính neăng của Go, trường hợp tối ưu, điểm thiếu sót và hạn chế của Golang.

Go nhỏ gọn và đơn giản

Go hay Golang là sản phẩm được phát triển bởi các nhân viên của Google, đặc biệt là kỹ sư nổi tiếng của Google, một chuyên gia về Unix, ông Rob Pike, tuy nhưng đó không phải là một dự án của Google. Thay vào đó, Go được phát triển như một dự án open source.

Go đơn giản để học, dễ làm việc và dễ dàng đọc bởi các nhà phát triển khác. Và Go không hề có một bộ tính năng lớn, đặc biệt là khi so sánh với các ngôn ngữ như C ++. Ngoài ra Go còn gợi nhớ đến C bởi cú pháp của nó, điều đó giúp các lập trình viên C lâu năm tương đối dễ dàng học nó. Điều đó nói rằng, nhiều tính năng của Go, đặc biệt là tính năng concurrency.

khi nào nên dùng golang

Tương tự như ngôn ngữ C được dùng để xây dựng và duy trì các ứng dụng cross-platform, thì Go cũng có nhiều điểm chung với Java. Và khi nào nên dùng golang? Nó như một phương tiện cho phép lập trình một cách nhanh chóng mà có thể chạy ở bất cứ nơi nào, thì bạn có thể tưởng tượng Go và Python giống nhau ở điểm này, mặc dù giữa chúng có nhiều điểm khác biệt hơn là tương đồng.

  #2 Lập trình Golang ăn xổi: Clean architecture

Dành cho tất cả mọi người

Tài liệu về Go, mô tả Go là “một ngôn ngữ biên dịch nhanh, static type, compiled language (ngôn ngữ biên dịch), nhưng lại giống như một dynamic, interpreted language (ngôn ngữ thông dịch)”. Ngay cả khi một chương trình Go lớn, cũng sẽ được biên dịch chỉ trong vòng vài giây. Thêm vào đó, Go còn tránh được những điểm hạn chế của C liên quan đến các file và thư viện. Nói tóm lại, Go giúp cuộc sống của lập trình viên trở nên dễ dàng bằng nhiều cách:

Tiện lợi:

Go được so sánh với các scripting language (ngôn ngữ kịch bản) như Python với khả năng đáp ứng nhiều nhu cầu lập trình phổ biến. Một số tính năng này được tích hợp vào trong chính ngôn ngữ, chẳng hạn như “goroutines” là một hàm cho concurrency và kiểu giống như behavior, ngoài ra các tính năng bổ sung được có sẵn trong các package thư viện Go chuẩn, như http package của Go. Giống như Python, Go cung cấp khả năng quản lý bộ nhớ tự động bao gồm việc garbage collection (dọn file rác).

Không giống các ngôn ngữ kịch bản như Python, Go biên dịch (compile) code ra nhị phân một cách nhanh chóng. Và không giống như C hoặc C ++, Go biên dịch cực nhanh, nhanh đến mức khiến bạn cảm thấy khi làm việc với Go giống như là làm việc với một ngôn ngữ kịch bản hơn là một ngôn ngữ biên dịch.

Hơn nữa, hệ thống Go build đơn giản hơn so với các ngôn ngữ biên soạn khác. Phải trải qua một vài bước và lập kế hoạch để xây dựng và vận hành một dự án Go.

Tốc độ:

Run nhị phân chậm hơn so với C, nhưng sự khác biệt về tốc độ này không đáng kể đối với hầu hết các ứng dụng. Hiệu suất của Go tốt ngang với C trong phần lớn công việc và nói chung là nhanh hơn so với các ngôn ngữ khác nổi tiếng về tốc độ (ví dụ: JavaScript, Python và Ruby).

khi nào nên dùng golang

Linh hoạt:

Các file executable được tạo bằng toolchain của Go có thể hoạt động độc lập mà không cần external dependencies mặc định. Toolchain hỗ trợ cho nhiều hệ điều hành, hardware platform (chuẩn phần cứng của máy tính) khác nhau và có thể được sử dụng để biên dịch các chương trình nhị phân qua các nền tảng.

Khả năng tương thích:

Go cung cấp tất cả những điều trên mà không bị mất quyền truy cập vào hệ thống bên dưới (underlying system). Phương mềm Go có thể liên kết với thư viện C bên ngoài hoặc thực hiện các lệnh call hệ thống native. Ví dụ trong Docker, Go interface với các chức năng Linux low-level, cgroups và namespace (tạm dịch: không gian tên), để hoạt động với container.

Hỗ trợ:

Toolchain Go có sẵn dưới dạng binary của Linux, MacOS hoặc Windows hoặc như là một container trong Docker. Go được đặt mặc định trong nhiều bản phát hành phổ biến của Linux, như Red Hat Enterprise Linux và Fedora, giúp cho việc triển khai Go source trở nên dễ dàng hơn đối với các nền tảng trên. Go cũng hỗ trợ mạnh mẽ cho nhiều development environment (môi trường phát triển) của bên thứ ba, từ Microsoft Visual Studio Code đến Komodo IDE của ActiveState.

Khi nào nên dùng Golang?

khi nào nên dùng golang? Và dùng trong trường hợp nào? Không có ngôn ngữ nào phù hợp với mọi loại công việc, nhưng có một số ngôn ngữ phù hợp với nhiều mục đích hơn những ngôn ngữ khác. Mạnh mẽ khi phát triển một số loại ứng dụng chính:

Phân phối các network service (dịch vụ mạng).

Các chương trình ứng dụng mạng (network application) sống hay chết là dựa vào concurrency và các tính năng native concurrency của Go, các goroutines và các channel, rất phù hợp cho các tác vụ đó. Do đó, có nhiều dự án Go dành cho mạng, các chức năng distributed (phân phối) và dịch vụ đám mây: API, web server, minimal frameworks cho các web application và các loại tương tự.

Sự phát triển của cloud-native.

Các tính năng concurrency và network của Go và tính linh hoạt cao của nó làm cho nó phù hợp với việc xây dựng các ứng dụng cloud-native. Trên thực tế, Go đã được sử dụng để xây dựng một trong những nền tảng phát triển ứng dụng dựa trên cloud-native, ứng dụng hệ thống containerization Docker.

Thay thế cho cơ sở hạ tầng hiện có.

Phần lớn các phần mềm của chúng tôi phụ thuộc vào cơ sở hạ tầng Internet đã lạc hậu. Việc viết lại những thứ như vậy bằng Go mang lại nhiều lợi ích, như giữ an toàn bộ nhớ tốt hơn, triển khai trên nhiều nền tảng dễ dàng hơn và một code base “sạch” để hỗ trợ bảo trì trong tương lai. Một server SSH mới được gọi là Teleport và một phiên bản mới của Network Time Protocol được viết bằng Go, được cung cấp như phương pháp thay thế cho các đối tác thông thường của họ.

khi nào nên dùng golang

Go không phù hợp với việc gì?

Go được thiết kế nhỏ gọn và dễ hiểu, vì vậy dẫn đến một số tính năng nhất định bị bỏ qua. Thế nên một số tính năng phổ biến có trong các ngôn ngữ khác thì lại không có trong Go.

Một trong những tính năng Go không có là generics, là kiểu biểu diễn của Types dưới dạng tham số khi định nghĩa lớp, hàm và interfaces. Go không bao gồm generics và steward của ngôn ngữ này ngăn cản việc thêm generics vào vì cho rằng điều đó sẽ làm giảm tính đơn giản. Tuy vẫn có thể làm việc tốt với Go, nhưng rất nhiều lập trình viên vẫn muốn thêm generics vào nó.

Nhược điểm khác của Go là kích thước của các chương trình. Code được biên dịch kiểu static (tĩnh) theo mặc định. Cách này làm đơn giản hóa quá trình xây dựng và triển khai, nhưng dẫn đến việc chỉ một đoạn code đơn giản “Hello, world!” lại nặng đến khoảng 1,5MB trên Windows 64-bit. Nhóm nghiên cứu của Go đang cố gắng để giảm kích thước của những chương trình này trong những bản phát hành kế tiếp. Có những giải pháp cho việc này là nén file hoặc xoá bỏ thông tin về debug của Go.

Tuy nhiên, một tính năng khác của Go, quản lý bộ nhớ tự động (AMM), có thể được xem như là một nhược điểm, vì garbage collection (quá trình thu gom file rác) đòi hỏi một số memory nhất định để xử lý. Theo thiết kế, Go không thể quản lý bộ nhớ bằng tay và việc dọn dẹp file rác ở Go bị chỉ trích là không thể giải quyết tốt các loại memory load (bộ nhớ tải) xuất hiện trong các ứng dụng của doanh nghiệp.

Xét về mặt tích cực, Go 1.8 mang lại nhiều cải tiến trong quản lý bộ nhớ và dọn dẹp file rác để giảm độ trệ (lag). Tất nhiên, các nhà phát triển Go có thể sử dụng phân bố (allocation) bộ nhớ bằng tay trong một extension của C hoặc bằng cách sử dụng thư viện quản lý bộ nhớ thủ công của bên thứ ba.

Tình hình xung quanh việc xây dựng một GUI (giao diện đồ họa người dùng) phong phú cho các ứng dụng của Go, chẳng hạn như trong các ứng dụng dành cho desktop, vẫn còn rải rác.

Hầu hết các sản phẩm từ Go là các command-line tool hoặc các dịch vụ network. Mặc dù vậy, vẫn có rất nhiều dự án đang được thực hiện để mang lại một GUI phong phú cho các ứng dụng của Go. Có các framework như GTKGTK3. Một dự án khác nhằm cung cấp platform-native UI, mặc dù các giao diện này dựa vào các binding của C và không được viết bằng Go. Ngoài ra, bởi vì Go được thiết kế là nền tảng độc lập, nên không có bất kỳ cái gì được nêu ở trên có thể trở thành một phần của package chuẩn.

Mặc dù Go có thể tương tác với các chức năng của native system nhưng nó không được thiết kế để tạo ra các component của low-level system, chẳng hạn như kernel (hạt nhân) hoặc device driver hoặc các embedded system (hệ thống nhúng).

Sau cùng, tốc độ run ứng dụng và trình dọn dẹp file rác cho các ứng dụng Go phụ thuộc vào hệ điều hành nằm bên dưới. (Các lập trình viên quan tâm đến một ngôn ngữ dành cho loại công việc này có thể tìm hiểu Rust của Mozilla.)

  Golang là gì? Top 07 Framework tối ưu “cực căng” cho Golang

Đâu là con đường của Go?

Go có thể đang ở một “ngã ba đường”. Giai đoạn phát triển tiếp theo của Go có thể được thúc đẩy bởi nhu cầu phát triển cơ bản của nó, Go cần chú ý về việc thay đổi ngôn ngữ để có thể đáp ứng tốt hơn, chứ phải cứ cứng đầu mà không thay đổi. Nói cách khác, Go hoàn toàn có thể thêm các tính năng mà ban đầu nó không có, giống như generics.

Các lập trình viên sử dụng Golang rõ ràng muốn những điều này. Một cuộc khảo sát ý kiến người dùng Golang vào năm 2016 đã xác định được khi nào nên dùng golang, và generic là một trong những thay đổi mang tính cải thiện nhất, tiếp theo là dependency và package management. Những thay đổi này có thể giúp Go đạt một vị trí cao trong giới lập trình nơi mà Java, JavaScript và Python hiện đang thống trị .

Ngay cả khi không có bất kỳ sự thay đổi lớn nào đối với Go, thì tôi luôn mong được thấy Go sử dụng cho việc xây dựng lại cơ sở hạ tầng và trở thành một phần của dự án sử dụng multi-language (đa ngôn ngữ). Một dự án có sử dụng Go trong một phần của việc lập trình hệ thống đó là Ethos, một hệ điều hành như một phần mềm bảo mật chất lượng cao. Kernel được viết bằng C, nhưng userspace của ứng dụng được viết bằng Go, đây là một cách thông minh để tận dụng những gì phù hợp với C, trong khi vẫn có thể tận dụng các thế mạnh của Go.

Việc triển khai của bên thứ ba đối với công cụ Go cũng đang lan rộng. ActiveGo của ActiveState cung cấp một phiên bản được hỗ trợ về mặt thương mại của Golang và cả LLVM cùng các dự án gccgo được triển khai open source của Go bằng toolchain.

Một cách khác mà Go có thể phát triển là tồn tại như một nền tảng để phát triển các ngôn ngữ hoàn toàn mới khác. Một ví dụ là ngôn ngữ Have. Sử dụng nhiều ý tưởng từ Go và transpile vào Go để dễ thực hiện, nhưng tinh gọn cú pháp của Go và hiện thực hoá một số các concept tương tự những theo cách riêng. Một dự án khác có tên Oden, tiếc là không còn được phát triển, sử dụng assembler và toolchain của Go để biên dịch một ngôn ngữ mới được thiết kế dựa trên cảm hứng từ các ngôn ngữ khác như Lisp và Haskell.

Tương lai của Golang chỉ mới bắt đầu giờ bạn đã biết khi nào nên dùng golang. Nhưng chắc chắn nó sẽ được sử dụng trong cloud, nơi mà tốc độ và sự đơn giản của nó giúp dễ dàng xây dựng một cơ sở hạ tầng có thể mở rộng, có thể được duy trì trong thời gian dài.

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

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

TopDev via Infoworld

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

Mô tả công việc Devops

Mô tả công việc Devops – DevOps Engineers là sự kết hợp giữa Developers (Dev) và System Admins (“Op”-erations) với mục đích giảm chi phía và vòng lập của dự án, là cầu nối giữa Developers và nhóm IT khác.

DevOps Engineers hiểu cặn kẽ vê vòng đời phát triển phần mềm và các công cụ tự động hóa được sử dụng để tạo CI / CD Pipeline (tích hợp liên tục / phân phối liên tục), giúp giảm thiểu lỗi, tạo điều kiện triển khai nhanh chóng các sản phẩm với chất lượng tốt hơn và đồng thời cải thiện khả năng duy trì cơ sở hạ tầng.

Hy vọng, Mẫu bảng mô tả công việc lập trình Devops 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.

Tuyển dụng Devops lương cao trên TopDev

Mẫu bảng công việc Devops

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

  • Có kinh nghiệm làm việc như một DevOps Engineer hoặc các vị trí tương tự
  • Có kinh nghiệm về Network, server và giám sát trạng thái ứng dụng
  • Kiến thức tốt về ngôn ngữ lập trình
  • Kinh nghiệm làm việc với cơ sở dữ liệu và SQL
  • Kĩ năng giải quyết vấn đề
  • Có thể làm việc độc lập và là một phần của nhóm.

MÔ TẢ CÔNG VIỆC

  • Có kinh nghiệm với các điện toán đám mây (AWS, Azure, GCP) để triển khai các bản nâng cấp và sửa lỗi.
  • Thực hiện các công cụ và khung tự động hóa (CI/CD pipelines).
  • Thiết kế, phát triển và triển khai tích hợp phần mềm dựa trên phản hồi của người dùng.
  • Khắc phục sự cố sản xuất và phối hợp với nhóm phát triển để hợp lý hóa việc triển khai mã.
  • Phân tích Code và truyền đạt các đánh giá chi tiết cho team developer để đảm bảo sự cải thiện trong các ứng dụng và hoàn thành kịp thời các dự án.
  • Phối hợp với các thành viên trong nhóm để cải thiện công cụ, hệ thống và quy trình kỹ thuật và bảo mật dữ liệu.
  • Tối ưu hóa kiến trúc điện toán.
  • Phát triển và duy trì tài liệu thiết kế và xử lý sự cố.

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

  8 Bước Trong Lộ Trình Trở Thành DevOps Engineer
   Top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev
  Top 5 câu hỏi phỏng vấn Devops Engineer thường gặp và cách trả lời

Tham khảo thêm những việc làm lập trình hot nhất thị trường tại đây

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

Mô tả công việc lập trình iOS mức lương hấp dẫn

iOS Developer chịu trách nhiệm xây dựng và phát triển các ứng dụng cho thiết bị di động được cung cấp bởi hệ điều hành Apple Apple iOS. Một iOS Developer giỏi phải thành thạo một trong hai ngôn ngữ lập trình cho nền tảng này: Objective-C hoặc Swift. Hy vọng, Mẫu bảng mô tả công việc lập trình iOS 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.

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

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

  • Có kinh nghiệm làm việc với Ruby on Rails
  • Có kiến thức về ngôn ngữ và công nghệ của Front-End (JavaScript, HTML, CSS và JQuery)
  • Thành thạo với Objective-C hoặc Swift
  • Kinh nghiệm làm việc với các thư viện và API của bên thứ ba
  • Làm quen với các nguyên tắc thiết kế OOP
  • Hiểu biết về các nguyên tắc thiết kế và hướng dẫn giao diện của Apple
  • Hiểu biết thành thạo các công cụ phiên bản mã như Git, SVN,…
  • Kỹ năng phân tích tuyệt vời và thái độ giải quyết vấn đề tốt
  • Khả năng thực hiện trong môi trường nhóm

Tuyển dụng ios lương cao up to 3000USD

MÔ TẢ CÔNG VIỆC

  • Thiết kế và xây dựng các ứng dụng cho nền tảng iOS
  • Hỗ trợ toàn bộ vòng đời ứng dụng (khái niệm, thiết kế, thử nghiệm, phát hành và hỗ trợ)
  • Đảm bảo hiệu suất, chất lượng và khả năng đáp ứng của các ứng dụng
  • Phối hợp với một nhóm để xác định, thiết kế và cung cấp các tính năng mới
  • Giúp duy trì chất lượng mã, tổ chức và tự động hóa
  • Phát triển giao diện lập trình ứng dụng (API) để hỗ trợ chức năng di động
  • Cập nhật các thuật ngữ, khái niệm và thực tiễn tốt nhất để mã hóa ứng dụng di động
  • Khắc phục sự cố và gỡ lỗi để tối ưu hóa hiệu suất
  • Thiết kế giao diện để cải thiện trải nghiệm người dùng
  • Nghiên cứu và đề xuất các sản phẩm, ứng dụng và giao thức di động mới
  • Luôn cập nhật các xu hướng công nghệ mới

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

Webpack là gì?

Webpack là công cụ giúp gói gọn toàn bộ file js, css(bao gồm cả scss,sass,..). Nó giúp bạn compile các module Javascript theo cấu trúc project. Ngoài ra nó có thể tối ưu tùy chọn theo môi trường khác nhau như development hay production.

Ngày nay các website đang có xu hướng trở thành những web app với các đặc tính như:

  • Càng ngày càng sử dụng JS nhiều hơn
  • Những browser ngày càng hỗ trợ những công nghệ mới
  • Những trang full-page-reload ít đi, single page app lên ngôi

Dẫn đến phần code client-side ngày càng nhiều. Điều đó có nghĩa chúng ta cần phải có một công cụ để quản lí chúng một cách hiệu quả. Và webpack là một công cụ rất mạnh để làm điều đó. Nó là một module bundler rất mới nhưng đã gây sốt gần đây. Nó nhận vào các module cùng với các dependencies và generate ra các static assets tương ứng. Các bạn xem thêm Webpack cho người mới bắt đầu tại đây nhé!

Team webpack đang làm việc tích cực để cho ra thế hệ thứ 4. Mình xin giới thiệu sơ qua các chức năng mới của bản này.

Webpack 4 gần như không cần cấu hình module bundler

Webpack rất mạnh mẽ và có không ít các feature khá độc nhưng bên cạnh đó cũng có không ít các điểm khá hạn chế, một trong số đó là configuration file.

Cung cấp 1 cấu hình cho webpack không phải là một vấn đề lớn trong các dự án vừa và lớn. Tuy nhiên đối với các dự án nhỏ thì nó tỏ ra hơi khó nhằng. Sean và team webpack đang thay đổi điều đó cho thân thiện hơn: webpack 4 sẽ không cần 1 file cấu hình mặc định.

Nào chúng ta thử nó 1 chút, tạo 1 thư mục mới và đi vào trong:

mkdir webpack-4-quickstart && cd $_

Khởi tạo 1 package.json bằng cách chạy lệnh:

npm init -y

Bây giờ kéo về webpack 4. Hiện tại webpack 4 đang trong quá trình beta, điều đó có nghĩa chúng ta nên lấy về từ nhánh Next:

npm i webpack@next --save-dev

Ta cần cài thêm webpack-cli nữa:

npm i webpack-cli --save-dev

Bây giờ mở package.json và thêm khai báo sau:

"scripts": {
    "build": "webpack"
  }

Lưu file và chạy:

npm run build

Và xem điều gì xảy ra:

ERROR in Entry module not found: Error: Can't resolve './src' in '~/webpack-4-quickstart'

webpack 4 đang muốn tìm kiếm entry point trong ./src, nói chung đó là điểm bắt đầu để bạn xây dựng gói javascipt bundle của bạn. Đọc thêm tại đây để hiểu rõ hơn nhé: webpack. Trong phiên bản trước của webpack, entry point được define bên trong file cấu hình với tên là webpack.config.js.

Nhưng bây giờ với webpac 4 thì chúng ta không cần define cái entry point này nữa. Nó sẽ được đặt mặc định trong ./src/index.js . Thử test cái feature mới này thấy thật dễ dàng, tạo ./src/index.js :

console.log('Tui là webpack 4);

và build lại xem:

npm run build

Bạn sẽ lấy được bundle trong ~/webpack-4-quickstart/dist/main.js. Khoan đã? chờ 1 chút, nó đâu cần define ở file output đâu nhỉ??!!

Trong webpack 4 không cần phải define entry point, cũng không cần trong out put file.

Tôi biết rằng đối với rất nhiều người thì điều này không quá thú vị. Sức mạnh chính của webpack là split code. Nhưng tin tui đi, file cấu hình lằng nhằng lắm, nhất là anh em mới tiếp xúc hay cần làm nhanh cái gì đó. Sau khi set up xong thì webpack 4 nó xem ./src/index.js như là entry point mặc định.

Trong phần tiếp theo chúng ta sẽ tìm hiểu thêm một số feature khá ngon: production và development mode.

Webpack 4: production và development mode

Có 2 file cấu hình phổ biến trong webpack:

  • 1 file cấu hình cho development, để mình define webpack dev server và những thứ khác.
  • 1 cho production, để define UglifyJSPlugin, sourcemaps…

Khi mà gặp những project lớn thì có thể cần phải có cả 2 file này, trong webpack 4 bạn có thể sử dụng 2 trạng thái của nó mà không phải làm bất kỳ một dùng cấu hình nào.

Bằng cách nào?

Thì nó giới thiệu chức năng này có sẵn mà dùng thôi :v. Trên thực tế khi bạn chạy dòng lệnh npm run build thì bạn sẽ thấy 1 thông báo:

Webpack là gì? Hướng dẫn webpack 4: tất cả những gì bạn cần biết từ 0 đến khi ra sản phẩm

The 'mode' option has not been set. Set 'mode' option to 'development' or 'production' to enable defaults for this environment.

Thông báo này có nghĩa là gì? Mở file package.json và update thêm script sau:

"scripts": {
    "dev": "webpack --mode development",
    "build": "webpack --mode production"
  }

Bây giờ thử chạy:

npm run dev

rồi nhìn code file ./dist/main.js, nó chưa được minified là ok. Tiếp tục chạy thử :

npm run build

và ta thấy minified bundle trong ./dist/main.js

Production mode enable tất cả các tối ưu trong webpack. Bao gồm minified code, scope hoisting, tree-shaking và nhiều nữa.

Developement mode chủ yếu tối ưu hóa tốc độ và không minified code để bạn dễ dàng làm việc.

Resources

Github repo tại đây : webpack-4-quickstart

TopDev via Valentinog

  Sử dụng Laravel Mix với Webpack cho tất cả các assets



  Xây dựng ứng dụng chat realtime bằng Laravel + Vuejs + Socket + Redis

 

Thời Đại Của Data: Trí Tuệ Nhân Tạo Vận Hành Thế Giới

Trong những năm sắp tới, Việt Nam sẽ chứng kiến sự xuất hiện của những kỳ lân mới. Vừa qua, chính phủ đã ban hành nhiều chính sách với ưu đãi cho các doanh nghiệp khởi nghiệp lĩnh vực khoa học công nghệ, gửi gắm vào trong đó sự kỳ vọng “tăng tốc” và bứt phá của cộng đồng startup đặc biệt là ở những lĩnh vực liên quan đến AIMachine Learning

Theo các chuyên gia cho biết, đến năm 2021, trí tuệ nhân tạo sẽ khai sinh ra một 2100 tỷ USD giá trị cho các doanh nghiệp, góp phần tiết kiệm 6.2 tỷ USD giờ làm việc trên toàn cầu. Cuộc chơi AI không chỉ còn là cuộc chơi của những ông lớn, các doanh nghiệp startup cũng đang dần khẳng định mình bằng những sản phẩm không hề thua kém.

Đón đầu thị trường bằng những công nghệ mới, chính là chiếc chìa khóa thành công cho bất kỳ doanh nghiệp nào “Điểm đến tiếp theo của công nghệ là đâu?”. Hãy lắng nghe câu trả lời và tranh luận từ các CEO của các công ty công nghệ, những anh tài startup, full stack developer, devops, software engineer, users and commercial ventures – Dù là lập trình viên hay marketer, sự kiện năm nay chắc chắn sẽ đem lại cho bạn vô số kiến thức, mở ra cánh cửa của đổi mới sáng tạo.

Vietnam Web Summit xoay quanh những trục chính đang là tâm điểm của công nghệ thế giới:

  • Digital Transformation: Survive and Thrive – Cách mạng số và những bước ngoặt lịch sử.
  • Beyond Digital Marketing: Humanize Customer Experiences – “Người hóa” trải nghiệm khách hàng thời đại số.
  • AI-Powered Future: Data drive product – Trí tuệ nhân tạo vận hành thế giới.
  • Operations in a ‘Serverless’ World – Vận hành doanh nghiệp trong thời đại serverless
  • Cloud-based & Intelligence-driven Cybersecurity  – An ninh mạng và những giải pháp của thời đại mới.
  • The new era of web development – Kỷ nguyên mới của công nghệ phát triển web.

Vietnam Web Summit là chuỗi sự kiện thường niên dành cho cộng đồng phát triển web, quảng cáo web. Được đánh giá là một trong những sự kiện web lớn nhất tại Việt Nam, với sự tham gia của các ông lớn như Amazon, Google, Facebook, Nielsen…, Vietnam Web Summit 2019 hứa hẹn là đại tiệc công nghệ được mong chờ nhất trong giai đoạn cuối năm!

Bên cạnh đó, Vietnam Web Summit sẽ tiếp tục hỗ trợ triển lãm với sự trình diễn của các doanh nghiệp và startup. Đây cũng là nơi demo rất nhiều sản phẩm, công nghệ của các doanh nghiệp. Tuyển dụng cũng là một trong những hoạt động mang lại giá trị hữu ích cho cả doanh nghiệp và người tham dự.. Đây là cơ hội lớn để các doanh nghiệp, developer cập nhật những công nghệ mới nhất, trao đổi trực tiếp cùng các chuyên gia đầu ngành.

Thay vì nóng lòng chờ đợi một mùa Vietnam Web Summit nữa thì hãy giữ ngay cho mình một slot tham dự cùng bạn bè nào, cùng nhau cập nhật những kiến thức mới năm 2019 bạn nhé!

THÔNG TIN LIÊN HỆ

Sponsor & Booth: Ms. Như Trương | 033 8847 836
Event team: event@applancer.net | 028 6681 3236
Ms. Thoa | thoa.nguyen@applancer.net | 038 5098 969

Assemly là gì?  Lập trình viên có nên học ngôn ngữ Assembly không?

lap-trinh-vien-co-nen-hoc-assembly-khong

Assembly Language (ASM), tiếng Việt là hợp ngữ. Mục đích của mình học ASM chỉ cơ bản là muốn hiểu thêm về người bạn thân thiết nhất của mình, cái máy tính mà suốt ngày mình ngồi trước nó. Mình chỉ thật sự muốn biết là đằng sau những dòng lệnh mình code thường ngày thì bên dưới nó làm cái gì?!

Thật tiếc là sau khi đã tìm hiểu được một số khái niệm về kiến trúc CPU, các loại Registers (thanh ghi), Data Segments, Data Moving thì mình buộc phải bỏ cuộc ở Control Flow.

Lý do đầu tiên là … do mình dở. Mình thấy nó thật sự quá khó với mình, vốn là lập trình viên ứng dụng với ngôn ngữ bậc cao (high level language) và chưa biết gì về Computer Scientic. Thứ hai là cách tiếp cận bottom-up (từ lý thuyết lên) này cũng không tốt. Mình nghĩ là trong tương lai nếu có dự án nào cần tới ASM thì mình sẽ có thể vừa học và practice tốt hơn (hướng tiếp cận top-down hay còn gọi là end to end). Cùng tìm hiểu xem Assembly là gì và chúng ta có nên học Assembly không trong bài viết này nhé!

  Chúng ta có nên học lập trình không?
  Để làm lập trình viên sau 1 năm, nên học gì?

Assemly là gì? 

Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, chính xác nó là ngôn ngữ thuộc thế hệ thứ 2 (2nd generation). ASM sử dụng các từ gợi nhớ (mnemonics) để viết các chỉ thị (instructions) lập trình cho máy tính thay vì bằng những dãy 0 và 1.

Các ASM sẽ cần một chương trình Assembler phù hợp (NASMASDASM) để dịch chúng thành những file binary và một trình linker để link các thành phần lại và chỉ định nơi bắt đầu của chương trình và đây là việc bắt buộc.

VD: Hàm main trong C mặc định là nơi chương trình khởi chạy. Lệnh dịch source C ra binary trên thực tế nó đã làm 2 bước trên: dịch và link (xác định luôn nơi khởi chạy chương trình là main).

Một trong các đặc tính của chương trình viết trực tiếp bằng ASM là: chúng có tốc độ thực thi cao và tiêu tốn bộ nhớ ít hơn các chường viết bởi các ngôn ngữ lập trình bậc cao.

Việc học assembly code cũng sẽ giúp chúng ta hiểu thêm về kiến trúc phần cứng máy tính, cách chúng hoạt động và tương tác với nhau.

Ví dụ như các thành phần cơ bản trong máy tính, cách chúng truyền thông tin cho nhau.

ASM có thể tương tác rất sâu dưới hệ thống, chúng có thể giao tiếp trực tiếp với các phần cứng và bắt chúng hoạt động theo ý người lập trình. Vì thế mà chúng ta có hẳn một ngành mang tên là “lập trình nhúng”. Xem thêm WebAssembly là gì.

Cái khó của việc học assembly là gì?

Thông thường khi học một ngôn ngữ lập trình chúng ta chỉ đơn giản là cài đặt môi trường lập trình, công cụ biên dịch và sử dụng các editor hoặc IDE nếu có thể học lập trình. Viết một chương trình đơn giản rồi biên dịch và chạy thử trên các ngôn ngữ bậc cao (C, C++, Java) là rất dễ dàng. Nhưng với ASM thì bạn sẽ dễ bị “nản” vì không thể dịch và chạy code ASM đúng như hướng dẫn.

Lý do là ASM lập trình các chỉ thị cho phần cứng tuy nhiên chúng lại lệ thuộc vào kiến trúc CPU (ARMx86-32x86-64), hệ điều hành (Linux, Windows, Mac) và các tập chỉ thị mà nhà sản xuất phần cứng đưa ra. Đa số các hướng dẫn, sách vở được viết cho kiến trúc iA-32. Một số hướng dẫn mới gần đây hơn thì viết cho kiến trúc x86-64 trên Linux, sử dụng Assembler của GNU.

Khác với ngôn ngữ C, về lý thuyết chúng ta có thể dịch lại mà không cần đổi source code ban đầu. Tuy nhiên thực tế thì điều này khó xảy ra vì chúng ta chỉ có thể làm được điều trên nếu không gọi tới các API của hệ điều hành. Nói tới đây lại thấy yêu Java hơn, Java thật sự là cuộc cách mạng viết một lần, chạy mọi nơi và cũng chẳng cần phải dịch lại. Mọi thứ đã có máy ảo Java lo.

Thêm một khó khăn nữa cho những người học ASM trên máy Mac như mình. Apple chỉ định riêng bộ linker (Match-O) cho ASM, chúng sử dụng một số chỉ thị riêng, padding memory riêng (có 4 lớp padding). Việc viết ASM cho máy Mac thật sự có rất ít bài viết hướng dẫn, doc của Apple thì như kinh thánh … Việc nhớ các thanh ghi, các chỉ thị thôi đã đuối lắm rồi, thêm Apple hành nữa thật là khó càng thêm khó !!! Chi tiết Apple OS X Assembler Reference.

VD: Một chương trình in ra “Hello World” viết bằng ASM trên Mac OS như sau:

.section __DATA,__data
str:
  .asciz "Hello world!\n"
 
.section __TEXT,__text
.globl _main
_main:
  movl $0x2000004, %eax           
  movl $1, %edi                    
  movq str@GOTPCREL(%rip), %rsi   
  movq $100, %rdx                 
  syscall
 
  movl $0, %ebx
  movl $0x2000001, %eax         
  syscall

Sử dụng GNU Assembler, linker và chạy thử:

as hello.asm -o hello.old hello.o -o hello -e _main./hello

Như các bạn đã thấy việc in một đoạn text ra màn hình với ngôn ngữ assembly khá phức tạp, đó là chưa kể ta phải viết đúng chỉ thị của OS và CPU hiện tại. Tất cả chỉ là các chỉ thị cho các thanh ghi chứ không có kiểu 1 lệnh in ra tất cả như C.

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

ASM khó vậy thì có nên học Assembly không?

ASM sẽ chẳng có ý nghĩa gì nếu chúng ta không thuộc tập sau đây:

  • Những người cần lập trình phần cứng, mạch điện tử, các chip vi xử lý.
  • Những người lập trình compiler, hệ điều hành. (Trong đó có anh Chris Lattner, tác giả của LLVM và Swift mà mình rất ngưỡng mộ vì anh rất trẻ – SN 1978)
  • Hacker chuyên nghiệp.
  • Reverse Engineer: nếu dịch là kỹ sư đảo thì không hay và cũng ko đủ ý. RE là những kỹ sư chuyên phân tích, mổ xẻ các chương trình để hiểu rõ chi tiết bên trong nó thế nào, RE thường ứng dụng trong an ninh: phát hiện mã độc, đánh giá thuật toán mã hoá … và các lĩnh vực khác có liên quan.
Một số lợi ích khác của ASM là:
  • Có thể dùng debug chương trình mà không cần source code.
  • Có thể dùng để tối ưu hoá chương trình: một số dân code ASM chuyên nghiệp dùng C để code và dịch ra ASM rồi edit lại cho phù hợp với kiến trúc và các chỉ thị riêng và tối ưu của nhà sản xuất chip. Lý do là các compiler chỉ dịch ra ASM chung nhất cho các dòng chip.

Một số tài liệu liên quan tới ASM

Mình xin chia sẻ lại một số tài liệu mà trong thời gian qua mình có được, để ai đó có đang tìm hiểu ASM có thể tham khảo qua:
Ebook:
  1. Introduction to 64 Bit Assembly Programming for Linux: Quyển này tinh gọn, rất hay. Third edition có cho cả MacOS. Phiên bản này chỉ có cho Linux.
  2. Professional Assembly Language : Quyển này tác giả nói rất sâu về cơ chế, tất cả các thông số register, cơ chế vận hành phần cứng … Tiếc là tác giả viết cho kiến trúc IA-32 và phần code ASM cũng chỉ cho Linux x86-64 thôi.
  3. Hacking: The Art of Exploitation: Dành cho ai thích hack, cuốn này nói rất sâu về kỹ thuật hacking đặc biệt là sử dụng ASM để can thiệp hệ thống.
  4. Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation: Quyển này cho những ai yêu thích RE.
** Sách tiếng Việt mình thấy có vài cuốn nhưng mở vài trang đọc thật sự không hiểu gì !!!
Bài viết:
  1. Assembly “hello, world” for OS X: Bài này viết ASM với assembler NASM. NASM trên MacOS ko có sẵn, phải cài thêm thông qua brew.
  2. x86 Assembly Guide: bài này mình hay dùng để tra cứu nhanh các chỉ thị và thanh ghi (vì não cá vàng chưa thể nhớ nổi @@)
  3. OS X Assembler Reference: Guide về Assembler cho OS X của Apple, mình dùng doc này để convert code bên Linux qua. Cái này thật sự không giúp mình nhiều, chủ yếu coi phần Data Segment và memory padding để sử dụng thanh ghi EAX cho chính xác. Nếu không chương trình sẽ chạy ra lỗi bus error.
Mặc dù dừng lại khá sớm với việc học ASM nhưng mình cũng hài lòng với kết quả đạt được. Mình thu được một mớ kiến thức kha khá về CPU, cơ bản về việc các process cấp phát bộ nhớ. Và quan trọng là bây giờ khi cái màn hình debug trong XCode hiện lên 1 mớ ASM mình có thể hiểu được phần nào chứ không coi nó như thứ ngôn ngữ ngoài hành tinh nữa.

TopDev via Fb VietTran

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

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

docker-cho-node-js

Đây là một hướng dẫn ngắn và đơn giản về docker, khá hữu ích cho các anh em Nodejs.

Tại sao bạn nên sử dụng Docker?

Khi công việc kinh doanh cần tới nhiều ứng dụng web khác nhau, khi mà bây giờ framework hay ngôn ngữ lập trình chỉ là công cụ. Các công ty không bị giới hạn và có thể sử dụng bất kỳ ngôn ngữ nào cần. Vì vậy chúng ta cần có một môi trường mà nhiều ứng dụng khác nhau có thể chạy cùng nhau trên đó.

Virtual Machines (VM) cho phép chúng ta chạy nhiều app trên cùng 1 server. Nhưng cũng có hạn chế. Mỗi VM cần toàn bộ OS để chạy. Mỗi OS lại cần CPU, RAM,… để chạy, rồi nó cần patching và licensing, do đó làm tăng chi phí và khả năng phục hồi.

Google bắt đầu sử dụng mô hình container từ lâu để giải quyết các thiếu sót của mô hình VM. Về cơ bản thì mô hình container có nghĩa là nhiều container trên cùng một máy chủ sử dụng cùng một máy chủ, giải phóng CPU, RAM để có thể được sử dụng ở nơi khác.

Nhưng nó giúp các lập trình viên như thế nào?

Nó đảm bảo môi trường development tương đồng với môi trường production với tất cả lập trình viên và tất cả máy chủ.

Bất kể ai có thể làm project chỉ trong vòng vài giây, không cần phải vật lộn với config, thiết lập thư viện, cài đặt dependency,…

Nói một cách đơn giản, Docker là một nền tảng cho phép chúng ta develop, deploy và run các ứng dụng với các container.

Quay lại một chút, hệ thống container trông như thể nào và nó khác với VM như thế nào?

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

1.1 Khác biệt giữa VM và Docker

Như bạn có thể thấy host và tài nguyên được chia sẻ trong container nhưng không có trong VM.

Cách sử dụng Docker?

Chúng ta cần làm quen với một số thuật ngữ, bạn có thể đọc thêm Docker là gì:

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

1.2. Mô tả docker image và docker container

Docker image: là một file thực thi có chứa những hệ điều hành được cắt giảm và tất cả các thư viện và cấu hình cần thiết để chạy ứng dụng. nó có nhiều lớp xếp chồng lên nhau và được biểu diễn dưới dạng một object đơn. Một docker image được tạo ra để sử dụng file docker, chúng ta sẽ bàn về nó sau.

Docker Container: Nó là một instance đang chạy của docker image. Có thể có nhiều container chạy từ cùng một docker image.

  Deploy web app với Traefik và Docker Swarm
  Sử dụng Docker (và cả Docker Compose) cho dự án Django

Container hóa một ứng dụng Node.js đơn giản

Chúng ta sẽ thử container hóa một ứng dụng node.js rất đơn giản, và tạo 1 image:

Ứng dụng Node.js của bạn

Hãy bắt đầu với việc tạo folder my-node-app

mkdir my-node-app  
cd my-node-app

Hãy tạo một server node đơn giản trong index.js và thêm dòng code bên dưới vào đó:

//Load express module with `require` directive

var express = require('express')

var app = express()

//Define request response in root URL (/)  
app.get('/', function (req, res) {  
 res.send('Hello World!')  
})

//Launch listening server on port 8081  
app.listen(8081, function () {  
  console.log('app listening on port 8081!')  
})

và lưu file này vào trong folder my-node-app

Giờ chúng ta tạo một file package.json và thêm dòng code dưới này vào:

 {

    "name": "helloworld",  
    "version": "1.0.0",  
    "description": "Dockerized node.js app",  
    "main": "index.js",  
    "author": "",  
    "license": "ISC",  
    "dependencies": {  
      "express": "^4.16.4"  
    }

 }

Ở điểm này bạn không cần cài đặt express hay npm trong máy chủ, vì hãy nhớ là dockerfile xử lý tất cả các thiết lập dependency, lib và cấu hình.

DockerFile

Hãy tạo dockerfile và lưu nó trong folder my-node-app. File này không có extension và được đặt tên là Dockerfile. Tiếp tục thêm dòng code bên dưới vào dockerfile

    # Dockerfile  
    FROM node:8  
    WORKDIR /app  
    COPY package.json /app  
    RUN npm install  
    COPY . /app  
    EXPOSE 8081  
    CMD node index.js

Giờ chúng ta đang làm gì ở đây nào

FROM node:8 – pull docker image node.js từ docker hub, bạn có thể tìm ở đây https://hub.docker.com/_/node/

WORKDIR /app – cái này đặt thư mục làm việc cho code của chúng ta trong image, nó được sử dụng bằng tất cả các lệnh tiếp theo như COPY, RUNCMD.

COPY package.json /app cái này copy package.json từ host folder my-node-app đến image trong folder /app

CRUN npm install – chúng ta chạy lệnh này trong image để cài đặt dependency (node_modules) cho app.

COPY . /app  – Chúng ta báo với docker để copy file từ folder my-node-app và dán nó vào /app trong docker image.

EXPOSE 8081 Chúng ta đang mở cổng trên container bằng lệnh này. Tại sao lại có cổng này? Vì trong server, index.js listen cổng 8081. Theo mặc định container được tạo từ image sẽ bỏ qua tất cả các request thực hiện cho nó.

Build Docker Image

Mở terminal, đến folder my-node-app và gõ dòng lệnh sau:

     # Build a image docker build -t <image-name> <relative-path-to-your-dockerfile>

    docker build -t hello-world .

Dòng lệnh này tạo một image có nội dung hello-world vào host của chúng ta.

-t được sử dụng để đặt tên cho image, mà ở đây là hello-word

. là đường dẫn đến tệp docker, vì chúng ta đang trong thư mục my-node-app, nên sử dụng dấu chấm để thể hiện đường dẫn đến file docker.

Bạn sẽ thấy một output trong dòng lệnh giống thế này:

    Sending build context to Docker daemon  4.096kB  
    Step 1/7 : FROM node:8  
     ---> 4f01e5319662  
    Step 2/7 : WORKDIR /app  
     ---> Using cache  
     ---> 5c173b2c7b76  
    Step 3/7 : COPY package.json /app  
     ---> Using cache  
     ---> ceb27a57f18e  
    Step 4/7 : RUN npm install  
     ---> Using cache  
     ---> c1baaf16812a  
    Step 5/7 : COPY . /app  
     ---> 4a770927e8e8  
    Step 6/7 : EXPOSE 8081  
     ---> Running in 2b3f11daff5e  
    Removing intermediate container 2b3f11daff5e  
     ---> 81a7ce14340a  
    Step 7/7 : CMD node index.js  
     ---> Running in 3791dd7f5149  
    Removing intermediate container 3791dd7f5149  
     ---> c80301fa07b2  
    Successfully built c80301fa07b2  
    Successfully tagged hello-world:latest

Như bạn có thể thấy nó chạy các bước vào file docker và output một docker image. Có thể sẽ mất vài phút khi bạn thử lần đầu, nhưng từ lần tiếp theo sẽ bắt đầu sử dụng cache và build nhanh hơn nhiều với output cũng giống như trên. Bây giờ thử dòng lệnh bên dưới trong terminal để xem image của bạn có ở đó không nhé:

    # Get a list of images on your host 
    docker images

Sẽ có một list các image trong host của bạn, giống như thế này:

    REPOSITORY    TAG      IMAGE ID      CREATED         SIZE  
    hello-world   latest   c80301fa07b2  22 minutes ago  896MB

Chạy Docker Container

Với image của chúng đã tạo, có thể tạo một container từ image này

    # Default command for this is docker container run <image-name>  
    docker container run -p 4000:8081  hello-world

Dòng lệnh này được sử dụng để chạy docker container

-p 4000:8081 Đây là lệnh cho phép, nó đánh dấu host 4000 sang cổng container 8081 mà chúng ta đã mở thông qua lệnh expose trong dockerfile. Bây giờ tất cả các request đến cổng host 4000 sẽ được chuyển thành cổng containter 8081

hello-world Đây là tên chúng ta đặt cho image mới nhất khi chúng ta chạy lệnh docker-build

Bạn sẽ nhận một vài output giống thế này:

    app listening on port 8081!

nếu bạn muốn truy cập vào container và gắn terminal bash vào nó, bạn có thể gõ

    # Enter the container
    docker exec -ti <container id> /bin/bash

Để kiểm tra container chạy chưa, mở terminal khác và gõ

    docker ps

Bạn sẽ thấy container chạy như thế này

     CONTAINER ID    IMAGE        COMMAND                  CREATED    
    `<container id>`  hello-world  "/bin/sh -c 'node in…"   11 seconds ago

    STATUS              PORTS                    NAMES  
    Up 11 seconds       0.0.0.0:4000->8081/tcp   some-random-name

Nó nghĩa là container của chúng ta với id <container id> được tạo từ image hello-word, và được up lên và chạy theo cổng 8081.

Ứng dụng Node.js thông minh sẽ hoàn toàn được container hóa. Bạn có thể vào http://localhost:4000/ trên trình duyệt và thấy thế này:

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

1.3 Ứng dụng Node.js đã được containerise

Và thế là bạn đã containerise ứng dụng đầu tiên của mình rồi đấy. Chúc các bạn thành công!

Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev

7 bước cấp thiết của chiến lược tuyển dụng IT trên social media hiệu quả

Tuyển dụng IT trên social media luôn là vấn đề gây đau đầu nhà quản lí, chưa nhắc đến việc phải tạo ra một phương hướng phát triển lâu dài. Hơn nữa, social media tiếp tục thống trị Internet như các kênh truyền thông hàng đầu. Đây không chỉ là công cụ để bạn kết nối với mọi người mà là nơi bạn có thể tìm thấy khối nhân tài. Không ngạc nhiên khi có đến 90% nhà tuyển dụng dùng social media để tìm kiếm, chiêu mộ và tuyển chọn ứng viên tài năng. Vì thế việc cạnh tranh nhau của hàng triệu công ty để thu hút nhân tài ngày một khốc liệt.

Hiểu được nỗi trăn trở đó, TopDev sẽ tóm gọn 7 bước chính yếu để xây dựng một chiến lược tuyển dụng IT trên social media hiệu quả. Ngoài ra bạn có thể xác định nền tảng mạng xã hội hợp lí, chọn lựa đúng ứng viên cũng như cách tiếp cận họ qua cách kênh truyền thông!

tuyển dụng IT social media

Bước 1: Chọn đúng nền tảng cho tuyển dụng IT trên social media

Việc lựa chọn nền tảng cho đóng vai trò vô cùng quan trọng trong chiến lược tuyển dụng IT. Theo Harver, có đến 87% nhà tuyển dụng dùng LinkedIn để tìm kiếm ứng viên, 55% dùng Facebook, 47% là Twitter.

Tương tự, nội dung bạn đăng tải cũng thế. So với Twitter và Instagram, LinkedIn được xem là hiệu quả hơn để đăng các bài blog. Vì thế hãy xác định rõ kì vọng và đảm bảo chọn một (hoặc vài) nền tảng cho xu hướng ngành của bạn.

Bước 2: Xác định cụ thể từng ứng viên khi tuyển dụng IT trên social media

Tìm kiếm một ứng viên là không hề dễ dàng. Bạn tự hào vì có một quảng cáo công việc tốt nhưng nếu ở sai thị trường sẽ không ai ứng tuyển cả. Đặc biệt với tuyển dụng IT trên social media, hãy xác định được kiểu ứng viên mà bạn muốn lựa chọn vào công ty. 

Một số câu hỏi giúp bạn rõ hơn về loại ứng viên công ty thực sự cần:

Bạn muốn tuyển sinh viên mới ra trường, chuyên gia hay tầm trung?

Bạn có yêu cầu đặc biệt nào như đạo đức công việc, lý lịch, tình trạng gia đình?

Ngoài ra, bạn có thể tiết kiệm thời gian bằng việc khắc họa chân dung ứng viên và đặt trọng tâm chiến lược vào đó. Nhờ thế, ứng viên không phù hợp sẽ được lọc sớm cũng như khuyến khích ứng viên khác nộp CV. 

Bước 3: Thiết lập lịch nội dung

Thu hút ứng viên tài năng đòi hỏi sự kiên trì và bền bỉ. Hãy đảm bảo bạn chuẩn bị kĩ bằng việc lên kế hoạch nội dung tuyển dụng IT vài tuần trước đó.

Lịch không chỉ giúp tự động hóa nội dung định sẵn còn giúp mọi người dễ thấy quảng cáo công việc của bạn hơn.

lịch nội dung- tuyển dụng IT social media

Khi đăng tải thường xuyên thì cơ hội các ứng viên thấy vị trí ứng tuyển càng cao hơn. Tuy nhiên đừng lạm dụng, vì nếu đăng quá nhiều thì bạn có thể bị liệt trong danh sách đen vì “spam” đấy.

Bước 4: Đẩy mạnh sự tương tác – điều thiết yếu trong tuyển dụng IT trên social media

Thông thường khi tìm việc, họ sẽ phản ứng ngay với các công việc họ thấy thu hút, vì vậy cần đảm bảo điều này xảy ra khi bạn đăng tải vị trí nào đó. Vì vậy bạn cần bổ sung thông điệp mang tính động lực và thúc đẩy vào quảng cáo công việc.

Một số câu truyền động lực như “sign up today- change your tomorrow” nên được lồng ghép vào các bài đăng. Chúng dễ lĩnh hội cũng như khiến cho người dùng social media thích thú hơn. Việc họ sẽ cân nhắc và cuối cùng quyết định nộp CV dễ dàng hơn bao giờ hết.

  5 tố chất để thành công khi làm nghề tuyển dụng
  3 bí quyết thu phục lòng người của nhà quản trị

Bước 5: Đặt ra những luật lệ và yêu cầu

Trong tuyển dụng IT trên social media, khi viết mô tả công việc, bạn cần chú ý, cân nhắc từng chi tiết liên quan. Trước khi đăng tải điều gì, bạn cần xác định và xem xét toàn bộ quá trình tuyển dụng IT.

Chiến lược tuyển dụng IT trên social media không giống tuyển dụng truyền thống khi nhắc tới quy định. Điều cần làm là đặt ra quy định liên quan tới định dạng, quy tắc CV cho ứng viên của bạn.

Tuy nhiên, đừng mong đợi CV nào cũng như mong muốn. Trong trường hợp đó, những ai không theo đúng nguyên tắc vẫn sẽ như thế nếu bạn chấp nhận tuyển họ.

Bước 6: Giao tiếp qua social media

Bản chất của các social media là thúc đẩy giao tiếp trực tiếp. Vì vậy, chúng có thể đóng vai trò hỗ trợ đắc lực cho bất kỳ ứng viên tiềm năng nào.

Khả năng lớn ứng viên sẽ hỏi thêm về vị trí, công ty cũng như quá trình tuyển dụng. Hãy hướng dẫn cho người quản lí kênh social media cách trả lời bất kì câu hỏi nào liên quan. Nhờ thế, việc tuyển dụng IT trên social media của bạn sẽ mang lại trải nghiệm tích cực hơn cho ứng viên đấy.

Đừng bao giờ bỏ lơ bất kì tin nhắn nào vì họ có thể thấy tiêu cực về tổng thể doanh nghiệp. Facebook và Twitter thường hiển thị trang thường xuyên trả lời tin nhắn hơn là trang không có. Vì thế, hãy thể hiện thiện chí của bạn bằng việc trả lời mọi câu hỏi.

giao tiếp trong tuyển dụng IT social media

Bước 7: Đừng để ứng viên phải chờ

Social media về bản chất khuyến khích thời gian phản hồi và quay vòng thông tin nhanh chóng. Hãy theo logic này nếu bạn có kế hoạch sử dụng tuyển dụng phương tiện truyền thông xã hội.

Khi CV đến, đảm bảo bạn liên hệ với ứng viên càng sớm càng tốt. Hoặc bạn có thể tạo tin nhắn tự động để bảo đảm ứng viên có trải nghiệm tích cực!

Công ty đôi khi phải chịu tiếng xấu khi bạn cố tình lờ đi những tin nhắn trực tiếp. Nhớ rằng bất cứ ai gửi CV chứng tỏ họ đang rất cần việc làm. Hãy cho họ thấy sự trân trọng của bạn bằng giải đáp và sắp xếp phỏng vấn sớm nhất có thể. Nhờ thế, những trải nghiệm không tốt với công ty có thể được giảm thiểu.

KẾT LUẬN

Khi dùng social media cho chiến lược tuyển dụng IT thì bạn cần tập trung vào chất lượng từng bài đăng. Không chỉ thế, bạn phải tạo cho ứng viên cảm xúc tích cực bằng việc duy trì và thúc đẩy sự tương tác với họ. Dĩ nhiên việc thực hiện không hề dễ dàng tí nào. Tuy nhiên, nếu bạn nghiêm túc và kiên trì, vị trí ứng tuyển của bạn sẽ hiệu quả hơn mong đợi rất nhiều đấy!

Nếu còn gì chưa rõ, ấn vào đây và đội ngũ TopDev sẽ giúp bạn giải đáp mọi thắc mắc !

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

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

TopDev via Talentlyft

  3 nguyên tắc tuyển dụng của Richard Branson
  TopDev ra mắt giải pháp tuyển dụng ứng dụng trí tuệ nhân tạo

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

Mô tả công việc lập trình Golang mức lương hấp dẫn

Golang Developer là lập trình viên có kiến thức và kinh nghiệm về ngôn ngữ lập trình Golang. Golang là một trong những ngôn ngữ lập trình mới nhất trong ngôn ngữ lập trình hiện đại. Golang được tự mô tả là một ngôn ngữ lập trình mã nguồn mở giúp dễ dàng xây dựng phần mềm đơn giản, đáng tin cậy và hiệu quả. Hy vọng, Mẫu bảng mô tả công việc lập trình Golang 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 Golang : Để thành một Golang Developer, xá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ó kinh nghiệm về ngôn ngữ Golang để 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 Golang

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

  • Nắm vững chắc về ngôn ngữ lập trình Golang, mô hình, cấu trúc và thành ngữ
  • Hoặc Thành thạo một hoặc nhiều ngôn ngữ lập trình: C / C ++ / Java / Golang
  • Kiến thức về các mẫu Goroutine và kênh phổ biến
  • Có kinh nghiệm làm việc với với các công cụ code versioning (như Git, SVN và Mercurial)
  • Có kinh nghiệm làm việc với các Framework và tools của Go, bao gồm:+ Các công cụ quản lý phụ thuộc như Godep, Sltr, v.v.
    + Go’s code generation tools, như Stringer
    + Go web frameworks, như Revel
    + Gói bộ định tuyến, chẳng hạn như Gorilla Mux

MÔ TẢ CÔNG VIỆC

  • Tham gia thiết kế và phát triển các ứng dụng kinh doanh hiệu suất cao, từ phân tích yêu cầu đến sản xuất
  • Không ngừng nâng cao chất lượng phần mềm
  • Phân tích và cải thiện hiệu suất ứng dụng
  • Phối hợp với thành viên trong team để tối ưu hóa các phương pháp kỹ thuật
  • Đóng vai trò quan trọng trong các quyết định thiết kế và kiến ​​trúc, xây dựng hướng tới một kiến ​​trúc phân tán dịch vụ vi mô hiệu quả.

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Giải pháp cho phần lưu, quản lý log hiệu quả và cực kỳ tiết kiệm chi phí

Sau một thời gian “ngưng log” các request API và SQL query thì đã mạnh dạn tìm kiếm 1 SaaS log management vừa túi tiền để thử, bởi nếu các bạn cũng biết mấy ông này rất đắt tiền, bèo bèo cũng 50$/tháng và cũng lưu được vài GB.

Tìm việc làm it manager lương up to 50M

Syslog-Ng để nhận log local và đẩy lên UDP Server

Vô tình phát hiện ông LogDNA với chi phí khá cool 1.5$/GB/tháng. Thiết nghĩ chắc Teamcrop tầm 3, 4GB tháng là cùng. Cuối cùng đã quyết định đẩy toàn bộ log lên LogDNA, do hệ thống Teamcrop Microservices dùng docker và đang sử dụng Syslog-NG để ghi log local, nên chỉ cần mount 1 file config mới để trỏ tới UDP IP & Port mới là xong.

  Speed up Microservices 3: Export dữ liệu ra Excel
  Speed up Microservices 2: Tận dụng trình duyệt và cache
  Microservices là gì? Speed up Microservices 1: Tác dụng phụ và một số chiến lược cơ bản

Sau khi kết nối và thấy raw log được thì khá là ưng ý và cũng đã apply lên production sau 1 ngày thử nghiệm. Ác mộng mới bắt đầu, sau 2 ngày chạy thiệt, hệ thống log đã ghi nhận gần 16 triệu line, và tổng dung lượng gần 4.5GB. Tính nhẩm nhẩm thì 1 tháng tầm 50GB là ít, tính ra chi phí cũng không ít, chả khác gì mấy ông như Loggly, Papertrail, Sematext…có vẻ không ổn nên lại tính cài lại Graylog hoặc ELK nhưng quá khứ cho thấy làm việc với các hệ thống này mặc dù tự cài nhưng khá chua, lỗi lên lỗi xuống, rườm rà và giao diện cũng phức tạp (performance tệ).

PHP 7 & Swoole Extension để dựng UDP Socket Server

Sau một ngồi suy nghĩ thì tính đến chuyện sao không viết 1 UDP server luôn và lắng nghe log và ghi xuống “một nơi nào đó”, và nơi này phải tối ưu cho truy vấn thống kê (chứ MySQL là nghe đến trăm triệu record là bỏ của chạy lấy người). Viết UDP Socket server khá dễ, chỉ vài phút là dựng được cũng như viết được parser cho log. Nhân đây giới thiệu với các đồng đạo extension Swoole của PHP, tìm hiểu để mở rộng thêm tầm nhìn về PHP nhé.

Kết hợp với Supervisord thì script PHP này chạy ngầm đỡ dở chứng.

Công đoạn thiếp theo là lưu log ở đâu để truy vấn cho lẹ, vô tình tìm ra Clickhouse, được sinh ra để tối ưu cho OLAP và trên nhiều dữ liệu. Lại tương thích với SQL nên hầu như khi sử dụng (truy vấn) sẽ không khác MySQL bao nhiêu. Cài đặt Clickhouse cũng dễ nên sau vài giờ là đã test đọc ghi dữ liệu. Cũng có PHP client để kết nối nên việc tích hợp vào code PHP khá nhẹ nhàng và không có vấn đề gì. Cho chạy thử nghiệm production thì dữ liệu đẩy vào khá smooth. Hiện tại được vài triệu record nhưng query khá nhanh.

Khâu cuối cùng là Select data & UI thì tùy mỗi người nhu cầu gì thì viết chart mà thôi, cái này dễ như làm việc với web bình thường. Bên Teamcrop thì sử dụng cơ chế insight có sẵn và UI trên React nên khâu này khá nhẹ nhàng, tha hồ làm chart mình thích.

Hoặc làm biếng thì có clickhouse-client, có thể vào và viết query để xem kết quả ngay như mysql client.

Toàn bộ giải pháp hiện đang chạy 1 con server 20$/tháng, nếu log nhiều thì có thể xóa record quá cũ hoặc thuê server bự hơn. Dù sao thì hiện tại log khá sướng, chủ động ở khâu parser và query data. Hy vọng những chia sẻ này sẽ giúp anh chị em tiết kiệm kha khá tiền cho log management. Khi nào xịn xịn xíu, có GUI sẽ viết blog hoặc open source phần setup này cho bà con triển khai nhé, đỡ tốn tiền và muốn log bao nhiêu log. Tất cả chỉ tốn 1 ngày R&D và tiết kiệm bộn tiền cho vụ log này.

Một số công nghệ đề cập:
– Syslog-Ng để nhận log local và đẩy lên UDP Server
– PHP 7 & Swoole Extension để dựng UDP Socket Server
– Supervisord để quản lý PHP Background Process
– Clickhouse để làm database và truy vấn dữ liệu

  Giao tiếp hiệu quả giữa các Microservice
  MySQL ngoại truyện

Bài viết được chia sẻ bởi tác giả Võ Duy Tuấn

 

Liệu AI có thể giúp doanh nghiệp đưa ra các quyết định kinh doanh toàn diện nhất?

Thị trường Mobile Marketing tại Đông Nam Á: Cuộc chơi không dành cho “kẻ yếu tim”!

thị trường mobile marketing

Thị trường Mobile Marketing tại Đông Nam Á

Xem thêm việc làm mobile hấp dẫn nhất

Để biết thêm thông tin về AppsFlyer, vui lòng truy cập www.appsflyer.com

Vì sao Angular khiến tôi muốn bỏ nghề lập trình?

Tác giả: Tobias Merkle

Documentation – Tài liệu siêu việt

Bạn đã bao giờ có một ý tưởng tuyệt vời cho một dự án cuối tuần, bắt đầu vào chiều thứ bảy, và sau đó dần dần nhận ra dự án sẽ mất ít nhất sáu tháng để thực hiện đầy đủ? Google đã có một khoảnh khắc như vậy khi họ bắt đầu ghi lại tài liệu các hoạt động bên trong của ANGULAR WEB DEVELOPMENT FRAMEWORK. Sau đó, họ cho một thực tập sinh ăn không có gì ngoài espresso trong nhiều tuần cho đến khi cô có một dự án mã hóa Hello World mà họ có thể thực hiện như một tài liệu hoàn chỉnh về toàn bộ stack của mình.

Không có lỗi nào bạn gặp phải trong khi xây dựng ỨNG DỤNG WEB trên ANGULAR WEB DEVELOPMENT FRAMEWORK sẽ được liệt kê ra trong tài liệu này. Thật vậy đấy, rất ít trong số các design pattern hoặc khái niệm cốt lõi mà bạn cần được ghi lại trong đó. Nếu bạn muốn tìm hiểu cách thực sự xây dựng một công cụ với ANGULAR, bạn sẽ cần mua một khóa học trực tuyến (tôi có thể giới thiệu Hướng dẫn toàn diện của Maximillian Schwarzmueller) sẽ tiết lộ cho bạn tất cả những khoảnh khắc cạm bẫy đang chờ đợi người dùng ngây thơ khi tin rằng họ có thể đơn giản bắt đầu viết Javascript như một nhà phát triển React hoặc Vue.

Tài liệu của Angular thực tế là có nhiều công dụng hơn bạn nghĩ, mà tôi sẽ giải mã dưới đây.

Bạn có nhận thấy gì không? Đúng vậy đó: khi sửa lỗi trong ANGULAR, bạn cần loại trừ cụ thể cụm từ `angularjs` khỏi mọi tìm kiếm của mình. Bạn có thể gắn thêm 2 hoặc 7 hoặc hy vọng rằng chỉ cần `”ANGULAR”`sẽ đủ để loại trừ phiên bản đầu tiên không hợp lệ của ngăn xếp phát triển “phần mềm toàn diện” này.

Nhưng sau đó, bạn có thể đọc đủ các giải pháp Stack Overflow về vấn đề này, và nó bắt đầu cho bạn thấy rằng giữa mã bạn viết và mã chạy trong trình duyệt, không chỉ có một trình biên dịch sẽ tự tay phá vỡ tất cả CSS của bạn, mà còn có một hộp đen thực sự yêu cầu bạn định dạng ứng dụng của mình theo cách chính xác như vậy nếu không toàn bộ mọi thứ sẽ thất bại trong âm thầm hoặc tệ hơn, phát ra một thông báo lỗi không chính xác. Bạn thực sự không thể tin bất cứ điều gì từ ANGULAR bởi vì thậm chí nó còn không biết hệ thống của chính nó hoạt động như thế nào.

Toàn bộ trải nghiệm sử dụng ANGULAR là như thế này. Sau nhiều lần bạn chạy hết tốc lực tông thẳng vào một bức tường, cuối cùng bạn cũng học được cách bò xung quanh để tránh nó nhưng lại phải đi với tốc độ ốc sên, dò dẫm thảm hại cho bất kỳ chướng ngại vật tùy ý nào mà cái FRAMEWORK này có thể bày ra chỉ để cản đường bạn.

Hãy tưởng tượng một chiếc ô tô có cốp xe không bao giờ mở và bảng điều khiển của nó chỉ nói DASHBOARD trong ánh sáng chói mắt mà không thể tắt. Chiếc xe không thể được sửa chữa một khi bị hỏng; nó chỉ có thể được thay thế hoặc sửa đổi từ bên ngoài. Nó phè khí lạnh ngay cả khi bạn không bật máy. Thậm chí còn không có cả hướng dẫn sử dụng tồn tại. Nếu bạn muốn biết làm thế nào nó hoạt động thì phải đọc qua cuốn sách dài 5.280 trang. Chúc may mắn!

Kiến trúc siêu việt nhưng made in china

ANGULAR rất là chậm. Quá trình viết ứng dụng luôn mất nhiều thời gian và các chúng luôn hoạt động rất chậm chạp một khi ứng dụng của bạn trở nên phức tạp hơn mức `Hello World`. Điều này có thể được tạm chấp nhận nếu ANGULAR FRAMEWORK mang lại bất kỳ lợi ích nào cho người dùng hoặc lập trình viên, chẳng hạn như biên dịch nhanh hoặc tăng cường bảo mật ứng dụng. Nhưng ANGULAR không sở hữu bất kì điều gì trong số này. Thậm chí thực tế là nó còn sụp đổ ngay khi chỉ mới nghe nhắc đến một loại `Uncaught TypeError`.

Về cơ bản, cách duy nhất để hiểu Angular đang làm gì là đọc hàng triệu dòng mã nguồn mà các nhà phát triển vui vẻ cung cấp trên GitHub. Vì không ai thực sự làm điều đó, các nhà phát triển WEB ANGULAR thường chỉ học một hoặc hai design pattern có vẻ ổn định nhất và xây dựng toàn bộ ứng dụng từ chúng. Lựa chọn duy nhất khác của bạn là đắm mình trong sự điên rồ vô nghĩa trong khi chờ đợi các nhà phát triển cố gắng tìm hiểu cách ANGULAR hoạt động.

Một trải nghiệm không dám quên

Mở IDE ưa thích của bạn ra đi nào các coder! Sau đó nhập License Key cho IntelliJ IDEA của bạn để bắt đầu. Sau đó vui lòng chọn Type Script “Linter” mà bạn muốn sử dụng để “Lint” Type Script Code của mình. À bạn phải sử dụng IDE tương thích với Type Script. Loại Script thỉnh thoảng sẽ được cập nhật. Điều này sẽ khiến code của bạn bị sập và mọi thứ dính dáng tới nó. Đừng quá lo lắng điều này hoàn toàn bình thường! Hãy thư giãn và bắt đầu tìm kiếm một công việc khác phù hợp hơn!

Đừng hoảng hốt nếu thư viện dependency của bạn thỉnh thoảng phát sinh các thay đổi gậy sập mọi thứ sau khi một thuộc tính trên một class bạn không bao giờ sử dụng bị sửa đổi. Song song đó, bạn chỉ có thể thêm một bước chỉnh sửa tệp thủ công cho mọi quy trình xây dựng. Hoặc bạn có thể đóng băng thư viện ở phiên bản tương thích và mất tất cả các cải tiến trong tương lai. Cảm ơn bạn đã chọn dùng Type Script và ANGULAR.

Bạn có ghét viết CSS dễ đọc? Đừng lo vì ANGULAR sẽ cung cấp tất cả các cách khó hiểu nhất có thể để chuyển đổi các quy tắc style rõ ràng sang giả HTML mà sẽ cần biên dịch lại mỗi khi bạn thay đổi một yếu tố của class. Thậm chí, bạn không cần phải học FLEXBOX, cho đến khi, người quản lý yêu cầu biết lý do tại sao bố cục của bạn không phù hợp với tiêu chuẩn THIẾT KẾ – và rồi đột nhiên, bạn nhận ra rằng mọi thứ sắp sụp đổ, nhưng lại không thể sửa chúng mà không phải tốn nhiều tuần liền.

Điều tôi rút ra sau khi làm nô lệ hơn 1 năm cho Angular

ANGULAR làm cho tôi trở thành một lập trình viên giỏi hơn bởi vì nó dạy cách viết một ứng dụng trong hoàn cảnh cực kì khổ đau. Bất cứ điều gì tôi làm đều không phải là cách hiệu quả nhất. Bất kỳ lỗi nào ở bất cứ nơi nào trong ỨNG DỤNG ANGULAR sẽ khiến phần còn lại của nó trở nên điên loạn theo. 

Nhưng tôi vẫn luôn hy vọng rằng một ngày nào đó mình được sếp cho xài framework khác như React hoặc Redux. Còn bây giờ, tôi vẫn sẽ tiếp tục chiến đấu với nó. Chiến đấu chỉ để tồn tại qua một ngày khác.


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

Cải thiện mối quan hệ giữa Lập trình viên VS Sếp: dễ hay khó? (Phần 1)

Trong hai bài viết gần đây tôi đấ chia sẻ những kinh nghiệm cá nhân về những điều mà lập trình viên và nhà quản lý không nên làm để tránh những căng thẳng không đáng có.

Trong bài này, tôi muốn nhấn mạnh những kết quả tích cực từ hai bài báo trước và những gì tôi đã học được từ chúng, và tôi cũng hy vọng rằng nó giúp ích được cho bạn.

Tôn trọng thời gian của nhau

Tôi nghĩ đây là bài học quý báu nhất mà tôi từng học. Tôn trọng thời gian nên được thực hiện từ cả hai phía để có một mối quan hệ tốt.

Đối với nhà quản lý, điều này có nghĩa là tránh giao các công việc mang tính thách đố đối nhằm giữ cho lập trình viên luôn bận rộn. Điều đó có nghĩa là không đặt ra các deadlines phi thực tế, không yêu cầu quá nhiều thời gian của developers trong một ngày, một tuần hay một tháng nào đó.

Đối với các developers, điều này không liên quan đến công việc chuyên môn nhưng nó vô cùng quan trọng. Bởi vì, bên cạnh công việc họ còn có cuộc sống riêng và các mối quan hệ xã hội khác, và nó thực sự cần được tôn trọng.

Cùng nhau phát triển

Theo tôi, đây cũng là một yếu tố khá quan trọng đối với cả hai!

Đối với các nhà quản lý, điều này có nghĩa là họ phải luôn hiểu rõ về yêu cầu công việc và khả năng cũng như trách nhiệm mà mỗi lập trình viên đang phụ trách. Điều đó có nghĩa là, cần có sự sắp xếp công việc một cách hợp lý đúng với những nguyện vọng và chuyên môn của họ, nhưng đồng thời cũng trao cho những lập trình viên cơ hội được thử thách bản thân ở những vị trí khác ( mà học chưa bao giờ đảm nhiệm )

Đối với lập trình viên, điều này có nghĩa là trước hết cần tuân thủ các yêu cầu công việc thể. Nó không chỉ giúp nhà quản lý hiểu được công việc của lập trình viên và nắm được những vấn đề mà các lập trình viên đang gặp phải và có những sự hỗ trợ phù hợp.

  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ọ?

  Hot trend AI, không hề "gắt" như bạn nghĩ

Tích cực hỗ trợ lẫn nhau

Đối với các nhà quản lý, nó có thể đơn giản là thể hiện uy tín của họ đối với một công việc, đảm bảo tiến độ, sử dụng hợp lý ngân sách. Nói một cách đơn giản là giao tiếp với developer (và điều này giúp mở rộng mối quan hệ với bất kì nhân viên nào) rằng họ đang cùng đồng hành cùng với developers. Các developers có thể cảm thấy không an toàn, ngay cả khi họ có cái tôi lớn, vì vậy vài lời khen ngợi thật lòng về những nỗ lực của họ sẽ mang lại những hiệu quả bất ngờ. Bạn đang giúp các developers cảm thấy thành công hơn và giúp họ có thêm động lực hoàn thành tốt công việc.

Đối với các developers, bạn có lẽ nên cân nhắc đến việc gửi feedback bạn đến sếp của bạn. Lần cuối bạn cảm ơn sếp vì đã giao cho bạn một công việc tuyệt vời là khi nào? Tôi có một vài mối quan hệ công việc, và hiện giờ chúng đã trở thành bạn bè, cần có rất nhiều sự trao đổi để đạt được điều đó. Tôi không mong nghe câu ” Làm tốt lắm! ” nếu tôi không nói ” Tôi thích làm việc ở đây” hoặc “Đó là một dự án thú vị! Cho tôi thêm một dự án khác nhé!”.

Góp ý dựa mang tính chất xây dựng

Chủ đề này là phần tiếp theo của chủ đề trên.

Theo ý kiến ​​cá nhân của tôi, đó là một nghệ thuật. Về bản chất, tôi là người hướng nội và tôi thấy các bối cảnh trong đời thực rất khó giải quyết. Tôi phải chiến đấu rất nhiều để vượt qua những cảm xúc đó.

Cho dù bạn là nhà lãnh đạo hay lập trình viên, hãy thể hiện sự quan tâm lẫn nhau. Đứa con mới sinh của tôi có thể là một đề tài để chia sẽ với nhau. Ghi chép những điều bạn nói chuyện với người khác nếu bạn cảm thấy khó nhớ.

Thật khó để nhìn thấy mối quan hệ 1:1 giữa cuộc sống và công việc lập trình nhưng tôi đảm bảo bạn có ít nhất một mối quan hệ. Khi bạn cảm nhận được sự kết nối với những người bạn đang làm việc chung, sự khác biệt sẽ rất lớn.

TopDev via dev.to

Xem thêm: Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P2)

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

Mẫu bảng mô tả công việc lập trình Android mới nhất

Mô tả công việc lập trình Android mức lương hấp dẫn

Trách nhiệm chính của một Android Developer là phát triển ứng dụng cho các thiết bị được cung cấp bởi hệ điều hành Android. Ngoài ra, một nhà phát triển Android phải đặc biệt chú ý đến khả năng tương thích của ứng dụng với nhiều phiên bản Android và loại thiết bị. Hy vọng, Mẫu bảng mô tả công việc lập trình Android 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.

Tuyển lập trình android hấp dẫn trong tháng

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

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

  • Có kinh nghiệm với SDK Android, thành thạo ngôn ngữ Java
  • Kinh nghiệm làm việc với dữ liệu từ xa thông qua REST và JSON
  • Kinh nghiệm làm việc với các thư viện và API của bên thứ ba
  • Làm quen với các nguyên tắc thiết kế OOP
  • Hiểu biết thành thạo các công cụ phiên bản mã như Git, SVN,…
  • Kỹ năng phân tích tuyệt vời và thái độ giải quyết vấn đề tốt
  •  Khả năng làm việc tốt trong môi trường nhóm

MÔ TẢ CÔNG VIỆC

  • Thiết kế và xây dựng các ứng dụng tiên tiến cho nền tảng Android
  • Hỗ trợ toàn bộ vòng đời ứng dụng (khái niệm, thiết kế, thử nghiệm, phát hành và hỗ trợ)
  • Đảm bảo hiệu suất, chất lượng và khả năng đáp ứng của các ứng dụng
  • Phối hợp với một nhóm để xác định, thiết kế và cung cấp các tính năng mới
  • Giúp duy trì chất lượng mã, tổ chức và tự động hóa
  • Phát triển giao diện lập trình ứng dụng (API) để hỗ trợ chức năng di động
  • Cập nhật các thuật ngữ, khái niệm và thực tiễn tốt nhất để mã hóa ứng dụng di động
  • Khắc phục sự cố và gỡ lỗi để tối ưu hóa hiệu suất
  • Thiết kế giao diện để cải thiện trải nghiệm người dùng
  • Nghiên cứu và đề xuất các sản phẩm, ứng dụng và giao thức di động mới
  • Luôn cập nhật các xu hướng công nghệ mới”

Tham khảo thêm những công việc lập trình hot nhất thị trường tại đây

Quy trình phát triển phần mềm

Quy trình phát triển phần mềm

I. Tổng quan về quy trình phát triển phần mềm

  • Một quy trình tốt và hợp lí luôn tạo ra những sản phẩm đạt tiêu chuẩn. Nó giúp tương tác hóa các hoạt động và yếu tố với nhau một các nhịp nhàng, đem lại hiệu quả.
  • Có thể cho rằng quy trình phần mềm đem lại chất lượng, năng suất, giá thành phần phềm, từ đó tăng tính cạnh tranh và đem lại lợi nhuận cao cho doanh nghiệp.

1. Khái niệm Quy trình phát triển phần mềm

Quy trình phát triển phần mềm là một tập hợp các hoạt động tổ chức mà mục đích của chúng là xây dựng và phát triển phần mềm.

  • Những câu hỏi được đặt ra ở đâu là:
    • Nhân sự: Ai sẽ làm? Ai làm gì?
    • Thời gian: Khi nào làm? Làm mất bao nhiêu thời gian?
    • Phương pháp: Làm như thế nào?
    • Công cụ: Dùng công cụ gì để làm công việc này?
    • Chi phí: Chi phí bỏ ra bao nhiêu? Thu về bao nhiêu? (ước tính)
    • Mục tiêu: Mục tiêu hướng đến là gì?
      • Mỗi loại hệ thống khác nhau thì cần những quy trình phát triển khác nhau.

2. Các hoạt động cơ bản của quy trình phát triển phần mềm

Có 4 thao tác là nền tảng của hầu hết các quy trình phát triển phần mềm:

  • Đặc tả phần mềm: Định nghĩa được các chức năng, điều kiện hoạt động của phần mềm.
  • Quy trình phát triển phần mềm: Là quá trình xây dựng các đặc tả.
  • Đánh giá phần mềm: Phầm mềm phải được đánh giá để chắc chắn rằng ít nhất có thể thực hiện những gì mà tài liệu đặc tả yêu cầu.
  • Tiến hóa phần mềm: Đây là quá trình hoàn thiện các chức năng cũng như giao diện để ngày càng hoàn thiện phần mềm cũng như các yêu cầu đưa ra từ phía khách hàng.
  Tản mạn về hai mô hình phát triển phần mềm là Waterfall và Agile

II. Các mô hình phát triển phần mềm

1. Waterfall model – Mô hình thác nước

Quy trình phát triển phần mềm

  • Mô tả
    • Mô hình thác nước là mô hình áp dụng theo tính tuần tự của các giai đoạn phát triển phần mềm
    • Có nghĩa là: giai đoạn sau chỉ được thực hiện tiếp khi giai đoạn trước đã kết thúc
    • Không được quay lại giai đoạn trước để xử lí các thay đổi trong yêu cầu
    • Đây được coi là mô hình phát triển phần mềm đầu tiên.
  • Áp dụng
    • Thường được áp dụng cho các dự án không thường xuyên bị thay đổi về yêu cầu.
  • Đặc điểm
    • Ưu điểm:
      • Dễ sử dụng, dễ tiếp cận
      • Các giai đoạn và hoạt động được xác định rõ ràng
      • Xác nhận ở từng giai đoạn, đảm bảo phát hiện sớm các lỗi
    • Nhược điểm:
      • Rất khó để quay lại giai đoạn nào khi nó đã kết thúc
      • Ít tính linh hoạt và phạm vi điều chỉnh của nó khá là khó khăn, tốn kém.

Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/

2. V- Shaped Model- Mô hình chữ V

Quy trình phát triển phần mềm

  • Mô tả
    • Đây là mô hình mở rộng từ mô hình thác nước
    • Thay vì di chuyển xuống theo tuần tự các bước thì quy trình sẽ đi theo hình chữ V
  • Áp dụng
    • Yêu cầu phần mềm phải xác định rõ ràng
    • Công nghệ phần mềm và các công cụ phải được tìm hiểu kĩ
  • Đặc điểm
    • Ưu điểm:
      • Đơn giản dễ sử dụng
      • Phấn phối cụ thể theo mỗi giai đoạn
      • Thực hiện verification và validation sớm trong mỗi giai đoạn phát triển
    • Nhược điểm:
      • Phạm vi điều chỉnh khá là khó khăn và tốn kém.

Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/

3. Spiral Model – Mô hình xoắn ốc

Quy trình phát triển phần mềm

  • Mô tả
    • Là mô hình kết hợp giữa các tính năng của mô hình prototyping và mô hình thác nước.
    • Mô hình xoắn ốc được ưa chuộng cho các dự án lớn, đắt tiền và phức tạp.
    • Mô hình này sử dụng nhiều những giai đoạn tương tự như mô hình thác nước, về thứ tự, plan, đánh giá rủi ro, …
  • Áp dụng
    • Thường được sử dụng cho các ứng dụng lớn và các hệ thống được xây dựng theo các giai đoạn nhỏ hoặc theo các phân đoạn
  • Đặc điểm
    • Ưu điểm:
      • Estimates (i.e. budget, schedule, etc.) trở nên thực tế hơn như là một quy trình làm việc, bởi vì những vấn đề quan trọng đã được phát hiện sớm hơn.
      • Có sự tham gia sớm của deverlopers
      • Quản lý rủi ro và phát triển hệ thống theo phase
    • Nhược điểm:
      • Chi phí cao và thời gian dài để có sản phẩm cuối cùng
      • Phải có kỹ năng tốt để đánh giá rủi ro và giả định.

Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/

4. Iterative Model- Mô hình tiếp cận lặp

Example: Quy trình phát triển phần mềm

Diagram:Quy trình phát triển phần mềm

  • Mô tả
    • Một mô hình được lặp đi lặp lại từ khi start cho đến khi làm đầy đủ spec
    • Thay vì phát triển phần mềm từ spec đặc tả rồi mới bắt đầu thực thi thì mô hình này có thể review dần dần để đi đến yêu cầu cuối cùng.
    • Quy trình phát triển được lặp đi lặp lại cho mỗi một version của sản phẩm trong mỗi chu kỳ.
  • Áp dụng
    • Yêu cầu của hề thống đã hoàn chỉnh, được xác định rõ ràng và dễ hiểu
    • Yêu cầu chính cần được xác định, và một số chi tiết có thể được đổi mới theo thời gian
  • Đặc điểm
    • Ưu điểm:
      • Xây dựng và hoàn thiện các bước sản phẩm theo từng bước
      • Nhận được phản hồi của người sử dụng từ những bản phác thảo
      • Thời gian làm tài liệu sẽ ít hơn so với thời gian thiết kế
    • Nhược điểm:
      • Mỗi giai đoạn lặp lại thì cứng nhắc
      • Tốn kiến trúc hệ thống hoặc thiết kế các vấn đề có thể phát sinh nhưng không phải tất cả đều xảy ra trong toàn bộ vòng đời.

Tham khảo thêm: http://istqbexamcertification.com/what-is-incremental-model-advantages-disadvantages-and-when-to-use-it/https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/

5. Incremental Model – Mô hình tăng trưởng

Example:Quy trình phát triển phần mềm

Diagram:Quy trình phát triển phần mềm

  • Mô tả
    • Trong mô hình này thì spec được chia thành nhiều phần.
    • Chu kỳ được chia thành các module nhỏ, dễ quản lý.
    • Mỗi module sẽ đi qua các yêu cầu về thiết kế, thực hiện, … như 1 vòng đời phát triển thông thường.
  • Áp dụng
    • Áp dụng cho những dự án có yêu cầu đã được mô tả, định nghĩa và hiểu một cách rõ ràng
    • Có nhu cầu về sản phẩm sớm
  • Đặc điểm
    • Ưu điềm:
      • Phần mềm làm việc một cách nhanh chóng trong suốt vòng đời phát triền
      • Mô hình này linh hoạt hơn, ít tốn kém hơn để thay đổi phạm vi và yêu cầu
      • Dễ dàng hơn trong việc kiểm tra và sửa lỗi với sự lặp lại nhỏ hơn
    • Nhược điểm:
      • Cần lập plan và thiết kế tốt
      • Cần một định nghĩa rõ ràng và đầy đủ của toàn bộ hệ thống trước khi nó có thể được chia nhỏ và được xây dựng từng bước
      • Tổng chi phí là cao hơn so với thác nước.

Tham khảo thêm: https://melsatar.wordpress.com/2012/03/15/software-development-life-cycle-models-and-methodologies/

  Những khái niệm phổ biến trong kiểm thử phần mềm
  Các mô hình phát triển phần mềm

6. RAD Model (Rapid Application Development)

Quy trình phát triển phần mềm

  • Mô tả
    • Là một dạng của incremental model
    • Trong mô hình RAD các thành phần hoặc chức năng được phát triển song song như thể chúng là các dự án nhỏ
    • Việc phát triển này theo thời gian nhất định, cung cấp và lắp ráp thành một nguyên mẫu làm việc
    • Điều này có thể nhanh chóng đưa ra một cái gì đó cho khách hàng để xem và sử dụng và cung cấp thông tin phản hồi liên quan đến việc cung cấp và yêu cầu của họ.
  • Áp dụng
    • RAD nên được sử dụng khi có nhu cầu để tạo ra một hệ thống có Modularized trong khoảng thời gian 2-3 tháng.
    • Nên được sử dụng khi đã có sẵn designer cho model và chi phí cao
    • Đặc điểm:
    • Ưu điềm:
      • Giảm thời gian phát triển.
      • Tăng khả năng tái sử dụng của các thành phần
      • Đưa ra đánh giá ban đầu nhanh chóng
      • Khuyến khích khách hàng đưa ra phản hồi
    • Nhược điểm:
      • Cần có một team giỏi để xác định yêu cầu phần mềm
      • Chỉ những hệ thống có module mới sứ dụng được mô hình này
      • Yêu cầu về dev/ design phải có nhiều kinh nghiệm
      • Phụ thuộc rất nhiều vào kỹ năng model

Tham khảo thêm Quy trình phát triển phần mềm: http://istqbexamcertification.com/what-is-rad-model-advantages-disadvantages-and-when-to-use-it/

7. Agile Model

Quy trình phát triển phần mềm

  • Mô tả
    • Dựa trên mô hình iterative and incremental
    • Các yêu cầu và giải pháp phát triển dựa trên sự kết hợp của các function
  • Áp dụng
    • Nó có thể được sử dụng với bất kỳ loại hình dự án nào, nhưng nó cần sự tham gia và tính tương tác của khách hàng. Ngoài ra, nó có thể được sử dụng khi khách hàng yêu cầu chức năng sẵn sàng trong khoảng thời gian ngắn ( 3 tuần )
  • Đặc điểm
    • Ưu điểm:
      • Giảm thời gian cần thiết để tận dụng một số tính năng của hệ thống
      • Kết quả cuối cùng là phần mềm chất lượng cao trong thời gian ít nhất có thể và sự hài lòng của khách hàng
    • Nhược điểm:
      • Phụ thuộc vào kỹ năng của người phát triển phần mềm Scalability
      • Tài liệu được thực hiện ở giai đoạn sau
      • Cần một team có kinh nghiệm Needs special skills for the team.

Tham khảo thêm Quy trình phát triển phần mềm: http://istqbexamcertification.com/what-is-rad-model-advantages-disadvantages-and-when-to-use-it/

8. Scrum (Scrum là một quy trình phát triển phần mềm thuộc họ agile)

Quy trình phát triển phần mềm

Mô tả: Scrum là một phương pháp linh hoạt (agile), vì thế nó tuân thủ các nguyên tắc của Agile Manifesto (xem thêm Tuyên ngôn Agile). Ngoài ra Scrum hoạt động dựa trên ba giá trị cốt lõi, còn gọi là Ba chân của Scrum bao gồm Minh bạch, Thanh tra và Thích nghi.

III. TÌm hiểu về Mô hình Scrum

1. Khái niệm Scrum

Là một quy trình phát triển phần mềm theo mô hình linh hoạt (agile). Với nguyên tắc chủ đạo là chia nhỏ phần mềm cần sản xuất ra thành các phần nhỏ để phát triển (các phần nhỏ này phải đọc lập và Release được), lấy ý kiến khách hàng và thay đổi cho phù hợp ngay trong quá trình phát triển để đảm bảo sản phẩm release đáp ứng những gì khách hàng mong muốn. Scrum chia dự án thành các vòng lặp phát triển gọi là các sprint. Mỗi sprint thường mất 2- 4 tuần (30 ngày) để hoàn thành. Nó rất phù hợp cho những dự án có nhiều sự thay đổi và yêu cầu tốc độ cao.

2. Một số đặc điểm của Quy trình phát triển phần mềm SCRUM

    • Scrum (hay agile nói chung) được xếp vào nhóm “Feature-driven development”. Sản phầm được phát triển theo tính năng, chứ không phát triển sản phẩm theo kiến trúc hệ thống.

Scrum khác với các mô hình Agile ở chỗ nó là mô hình hướng khách hàng (Customer oriented), vai trò của khách hàng trong việc đánh giá sản phẩm rất quan trọng. Chỉ sau mỗi sprint (2-4 tuần) khách hàng sẽ thấy được sự thay đổi của sản phẩm của mình qua đó đưa ra phản hồi sớm để định hướng -> Thích ứng nhanh với sự thay đổi yêu cầu.

    • Scrum giảm thiểu tài nguyên dành cho việc quản lý mà tập trung nhiều hơn cho những công việc liên quan trực tiếp đến việc làm ra sản phẩm. Bằng cách giảm vai trò quản lý (PM) bằng cách đẩy việc quản lý tới từng người.
    • Giảm thời gian dành cho việc viết tài liệu bằng cách tăng thời gian trao đổi trực tiếp. Thông thường khi estimate công việc, thì team estimate cả thời gian dành cho communication để hoàn thành task đó nữa.
    • Tập trung vào sản phẩm, sản phẩm mới là đích cuối cùng chứ không phải qui trình.

Tham khảo thêm: Tuyển dụng lập trình Scrum lương cao tại Topdev.

3. Ưu điểm, nhược điểm của mô hình Scrum

ƯU ĐIỂM:

  • Một người có thể làm nhiều việc ví dụ như dev có thể test
  • Phát hiện lỗi sớm hơn rất nhiều so với các phương pháp truyền thống
  • Khách hàng nhanh chóng thấy được sản phẩm qua đó đưa ra phản hồi sớm.
  • Có khả năng áp dụng được cho những dự án mà yêu cầu khách hàng không rõ ràng ngay từ đầu.

NHƯỢC ĐIỂM:

  • Trình độ của nhóm là có một kỹ năng nhất định
  • Phải có sự hiểu biết về mô hình aglie .
  • Khó khăn trong việc xác định ngân sách và thời gian.
  • Luôn nghe ý kiến phản hồi từ khách hàng và thay đổi theo nên thời gian sẽ kéo dài khi có quá nhiều yêu cầu thay đổi từ khách hàng.
  • Vai trò của PO (Product Owner) rất quan trọng, PO là người định hướng sản phẩm. Nếu PO làm không tốt sẽ ảnh hưởng đến kết quả chung.

4. Các nhân tố cấu tạo lên 1 quy trình phát triển phần mềm trong Scrum

Một cách đơn giản có 03 thành tố quan trọng cấu thành nên SCRUM: Tổ chức (Organization), Qui trình (Process),  Tài liệu (Atifacts). Trong mỗi thành tố có 03 thành tố con. Như vậy, chúng ta chỉ cần hiểu và áp dụng được 9 thành tố này là có thể áp dụng SCRUM.

  • Tổ chức (Organization): Tổ chức nhóm dự án và Roles (Vài trò)
      • Product Owner (Người sở hữu sản phẩm)
      • ScrumMaster (Người điều phối )
      • Development Team (Nhóm phát triển)
  • Tài liệu (Atifacts):  các kết quả đầu ra
      • Product Backlog  (Danh sách các chức năng cần phát triển của sản phẩm)
      • Sprint Backlog (Danh sách các chức năng cần phát triển cho mỗi giai đoạn)
      • Estimation (Kết quả ước lượng của Team)
  • Qui trình(Process):  Qui định cách thức vận hành của SCRUM
      • Sprint Planning meeting (Họp để hoạch định cho mỗi giai đoạn)
      • Sprint Review (Họp để tổng kết cho mỗi giai đoạn)
      • Daily Scrum Meeting (Họp review hàng ngày)

4.1 Tổ chức của dự án(Organization)

Quy trình phát triển phần mềm

  • Product Owner

Product Owner là người sở hữu sản phẩm, người quyết định sản phẩm có những chức năng nào và là người quyết định Product Backlog, họ sẽ tham gia 1 phần vào quy trình phát triển phần mềm. Thông thường Role này được khách hàng hoặc người đại diện cho khách hàng đảm nhận.

  • ScrumMaster

Scrum Master là người đảm bảo các qui trình của Scrum được thực hiện đúng và thuận lợi, giúp đỡ cho Team thực hiện công việc phát triển sản phẩm một cách tốt nhất.

  • Development Team (Nhóm phát triển)

Một nhóm từ 4-7 kỹ sư phần mềm chịu trách nhiệm phát triển sản phẩm. Nhóm dự án phải làm việc với Product Owner để quyết định những gì sẽ làm trong Sprint (giai đoạn )này và kết quả sẽ ra sao. Đồng thời nhóm cũng thảo luận để đưa ra các giải pháp, ước lượng thời gian thực hiện công việc, họp đánh giá kết quả công việc. Nếu dự án lớn chúng ta cần chia ra thành các dự án nhỏ.

4.2 Tài liệu (Atifacts)

  • Product Backlog

Product Backlog là danh sách các chức năng cần được phát triển của sản phẩm trong quy trình phát triển phần mềm. Danh sách này do Product Owner quyết định. Nó thường xuyên được cập nhật để đáp ứng được nhu cầu thay đổi của khách hàng cũng như các điều kiện của dự án.

Quy trình phát triển phần mềm

  • Sprint Backlog

Sprint là một giai đoạn phát triển trong quá trình phát triển sản phẩm, nó được khuyến khích có chiều dài từ 2 – 4 tuần. Mỗi Sprint được xác định bằng thời gian phát triển, danh sách các chức năng phát triển (Sprint Backlog).

Mỗi sprint phải Release được sản phẩm để đảm bảo lấy được ý kiến khách hàng, qua được các qui trình phát triển của sản phẩm nhằm rút kinh nghiệm và tránh sự cố sau này.

Sprint Backlog là danh sách chức năng phát triển trong Sprint, nó được quyết định bởi cuộc họp Sprint Planning. Sprint Backlog là các chức năng được chọn từ Product Backlog dựa trên mức độ ưu tiên và khả năng của team phát triển.

Quy trình phát triển phần mềm

  • Estimation (ước lượng)

Trong SCRUM thì các thành viên của Team sẽ tự lựa chọn Task cho mình và ước lượng thời gian phát triển dự  kiến và chịu trách nhiệm với ước lượng này. Sau khi hoàn thành sẽ cập nhật vào bảng Sprint Backlog.

Quy trình phát triển phần mềm

4.3 Qui trình(Process)

Quy trình phát triển phần mềm

  • Sprint Planning meeting  (Họp lập kế hoạch cho mỗi Sprint)

Như  chúng ta đã biết ở trên Sprint là một giai đoạn phát triển có thời gian từ 2-4 tuần. Để chuẩn bị cho mỗi Sprint team cần phải họp để xác định những chức năng nào (story) sẽ phát triển trong giai đoạn này (sprint backlog), kết quả đầu ra dự kiến (Goal, kết quả Release), Estimate (ước lượng ai làm việc gì) và thảo luận các giải pháp. Tất cả được ghi thành biên bản để có cơ sở thực hiện và Review sau này.

  • Sprint Review

Là cuộc họp để đánh giá lại kết quả thực hiện của Sprint vừa qua, xác định những chức năng được Release, những chức năng tiếp tục sửa hoặc phát triển thêm, xác định những vấn đề phát sinh và bàn phương án giải quyết, bổ sung Product Backlog v….

  • Daily Scrum Meeting (hay còn gọi là Standup Meeting)
    • Daily Scrum Meeting là cuộc họp hàng ngày và được đề nghị không quá 15 phút và họp đứng để đảm bảo thời gian họp không bị kéo dài vào đầu mỗi ngày, mỗi thành viên chỉ trả lời 3 câu hỏi:
      • Phát sinh vấn đề gì trong quy trình phát triển phần mềm?
      • Hôm nay bạn sẽ làm gì
      • Hôm qua bạn làm được gì?
      • Nếu thành viên gặp vấn đề thì nên làm việc riêng để giải quyết để không mất nhiều thời gian của các thành viên.  Scrum Master phải đảm bảo cuộc họp này được thực hiện đúng qui định.
      • Các Sprint sẽ được lặp đi lặp lại cho tới khi nào các hạng mục trong Product Backlog đều được hoàn tất hoặc khi Product Owner quyết định có thể dừng dự án căn cứ tình hình thực tế. Do sử dụng chiến thuật “có giá trị hơn làm trước” nên các hạng mục mang lại nhiều giá trị hơn cho chủ dự án luôn được hoàn tất trước. Do đó Scrum luôn mang lại giá trị cao nhất cho người đầu tư cho dự án. Do quy trình luôn luôn được cải tiến, nhóm Scrum thường có năng suất lao động rất cao. Đây là hai lợi ích to lớn mà quy trình phát triển phần mềm Scrum mang lại cho tổ chức.

IV. So sánh mô hình Scrum và mô hình waterfall, Sprial

Đặc điểm Waterfall Spiral Scrum
Xác định các giai đoạn phát triển Bắt buộc Bắt buộc Chỉ có giai đoạn lập kế hoạch và kết thúc
Sản phẩm cuối cùng Được xác định trong quá trình lập kế hoạch Được xác định trong quá trình lập kế hoạch Xác định trong suốt quá trình dự án
Chi phí sản xuất Được xác định trong quá trình lập kế hoạch Thay đổi cục bộ Xác định trong quá trình xây dựng dự án
Ngày hoàn thành sản phẫm Được xác định trong quá trình lập kế hoạch Thay đổi cục bộ Xác định trong quá trình xây dựng dự án

Via Techtalk

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

Xem thêm tin tuyển dụng Developer tại TopDev!

Những điều cần biết về z-index trong css

z-index trong css

 

z-index trong css có cách thức hoạt động là mỗi element trên trang web được hiển thị ngang và dọc theo 2 trục x và y, hiển thị thứ tự chồng lấn theo trục z. Nói đơn giản hơn thì z-index càng cao thì element đó đứng trước và hiện lên trên.

z-index trong css
Credit: smashingmagazine

Ví dụ về z-index và positon

Chúng ta có 3 khối greybluegold đều trực thuộc trực tiếp một div có class topdev-demo. Điều này giúp cho 3 khối thuộc cùng một stacking context. Như vậy trong cùng một stacking context thì thứ tự trên dưới sẽ tuân theo quy tắc: element nào có z-index cao hơn sẽ hiện lên trên. Nếu chưa có một element nào được set z-index thì thứ tự sẽ phụ thuộc vào thứ tự xuất hiện từ trước ra sau của DOM tree.

  5 điều phiền toái nhất của CSS
  BEM là gì? Quy ước đặt tên dành cho CSS
<div class="topdev-demo">
  <div class="grey">
    <span>Grey</span>
  </div>
  <div class="blue">
    <span>Blue</span>
  </div>
  <div class="gold">
    <span>Gold</span>
  </div>
</div>
.topdev-demo {
  margin-left: 40px;
  margin-top: 40px;
}
.grey, .blue, .gold {
  width: 100px;
  height: 100px;
  color: black;
}
.grey {
  background: grey;
}
.blue {
  margin-top: -40px;
  margin-left: 60px;
  background: blue;
}
.gold {
  margin-top: -40px;
  margin-left: 120px;
  background: gold;
}

Kết quả:

z-index trong css

Thử thêm z-index vào 3 khối để cho khối grey hiện lên phía trước, khối blue đứng giữa và khối gold đứng sau 2 khôi kia. Tuy nhiên bạn lưu ý là z-index chỉ có tác dụng với các element khi bạn chỉ định thêm 3 giá trị  absolutefixed hay relative.

.grey {
  z-index: 3;
  position: relative;
}
.blue {
  z-index: 2;
  position: relative;
}
.gold {
  z-index: 1;
  position: relative;
}

Kết quả:

z-index trong css

Nói tới đây là quá đủ để bạn hiểu về z-index trong css  các thuộc tính đi kèm để code. Còn muốn hiểu sâu hơn, mời bạn đi tiếp xuống phần dưới đây.

Tham khảo việc làm cho lập trình CSS lương cao tại Topdev.

Stacking Order

Đây là một trong những vấn đề với z-index: Nó quá đơn giản, thế nên hầu hết các developer sẽ không bỏ thời gian để đọc các rule của nó.

Mọi element trong một trong HTML có thể ở phía trước hay phía sau các element khác trong document. Đây được gọi là thứ tự xếp lớp (stacking order).

Thứ nhất, khi chưa tính đến 2 thuộc tính z-index và position, chỉ có một quy luật khá đơn giản: thứ tự xếp lớp chính là thứ tự xuất hiện trong HTML

Thứ hai, khi tính tới thuộc tính position, thì khi đó mọi element được gán position (và cả các element con của nó) đều xuất hiện phía trước bất kì một element không gán position (Ví dụ như các thuộc tính sau để z-index có tác dụng: absolutefixed hay relative)

Thứ ba, ta có thể coi như element nào có giá trị z-index cao hơn thì sẽ đứng trước element có giá trị z-index thấp hơn. Nghe đơn giản nhưng thực ra có nhiều quy tắc hơn thế:

  • z-index chỉ chạy đối với element nào có gán position.
  • z-index có thể tạo ra stacking context.

Stacking Contexts

  9 CSS animation mới "mãn nhãn" cho các project

Một nhóm các element có chung một element cha sẽ cùng di chuyển chung với nhau trong stacking order, tạo nên khái niệm gọi là stacking context. Việc hiểu biết về stacking context chính là chìa khóa để hiểu hoàn toàn về cách z-index và stacking order hoạt động.

Mỗi một stacking context sẽ có 1 HTML element là element gốc (root element). Khi một stacking context gắn với một element, nó sẽ liên kết tất cả các element con vào 1 vị trí cố định trong stacking order. Điều đó có nghĩa là nếu 1 element nằm trong 1 stacking context nằm ở dưới cùng của stacking order, sẽ không có cách nào làm cho nó xuất hiện phía trước một element nằm trong 1 stacking context có vị trí cao hơn trong stacking order, ngay cả nếu set z-index của nó tới 9999 !

Một stacking context có thể được gắn với 1 element bằng 1 trong 3 cách:

  • Khi một element là gốc của document (thẻ <html>)
  • Khi một element có giá trị position được set khác với static và z-index khác auto
  • Khi một element có giá trị opacity nhỏ hơn 1

Cập nhật: Bên cạnh opacity, một số property CSS mới bây giờ cũng có thể tạo stacking context. Chúng bao gồm transformsfilterscss-regionspaged media… Như một luật chung, đó là nếu như 1 property CSS yêu cầu render trong một offscreen context, nó sẽ tạo ra một stacking context mới.

Kết luận z-index trong css

z-index là một tính chất hay gây nhức đầu đối với developer mới làm quen CSS. Tuy nhiên nếu nắm bắt tốt về stacking order , stacking contextposition và những thuộc tính có thể khiến stacking context “mở nhánh” như opacity, thì sẽ phần nào sẽ tiện code nhanh hơn trong tương lai. Mà tốt nhất là vừa đọc vừa thực hành mới nhớ, chứ đọc không sẽ bị loạn não.

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

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

Gitignore là gì ? Tại sao nó lại rất quan trọng trong teamwork

Gitignore là gì

Tác giả: Trần Văn Tú 

Gitignore là gì? Đã là Dev thì chúng ta đều biết đến Git để quản lý source code. Và sẽ vài lần Khi làm việc trong 1 team, bạn có bao giờ gặp tình trạng pull request của các member cứ conflict lên xuống vì mấy file biên dịch hay log chưa… Và thế là Gitignore đã ra đời để giải quyết vấn đề đó.

Gitignore là gì?

Gitignore là file có tên là .gitignore do Git quy định. Nhiệm vụ của nó là liệt kê những file mà mình không mong muốn cho vào git hoặc hiểu nôm na là Git sẽ bỏ qua những file đó đi. Gitignore hiện nay rất quan trọng trong team work, các bạn nên áp dụng ngay vào quy trình làm việc của team.

Cách thức hoạt động của Gitignore là gì?

Có thể hiểu đơn giản là git sẽ bỏ qua file hoặc một tập các file trong project của chúng ta khi commit và push lên repository. Ví dụ:

  • Các file mà IDE tự sinh ra trong quá trình build project -> Tránh tốn kém tài nguyên server lưu trữ project.
  • Các file cấu hình đường dẫn của máy cá nhân -> Gây ra việc không build được project khi checkout về ở các máy thành viên khác.
  • Các file cần phải giữ kín nếu như repository của bạn đang để public.

Git quản lý các file mà chúng ta muốn “ignore” bằng file .gitignore được đặt ở trong thư mục root project.

Khi add 1 file mới vào git, git sẽ kiểm tra danh sách những file sẽ bỏ qua trong file .gitignore và không add chúng vào git. Đó mới chỉ là điều kiện cần, điều kiện đủ là files không có trong git cache nữa thì git nó mới bỏ qua, chứ files mà nằm trong git cache thì .gitignore sẽ vô tác dụng.

Các pattern format hay dùng

  • Sử dụng # để comment và có thể để cách dòng cho dễ đọc.
  • Đơn giản nhất là tên file cần ignore: example.exe
  • Hay cả thư mục: example_folder/
  • Khi ignore thư mục nên có dấu / ở sau tên thư mục để nhận biết đó là thư mục, nếu không nó có thể là coi là thư mục hoặc file hay symbolic link.
  • Dấu ! phía trước có ý nghĩa phủ định: !abc/example.exe
  • Sử dụng 1 * để tìm các file có cùng định dạng. Ví dụ như bạn muốn ignore tất cả các file .xml trong project: *.xml
  • Trường hợp khác của 1 * nếu bạn chỉ rõ đường dẫn ví dụ: config/*.xml thì nó chỉ có hiệu lực cho các file config/abc.xml mà không có hiệu lực cho các file config/sub/abc.xml.
  • Sử dụng ** để có hiệu lực cho các thư mục không cần định rõ tên. Ví dụ: **/foo nó sẽ có hiệu lực cho tất cả file hoặc thư mục có tên là foo ở mọi nơi trong project.
  • Hay sử dụng kiểu folder/** để có hiệu lực cho tất cả các file bên trong thư mục.
  10 Vấn đề về Git thường gặp và Giải pháp
  12 điều cực "cool" mà bạn có thể làm với Github

Tools

Hầu hết các IDE đều hỗ trợ, nếu chưa có bạn có thể cài đặt thêm plugin hay config ở đâu đó. Mình có thể chọn loại dự án mình đang làm và nó sẽ sinh tự động file .gitignore tương ứng.

Hoặc đơn giản bạn vào gitignore.io sau đó chọn loại project mình đang làm.

Sau đó nó sẽ tạo ra 1 file .gitignore ngon lành cho bạn. Ví dụ như 1 project Node.js nó sẽ kiểu như thế này:

Ví dụ về .gitignore

Gitignore là gì

Phạm vi phủ sóng

File .gitignore sẽ ảnh hưởng đến các file và thư mục anh em với nó hoặc là con cháu, chắt của nó. Thường thì project chỉ cần 1 file .gitignore ở ngoài cùng là đủ nhưng nếu project quá lớn ta có thể tách file .gitignore vào từng folder nhỏ để dễ quản lý.

Khi nào lên dùng Gitignore?

Bất cứ project nào cũng nên dùng nó, bạn nên tạo ngay file .gitignore trong thư mục gốc ngay khi khởi tạo project của bạn và liệt kê luôn những file mà bạn muốn git bỏ qua. Tại sao phải liệt kê trước làm gì thế? Đọc phần dưới sẽ rõ ?

Chú ý – Git cache

Giả dụ thế này! Bạn vừa join vào project và thấy project liên tục bị conflict vì mấy file rác. Nhưng may quá bạn đọc được bài viết này và bạn rất thông minh nên đã tạo luôn file .gitignore cho project và thêm luôn file rác đó vào .gitignore rồi bạn xóa file rác đi và commit lên.

Rồi sao! 1 ông khác lại pull code mới về lại tạo ra file rác đó và nó vẫn dính vào git bình thường. Đờ heo? “Em cho nó vào .gitignore rồi cơ mà?.

Vì sao à? Vì file đó đã được thằng git cache thu nạp thành của nó rồi nên thằng git nó vẫn có quyền quản lý file đó. Vậy cách giải quyết đơn giản nó phải giải thoát file đó ra khỏi git cache là xong, bằng 1 dòng lệnh:

Từ bây giờ file đó không còn là của git cache nữa nên nó không thuộc quyền quản lý của git nữa và bây giờ .gitignore mới có tác dụng. Theo lý thuyết là vậy nhưng nếu bạn cần reset lại hết project để .gitignore hoạt động đúng thì mình thường xóa bỏ hết file của git cache luôn?

git rm -r --cached .

Sau đó mình sẽ add tất cả các file lại vào project như lúc mới tạo project.

git add

Và bây giờ bạn lại commit và push như bình thường.

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

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

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

Trigger trong SQL: Cú pháp và cách tạo Trigger SQL

Trigger trong SQL: Cú pháp và cách tạo Trigger SQL

SQL đã quá quen thuộc trong việc quản lý và thao tác cơ sở dữ liệu. Trong SQL, có nhiều công cụ mạnh mẽ để giúp quản lý dữ liệu hiệu quả, và một trong số đó là trigger. Trigger là một khái niệm quan trọng trong SQL, cho phép bạn tự động hóa các quy trình và kiểm soát chặt chẽ hơn các thay đổi xảy ra trong cơ sở dữ liệu của mình. Cùng làm rõ trigger SQL là gì và cú pháp sử dụng Trigger trong SQL.

Trigger trong SQL là gì?

Trigger là một đoạn mã SQL được thiết lập để tự động chạy khi một sự kiện cụ thể xảy ra trong một bảng hoặc view trong cơ sở dữ liệu. Sự kiện này có thể là một hành động như INSERT, UPDATE, hoặc DELETE. Khi hành động đó xảy ra, trigger sẽ tự động được kích hoạt để thực hiện một chuỗi các hành động đã được định sẵn.

Trigger trong SQL là gì?

Trigger là một loại stored procedure đặc biệt (không có tham số) được thực thi (execute) một cách tự động khi có một sự kiện thay đổi dữ liệu (data modification). Trigger được lưu trữ và quản lý trong Server DB, được dùng trong trường hợp ta muốn kiểm tra các ràng buộc toàn vẹn trong DB.

Trigger được sử dụng khi nào?

  • Trigger thường được sử dụng để kiểm tra ràng buộc (check constraints) trên nhiều quan hệ (nhiều bảng/table) hoặc trên nhiều dòng (nhiều record) của bảng.
  • Ngoài ra việc sử dụng Trigger để chương trình có những hàm chạy ngầm nhằm phục vụ nhưng trường hợp hữu hạn và thường không sử dụng cho mục đích kinh doanh hoặc giao dịch.
  • Ngăn chặn việc xóa những dữ liệu quan trọng. (có thể dùng back up các dữ liệu quan trọng sang table khác phòng khi …bị xóa ngoài ý muốn).

Mỗi table thường sẽ có 3 thao tác làm thay đổi dữ liệu đó là: UPDATE, INSERT, DELETE. Và đôi khi mỗi hành động như vậy ta sẽ có những ràng buộc trên bảng để giúp bảo toàn dữ liệu, lúc này sử dụng trigger là một giải pháp tốt.

Ví dụ bạn thiết kế cho bảng product và category, trong đó product sẽ có một column tên là total_product dùng để lưu trữ tổng số sản phẩm của category đó. Khi thêm một product thì ta phải tăng column đó lên một đơn vị. Khi update phải kiểm tra có thay đổi category không để tăng hoặc giảm cho hợp lý, khi delete thì bớt đi một. Việc này hoàn toàn có thể code bằng các ngôn ngữ đang sử dụng SQL Server, tuy nhiên bạn có thể sử dụng trigger để giúp hệ thống dữ liệu hoạt động tốt hơn.

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

Ưu Điểm Của Trigger

  • Trigger tự động kích hoạt khi một sự kiện nhất định xảy ra (chẳng hạn như INSERT, UPDATE, DELETE), giúp tự động hóa các quy trình mà không cần can thiệp thủ công. Điều này giúp giảm thiểu lỗi do con người gây ra và đảm bảo tính nhất quán trong các thao tác.
  • Bảo Đảm Tính Toàn Vẹn Dữ Liệu: Trigger có thể được thiết lập để kiểm tra và đảm bảo rằng các ràng buộc và quy tắc kinh doanh được tuân thủ trước khi bất kỳ thay đổi nào được áp dụng vào cơ sở dữ liệu. Bên cạnh đó trigger cho phép hệ thống phản ứng ngay lập tức với các thay đổi trong dữ liệu, chẳng hạn như tự động cập nhật các bảng khác hoặc ghi lại nhật ký thay đổi.
  • Ghi Nhật Ký và Theo Dõi Thay Đổi: Trigger có thể được sử dụng để tự động ghi lại các thay đổi trong cơ sở dữ liệu vào một bảng nhật ký. Điều này rất hữu ích trong việc theo dõi các hoạt động, audit, và bảo mật.
  • Tính Linh Hoạt: Trigger có thể được sử dụng cho nhiều mục đích khác nhau, từ việc đảm bảo dữ liệu không bị lỗi, tự động cập nhật số liệu, đến việc quản lý các tác vụ phức tạp như đồng bộ dữ liệu giữa các bảng.

Nhược Điểm Của Trigger

  • Trigger được thực thi tự động và có thể bị kích hoạt bởi nhiều sự kiện khác nhau, do đó việc xác định nguyên nhân gốc rễ của lỗi trong cơ sở dữ liệu có thể trở nên phức tạp.
  • Sử dụng quá nhiều trigger hoặc các trigger phức tạp có thể khiến việc bảo trì cơ sở dữ liệu trở nên khó khăn, đặc biệt khi các trigger ảnh hưởng lẫn nhau.
  • Tăng Overhead Hệ Thống: Trigger được kích hoạt tự động bởi các sự kiện, và nếu trigger chứa các câu lệnh phức tạp hoặc xử lý nhiều dữ liệu, điều này có thể dẫn đến việc làm chậm hiệu suất của cơ sở dữ liệu.
  • Khả Năng Gây Deadlock: Nếu không được thiết kế cẩn thận, trigger có thể dẫn đến tình trạng deadlock (khi hai hoặc nhiều hành động đợi nhau để hoàn thành), gây tắc nghẽn và làm gián đoạn hoạt động của hệ thống.
  • Các trigger có thể xung đột với nhau hoặc với các ràng buộc khác trong cơ sở dữ liệu, dẫn đến những kết quả không mong muốn.

Cú pháp của Trigger SQL

Cú pháp của Trigger SQL

Để tạo một Trigger, bạn sử dụng câu lệnh CREATE TRIGGER:

CREATE TRIGGER trigger_name trigger_time trigger_event
 ON table_name
 FOR EACH ROW
 BEGIN
 ...
 END;

Trong đó:

  • Một Trigger được khởi tạo sau câu lệnh CREATE TRIGGER. Quy tắc đặt tên nên tuân theo nguyên tắc: [trigger time]_[table name]_[trigger event], ví dụ before_employees_update.
  • Thời gian kích hoạt : BEFORE hoặc AFTER. Cần phải chỉ định thời gian kích hoạc khi bạn xác định được tiến trình kích hoạt của nó. Sử dụng từ khóa BEFORE nếu bạn muốn xử lý hành động trước khi thực hiện thay đổi trên bản và AFTER nếu bạn cần phải xử lý hành động sau khi thay đổi được thực hiện xong.
  • Sự kiện gây ra có thể là INSERTUPDATEDELETE.
  • Trình kích hoạt phải được liên kết với một bảng cụ thể, sử dụng từ khóa ON để xác định.
  • Câu lệnh SQL phải được đặt giữa từ khóa BEGIN và END.

Các Loại Trigger Trong SQL

Trigger có thể được phân loại dựa trên thời điểm và sự kiện kích hoạt:

  • BEFORE Trigger: Được thực thi trước khi hành động chính được thực hiện. Ví dụ, một trigger BEFORE INSERT sẽ chạy trước khi một dòng mới được chèn vào bảng.
  • AFTER Trigger: Được thực thi sau khi hành động chính đã hoàn tất. Ví dụ, một trigger AFTER DELETE sẽ chạy sau khi một dòng đã bị xóa khỏi bảng.
  • INSTEAD OF Trigger: Được sử dụng trong các view để thay thế hành động thực hiện trên view đó. Đây là loại trigger ít phổ biến hơn nhưng rất hữu ích trong các trường hợp cụ thể.

Ví dụ:

Cung cấp Cơ sở dữ liệu Báo cáo Học sinh, trong đó đánh giá điểm của học sinh được ghi lại. Trong lược đồ như vậy, hãy tạo một Trigger để tính tổng số và trung bình của các bảng đã chỉ định được tự động chèn bất cứ khi nào một bản ghi được chèn.

Ở đây, vì trigger sẽ gọi trước khi bản ghi được chèn, nên có thể sử dụng thẻ BEFORE.

+-------+-------------+------+-----+---------+----------------+ 
| Field | Type        | Null | Key | Default | Extra          | 
+-------+-------------+------+-----+---------+----------------+ 
| tid   | int(4)      | NO   | PRI | NULL    | auto_increment | 
| name  | varchar(30) | YES  |     | NULL    |                | 
| subj1 | int(2)      | YES  |     | NULL    |                | 
| subj2 | int(2)      | YES  |     | NULL    |                | 
| subj3 | int(2)      | YES  |     | NULL    |                | 
| total | int(3)      | YES  |     | NULL    |                | 
| per   | int(3)      | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+ 

Câu lệnh trigger SQL tới sự cố.

create trigger stud_marks 
before INSERT 
on 
Student 
for each row 
set Student.total = Student.subj1 + Student.subj2 + Student.subj3, Student.per = Student.total * 60 / 100;

Câu lệnh SQL trên sẽ tạo một trigger trong cơ sở dữ liệu sinh viên, trong đó bất cứ khi nào điểm môn học được nhập, trước khi chèn dữ liệu này vào cơ sở dữ liệu, trigger sẽ tính toán hai giá trị đó và chèn các giá trị đã nhập.

insert into Student values(0, "ABCDE", 20, 20, 20, 0, 0); 
Query OK, 1 row affected (0.09 sec) 
select * from Student; 

+-----+-------+-------+-------+-------+-------+------+ 
| tid | name  | subj1 | subj2 | subj3 | total | per  | 
+-----+-------+-------+-------+-------+-------+------+ 
| 100 | ABCDE |    20 |    20 |    20 |    60 |   36 | 
+-----+-------+-------+-------+-------+-------+------+ 

Bằng cách này, trigger có thể được tạo và thực thi trong cơ sở dữ liệu.

Trigger trong SQL là một công cụ mạnh mẽ giúp bạn kiểm soát chặt chẽ hơn các hoạt động trong cơ sở dữ liệu, tự động hóa các tác vụ, và đảm bảo tính toàn vẹn của dữ liệu. Tuy nhiên, để sử dụng trigger hiệu quả, bạn cần hiểu rõ về cấu trúc và cách hoạt động của chúng, cũng như cân nhắc về ưu nhược điểm, hi vọng bài viết trên của TopDev đã giúp bạn hiểu rõ hơn về Trigger SQL.

Tìm việc làm SQL lương cao hấp dẫn cho bạn tại Topdev

Tài liệu tham khảo: https://www.geeksforgeeks.org/sql-trigger-student-database/