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.
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 đó.
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à:
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.
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.
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.
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.
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).
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ọ.
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ư GTK và GTK3. 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.)
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.
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.
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
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:
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:
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 AI và Machine 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é!
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é!
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 (NASM, AS, DASM) để 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 (ARM, x86-32, x86-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:
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.
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:
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.
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.
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 @@)
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.
Đâ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?
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ì:
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.
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:
Ở đ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, RUN và CMD.
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:
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:
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!
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!
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.
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.
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.
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 !
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
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.
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.
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
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.
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.
Đố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.
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.
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.
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
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.
8. Scrum (Scrum là một quy trình phát triển phần mềm thuộc họ agile)
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.
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.
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)
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.
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.
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.
4.3 Qui trình(Process)
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
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.
Credit: smashingmagazine
Ví dụ về z-index và positon
Chúng ta có 3 khối grey, blue, gold đề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.
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ị absolute, fixed hay relative.
Đâ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: absolute, fixed 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.
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 transforms, filters, css-regions, paged 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 context, position 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.
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à 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.
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:
### Node template
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
Ví dụ về .gitignore
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:
git rm -r --cached /path/to/file_or_folder
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.
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 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
Để 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à INSERT, UPDATE, DELETE.
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.
createtrigger stud_marks
before INSERTon
Student
for each rowset 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.
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.