Home Blog Page 141

Higher Order Functions trong Scala

scala

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

Định nghĩa Higher Order Function

Higher Order Function là function thỏa mãn ít nhất một trong hai điều kiện :

  • Có ít nhất một tham số truyền vào là một function khác
  • Kết quả trả về của HOF đó là một function khác.

Với Higher Order Function, tính trừu tượng hóa, tái sử dụng chính là điểm mạnh.

  10 lí do để học Scala và FP
  Cân bằng công việc chính với dự án ngoài liệu có khó không?

Tính trừu tượng hóa (Abstraction)

Hãy nghĩ đến dây chuyền lắp ráp một chiếc xe. Dây chuyền gồm bốn bộ phận:

  • Bộ phận tạo bánh xe
  • Bộ phận tạo khung xe
  • Bộ phận tạo động cơ
  • Bộ phận lắp ráp

Bộ phận tạo bánh xe sẽ tạo ra bánh xe và chuyển qua bộ phận lắp. Tương tự như vậy, bộ phận tạo khung xe và bộ phân tạo động cợ sẽ tạo ra khung và động cơ, sau đó chuyển sang cho bộ phân lắp ráp. Bộ phận lắp ráp không cần phải biết bánh xe, khung xe hay động cơ xe được tạo ra như thế nào. Chức năng của bộ phận lắp ráp chỉ là ghép các thành phần để tạo ra chiếc xe mà thôi. Bộ phận lắp ráp chính là một HOF, nó nhận output của ba bộ phận còn lại để tạo ra output cho riêng nó. Có thể diễn giải như sau

Từ ví dụ trên, chúng ta có thể hiểu tính trừu tượng hóa của HOF giúp che giấu chi tiết bên trong một function, làm giảm sự phức tạp. Vấn đề sẽ được xử lý ở một tầng cao hơn, trừu tượng hơn.

Tính tái sử dụng (Reusable)

Cũng sử dụng ví dụ về dây chuyền tạo ra một chiếc xe. Chúng ta xây dựng một dây chuyền sản xuất xe máy. Tuy nhiên, nếu phải tạo ra thêm một dây chuyền sản xuất xe hơi thêm vào thì sẽ như thế nào ? Tạo ra một dây chuyền mới là giải pháp đơn giản nhất nhưng lại tốn kém về chi phí. Chúng ta có thể bổ sung thêm cho bộ phận tạo bánh xe máy khả năng tạo ra bánh xe hơi. Tương tự như vậy, bộ phận tao khung xe và động cơ đều trang bị thiết bị tạo ra đồng thời linh kiện cho xe máy lẫn xe hơi. Như vậy, ba bộ phân trên đều được sử dụng tùy theo yêu cầu tạo ra sản phẩm. Đó chính là tính tái sử dụng.

Cách sử dụng HOF trong Scala

Một bài toán đơn giản được đặt ra, hãy hình dung bạn đang là một ông chủ và muốn tăng lương cho nhân viên của mình. Tăng lương là việc bạn nhân số lương hiện tại của nhân viên với một hệ số nhất định. Bạn nghĩ rằng, việc tăng lương cần linh động do đó phải tạo ra nhiều cách tăng lương khác nhau. Với bài toán trên, chúng ta sẽ đi giải quyết như sau:

  • Để tiện cho việc quản lý vấn đề tăng lương, bạn sử dụng một Object có tên là SalaryRaiser.
  • Bạn có 3 mức tăng lương khác nhau, theo thứ tự tăng dần là: smallPromotion()greatPromotion() và hugePromotion().
  • Ở mức smallPromotion, hệ số là 1.1
  • Ở mức smallPromotion, hệ số là logarit cơ số 10 của số lương hiện tại ứng với nhân viên đó.
  • Ở mức smallPromotion, hệ số là số lương hiện tại của nhân viên đó.

Theo cách thông thường, chúng ta sẽ dùng một vòng for để cập nhật giá trị lương của từng nhân viên. Sau đó, trả về danh sách lương của nhân viên sau khi đã cập nhật. Các bạn xem code phía dưới.

Higher Order Functions trong Scala

Với HOF, việc viết code trở nên dễ dàng và ngắn gọn hơn khá nhiều. Ở đây, chúng ta sẽ sử dụng một HOF đó là map(). Chúng ta truyền vào map() một function, chính function này sẽ giúp chúng ta thay đổi lương của mỗi nhân viên theo hệ số mong muốn. Hàm map() đã thể hiện tính linh hoạt thông qua việc định nghĩa cách xử lý từng phần tử trong Array.

Higher Order Functions trong Scala

Hiện nay đối với Scalamap() là một trong những HOF được dùng nhiều nhất. Ngoài ra, các bạn có thể tìm hiểu thêm về các HOF khác như filter()flatMap() …

Nguồn tham khảo

  1. https://discuss.grokking.org/t/higher-order-functions-la-gi-va-d-c-s-d-ng-nh-th-nao/309
  2. https://docs.scala-lang.org/tour/higher-order-functions.html

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

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

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

Factory Function vs. Class

Factory Function vs. Class

Bài viết được sự cho phép của tác giả Lưu Bình An

Để tạo một object với các method và data dựng sẵn, chúng ta có các phương pháp để làm trong JS:

// class
class ClassCar {
    drive() {
        console.log('GOOO');
    }
}

const car1 = new ClassCar();
console.log(car1.drive());

// constructor function
function ConstructorCar() {}

ConstructorCar.prototype.drive = function() {
    console.log('GOOO');
}

const car2 = new ConstructorCar();
console.log(car2.drive());

// factory
const proto = {
    drive() {
        console.log('GOOO');
    }
};

const factoryCar = () => Object.create(proto);

const car3 = factoryCar();
console.log(car3.drive());

Về tính năng, thì cả 3 là như nhau, và có thể dùng thay thế cho nhau được.

Có thể bạn chưa biết: Trong JS, bất cứ function nào trả về một object, mà không phải là constructor function hay class, thì được gọi là factory function

Vài so sánh giữa Factory và Constructor

Constructor bắt buộc phải khởi tạo bằng keyword new. Factory thì không.

Vậy thì keyword new của Constructor và Class nó làm gì?

  1. Khởi tạo một object mới và bind giá trị cho từ khóa this
  2. Bind instance.__proto__ vào Constructor.prototype
  3. Bind instance.__proto__.constructor vào Constructor
  4. Ngầm trả về this (refer vào giá trị instance)
  Top 5 API thú vị dành cho các New Developers
  3 phút làm quen với Vue.js

Về mặt lợi ích khi sử dụng Constructor và Class

  • Dễ tiếp cận với những người có xuất phát điểm từ những ngôn ngữ lập trình có hỗ trợ class
  • this luôn prefer đến một object mới
  • Nhiều người thích cách viết myFoo = new Foo()

Nhược điểm của Constructor và Class

  • Bắt buộc phải dùng từ khóa new để khởi tạo
  • Tất cả những thằng sử dụng đều dùng chung một constructor, rất khó nếu muốn thay đổi hiện thực bên trong constructor từ bên ngoài.
  • Không đáp ứng dụng nguyên tắc open/closed: API chỉ cho phép extend, nhưng không cho phép modify
  • Kết thừa class và các vấn đề mà nó sinh ra là câu chuyện không mới khi các bạn viết object oriented (có thể tra cứu google bằng các từ khóa sau: the fragile base class problem, the gorilla banana problem, the duplication by necessity problem)

Lợi ích việc sử dụng Factory

  • Linh động hơn class và constructor function
  • Bạn sẽ không bao giờ đụng vô từ khóa extend vốn là một con đường đã gây ra đau khổ bấy năm nay.
  • Không còn cần dùng từ khóa new, không còn loằn ngoằn rối rắm với từ khóa this
  • Nhiều người thích đọc code dạng này myFoo = createFoo()

Nhược điểm của Factory

  • Không thể check instanceof, do không có liên kết giữa instance và Factory.prototype
  • this không còn refer vào object mới tạo (this cũng có ưu nhược điểm của nó chứ không phải toàn nhược điểm)
  • Có thể chậm hơn một chút. Thật ra cũng không cần quá bận tâm việc này, vì chưa ai chứng minh được nó ảnh hưởng đến tốc độ, hiệu năng của ứng dụng, lý thuyết là chậm hơn xíu xiu nhưng máy tính giờ nhanh lắm rồi.

Nên dùng factory function

Có rất nhiều quan điểm đưa ra để khuyên bạn đừng dùng contructor trong JS, bài viết Constructors Are Bad For JavaScript có liệt kê khá khá lý do bạn có thể tham khảo.

Một ví dụ tương đối đầy đủ về factory function

const Player = (name, level) => {
  let health = level * 2;
  const getLevel = () => level;
  const getName  = () => name;
  const die = () => {
    // uh oh
  };
  const damage = x => {
    health -= x;
    if (health <= 0) {
      die();
    }
  };
  const attack = enemy => {
    if (level < enemy.getLevel()) {
      damage(1);
      console.log(`${enemy.getName()} has damaged ${name}`);
    }
    if (level >= enemy.getLevel()) {
      enemy.damage(1);
      console.log(`${name} has damaged ${enemy.getName()}`);
    }
  };
  return {attack, damage, getLevel, getName}
};

const jimmie = Player('jim', 10);
const badGuy = Player('jeff', 5);
jimmie.attack(badGuy);

Để kế thừa trong factory function, các bạn có thể làm như sau

const Person = (name) => {
  const sayName = () => console.log(`my name is ${name}`)
  return {sayName}
}

const Nerd = (name) => {
  // tạo Person, sau đó trả về hàm sayName
  const {sayName} = Person(name)
  const doSomethingNerdy = () => console.log('nerd stuff')
  return {sayName, doSomethingNerdy}
}

const jeff = Nerd('jeff')

jeff.sayName() //my name is jeff
jeff.doSomethingNerdy() // nerd stuff

Với cách trên, chỉ định rất cụ thể hàm nào sẽ được trả về, còn nếu muốn trả tất cả những gì của Person, đơn giản là merge object

const Nerd = (name) => {
  const prototype = Person(name)
  const doSomethingNerdy = () => console.log('nerd stuff')
  return Object.assign({}, prototype, {doSomethingNerdy})
}

Nghe có vẻ hơi trái tai, mặc dù JS đã có hỗ trợ class, nhưng các bạn đừng nên dùng nó.

JavaScript Factory Functions vs Constructor Functions vs Classes

FACTORY FUNCTIONS AND THE MODULE PATTERN

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

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

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

Khi nào bạn đã là Senior dev

Khi nào bạn đã là Senior dev

Bài viết được sự cho phép của tác giả Lưu Bình An

Như thế nào là một Senior dev, có rất nhiều chuẩn mực được đặt ra như

  • Senior dev là những người viết code tốt hơn junior dev. Thực tế có những junior dev viết code rất tốt, và không ít senior dev viết code méo thể nào maintain nổi
  • Senior dev là người biết tuốt những công nghệ mới nhất. Thế hệ trẻ mới thật sự là người tiếp cận công nghệ mới nhất.
  • Senior dev hoàn thành công việc nhanh hơn. Không hẳn, nếu bạn giao task cho một principle dev, anh ta phải viết unit test coverage 90%, phải thực hiện một loạt các bài test khác, document cho toàn bộ những gì anh ta làm, thời gian có khi cần gấp đôi, gấp ba lần
  • Senior là những người viết code ít bug hơn, thậm chí không có bug, nhưng chúng ta điều biết một sự thật hơi đau đớn, tất cả code điều có bug, dev cũng chỉ là người và viết code chạy trên những môi trường không thể nào biết hết được, với tỉ tỉ use case khác nhau được tạo ra từ cả triệu người sử dụng.
  Quy tắc 333 hay là phiếm đàm về chuyện phỏng vấn Senior Developer

Vậy thì tiêu chí nào để đánh giá một bạn là Senior dev nói chung?

Đây là cách mà các sếp mình dùng để đánh giá bậc Senior Dev

Nên

  • Khi tiếp nhận từ đồng nghiệp, hãy suy nghĩ, dù là bất cứ câu hỏi nào, nó vẫn là câu đáng để hỏi, không có câu hỏi nào vô lý, hỏi vậy cũng hỏi. Luôn luôn lắng nghe, lâu lâu trả lời 😀
  • Không đưa ra bất kỳ nhận cá nhân trên code review, thảo luận mang mục đỉnh giải quyết vấn đề chứ không phán xét.
  • Khi review code, luôn luôn tìm ít nhất một điểm gì đó để đóng góp, trên tinh thần thảo luận, đặt câu hỏi, không đưa ra chỉ thị phải làm như thế nào
  • Sẵn sàng giải thích, một cách kiên trì, tìm ra giải pháp cho những vấn đề mà team đang vướng phải.
  • Tự thân tìm hiểu học hỏi những kỹ năng nâng cao nghề nghiệp
  • Không cần người cầm cây dí đít mới làm, luôn có tình thần trách nhiệm cao trong công việc được giao phó
  • Tìm giải pháp khi có vấn đề, chứ không phải ngồi đó la làng khó quá sao làmkhó quá anh tự đi mà làm
  • Khi đưa ra giải pháp, cân nhắc đảm bảo cân đối giữa các yếu tố: thời gian hoàn thành, best practice, chi phí thực hiện, mức độ rủi ro tới các phần khác của hệ thống
  Hãy commit code có tâm như Senior Developer

Tránh

  1. Khi gặp một cách code nào đó hơi lạstyle code bạn không thích thì sẽ là lối kiểu Đưa nào viết cái gì tào lao quá vậy, viết thế này như anh đi
  2. Khi review code – “nên đổi thế này, thế này đi”
  3. Áp đặt cách tư duy lập trình của mình lên người khác

Còn gì nữa không, mọi người góp ý thêm.

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

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

Lộ diện những “nhân vật” đầu tiên góp mặt tại Vietnam Web Summit 2020 | VWS2020

Trước khi Agenda VWS2020 chính thức được công bố, cùng điểm qua danh sách “sneak peek” những đại diện đầu tiên góp mặt trong đội ngũ Honored Speakers năm nay. Liệu bạn có đoán được chủ đề các chuyên gia sẽ chia sẻ tại VWS2020 là gì?

  1. Mr. LÊ YÊN THANH – CEO, Founder @BusMap

Được mệnh danh là “Chàng trai vàng trong làng tin học” , anh Lê Yên Thanh từng từ chối lời mời làm việc tại Google Singapore và trở về Việt Nam khởi nghiệp.

Hiện tại. anh đồng thời là CEO, Founder của BusMap và cũng là Co-founder của Elefos.io.
Ở vai trò của một “full-stack developer”, anh Thanh với những kỹ năng và kinh nghiệm xoay quanh công việc Software Development, đặc biệt về coding, thuật toán và giải quyết những vấn đề phức tạp, mục tiêu của anh là trở thành một “excellent programmer”, là người tạo ra những thay đổi tích cực cho đời sống.

2. Mr. PHAN NGUYỄN MINH TRƯỜNG – Technical Architect @NashTech

Anh đang là Principal Software Engineer tại NashTech Limited với thâm niên hơn 7 năm tính đến hiện tại.

Anh Phan Nguyễn Minh Trường với lịch sử kinh nghiệm dày dặn ở vị trí “đương đầu” cùng các con số như Lead một đội ngũ vận hành BI cho khối Banking ACB trong hơn 6 năm.
Anh đã thử sức ở nhiều lĩnh vực outsourcing: Media supply chain, Payment gateways, Supplier Information & Supply Chain, Insurance, Finance, Human Resources, Real Estate.

3. Mr. HOÀNG MINH DƯƠNG – Managing Director @AppROI

Với những kiến thức anh Hoàng Minh Dương đã “tích lũy” trong hơn 8 năm làm việc trong lĩnh vực Digital Marketing tại những công ty công nghệ lớn như Lazada, VNG, Shopee… anh có được những góc nhìn đa dạng và thấu hiểu về cách thức vận hành của digital trên nhiều lĩnh vực và ngành hàng khác nhau.

Đầu năm 2020, nhận thấy được tiềm năng phát triển của công nghệ app tại Việt Nam, anh Dương quyết định thành lập công ty của chính mình với tên gọi AppROI.

4. Mr. TRẦN TRỌNG THANH – Principal Web Engineer @Chotot.vn

Thúc đẩy bởi đam mê tạo ra những giao diện đẹp và tối ưu trải nghiệm người dùng, anh Thanh lựa chọn bắt đầu từ những vị trí UI dev, flash dev…. trong công ty tại Singapore.
Tiếp tục mục tiêu mang đến người dùng những trải nghiệm tuyệt vời, anh quyết định thành lập công ty riêng (Nâu Studio).

Sau một thời gian dài gắn bó với Nâu Studio, anh đầu quân cho các công ty TMĐT với vị trí Principal Web Engineer. Hiện tại anh công tác tại Chotot.vn.

5. Mr. TOÀN TRẦN – Vice President, Mobile @Lazada

Đắm say với Android Development kể từ năm 2011, đến nay anh đã bàn giao rất nhiều ứng dụng cho doanh nghiệp, từ startups cho đến những tập đoàn lớn, phục vụ cho hơn 80 triệu người dùng rộng khắp thế giới.

Anh hướng đến việc mang những kỹ năng mình có vào trong vòng phát triển của doanh nghiệp, thông qua việc gia tăng những giá trị, tối ưu mọi thứ có thể và xây dựng một đội ngũ tâm huyết trên suốt hành trình.

Anh có kinh nghiệm trong cả việc xây dựng đầu (scratch-build) cho đến việc tái cấu trúc/tối ưu những ứng dụng sẵn có.

Đăng ký tham gia sự kiện VWS2020 để có cơ hội gặp gỡ, giao lưu và lắng nghe những chia sẻ về sự thay đổi của web development/marketing và kinh doanh số trong thời gian tới bởi hàng chục diễn giả đến từ những công ty công nghệ hiện đang hoạt động tại Việt Nam.

===

Vietnam Web Summit 2020: LEAD THE AGE OF REVOLUTION TECHNOLOGIES

Vào tháng 12/2020, Vietnam Web Summit 2020 (VWS2020) trở lại tại 2 thành phố TP.HCM và HN – nơi những ý tưởng sẽ gặp nhau và cùng đón đầu những xu hướng, công nghệ mới trong chặng đường 5 năm tiếp theo – một kỷ nguyên mới của công nghệ!

Sự khác biệt giữa framework và library

Sự khác biệt giữa framework và library

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

Trong lập trình ứng dụng nói chung và lập trình web nói riêng, khái niệm framework được nhắc đến rất nhiều bởi nó đang là một xu hướng phát triển các ứng dụng hiện nay. Bạn đã phân biệt Framework và Library khác nhau như thế nào chưa? Nếu bạn có câu trả lời chính xác tức là bạn đã nắm bắt được cách thức xây dựng ứng dụng tiên tiến nhất. Còn nếu chưa, cùng TopDev khám phá ngay dưới bài viết này.

Khái niệm Library

Library (thư viện) trong lập trình là một tập hợp các hàm, phương thức hoặc đoạn mã được xây dựng sẵn, nhằm thực hiện các nhiệm vụ cụ thể và có thể được tái sử dụng trong nhiều ứng dụng khác nhau. Thư viện giúp lập trình viên tiết kiệm thời gian và công sức bằng cách cung cấp các chức năng chung, chẳng hạn như xử lý dữ liệu, quản lý giao diện người dùng, hoặc thao tác với tập tin, mà không cần viết lại mã từ đầu.

Ví dụ:

  • JQuery là một library, nó cung cấp các chức năng giúp chúng ta thao tác với DOM.
  • LinqJS là một library, nó cung cấp các chức năng giúp chúng ta truy vấn (query) dữ liệu dễ dàng, đơn giản và nhanh hơn.

Ưu điểm của Library

  • Tái sử dụng mã: Thư viện cung cấp các hàm và phương thức sẵn có, cho phép lập trình viên tái sử dụng mã trong nhiều dự án khác nhau mà không cần viết lại từ đầu, giúp tiết kiệm thời gian và công sức.
  • Dễ dàng sử dụng: Các thư viện thường được thiết kế với giao diện lập trình dễ hiểu, giúp lập trình viên nhanh chóng tích hợp và sử dụng mà không cần phải tìm hiểu sâu về cách thức hoạt động bên trong.
  • Linh hoạt: Library cung cấp một tập hợp các chức năng mà lập trình viên có thể sử dụng tùy theo nhu cầu. Bạn có quyền kiểm soát khi nào và ở đâu sử dụng các hàm trong thư viện.
  • Tập trung vào nhiệm vụ cụ thể: Thư viện thường tập trung vào giải quyết một số vấn đề nhất định, chẳng hạn như xử lý chuỗi, mảng, yêu cầu HTTP, hoặc thao tác với DOM, giúp giải quyết nhanh chóng những tác vụ đó.
  • Giảm thiểu lỗi lập trình: Việc sử dụng các thư viện đã được kiểm thử và sử dụng rộng rãi sẽ giảm nguy cơ mắc phải những lỗi phổ biến trong lập trình, vì thư viện thường được kiểm tra và tối ưu hóa kỹ lưỡng.

Nhược điểm của Library

  • Phụ thuộc vào thư viện bên ngoài: Khi sử dụng nhiều thư viện, dự án của bạn có thể bị phụ thuộc vào các thư viện đó. Nếu thư viện không được duy trì tốt hoặc không còn được cập nhật, nó có thể gây ra các vấn đề bảo mật hoặc không tương thích với công nghệ mới.
  • Thiếu đồng nhất về cấu trúc: Thư viện không quy định cấu trúc tổng thể của ứng dụng, dẫn đến việc sử dụng quá nhiều thư viện khác nhau có thể làm cho mã nguồn không đồng nhất và khó bảo trì.
  • Hiệu suất: Một số thư viện có thể chứa nhiều tính năng không cần thiết cho ứng dụng của bạn, làm tăng kích thước tệp và có thể ảnh hưởng đến hiệu suất, đặc biệt là trong các ứng dụng web.
  • Cần học cách sử dụng từng thư viện: Mặc dù thư viện giúp giảm khối lượng công việc, nhưng mỗi thư viện đều có cú pháp và cách sử dụng riêng. Lập trình viên phải học cách sử dụng hiệu quả từng thư viện.
  • Khó kiểm soát nội dung bên trong: Vì library thường là mã đóng gói sẵn, bạn không thể dễ dàng điều chỉnh hay thay đổi cách thức hoạt động bên trong nếu thư viện không cung cấp đủ tính năng mà bạn cần.

Nhắc lại khái niệm Framework

Framework là gì? Sự khác biệt giữa framework và library

Framework là một khung làm việc hoặc bộ công cụ giúp lập trình viên phát triển ứng dụng một cách có tổ chức và hiệu quả. Khác với thư viện, framework không chỉ cung cấp các hàm và phương thức mà còn định nghĩa luồng điều khiển và cấu trúc tổng thể của ứng dụng. Khi sử dụng framework, lập trình viên phải tuân theo các quy tắc và cấu trúc mà framework đề ra.

Ví dụ: Angular là một framework. Mục đích Angular framework là giúp cho người dùng xây dựng được các ứng dụng website dạng single page một cách dễ dàng và nhanh chóng. Nó tập trung vào việc phát triển font-end cho ứng dụng web. Angular cung cấp sẵn cho bạn các directives, services, data-biding, filters,… Để sử dụng Angular, chúng ta phải tuân thủ theo mô hình và cách hoạt động của nó. Chẳng hạn, một page sẽ có phần html gọi là template, phần xử lý gọi là controller, các quy định về việc sử dụng $scope, isolate-scope, cách để trao đổi dữ liệu giữa các page như thế nào. Nghĩa là Angular team đã viết sẵn các thư viện ( Libraries ) để bạn sử dụng lại, cùng với một khuôn mẫu (design parttern) mà bạn phải tuân theo nó để có thể xây dựng được ứng dụng.

Lợi ích của việc sử dụng framework

Framework là gì? Sự khác biệt giữa framework và library

Trong mỗi một ngôn ngữ, một lĩnh vực đều có nhiều các framework được tạo ra bởi các nhóm lập trình hoặc thậm chí được hậu thuẫn bởi các công ty lớn, như vậy đương nhiên việc sử dụng lại các framework này có rất nhiều ưu điểm:

  • Framework xây dựng sẵn các tính năng chung, ví dụ dự án web nào cũng có cần có phần quản lý người dùng như đăng ký, đăng nhập, tích hợp mạng xã hội, kết nối cơ sở dữ liệu…
  • Sử dụng framework giảm thiểu tối đa thời gian và công sức phát triển ứng dụng.
  • Cho phép ứng dụng kế thừa một cấu trúc được chuẩn hóa, đảm bảo dễ dàng trong vận hành và bảo trì sau này.

Nhược điểm của Framework

  • Bạn phải mất nhiều thời gian để học và làm chủ một framework.
  • Kích cỡ ứng dụng khi sử dụng framework là rất lớn, một website có thể lên đến hàng vài trăm MB code khi chưa có bất kỳ nội dung nào.
  • Cần viết code tuân thủ theo các tiêu chuẩn chung mà framework đặt ra.
  • Không thích hợp với các ứng dụng quá nhỏ, ví dụ bạn tạo ra một ứng dụng nhỏ hiển thị kết quả World cup 2018 chẳng hạn, việc áp dụng cả một framework vào là không cần thiết, thay vào đó bạn tự viết code sẽ nhanh hơn.

Những điểm khác nhau giữa Framework và Library là gì?

Framework và thư viện có điểm chung là đều là mã code do người khác viết và chúng ta là người sử dụng nó vào project của mình sao cho hợp lí nhất.

Vậy Framework và Library khác nhau như thế nào? Cùng tìm hiểu ngay dưới đây:

  • Framework và Library đều cung cấp các tính năng (functions) được viết sẵn để chúng ta có thể tái sử dụng.
  • Framework lớn hơn và phức tạp hơn Library.
  • Sử dụng Framework bạn phải thay đổi cấu trúc code của dự án (project’s structure) theo các quy tắc của framework đó để có thể sử dụng được các functions mà framework đó cung cấp.
  • Chúng ta có thể sử dụng các functions của Library một cách trực tiếp mà không cần thay đổi cấu trúc code của dự án.
  • Framework có thể hiểu là một khung chương trình, người dùng bổ sung code và tuân theo quy tắc để tạo ra ứng dụng. Còn Library chỉ cung cấp các chức năng tiện ích hay các class để sử dụng trong quá trình xây dựng ứng dụng.
  • Framework hoạt động chủ động. Nghĩa là nó có thể đưa ra các quyết định gọi hoặc bị gọi bởi các Library hay ứng dụng nào đó. Library hoạt động bị động. Nghĩa là nó chỉ được gọi khi nào chúng ta cần dùng nó.

Tới đây, mình nghĩ các  bạn đã hiểu được Framework và Library là gì, chúng khác nhau thế nào rồi đúng không. Để giúp các bạn hiểu rõ hơn, mình lấy một ví dụ đời thực để so sanh Framework với Library thế này:

  • Framework: là mô hình để có một cái máy tính hoạt động được. Nghĩa là, một cái máy tính sử dụng được phải bao gồm: màn hình, CPU, bàn phím, chuột, … Và bạn phải lắp đặt các linh kiện này theo tuần tự và quy tắc như: màn hình phải được gắn vào case CPU qua card đồ họa, bàn phím phải được gắn vào case CPU qua cổng COM/USB,… và bản thân case CPU để nó hoạt động phải có đủ các thành phần: chíp CPU, nguồn, dây điện,… và chúng phải được gắn kết với nhau theo quy tắt và vị trí của nó.
  • Library: có thể xem các cổng COM/USB được chia thành nhiều loại phục vụ cho từng chức năng của nó. Dây điện với các giắc cấm điện (loại 3 đầu, 2 đầu), óc vít dùng để liên kết các thành phần máy tính lại,…

Sự khác biệt giữa framework và library

Một khác biệt nữa trong việc sử dụng framework và library đó là việc gọi các khối mã lệnh (phương thức, hàm), trong framework, các mã lệnh trong framework sẽ gọi đến mã lệnh của bạn, còn với thư viện lập trình thì mã lệnh của bạn gọi đến các mã lệnh của thư viện lập trình. Với library nó giống như mô hình client/server, client sẽ gửi các yêu cầu đến server và server sẽ hồi đáp lại kết quả. Một ví dụ khi sử dụng thư viện lập trình cURL, khi bạn sử dụng một function trong thư viện cURL, code PHP của bạn sẽ gọi đến function này trong thư viện cURL, như vậy code của bạn là chủ thể gọi còn thư viện lập trình là bị động. Khi bạn sử dụng các framework PHP như Laravel chẳng hạn, mối quan hệ này bị đảo ngược, code trong framework gọi đến các mã ứng dụng của bạn với một mẫu thiết kế mà nhiều người biết đến Inversion of Control, nếu bạn đã làm quen với Laravel bạn sẽ thấy mã framework được đưa vào index.php để quản lý luồng điều khiển trong khi các mã chúng ta viết được đưa vào các controller tạo ra các “hành vi” cho ứng dụng.

Khác biệt giữa framework và library

Như vậy có thể nói framework thiên về quản lý luồng điều khiển còn library thiên về tạo hành vi.

Qua bài viết này hi vọng bạn đã nắm được Framework và Library là gì và sự khác nhau giữa Library và Framework. Việc chọn sử dụng framework hay library phụ thuộc vào nhu cầu dự án, mức độ kiểm soát và sự linh hoạt mà bạn cần trong quá trình phát triển ứng dụng.

Nguồn tham khảo: allaravel.com

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

8 ý tưởng thu nhập phụ cho lập trình viên

thu nhập phụ
8 ý tưởng thu nhập phụ cho lập trình viên

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

Hãy đối mặt với nó, các kỹ sư phần mềm có mức lương khá cao.

Bạn có thể dễ dàng sống một cuộc sống rất thoải mái dựa trên tiền lương của bạn

Tuy nhiên, một số lập trình viên thích khám phá các ý tưởng thu nhập phụ để bổ sung cho mức lương toàn thời gian của họ.

Có lẽ bạn muốn nghỉ hưu sớm?

Có thể bạn muốn trải nghiệm sự tự do chỉ đơn giản là có đủ tiền để bạn không bao giờ phải lo lắng về tài chính hoặc mất việc.

Những lý do tại sao bạn có thể muốn có thêm thu nhập ngoài tiền lương của bạn rất nhiều và thay đổi từ người này sang người khác.

Trong bài viết này, tôi sẽ chia sẻ với bạn một số ý tưởng thu nhập phụ sẽ giúp tăng thu nhập của bạn mà không bỏ công việc toàn thời gian của bạn.

Tìm việc làm lập trình viên Web Developer lương cao tại Topdev

1. Đầu tư

Đối với nhiều lập trình viên, tiết kiệm tiền là đủ tốt.

Đó là một điều rất đơn giản để làm. Bạn nhận được tiền lương của bạn gửi vào tài khoản ngân hàng của bạn. Bạn dành một số tiền và bạn tiết kiệm phần còn lại.

Miễn là bạn chi tiêu ít hơn số tiền bạn kiếm được, giá trị ròng của bạn sẽ tăng dần theo thời gian.

Vấn đề là để lại tiền mặt trong tài khoản ngân hàng của bạn không lý tưởng vì tiền nhàn rỗi không mang lại bất kỳ lợi nhuận nào.

Và vì lạm phát, điều này về cơ bản có nghĩa là bạn thực sự đang mất tiền.

Nếu bạn muốn xây dựng sự giàu có của mình, tất cả các chỉ số cho thấy rằng bạn phải đầu tư tiền của mình.

Nếu bạn mới bắt đầu sự nghiệp lập trình ngay khi học đại học, có lẽ bạn không biết nhiều về đầu tư thị trường chứng khoán.

Dưới đây là hướng dẫn dành cho người mới bắt đầu sẽ dạy cho bạn mọi thứ bạn cần để tìm hiểu về đầu tư thị trường chứng khoán.

Nói rõ hơn là tôi không nói về giao dịch trong ngày và dành tất cả thời gian rảnh của bạn để mua và bán cổ phiếu! Đó là một công việc riêng và bạn sẽ không có thời gian hay năng lượng để làm việc đó.

Thay vào đó, những gì bạn nên làm là tập trung vào đầu tư dài hạn.

Do đó, ý của tôi  là đầu tư tiền tiết kiệm của bạn vào các công ty tốt và để danh mục đầu tư của bạn tăng chậm theo thời gian.

Bạn có thể đầu tư vào các quỹ ETF, quỹ tương hỗ hoặc cổ phiếu riêng lẻ của các doanh nghiệp tốt bằng cách sử dụng bất kỳ nhà môi giới trực tuyến có sẵn nào.

Nó đã từng là trường hợp bạn sẽ trả phí cho các nhà môi giới trực tuyến bất cứ khi nào bạn mua hoặc bán cổ phiếu nhưng những ngày này đã qua lâu :).

Nếu nhà môi giới trực tuyến của bạn vẫn tính phí giao dịch, đã đến lúc thay đổi nhà môi giới của bạn.

Mặc dù vậy, một điều quan trọng là bạn luôn cần phải đứng đầu trong tất cả các khoản đầu tư của bạn, 401ks, Roth IRAs, RSU và cổ phiếu mà bạn đầu tư vào chính mình.

  Function trong Python là gì? Tạo Function trong Python
  10 sự thật thú vị về ngôn ngữ lập trình Python

2. Bắt đầu Blog lập trình của riêng bạn

Đây là nguồn thu nhập phụ cũng khá đáng kể.

Ưu điểm của phương pháp này là bạn không chỉ kiếm được tiền mà còn tạo cho mình một tên tuổi trong cộng đồng lập trình.

Tiếp thị bản thân như một kỹ sư phần mềm và có sự hiện diện trực tuyến mạnh mẽ là vô cùng quan trọng và nó sẽ mở ra nhiều cơ hội trong sự nghiệp mà bạn không có.

Ngoài việc xây dựng thương hiệu cá nhân của bạn , tôi  tin tưởng mạnh mẽ rằng bạn không thể học được điều gì cho đến khi bạn dạy nó.

Với một blog lập trình, bạn sẽ dạy người khác về lập trình trong khi tự cải thiện như một lập trình viên. Tất cả điều đó trong khi kiếm tiền cùng một lúc. Thật tuyệt vời phải không?!

Và nó không phải là đắt tiền, bạn có thể bắt đầu blog bằng WordPress.

Nhưng hãy đợi một phút, làm thế nào bạn có thể kiếm tiền từ blog lập trình của bạn?

Bạn có thể kiếm tiền từ blog của mình theo nhiều cách:

Đầu tiên: Quảng cáo

Phương pháp đầu tiên là chỉ cần đặt quảng cáo trên blog của bạn.

Nếu bạn không biết bắt đầu từ đâu, bạn luôn có thể bắt đầu với Google Adsense .

Google cho phép bạn đặt quảng cáo Google trên trang web của mình và nhận một phần doanh thu quảng cáo mỗi khi một trong những độc giả của bạn click vào quảng cáo.

Đây là một bài viết chuyên sâu về Google Adsense.

Nếu bạn quyết định chỉ kiếm tiền bằng quảng cáo, bạn nên luôn cố gắng tăng độc giả vì thu nhập quảng cáo của bạn tỷ lệ thuận với quy mô độc giả của bạn.

Sau khi bạn cảm thấy thoải mái với Adsense, bạn có thể bắt đầu thử nghiệm với các cơ quan quảng cáo cao cấp khác.

Ví dụ: các blog / trang web lập trình phổ biến như coding horror , codewars và các trang khác sử dụng carbon ads .

Thứ hai: Làm Affiliate

Ngoài ra, bạn có thể thử thiết lập hệ thống liên kết của riêng mình bằng cách bán sản phẩm của người khác.

Ví dụ: bạn có thể đăng ký với các Amazon associates của Amazon  và bắt đầu bán bất kỳ sản phẩm amazon nào trên blog của bạn.

Điều đó khá tuyệt vời vì Amazon có khá nhiều thứ.

Khi bạn đăng ký, Amazon sẽ cung cấp cho bạn một liên kết giới thiệu mà bạn có thể sử dụng trên blog của mình. Nếu độc giả của bạn truy cập amazon thông qua liên kết giới thiệu của bạn và mua bất cứ thứ gì từ amazon, bạn sẽ nhận được hoa hồng.

Hoa hồng thay đổi rất nhiều dựa trên sản phẩm, hiệu suất của bạn và các biến khác.

Vì độc giả của bạn quan tâm đến lập trình, bạn nên luôn đề xuất các sản phẩm có giá trị cho các lập trình viên như sách lập trình và phần mềm.

Bây giờ hãy để tôi cho bạn một lời khuyên.

Không giống như kiếm tiền với quảng cáo, khi bạn kiếm tiền thông qua affiliate, bạn có thể muốn giới thiệu các sản phẩm đắt tiền ngay cả khi bạn chưa bao giờ sử dụng các sản phẩm này cho mình.

Đừng làm vậy. Điều này thật nguy hiểm !

Bất cứ điều gì bạn đề nghị, hãy chắc chắn rằng bạn giới thiệu các sản phẩm bạn thực sự sử dụng .

Điều này cực kỳ quan trọng bởi vì tài sản quý giá nhất mà bạn có là sự tin tưởng của độc giả.

Đừng bao giờ thỏa hiệp sự tin tưởng lẫn nhau này để có thêm một vài đồng. Hãy chắc chắn rằng bạn giới thiệu các sản phẩm tốt, có giá trị mà bạn sử dụng cho mình. Nếu bạn không sử dụng sản phẩm, đừng giới thiệu nó.

P/S: Ở Việt nam cũng khá nhiều nền tảng về affiliate như: accesstrade, masoffer, VNPT Freedoo.

Thứ ba: Bán sản phẩm của riêng bạn

Bán sản phẩm của riêng bạn trên blog của bạn đòi hỏi nhiều công việc nhất nhưng nó mang lại nhiều tiền nhất.

Sau khi bạn thiết lập các sản phẩm bạn muốn bán và làm mọi thứ cuối cùng, blog của bạn sẽ tiếp tục kiếm tiền một cách thụ động cho bạn.

Hãy chắc chắn rằng sản phẩm của bạn phù hợp với độc giả của bạn.

Sản phẩm của bạn nên có giá trị cho các lập trình viên và các nhà khoa học máy tính.

Ví dụ: bạn có thể bán sách về lập trình và nghề kỹ sư phần mềm, tài liệu,video các khóa học về lập trình, v.v

Hãy để tôi nói rõ ở đây, bán sản phẩm của riêng bạn sẽ không dễ dàng .

Trong số những thứ khác, bạn sẽ cần tìm hiểu về tiếp thị trực tuyến và những cách thích hợp để quảng bá sản phẩm của bạn.

Tuy nhiên, những kỹ năng này cực kỳ hữu ích cho bạn với tư cách là một người và là một kỹ sư phần mềm.

3. Fiverr

Một trong những cách dễ nhất để bắt đầu kiếm một vài đô la ở bên cạnh là thông qua freelancing on Fiverr .

Nếu bạn không biết Fiverr là gì , thì đây là một trong những thị trường trực tuyến lớn nhất dành cho những người làm việc tự do với các dịch vụ bắt đầu từ năm đô la.

Các dịch vụ này có thể thuộc nhiều loại khác nhau bao gồm lập trình, kinh doanh, tiếp thị, thiết kế, viết, dịch thuật, video, âm nhạc, và nhiều hơn nữa.

Vì vậy, cho dù bạn muốn sử dụng các kỹ năng lập trình hiện có của mình để kiếm tiền từ bên cạnh, hoặc bạn có các kỹ năng khác mà bạn muốn kiếm tiền, Fiverr có thể là cửa ngõ của bạn đến với thế giới tự do.

Và ngoài việc kiếm tiền trên Fiverr bằng cách trở thành một freelancer, bạn cũng có thể sử dụng trang này để thuê ngoài một số nhiệm vụ mà bạn muốn người khác làm, giải phóng thời gian quý báu của bạn để làm điều gì đó có giá trị hơn với nó.

4. Thương mại điện tử

Hãy đối mặt với nó, thương mại điện tử (còn gọi là bán sản phẩm trực tuyến) đang chiếm lĩnh thế giới bán lẻ .

Mỗi ngày, chúng tôi chứng kiến các cửa hàng bán lẻ gạch và vữa truyền thống sẽ ngừng hoạt động.

Một ý tưởng cho thu nhập phụ có thể là lấy một miếng bánh này và bắt đầu kinh doanh thương mại điện tử của riêng bạn.

Thiết lập cửa hàng trực tuyến của bạn và thậm chí tìm kiếm sản phẩm để bán, cực kỳ dễ dàng trong những ngày này với các nền tảng như Shopify .

Điều khó khăn là KHÔNG thực sự khiến cửa hàng của bạn được thiết lập (bạn thực sự có thể làm điều này trong một vài giờ), nhưng điều sẽ đòi hỏi nhiều nỗ lực và thời gian hơn từ phía bạn là để có thể tiếp thị và bán sản phẩm của bạn.

Bạn cần sáng tạo về những cách khác nhau để tiếp thị sản phẩm. Làm thế nào bạn sẽ tìm thấy đối tượng mục tiêu của bạn? Quảng cáo trả tiền hay lưu lượng truy cập không phải trả tiền? Làm thế nào cạnh tranh là thích hợp của bạn?

Sáng tạo và có một chiến lược tư duy vững chắc là điều sẽ làm bạn khác biệt với đối thủ cạnh tranh.

Tương tự như các ý tưởng thu nhập phụ khác trong bài đăng này, bài viết này cũng đòi hỏi công việc nhưng nếu bạn làm đúng, Thương mại điện tử có tiềm năng thay thế hoàn toàn công việc hiện tại của bạn.

Dưới đây là hướng dẫn toàn diện từng bước từ Shopify về cách xây dựng và phát triển doanh nghiệp Thương mại điện tử trực tuyến của bạn.

5. Bắt đầu Kênh YouTube của riêng bạn

Nếu bạn muốn tương tác cá nhân nhiều hơn với khán giả của mình và bạn có một tính cách thân thiện đáng yêu, bạn có thể bắt đầu kênh Youtube của riêng mình.

Dù bạn có tin hay không, hầu hết các kỹ sư phần mềm có thể sử dụng một số kinh nghiệm khi nói trước công chúng.

Rốt cuộc, có thể làm việc trên các kỹ năng nói và giao tiếp công khai của bạn có thể rất có lợi cho bạn và sự nghiệp của bạn.

Vì vậy, ngay cả khi chúng tôi hoàn toàn không quan tâm đến thu nhập tiềm năng (có thể là đáng kể), bắt đầu kênh youtube của bạn vẫn có giá trị.

Cá nhân tôi nghĩ rằng bắt đầu một kênh youtube hiệu quả hơn nhiều so với việc chỉ bắt đầu một blog.

Bởi vì Youtube cho phép bạn xây dựng mối quan hệ mạnh mẽ hơn nhiều với khán giả của mình ở mức độ sâu sắc hơn nhiều so với một blog lập trình.

Tất nhiên, chiến lược tốt nhất là có cả hai.

Bây giờ khi nói đến kiếm tiền, kiếm tiền trên youtube không khác lắm so với kiếm tiền từ blog của bạn.

Bạn cũng có thể kiếm tiền với quảng cáo youtube , liên kết liên kết hoặc bán sản phẩm của riêng bạn.

6. Tạo một khóa học video

Tại thời điểm này, thực sự có nhiều vị trí cho các lập trình viên có nhiều kỹ năng hơn là chỉ tuyển cho đủ người.

Với ý nghĩ đó, thật dễ dàng để kết luận rằng lập trình đang có nhu cầu cực kỳ cao ngay bây giờ, và sẽ trong nhiều năm tới .

Với nhu cầu lớn đó, bạn không chỉ có thể kiếm tiền thông qua lập trình mà còn có thể kiếm tiền từ việc dạy lập trình.

Có hàng trăm ngàn người trên thế giới muốn tìm hiểu những gì bạn đã biết.

Và nếu bạn là một giáo viên tài năng, đây có thể là một thu nhập phụ tuyệt vời cho bạn.

Bạn có thể dạy lập trình cho bất cứ ai trên thế giới . Đó là một thị trường lớn.

Các nền tảng như Udemy , Edumall  giúp dễ dàng tạo các khóa học của bạn và kiếm tiền từ chúng. Tất cả bạn phải làm là tạo ra một khóa học chất lượng cao.

Họ sẽ  tiếp thị và làm mọi thứ khác.

7. Xây dựng một phần mềm và bán nó

Để kết thúc danh sách, đây là một chiến lược đòi hỏi nhiều công sức nhất – tạo ra phần mềm của riêng bạn để bán nó.

Bạn là một lập trình viên. Bạn viết phần mềm. Đây là những gì bạn làm.

Ý tưởng ở đây rất đơn giản.

Thay vì viết phần mềm cho người khác bán, hãy tạo một số phần mềm mà bạn tự bán.

Điều này đòi hỏi nhiều hơn là kỹ năng lập trình của bạn, bạn cần phát triển một con mắt cho nhu cầu và cơ hội kinh doanh.

Xây dựng một sản phẩm phần mềm mà thị trường cần hoặc giúp người khác giải quyết vấn đề của họ và bạn sẽ ở trong tình trạng tốt.

Bạn cũng sẽ cần phải làm việc với các kỹ năng tiếp thị của mình để có thể quảng bá phần mềm của mình.

Tất cả những kỹ năng này, mặc dù cực kỳ quan trọng, là những kỹ năng mà lập trình viên trung bình không có và bạn sẽ có lợi thế rất lớn nếu bạn có thể học và sử dụng những kỹ năng này.

Điều đó nói rằng, không phải ai cố gắng làm cho phần mềm của riêng mình thành công.

Trong thực tế, xác suất là khá thấp. Nhưng nếu sản phẩm của bạn cất cánh, nó có thể rất sinh lợi.

Bạn có thể tạo một ứng dụng điện thoại, dịch vụ SAAS hoặc chỉ một phần mềm đơn giản.

8. Làm việc tự do

Ngoài Fiverr, Upwork còn là một cách khác để bạn có thể sử dụng các kỹ năng lập trình của mình là trở thành một freelancer trên Upwork.

Upwork cho phép khách hàng từ khắp nơi trên thế giới tìm và thuê bạn nếu bạn có những kỹ năng mà họ đang tìm kiếm.

Lập trình chắc chắn là một trong những kỹ năng cần thiết nhất được yêu cầu và bạn chắc chắn nên xem xét việc tự do nếu đây là điều bạn muốn làm.

Kết luận

Có nhiều cách bạn có thể kiếm thu nhập phụ như một lập trình viên.

Chọn bất cứ điều gì bạn quan tâm nhất và làm.

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

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

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

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

5 sai lầm của bản thân

sai lầm
5 sai lầm của bản thân

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

Bước ra khỏi căn phòng, nơi bản thân học code ngày qua ngày để đi tìm một công việc đầu tiên thực sự gian nan. Nhưng sau khi đã tìm được một nơi để chiến đấu tiếp thì gian nan còn nhiều hơn. Từ kinh nghiệm của bản thân mình muốn chia sẻ một vài sai nhầm mà mình đã mắc phải và thậm chí mình đến giờ vẫn chưa bỏ được.

  2 nhận định sai lầm về việc bắt đầu học lập trình

  3 sai lầm các iOS Developers thường mắc phải

1. Hỏi sai câu hỏi

Trước hết điều này không phải là mình hỏi câu hỏi sai mà là hỏi không đúng câu hỏi. Hay chính xác hơn là có thực sự biết mình đang hỏi cái gì không.

Khi đó người được nhận câu hỏi sẽ rất ức chế và không có cái nhìn đúng về vấn đề mình mắc phải, dẫn đến phải hỏi lại rất nhiều lần và kết quả không đi về đâu cả, mất thời gian của cả hai.

Một câu hỏi tốt là chìa khóa giải quyết được 50% vấn đề. Khi bạn nắm được chìa khóa này, không có gì có thể làm khó bạn được. Có những lúc khi mình liệt kê ra các thứ mình sẽ hỏi thì vô tình mình tự tìm được câu trả lời. Dẫn đến mình sẽ không làm phiền đồng nghiệp nữa.

2. Kĩ năng quản lí thời gian kém

Đó thực sự là vấn đề mình đang gặp phải. Khi phải làm việc với một dự án yêu cầu khắc khe về thời gian, quyết định việc nào không làm nó quan trọng hơn những việc sẽ làm. Một vài bug quan trọng trọng hơn bug khác, nếu dành thời gian quá nhiều cho một lỗi nhỏ thì bạn sẽ không có thời gian để hoàn thành và khiến cho đống code trở thành một app có thể chạy được.

3. Học không đủ

Không đủ ở đây không có nghĩa là bạn phải học và biết nhiều công nghệ mới, quan trọng hơn hết là phải hiểu rõ những thứ bạn đang làm, và chắc chắn 100% rằng nếu có sự cố thì sẽ xử lí được và biết được chính xác nó xuất phát từ đầu, phải học sâu nó vì những thứ bên ngoài thì không giải quyết được vấn đề( thank a Chuối nhiều vì lời dặn dò này).

Và ngoài việc học sâu thì cũng nên dành chút thời gian để tìm hiểu về công nghệ mới, đọc sách, bài viết các blog tin tức về công nghệ, bỏ một ít thời gian để làm site project. Lý thuyết là các bạn có 8 tiếng cho cty, 8 tiếng ngủ và 8 tiếng còn lại thì mình nghĩ là mình và các bạn có thừa thời gian để làm điều đó.

4. Học quá nhiều thứ

Điều này có vể mâu thuẫn với luận điểm trên nhưng thực sự là vậy, học nhiều đôi khi nó mang lại tác dụng phụ gây hại không ngờ tới, cái gì cũng biết nhưng không biết cái gì, thà một nghề cho cứng kiếm được tiền còn hơn 9 nghề mà không kiếm được tiền. Bạn có thể học nhiều thứ một lúc, có thể học React, VueJS hoặc Angular một lúc nhưng mình sẽ khó để thành thạo một trong 3 cái trên, tốt nhất là chọn rõ đồng minh, xác định điểm đến và đi thôi, đừng như con thỏ mải chơi mà cuối cùng lại về sau rùa.

5. Tránh nhận trách nhiệm

Là một junior không ai kì vọng nhiều ở bạn đâu, leader hiểu rằng bạn cần thời gian để học hỏi và phát triển, họ sẽ không đưa cho bạn một cái task vượt ra ngoài khả năng vì điều đó sẽ có thể làm hỏng kế hoạch của dự án nếu bạn thất bại. Nhưng bạn nên đứng ra chịu trách nhiệm và dám nhận cái task đó, thứ nhất leader, project managers sẽ rất thích điều đó, họ sẽ có cái nhìn tốt về sự cầu tiến của bạn. Và hơn cả bạn sẽ không thể học và dám nhận trách nhiệm cho tới khi bạn đủ dũng cảm,sẵn sàng chấp nhận rủi ro và hoàn toàn dấn thân trong nó.

Hơn hết

Trong năm điều kể trên thì nó đều xuất hiện và chưa thể biến mất, mình vẫn đang cố gắng ngày qua ngày để trở nên tốt hơn có thể, hi vọng các bạn có thể chia sẻ thêm những sai lầm đã gặp. Những bài học từ sai lầm của người khác luôn dễ tiếp thu và có giá trị.

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

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

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

Đo thời gian render bằng Chrome

render
Đo thời gian render bằng Chrome

Bài viết được sự cho phép của tác giả Lưu Bình An

Để thực hành bài này, bạn có thể sử dụng source code có sẵn này

Trên tab Performance của DevTools chúng ta có

  8 câu điều kiện khi render trong React
  Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser?

https://github.com/nolanlawson/measure-style-and-layout

Đây là giá trị CPU đã tiêu tốn để render component, theo đơn vị là mili giây. Nó sẽ được thực hiện 4 bước

  • Thực thi javascript
  • Apply các format bằng CSS
  • Tính layout, trình duyệt tiếp tục tính toán để “đặt” các element trên màn hình ở chỗ nào
  • Render được thực hiện trên một thread riêng

Đa phần mọi người sẽ bỏ qua các bước 2, 3, 4 khi đo, chỉ tính toán thời gian thực thi javascript

Đo thời gian render bằng Chrome

Bước render rất khó có thể đo được chính xác, nó được thực hiện trên threat riêng và dùng GPU

Phần style và layout thì có thể đo chính xác hơn vì nó block lại main thread

Đo gì?

Chúng ta sẽ đánh dấu từ khi javascript bắt đầu chạy, đến hết phần render

Sử dụng requestAnimationFrame là chính, nó được gọi trước quá trình style và layout, nhưng thực tế trước Edge v18 và một số bản Safari thì không đúng, nên cũng có thể có chút sai xót

Đo thời gian render bằng Chrome

requestAnimationFrame(() => {
  setTimeout(() => {
    performance.mark('end')
  })
})

Phần code trong setTimeOut được gọi ngay sau bước paint

Đo thời gian render bằng Chrome

Đo thời gian render bằng Chrome

Một số vấn đề

  • setTimeOut đôi khi có sai lệch tầm 4ms trên một số trình duyệt
  • Nếu có một setTimeOut callback khác trong code, có thể không còn đúng
  • Sau này khi các trình duyệt đã hỗ trợ cách tốt hơn thì setTimeOut kiểu này là dư thừa

Accurately measuring layout on the web

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

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

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

Tất tần tật về mẫu đơn xin nghỉ phép dành cho IT 

đơn xin nghỉ phép dành cho IT
đơn xin nghỉ phép dành cho IT

Đơn xin nghỉ phép dành cho IT có những điểm gì đáng lưu ý? Đâu là những điểm đáng lưu ý của mẫu đơn xin nghỉ phép lập trình viên? Cách viết đơn xin nghỉ phép như thế nào?

Như chúng ta đều biết, việc nghỉ phép là một nhu cầu thiết yếu của người lao động. Tùy vào quy mô tổ chức, các quy định về hình thức nghỉ phép sẽ có những thể chế khác nhau. Và đơn xin nghỉ phép lúc này đóng một vai trò rất quan trọng. Cùng TopDev giải đáp những thắc mắc ban đầu nhé!

Mẫu đơn xin nghỉ phép dành cho IT là gì?

Đơn xin nghỉ phép dành cho IT là loại giấy tờ có hiệu lực và giá trị hiện hành tốt nhất về yêu cầu nghỉ phép của một cá nhân trong lĩnh vực IT. Loại văn bản này giúp nhân viên trực tiếp hoặc gián tiếp phản ánh thông điệp về sự vắng mặt trong một thời gian nhất định.

  Cách viết CV giúp lập trình viên ghi điểm với nhà tuyển dụng
  Top 5 website giúp thiết kế CV chuẩn format, đủ nội dung
sơ yếu lý lịch cho IT
Đơn xin nghỉ phép dành cho it là loại giấy tờ có hiệu lực quan trọng khi cá nhân có nhu cầu vắng mặt.

Tương tự như CV và sơ yếu lý lịch cho dân IT, hay đơn xin nghỉ việc, đơn xin nghỉ phép lập trình viên có những đặc trưng riêng biệt. Có thể xem nó là một loại văn bản quan trọng cần có trong quy trình quản lý tổ chức nhân sự của doanh nghiệp. Đơn xin nghỉ phép thể hiện hiệu lực của nó khi đúng thời điểm, tránh những tình trạng lạm dụng. Chính thực tế này sẽ phản ánh tính trách nhiệm của mỗi cá nhân với công việc của mình.

Cách viết mẫu đơn xin nghỉ việc của lập trình viên

Tương tự như CV ngành IT, đơn xin nghỉ việc, CV IT tiếng anh, CV cho sinh viên IT mới ra trường,… format của đơn xin nghỉ việc có ý nghĩa quan trọng. Một đơn xin việc mẫu được trình bày logic, khoa học sẽ đảm bảo về tính hiệu quả và hiệu lực của nó.

Phần mở đầu

1. Quốc hiệu, tiêu ngữ

Trước khi đến với phần nội dung chi tiết, bạn cần phải triển khai viết quốc hiệu, tiêu ngữ. Cụ thể như sau:

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập – Tự do – Hạnh phúc

2. Tên đơn: Đon xin nghỉ phép… (Đơn nghỉ phép sẽ gắn với mục đích cụ thể tùy trường hợp thực tế).

3. Kính gửi: Đơn xin phép được gửi cho ai? Người viết đơn cần xác định rõ đối tượng cần gửi đơn. Đó có thể là cấp trên, người quản lý, Team Lead, trưởng nhóm,…

Phần nội dung

Phần này rất quan trọng và cần đảm bảo đầy đủ các nội dung như sau gồm:

–  Các thông tin liên quan đến người viết đơn

–  Mục đích của việc viết đơn xin nghỉ phép: Tùy từng mục đích cụ thể

–  Lý do xin nghỉ phép: Các lý do phải thật sự chính đáng và hợp lý trong hoàn cảnh hiện thời của tổ chức/doanh nghiệp

–  Lời cam kết về sự thật và lởi cảm ơn

– Xác nhận minh chứng thông qua chữ ký (ký và ghi rõ họ tên)

Những lưu ý khi viết đơn xin nghỉ phép dành cho IT

Nắm bắt các lưu ý sau đây sẽ giúp bạn có một lá đơn xin nghỉ phép thật sự thuyết phục.

Văn phong lịch sự 

Thái độ quyết định mọi thứ. Khi bạn viết đơn xin nghỉ phép của lập trình viên, bạn cần có một thái độ lịch sử, phong thái nhẹ nhàng khi sử dụng văn phong và ngôn ngữ. Không ngoại trừ các trường hợp vì lý do chưa chính đáng, bạn có thể không được xem xét duyệt nghỉ phép.

Đừng mất bình tĩnh mà cáu gắt! Hãy giữ một thái độ hòa nhã trước việc không được đáp ứng nhu cầu. Đó là một nước đi thông mình hơn dành cho bạn.

Một lý do hợp lý

Bạn dễ dàng đưa ra một lý do phù hợp nếu bạn đang thật sự rơi vào tình thế cấp bách. Có một sự thật rằng, việc nêu rõ lý do là cách bạn nuôi dưỡng sự tin tưởng từ tổ chức. Đồng thời, đó cũng là lợi thế trong những kỳ bạn quyết định viết đơn xin nghỉ phép dành cho IT tiếp theo.

Nội dung rõ ràng và chi tiết

Ví dụ, như bạn ứng tuyển các vị trí như Mobile App Developer, bạn cần nắm bắt cách viết một CV IT Developer phù hợp. Dù là loại văn bản, giấy tờ nào thì cách tổ chức nội dung cần phải được chú trọng. Nó phải dễ hiểu và chi tiết. 

Đồng thời, viết CV giúp bạn định hình và có những trải nghiệm tốt hơn. Trường hợp bạn ứng tuyển các vị trí khác như freelancer it hay Senior Developer đều sẽ đạt hiệu quả ứng tuyển cao hơn.

Do vậy, hãy cung cấp rõ cho người quản lý về thời gian mà bạn sẽ trở lại với công việc. Đó được hiểu là lời cam kết mang dấu ấn uy tín và trách nhiệm của bạn với công việc. Đừng quên chia sẻ các thông tin liên lạc của mình. Điều này giúp cấp trên có thể liên hệ bạn trong các tình huống phát sinh.

Nếu trong trường hợp, bạn đang trực tiếp quản lý các dự án lớn, làm việc với các đối tác. Hãy bàn giao cho các đồng nghiệp hoặc cấp dưới cùng chuyên môn. Việc làm này sẽ đảm bảo cho tiến độ công việc sẽ không bị ảnh hưởng. Đồng thời, không tạo ra sự thay đổi và ảnh hướng tiêu cực đến mọi người xung quanh bạn.

Gửi email thông báo sớm – Hành động nhỏ nhưng chuyên nghiệp

Khi đã hoàn tất các nội dung, hãy gửi một email đến cấp trên để thông báo về sự vắng mặt của bạn. Gửi càng sớm sẽ giúp cho việc lập kế hoạch dự phòng cho các công việc một cách tốt hơn. 

Do vậy, hãy gửi kèm đơn xin nghỉ phép dành cho IT của bạn thông qua email nhé! Dù là hành động nhỏ nhưng bân nên làm. Hành động này cũng cho thấy bạn đang tôn trọng người cấp trên và chu đáo trong mọi việc.

Mẫu viết đơn xin nghỉ phép dành cho IT

Tìm ngay việc làm IT phù hợp tại AXON Company

cv it developer
1-đơn xin nghỉ phép IT
CV cho sinh viên IT mới ra trường
2-Đơn xin nghỉ phép IT
sơ yếu lý lịch cho IT
3-Đơn xin nghỉ phép IT
cv it developer
4-Đơn xin nghỉ phép IT
CV cho sinh viên IT mới ra trường
5-Đơn xin nghỉ phép IT
sơ yếu lý lịch cho IT
6-Đơn xin nghỉ phép IT

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

Xem thêm việc làm Developers hàng đầu tại TopDev

Hướng dẫn sử dụng ReactJS Props và State

reactjs
Hướng dẫn sử dụng ReactJS Props và State

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

Khi học ReactJS chúng ta sẽ thấy props và state được sử dụng rất nhiều. Với những người mới thường nhầm lẫn về hai khái niệm này.

  Học ReactJS trong 15 phút
  ReactJS - Những điều bạn cần phải biết

Cả props và state đều là hình thức lưu giữ data, nhưng dùng ReactJS Props và State thế nào để đúng mục đích đây? Chúng ta cùng tìm hiểu nhé.

Props

Props thực chất là properties.

Trở lại ví dụ ở bài trước, chúng ta sẽ sửa lại Header Component như sau:

function App(){
  return (
    <div>
      <Header name="CODEGYM"/>
      <Content/>
    </div>
  );
}
 
class Header extends React.Component {
  render() {
     return (
        <div>
           <h1>{this.props.name}</h1>
        </div>
     );
  }
}

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

Chúng ta thấy <Header name=”CODEGYM”/> sẽ tạo ra thuộc tính name có giá trị là CODEGYM. Nhìn thì giống như cách gọi hàm, đúng như vậy props chuyển đến component tương tự như một đối số chuyển đến hàm.

Ngoài ra props cũng có thể được tạo mặc định như dưới:

function App(){
  return (
    <div>
      <Header/>
      <Content/>
    </div>
  );
}
 
class Header extends React.Component {
  render() {
     return (
        <div>
           <h1>{this.props.name}</h1>
        </div>
     );
  }
}
 
Header.defaultProps = {
   name: "CODEGYM"
}

Không nên thay đổi Props

Bạn có thể thay đổi props bằng cách sử dụng setProps hay replaceProps nhưng nó không được khuyến khích (https://reactjs.org/blog/2015/10/07/react-v0.14.html#new-deprecations-introduced-with-a-warning)

Kể từ lúc chúng ta truyền props vào component thì chúng không được thay đổi. Điều này giúp bạn nghĩ đến sẽ sử dụng props cho bất kì component nào mà luôn hiển thị cùng 1 đầu ra cho cùng 1 đầu vào. Điều này giúp chúng ra dễ dàng kiểm soát nó.

State

Giống như props thì state cũng lưu giữ thông tin cho component. Tuy nhiên cách hoạt động khác với props, state là thành phần của component còn props là tham số được truyền từ bên ngoài vào.

Khi nào thì sử dụng state?

Bất kể khi nào dữ liệu thay đổi trong component thì sử dụng state. Có một lưu ý nhỏ là chúng ta không nên cập nhật state bằng cách sử dụng trực tiếp this.state mà luôn sử dụng setState để cập nhật state của các đối tượng. Sử dụng setState để re-renders một component và tất cả các component con.

Chúng ta thêm Form component như dưới:

class Form extends React.Component {
   constructor (props) {
      super(props)
      this.state = {
        input: ''
      }
   }
  
   handleChange = (e) => {
      console.log(e);
      this.setState({
         input: e.target.value
      })
   }
   
   render () {
     const { input } = this.state
     return (
     <div>
         <label>
           Name:
            <input type="text" value={this.state.value} onChange={this.handleChange} />
         </label>
         <br/>
         <p>{this.state.input}</p>
       </div>
       )
     }
  }

Sửa Content component một chút, bằng cách thêm thẻ <Form/> vào render

render() {
     return (
        <div>
        <div>
            <table>
               <tbody>
                  {this.state.data.map((person, i) => <ListStudent key = {i} 
                     data = {person} />)}
               </tbody>
            </table>
        </div>
        <Form/>
        </div>
     );
  }

Khi đó kết quả sẽ xuất hiện 1 form input, hãy nhập vào đó SetState kích hoạt re-rendering lại component và in ra màn hình nội dung chúng ta nhập.

Kết luận

Phần giới thiệu về ReactJS Props và State đến đây là hết. Chúng ta cùng chờ đợi phần sau nhé!

Author: Nguyễn Trung Kiên

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

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

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

Thư viện Python: Cái nào tốt nhất cho vai trò gì?

thư viện python
Thư viện Python: Cái nào tốt nhất cho vai trò gì?

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

Thư viện Python là gì?

Đầu tiên, bạn nên hiểu rằng các thư viện Python không khác với các thư viện thông thường chứa những cuốn sách. Cả hai đều là bộ sưu tập các nguồn thông tin.

Learning about python libraries

Tuy nhiên, thay vì sách, bạn sẽ truy xuất các mô-đun áp dụng trong quá trình coding của mình. Tất cả các nhà phát triển chuyên nghiệp tận dụng các mô-đun tài liệu thường được ghi lại cho quá trình học Python của mình. Nếu có một cách dễ dàng như vậy, tại sao không nên thực hiện theo cách này?

  IronPython

Trong quá trình học Python và khi bắt đầu nghiên cứu các thư viện Python, bạn sẽ bị chìm đắm bởi số lượng thư viện chính và bên thứ ba. Có rất nhiều bộ sưu tập các mô-đun có sẵn. Bạn có thể cảm thấy băn khoăn khi không biết phải quyết định khám phá cái nào trong số chúng. Nếu đang cố gắng học những lĩnh vực khác nhau trên con đường lập trình thì khá khó để chọn một thư viện phù hợp nhất.

Bạn nên biết rằng Python là một ngôn ngữ linh hoạt. Nó là một viên ngọc quý trong thế giới lập trình. Vì cách sử dụng của nó sẽ được sử dụng từ khoa học dữ liệu, phát triển web và thậm chí đến cả học máy. Nếu là một lập trình viên Python mới bắt đầu, chúng tôi khuyến khích bạn tham gia khóa học dưới đây để có thêm được kiến ​​thức sâu hơn.

Nhìn chung, các thư viện Python khác nhau sẽ bao gồm các mô-đun cho các lĩnh vực cụ thể. Chúng ta sẽ cùng bắt đầu tìm hiểu các thư viện TensorFlow, PyTorch, Numpy, Sklearn và một số thư viện phổ biến khác là gì?

Trước đó, có phải bạn đã rất cố gắng để tìm một công việc lập trình viên Python phải không? Trong những trường hợp như vậy, chúng tôi khuyên bạn nên đọc một số câu hỏi phỏng vấn Python mà nhà tuyển dụng thường hỏi. Nếu không trả lời được chúng thì có thể bạn sẽ bị đánh giá là không có sự chuẩn bị. Giả sử một trong những câu hỏi phỏng vấn Python yêu cầu trình bày về các thư viện Python. Sau khi đọc bài viết này, bạn sẽ có thể trình bày một số điểm chính về chúng.

Tuyển python lương cao

API và Python: Thư viện tốt nhất để xem xét

API (application programming interface) là tên viết tắt của giao diện lập trình ứng dụng. Nó mở ra cửa sổ cho các tương tác giữa các ứng dụng thông qua giao tiếp giữa máy với máy. Python có các khung framework làm tăng tốc quá trình tạo API. Do đó, nhiệm vụ của chúng tôi là thảo luận ngắn gọn về các thư viện Python phổ biến nhất có thể cho trong quá trình làm việc và học lập trình Python:

Flask

Flask là một framework trang web phát triển nhanh, được tạo ra cho quy trình thiết kế API hiệu quả hơn. Đây chỉ là một trong những cách sử dụng của Flask.
Nói chung, nó là một khung framework để phát triển ứng dụng web.
Flash rất nhẹ, cung cấp hỗ trợ để kiểm tra đơn vị và cookie an toàn cho các phiên phía khách hàng.
Các nhà phát triển khen rằng khung framework này là tài liệu tốt, có nghĩa là bạn sẽ tìm thấy nhiều trường hợp sử dụng để tìm hiểu.

Django

Django là một khung framework trang web bên thứ ba dựa trên Python khác.
Trong số các thư viện Python khác, mục đích chính của Djangos trong khung framework này là đơn giản hóa quá trình phát triển các trang web dựa trên cơ sở dữ liệu phức tạp.
Thư viện Django cung cấp nhiều công cụ quản lý. Do đó, các nhà phát triển sẽ có thể tạo ra các phần mã code mà không phải chuyển sang các công cụ khác.
Django REST là khung framework để tạo các Web API với mã code tối thiểu.

Falcon

Falcon là một khung framework trang web nhẹ, tuân thủ SWGI, được thiết kế để xây dựng các RESTful API.
Người mới bắt đầu đánh giá cao các hướng dẫn tài liệu cung cấp nhiều hướng dẫn cho việc tạo dự án đầu tiên.
Falcon chạy trên bất kỳ phần cứng nào và chỉ phụ thuộc vào hai phụ thuộc của bên thứ ba.

Eve

Eve là một khung framework REST API dựa trên Python miễn phí, được cung cấp bởi Flask và Cerberus.
Nó cho phép phát triển nhanh chóng các dịch vụ web RESTful độc đáo, giàu tính năng.
Khung framework hỗ trợ MongoDB và tương thích cao nhờ các tiện ích mở rộng.

  Ruby vs Python: Đâu mới là ngôn ngữ tốt hơn cho lập trình ứng dụng

AI và Python: Thư viện hữu ích

Ngành công nghiệp CNTT đang thúc đẩy sự phát triển của máy móc thông minh, có khả năng thể hiện hành vi giống con người khi nó được học. Mô phỏng trí thông minh của con người này được cung cấp bởi nhiều thư viện Python được thiết kế đặc biệt để thúc đẩy ngành khoa học máy tính. Nếu muốn làm cho một cỗ máy suy nghĩ, học hỏi và có khả năng giải quyết vấn đề được thì hãy nên ghi nhớ các thư viện có thể giúp tạo ra bước đột phá đó dưới đây:

TensorFlow

TensorFlow là một thư viện mã nguồn mở.
Tính toán số trong mô-đun này tích hợp việc sử dụng biểu đồ luồng dữ liệu.
Đưa ra một viễn cảnh khác về khái niệm hóa các hành động toán học.
Với khung framework này, bạn có thể tạo các mạng nơ-ron và đào tạo chúng.

PyTorch

PyTorch là một thư viện mã nguồn mở.
Nó là một khung framework dựa trên Lua (là một ngôn ngữ lập trình thông dịch với đặc điểm nhỏ gọn, đa nền tảng), được thiết kế để xây dựng các mô hình và quy mô sản xuất.
Mô-đun này cung cấp một loạt các thuật toán học máy.
PyTorch cho phép người dùng thực hiện các tính toán tenor phức tạp.
Ngoài ra, nó là đối thủ lớn nhất của TensorFlow.

Theano

Theano là một thư viện dựa trên Python để thực hiện các hoạt động toán học cho các mảng đa chiều.
Khung framework sử dụng GPU thay vì CPU, dẫn đến mức năng suất cao hơn.
Với Theano, các nhà phát triển tạo ra các mô hình học tập sâu hoặc thư viện wrapper library.
Một lợi thế khác là khả năng quản lý các loại tính toán cần thiết cho các thuật toán mạng nơ-ron lớn.

Keras

Keras là một thư viện dựa trên Python để phát triển các mô hình học tập sâu.
Nó cũng tương thích với các thư viện Python khác (TensorFlow hoặc Theano).
Mục đích chính của khung framework này là tạo mẫu nhanh của các mạng nơ-ron.
Các nhà phát triển có thể thử nghiệm với các mạng nơ-ron sâu và đào tạo chúng.

Scikit-learn

Scikit-learn hoặc Sklearn là một thư viện dựa trên Python để xây dựng các mô hình học máy.
Nó cung cấp nhiều thuật toán học tập cho phép hồi quy, phân cụm và phân loại.
Sklearn tương thích với NumPy và SciPy. Điều đó có nghĩa là có thể tương tác với các thư viện khác nhau cho Python một cách dễ dàng. Thông tin thêm về thư viện này sẽ được cung cấp trong các phần sau trong hướng dẫn Python này.

PyTorch và TensorFlow

Một cuộc tranh cãi gay gắt về sự vượt trội giữa hai thư viện này đã diễn ra trong một thời gian. Tuy nhiên, không ai có thể phủ nhận rằng chúng là những thư viện Python hàng đầu. Cả PyTorch và TensorFlow đều được thiết kế để cung cấp các mô-đun cho máy học, học sâu và quản lý mạng nơ-ron.

Vì cả hai khung framework này hoạt động trong các lĩnh vực tương tự nhau nên sẽ có sự cạnh tranh lành mạnh giữa chúng. Hãy xem xét những khác biệt chính, ưu điểm của chúng và cố gắng giải quyết tranh luận này.

Facebook và Google: Hai “ông trùm” sáng tạo và nổi tiếng

Đây là hai “ông trùm” trong ngành kinh doanh CNTT đã tạo ra các thư viện này. PyTorch là một kiệt tác của Facebook và nó dựa trên Torch. Và TensorFlow là gì? Nó là một viên ngọc được cung cấp bởi Google. Nó dựa trên Theano. Nói cách khác, cả hai thư viện này đều có cha mẹ là những “ông trùm” giàu có và nổi tiếng.

Hỗ trợ cho Windows

Đôi khi, người dùng hệ điều hành Microsoft Windows không được hỗ trợ bởi thư viện PyTorch. Thư viện máy học mã nguồn mở này đã phát hành hỗ trợ Windows PyTorch vào tháng 4 năm 2018. TensorFlow đã tiến hành bước này để thu hút người dùng Windows trước đó, vào năm 2016.

Hỗ trợ cho các hệ điều hành khác

Danh sách các hệ thống được hỗ trợ vẫn khác nhau giữa hai thư viện Python này. Mặc dù bổ sung hỗ trợ Windows PyTorch đã được đón nhận rất tốt, nhưng TensorFlow vẫn có nhiều thứ để cung cấp hơn. Trong khi PyTorch hỗ trợ Linux, macOS và Window thì TensorFlow có thể sử dụng được trên Linux, macOS, Windows, Android và JavaScript. Google đã phát hành một TensorFlow.js 1.0 dành cho học máy bằng JavaScript.

Sự khác biệt trong đồ thị tính toán

Khi cố gắng giải quyết sự tranh luận giữa PyTorch với TensorFlow, không thể không nhắc đến sự khác biệt trong cách chúng xử lý các computational graph (biểu đồ tính toán). Các biểu đồ như vậy là rất quan trọng để tối ưu hóa các mạng mã code nơ-ron. Tại sao? Vì chúng làm ta có thể thấy được dòng chảy của hoạt động và thông tin.

Với PyTorch, các lập trình viên tạo dynamic graphs (các biểu đồ động), được thiết kế bằng cách diễn giải các dòng mã code đại diện cho các phần cụ thể của biểu đồ. TensorFlow chọn một cách tiếp cận khác để sản xuất đồ thị. Các biểu đồ phải tuân theo quy trình biên soạn. Sau đó, họ phải chạy bằng Công cụ thực thi TensorFlow.

Nghe có vẻ như sẽ có nhiều công việc phải thực hiện hơn đúng không nào? Nếu muốn tạo đồ thị bằng cách sử dụng TensorFlow, bạn sẽ được yêu cầu tìm hiểu về kiểm tra biến. Ngoài ra, PyTorch cho phép bạn sử dụng trình gỡ lỗi Python thông thường. TensorFlow thì lại không sử dụng tiêu chuẩn đó. Vì vậy, nếu cần phải chọn giữa các thư viện Python này và muốn tạo biểu đồ mà không phải tìm hiểu các khái niệm mới, PyTorch nên là sự lựa chọn của bạn.

Trực quan hóa các mô hình học máy

Ấn tượng đầu tiên là tất cả. Khi đang thuyết trình về dự án của mình, việc cung cấp trực quan chính xác và dễ theo dõi là rất hữu ích. TensorFlow cung cấp cho các nhà phát triển TensorBoard, cho phép trực quan hóa các mô hình học máy. Các lập trình viên sử dụng công cụ này để phát hiện lỗi và để thể hiện tính chính xác của đồ thị. PyTorch không có chức năng như vậy, nhưng bạn có thể sử dụng các công cụ được thiết kế cho nền tảng khác để đạt được kết quả tương tự.

Cộng đồng người dùng

Các thư viện Python này cũng khác nhau về mức độ phổ biến hiện tại của chúng. Đừng quá ngạc nhiên. TensorFlow đã tồn tại lâu hơn, có nghĩa là nhiều lập trình viên đang sử dụng khung này cho các mục đích học máy và học tập sâu. Do đó, nếu gặp phải một loạt các vấn đề khó khăn trong quá trình làm dự án thì nên tìm đến cộng đồng TensorFlow vì nó lớn hơn PyTorch.

Vậy giữa PyTorch và TensorFlow, thư viện nào tốt hơn?

Chúng tôi đã tuyên bố sẽ kết thúc cuộc trang luận PyTorch và TensorFlow với số điểm so sánh rõ ràng. Tuy nhiên, nói thì dễ hơn làm. Các lập trình viên nên chọn khung framework phù hợp với nhu cầu nhất. Ngoài ra, đây là một giới thiệu ngắn gọn về cả hai thư viện. Chúng tôi không thể đưa ra các giả định dựa trên một số khác biệt. Bạn sẽ phải chọn khung framework nào là người bạn mới tốt nhất trong quá trình làm việc và học lập trình Python.

NumPy là gì?

Bạn sẽ có thể hiểu mục đích chung của thư viện này sau khi biết tên đầy đủ của nó: Numerical Python (Python số). Nó có nghĩa là các mô-đun xử lý số. NumPy là phần mềm mã nguồn mở để tạo và quản lý các mảng và ma trận đa chiều. Thư viện này bao gồm một loạt các chức năng để xử lý các mảng phức tạp như vậy.

Vậy, NumPy là gì? Đây là một trong những thư viện Python, chuyên cung cấp các hàm toán học cấp cao để quản lý các mảng đa chiều. Bằng cách truy xuất các mô-đun từ NumPy, bạn sẽ hoàn thành các tính toán đúng đắn và chính xác. Hơn thế nữa bạn sẽ cải thiện đáng kể việc sử dụng Python với các cấu trúc dữ liệu này.

Thư viện Sklearn: mục đích sử dụng

Ví dụ cuối cùng của các thư viện Python là Sklearn, được phát triển vào năm 2007. Tuy là cuối cùng nhưng không kém phần quan trọng, vì nó cũng được đánh giá cao bởi các nhà phát triển làm việc với học máy. Sklearn (còn được gọi là scikit-learn) là một thư viện, để nhóm một nhóm các đối tượng không được gắn nhãn, ước tính mối quan hệ giữa các biến và xác định phân loại các quan sát mới.

Nói cách khác, có thể lấy một số lượng lớn các thuật toán học tập để học máy hiệu quả hơn. Thư viện Python miễn phí – Sklearn là một công cụ rất hữu ích cho mô hình thống kê và, tất nhiên, học máy!

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

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

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

Một số tool hữu ích dành cho Web Developer có thể bạn đã biết (Phần 2)

web developer
một số tool hữu ích cho web developer

Bài viết được sự cho phép của BQT Kinh nghiệm lập trình

Chào mọi người, tiếp tục với phần chia sẻ lần trước (phần 1), hôm nay mình xin tiếp tục chia sẻ với các bạn thêm một vài tool mà mình thường dùng cho web developer.

1. Image Fillter

Đối với những bạn thích selfie hay thích chụp hình đều biết đến photoshop, lightroom hay muốn nhanh gọn thì dùng instagram hoặc B612… Giờ đây bạn cũng có thể ứng dụng một vài bộ lọc này lên hình ảnh để có một bộ ảnh đẹp tuyệt vời không kém. Yên tâm nó rất nhẹ, vì chỉ với vài dòng CSS thôi.

Một số tool hữu ích dành cho Web Developer có thể bạn đã biết (Phần 2)

Link: https://www.cssfilters.co

2. Text style

Lại nói về Photoshop… web developer mà kiểu gì không dính tới photoshop phải không các bạn. Ở photoshop muốn style cho chữ lung linh thật đơn giản với blending option thì ở css mình cũng không thua kém khi dùng biết kết hợp giữa background, color, text-shadow… à mà thôi bỏ đi. Mình có tool này rất hay đây.

Một số tool hữu ích dành cho Web Developer có thể bạn đã biết (Phần 2)

Link: https://ecard.enter-media.org/css-text-effects/

3. Image hover effect

Đây là một thư viện mình đã bookmark từ lâu, và thường xuyên dùng cho những layout yêu cầu độ thẩm mỹ. Về effect mình thấy lib này khá đẹp và thuần css rất nhẹ.

Link: http://gudh.github.io/ihover/dist/

4. CSS animation

Với những website của Nhật ở phần first view họ yêu cầu effect phong phú làm Dev đau đầu. Mình xin giới thiệu một lib css khá xịn, đa số những bài tủ của mấy anh Nhật đều gói gọn ở đây.

Một số tool hữu ích dành cho Web Developer có thể bạn đã biết (Phần 2)

Link: http://cssanimation.io/

5. Cũng CSS animation

Đây là một tool tổng hợp các effect của CSS3 để ra một hiệu ứng đẹp mắt khi người dùng thao thác trên website.

Một số tool hữu ích dành cho Web Developer có thể bạn đã biết (Phần 2)

Link: http://animista.net/

Tổng kết

Frontend dev ngoài vấn đề về layout hiển thị trên nhiều browser đã khổ, nay còn phải mất nhiều thời gian cho việc “makeup” website thật phong phú và lộng lẫy. Chính vì vậy mình muốn cùng đóng góp một vài tool hữu ích hơn nữa. Hy vọng những công cụ này có thể hỗ trợ phần nào cho công việc lên ý tưởng, hoàn thiện thiết kế UI và phát triển phần code Frontend cho các dự án của các bạn.

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

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

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

Sơ yếu lý lịch cho IT là gì? Cách viết sơ yếu lý lịch IT siêu chuẩn

sơ yếu lý lịch cho IT
sơ yếu lý lịch cho IT

Sơ yếu lý lịch cho IT là một yếu tố quan trọng trong bộ hồ sơ xin việc. Liệu bạn đã biết mẫu sơ yếu lý lịch cho IT gồm những gì? Cách viết sơ yếu lý lịch cho IT thế nào để tạo được sức hút? Đừng lo lắng vì qua bài viết sau đây, TopDev sẽ cho bạn những thông tin bổ ích nhất về sơ yếu lý lịch

Sơ yếu lý lịch là gì?

Sơ yếu lý lịch là một thuật ngữ mô tả tên gọi không quá xa lạ. Tuy nhiên, ở mỗi ngành nghề thuộc từng lĩnh vực chuyên môn khác nhau, sơ yếu lý lịch có nhiều cách định nghĩa. Chính điều này cũng tạo nên các góc nhìn đa dạng hơn về quy chuẩn.

Hiểu một cách đơn giản nhất, sơ yếu lý lịch (còn được gọi là lý lịch trích ngang). Nó là một bản được trình bày vắn tắt nhằm kê khai các thông tin của một cá nhân. Cụ thể các thông tin bao gồm: tên, tuổi, ngày tháng năm sinh, hoàn cảnh cá nhân; các thông tin chi tiết tương ứng từng danh mục.

Và trong giới hạn bài viết này, TopDev sẽ đề cập đến sơ yếu lý lịch cho IT.

Có điều gì đặc biệt ở Sơ yếu lý lịch cho IT?

Sơ yếu lý lich cho IT vẫn giữ các format thông thường của một mẫu lý lịch. Tuy nhiên, điểm khác là tùy vào vị trí ứng tuyển sẽ quyết định phần nội dung chi tiết của một mẫu sơ yếu lý lịch cho lập trình viên. Đó có thể là những nội dung về trình độ chuyên môn, các khoa học cho dân IT. Chính điều này tạo nên đặc điểm chuyên biệt của bản sơ yếu lý lịch cho lập trình viên.

cv là gì
Sơ yếu lý lịch cho IT là một trong những yếu tố cần có trong bộ hồ sơ nghề nghiệp

Trong bộ hồ sơ xin việc của một ứng viên, ngoài CV,  và các dữ liệu lưu trữ quan trọng (sẽ bổ sung dựa trên các yêu cầu từ các tổ chức/doanh nghiệp ứng viên ứng tuyển) thì mẫu sơ yếu lý lịch cho IT được xem là một “thành tố” không thể thiếu. 

Bạn hiểu gì về Sơ yếu lý lịch cho IT bằng tiếng Anh?

Việc ứng viên dùng tiếng anh để hoàn thiện mẫu lý lịch cho lập trình viên được xem là một lợi thế lớn. Đặc biệt là trong thị trường tuyển dụng cạnh tranh như hiện tại.

  Tips viết CV - Hồ sơ xin việc tiếng Anh đạt chuẩn

Thế nhưng, bạn đã từng hiểu rõ về Sơ yếu lý lịch cho IT tiếng anh chưa? Có một sự thật là sơ yếu lý lịch cho lập trình viên trong tiếng anh được hiểu là “Curriculum Vitae” hay “CV”. Chính điều này đã khiến các ứng viên dễ nhầm lẫn giữa sơ yếu lý lịch cho IT với CV xin việc trong tiếng việt. Đồng thời cũng thắc mắc liệu CV là gì? Thế nào là CV IT tiếng anh?Tất nhiên, chúng hoàn toàn khác nhau.

Phân biệt Sơ yếu lý lịch dân IT và CV xin việc CNTT

Nếu bạn có những hiểu biết cơ bản về mẫu sơ yếu lý lịch cho lập trình viên và CV xin việc CNTT, bạn sẽ không nhầm lẫn giữa chúng.

cv it tiếng anh

CV tập trung thể hiện nhiều khía cạnh về giá trị từ các yếu tố: trình độ học vấn, các mục tiêu nghề nghiệp thông qua các quan điểm (thể nghiệm cá nhân), các năng lực – kỹ năng,… 

Ví dụ như đối với một CV IT Developer, ứng viên phải trình bày cho nhà tuyển dụng thấy được các mục nội dung phản ánh các giá trị về trình độ năng lực, các kỹ năng từ cơ bản đến chuyên sâu thuộc lĩnh vực chuyên ngành IT, những mục tiêu và các kế hoạch phát triển tiếp theo khi theo đuổi ngành lập trình, và nhiều hơn thế,…

Đồng thời, viết CV giúp bạn định hình và có những trải nghiệm tốt hơn. Trường hợp bạn ứng tuyển các vị trí khác như freelancer it hay Senior Developer đều sẽ đạt hiệu quả ứng tuyển cao hơn.

Trong khi đó, một bản sơ yếu lý lịch cho lập trình viên lại được chuẩn hóa một cách chi tiết hơn về tất cả các thông tin. Nó đi từ góc độ bao quát đến chi tiết tất tần tật từ thông tin cá nhân. Từ thời gian được đào tạo (training) đến quá trình công tác của một ứng viên. Nhiều cơ quan doanh nghiệp nhận thấy sơ yếu lý lịch cho lập trình viên thật sự quan trọng. Vì nó giúp nhà tuyển dụng nói riêng và tổ chức nói chung tối ưu hóa quy trình quản lý ứng viên/nhân viên của mình một cách tốt hơn. 

Hướng dẫn viết mẫu sơ yếu lý lịch cho lập trình viên siêu chuẩn

1. Bìa của sơ yếu lý lịch 

Các thông tin lần lượt bao gồm”

  • Ảnh 4×6 (có đóng dầu giáp lai của cơ quan có thâm quyền)
  • Thông tin về: ngày tháng năm sinh, giới tính, hộ khẩu thường trú, CMND, số điện thoại
  • Thông tin về người liên hệ cá nhân khi cần (Khi cần báo tin cho ai?), địa chỉ liên lạc (Ở đâu?)
  • Số ký hiệu và ký tự

Đây là phần bạn chỉ cần liệt kê các thông tin cơ bản của mình. Lưu ý, phải điền thật chuẩn xác. Kiểm tra lại sau khi viết, tránh sai sót và tẩy xóa.  

2. Nội chung chi tiết sơ yếu lý lịch

Bước nền cơ sở – Sự chuẩn bị đầu tiên

Để không mất quá nhiều thời gian cho công đoạn đầu, bạn hãy chuẩn bị sẵn các giấy tờ như: CMND, giấy khai sinh, thẻ đoạn viên, đảng viên (nếu có),… để có thể nhập thông tin một cách chính xác và nhanh chóng nhất.

Nội dung sơ yếu lý lịch tự thuật

Không khó để tìm các mẫu sơ yếu lý lịch IT theo mẫu chuẩn. TopDev sẽ hướng dẫn các bạn cách viết và điền sơ yếu lý lịch.

Các thông tin được trình bày và bổ sung theo thứ tự như sau:

Ảnh 4×6, thông tin về họ tên, ngày tháng năm sinh, nguyên quán, hộ khẩu thường trú và tạm trú, số CMND.

Trình độ phổ thông, trình độ thảo luận chính trị, ngày vào Đoàn, ngày vào Đảng.

Thông tin gia đình: ghi rõ họ tên, năm sinh, ngành nghề nghiệp, môi trường công tác của thành viên gia đình bạn.

Tóm lược quá trình và thời gian đào tạo, cố vấn, hoạt động – công tác. Tên tổ chức/doanh nghiệp, ngành nghề, vị trí, các văn bằng có liên quan,…

Phía dưới cùng là chữ ký của người khai và dấu xác nhận minh chứng của cơ quan có thẩm quyền (địa phương của bạn).

Lưu ý những tip viết sơ yếu lý lịch cho lập trình viên

Đây cũng được xem là các hướng dẫn chi tiết giúp bạn có một bản sơ yếu lý lịch dân lập trình viên.

Một vấn đề cần lưu tâm chính là hãy khai thông tin một cách trung thực. Các nội dung (content)format (cách trình bày) đều được chuẩn hóa theo các trình tự (order). Do vậy, đừng viết sai lệch sự thật. Không nên sửa đổi vị trí nội dung; trình bày sai định dạng mẫu sơ yếu lý lịch ngành IT. Không tẩy xóa và nhờ người không hiểu rõ về bạn khai thông tin.

Trình tự hướng dẫn quá trình khai lý lịch

Các thông tin cơ bản

Họ và tên: Cần viết đúng chính xác, rõ ràng. Ghi chữ in hoa tương ứng với thông tin trong CMND

Giới tính: Ghi “nam” là là nam và “nữ” nếu là nữ.

Ngày tháng năm sinh: Viết chính xác từng con số.

Địa chỉ thường trú: Viết rõ các thông tin về nguyên quán được đối chiếu chính xác trong CMND .

Địa chỉ hiện tại: Viết rõ các thông tin về nơi ở: số nhà, tên đường, phường (xã), quận (huyện), tỉnh (thành phố).

Thông tin về CMND: Ghi chính xác rõ dãy số, ngày tháng năm cấp CMND.

Khi cần báo tin cho ai, ở đâu: ghi rõ tên, địa chỉ, số điện thoại liên lạc của người cần báo tin.

Bí danh: điền bí dạnh đã sử dụng (nếu có)

Nguyên quán: Thông tin về nơi ở được ghi trong chứng minh thư.

Dân tộc:  viết chính xác dân tộc như: Kinh, Thái, Tày, Nùng, Mường…

Trường hợp nếu là con lai người nước ngoài thì ghi rõ quốc tịch, dân tộc của bố, mẹ là người nước ngoài).

Tôn giáo: ghi rõ đạo Phật, đạo Thiên chúa, đạo Hồi, đạo Cao Đài, đạo Hoà Hảo,… ghi cả chức sắc trong tôn giáo (nếu có). Nếu không theo đạo nào thì ghi “không”.

Các thông tin chi tiết

Trình độ chuyên môn: ghi rõ trình độ cao nhất của bản thân. Các gợi ý thực tế: bổ túc văn hóa, đào tạo trung cấp nghề, 12/12, cử nhân, thạc sĩ, tiến sĩ… Cụ thể gắn các cấp bậc học vấn với các trị ngành IT.

Tuy thuộc một số doanh nghiệp sẽ yêu cầu chi tiết hơn. Lúc đó, bạn cần ghi rõ chuyên môn được đào tạo là gì? Thuộc ngành nghề nào? Theo hệ chính quy hay các hệ khác.

Trình độ luận chính trị: sơ cấp, trung cấp,…

Trình độ ngoại ngữ: viết theo văn bằng hoặc chứng thực đã được cấp. Thực tế theo hệ hiện hành có hai hình thức trình bày: Dạng chứng chỉ các ngoại ngữ (Anh, Hàn, Trung, Nhật,..) A,B,C; dạng chứng chỉ quốc tế IELTS, TOEIC,…

Cấp bậc: Bậc lương đang hưởng (nếu có)

Lương chính bây giờ: theo ngạch chuyên viên,…(nếu có)

Hoạt động của bản thân: Tóm sơ lược các hoạt động học tập, làm việc, vị trí làm việc, nơi làm việc. 

Khen thưởng: viết rõ tháng năm, hình thức được khen thưởng. (nếu có)

Kỷ luật: viết rõ tháng năm, lý do sai phạm, hình thức kỷ luật (nếu có).

Các mẫu Sơ yếu lý lịch IT chuẩn

cv it developer
1-Mẫu sơ yếu lý lịch IT
cv là gì
2-Mẫu sơ yếu lý lịch IT
cv it tiếng anh
3-Mẫu sơ yếu lý lịch IT
cv it developer
4-Mẫu sơ yếu lý lịch IT

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

Xem thêm việc làm Developers hàng đầu tại TopDev

6 project vui dành cho dev build khi chán

7 project vui dành cho dev build khi chán

Tác giả: Dann

Hẳn là có nhiều lúc bạn sẽ đắn đo suy nghĩ về những side project vui, thú vị mà mình có thể tự tay build, mà chưa thật sự có ý tưởng gì hay ho nên cảm thấy chán và nản dần. Vậy tại sao không thử build project gì đó vừa vui mà vừa luyện thêm vài kỹ năng mới?

  5 ví dụ chứng minh dân coder là những anh chàng vui tính nhất thế giới
  Học và cả thiện kiến thức lập trình từ các dự án cá nhân (Pet Project)

Mình sẽ liệt kê một danh sách những thứ theo mình là vừa vui vừa hơi hóc búa để luyện trình, từ đó có thể cải thiện kỹ năng của bạn rất nhiều:

Xe Lego tự lái

project vui
Xe logo tự lái

Một thời gian trước mình từng làm một dự án tương tự thế này, mục tiêu là tạo ra chiếc xe đồ chơi từ Lego mà có thể viết một từ nào đó lên mảnh giấy.

Thì cái project này hướng đến việc làm chiếc xe hơi từ Lego (hay Lego Technic) có thể tự lái mà không va chạm vào các vật khác. Với project này, bạn sẽ cần một Raspberry Pi (hoặc Arduino) hay thiết bị cảm biến sóng siêu âm (ultrasonic sensor) để tránh vật cản. Nếu bạn chưa bao giờ đụng đến Raspberry Pi (hoặc Arduino) thì mình cực kỳ recommend sử dụng và làm quen thiết bị này, bởi sự kết hợp giữa phần cứng và mềm là điểm thú vị của project này.

Bạn sẽ học được:

  • Cách sử dụng cơ bản Arduino (hay Raspberry Pi)
  • Đọc cảm biến
  • Tương tác giữa software và hardware

Ứng dụng catalog

project vui
Ứng dụng catalog

Tạo catalog thì đã có khá nhiều dự án rồi, nhưng bạn có thể thêm thắt vào vài chi tiết như sử dụng Flutter.

Flutter là bộ toolkit UI từ Google, cho phép bạn tạp một native mobile application với một codebase duy nhất. Nó sử dụng ngôn ngữ lập trình Dart. Flutter hiện nay đang khá hot và được nhiều người quan tâm đấy.

Bạn sẽ học được:

  • Flutter
  • The Dart programming language
  • App development

Xem thêm Chat app đơn giản với Flutter

Giải mã sudoku

project vui
Câu đố sudoku

Giải đố sudoku thì không cần giới thiệu nữa, nó là ứng dụng khá hay khi tập build thuật toán. Mục tiêu của project này là tạo một thuật toán có thể tự động tạo ra câu đố Sudoku hợp lệ.

Nếu dễ quá thì bạn có thể làm thêm 1 bước nữa đó là build thuật toán giải Sudoku với thuật toán quay lui: Backtracking alogorithm.

Xem thêm 10 thuật toán hàng đầu dành cho lập trình viên

Bạn sẽ học được:

  • Học và triển khai thuật toán Sudoku
  • Thậm chí bạn có nâng trình hơn bằng cách thêm level khó hơn vào câu đố Sudoku

Phân loại xe hơi

project vui
Car classification

Phân cụm và phân loại (Clustering và Classification) là một phần trong Machine learning. Mục tiêu của proect này là phân loại độ an toàn của xe hơi dựa trên data của chúng. Nếu bạn chưa quen với giới ML thì project này khá ổn để bạn luyện trình của mình đó. Và để bắt đầu thì bạn có cần có data set.

Bạn sẽ học được:

Xem thêm Giải thích Machine Learning cho con nít 5 tuổi

Game 2D

project vui
2D Game

Nếu bạn từng muốn thử sức với lập trình game thì ban có thể cân nhắc build một game 2D. Vì là những buớc đầu tiên trong quá trình làm quen với lập trình game nên bạn sẽ học được nhiều cái thú vị lắm, từ đó đẩy mạnh kỹ năng lập trình của mình.

Bạn cũng chưa cần phải nghĩ ra một ý tưởng nào đó hoàn toàn mới, bạn có thể build lại game rất nổi tiếng Flappy Bird của Nguyễn Hà Đông – phiên bản dành cho mobile hay máy tính.

Xem thêm 4 ngôn ngữ phát triển game indie phổ biến

Bạn sẽ học được:

  • Sự chuyển động của thực thể
  • Side-scrolling – góc nhìn ngang
  • Phát hiện va chạm

Progressive Web App

project vui
Progressive Web App

Progressive Web App đang khá hot, mà kiểm soát phạm vi của PWA cũng không phức tạp nên hoàn toàn phù hợp cho một side-project. Nếu có ý định build một PWA thì đây là lúc thích hợp để kết hợp với một trong top JavaScript framework hiện nay – là Angular, React, Vue. Có thể research trước và chọn ra framework phù hợp với mình.

Bạn sẽ học được:

  • Mọi thứ cần cho PWA
  • Một framwork JavaScript theo ý mình
  • Xây web cơ bản như HTML/CSS

Bắt tay vào thôi! project vui

Hy vọng bạn đã tìm được một project thú vị mà không kém phần thử thách trong list của mình. Chắc chắn bạn sẽ học được rất nhiều điều mới khi bắt tay làm dù chỉ là một trong những project như vầy.

Happy coding!

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

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

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

Coding Standard JavaScript giúp code luôn gọn gàng, dễ đọc

Coding standard trong javascript

Coding standard – tiêu chuẩn code riêng có thể dẫn đến các kết quả như sau:

  Junior developer là gì? Những quy tắc bất biến giành cho Junior developer
  Định dạng chuẩn và quy ước viết code trong HTML5

Để đạt được những điều đó thì mình đã đặt ra các tiêu chuẩn code như sau:

Khi so sánh thì dùng === thay vì ==

== và === dù chỉ khác nhau 1 dấu bằng, nhưng sẽ dẫn đến các kết quả rất khác nhau trong JavaScript.

Không nên:

if (val == 2)

Nên:

if (val === 2)

Đừng dùng var mà hãy dùng let

Lý do đơn giản là vì let có thể xử lý các vấn đề phạm vi (scoping issue) của var trong JavaScript

Không nên:

var myVar = 10;

Nên:

let myVar = 10;

Dùng const thay cho let

Cái này sẽ ngăn chặn dev thay đổi những thứ không cần thiết và giúp cải thiện readability.

Không nên:

let VAT_PERCENT = 20;

Nên:

const VAT_PERCENT = 20;

Luôn luôn dùng dấu chấm phẩy (;)

Dù dấu chấm phẩy không bắt buộc trong JavaScript khi kết thúc câu lệnh như các ngôn ngữ khác, tuy nhiên nếu dùng ; sẽ giữ tính nhất quán ở các dòng code, giúp phân cách giữa các dòng lệnh.

Không nên:

const VAT_PERCENT = 20;

let amount = 10
return addVat(amount, vatPercent)

Nên:

const vatPercent = 20;
let amount = 10;
return addVat(amount, vatPercent);

Quy tắc đặt tên trong JavaScript

  • let nên dùng camelCase (in hoa chữ cái đầu tiên ở từ thứ hai). Ví dụ:

let tênBiến;

  • const thì quy theo upper case (in hoa) nếu đứng ở vị trí đầu file: MY_CONST, còn nếu không xuất hiện ở đầu thì đặt theo camelCase
  • class nên đặt theo PascalCasing (in hoa chữ cái đầu của mỗi từ) MyClass
  • functions thì đặt theo camelCase. myFunction
  • Tên biến, function, class không được có khoảng trắng, bắt đầu bắt một chữ cái, ký tự gạch dưới (_) hoặc dollar ($)
  • Tên biến trong JavaScript phân biệt chữ hoa và chữ thường, ví dụ const mypet sẽ khác với const myPet

Xem thêm Quy chuẩn đặt tên trong lập trình: camelCase, underscore hay PascalCase?

Sử dụng template literal (template strings) để khai báo chuỗi

Template literal thực chất cũng là string literal, cú pháp để khai báo chuỗi trong JavaScript. Đây là tính năng mới có trong ECMA6, cho phép embed biểu thức JavaScript bên trong chuỗi mà không cần dùng phép cộng.

Không nên:

let fullName = firstName + " " + lastName;

Nên:

let fullName = `${firstName} ${lastName}`;

Ưu tiên dùng arrow function ES6

Khi viết biểu thức hàm (function) thì dùng arrow function sẽ có cú pháp ngắn gọn hơn, chúng là hàm nặc danh và thay đổi con trỏ this bind đến functions.

Xem thêm Tìm hiểu về ES6 trong Javascript

Không nên:

var multiply = function(a, b) {
  return a* b;
};

Nên

const multiply = (a, b) => a * b;

Dùng dấu ngoặc nhọn với cấu trúc điều khiển

Với các cấu trúc điều kiện (ví dụ như if, else, for, do, while,…) thí dùng ngoặc nhọn {} là điều bắt buộc. Bởi nếu không dùng thì sẽ gây hiện tượng tạo nên 1 statement bên dưới như sau:

Ví dụ:

if (myNumber === 0)
   doSomething();
   doSomethingElse();  // Đây là câu lệnh// 

Nhưng đây mới là cách nó chạy
if (myNumber === 0) {
    doSomething();
}
doSomethingElse();

Có thể sửa như sau:

Chưa đúng:

if (valid)
   doSomething();if (amount > 100) 
    doSomething();
else if(amount > 200)
    doSomethingElse();

Nên làm rõ câu lệnh ra như sau:

if (valid) {
   doSomething();
}if (amount > 100) {
   doSomething();
} 
else if(amount > 200) {
    doSomethingElse();
}

Tham khảo tuyển dụng javascript lương cao trên TopDev

Đặt dấu ngoặc ở cùng dòng với if với dấu space

Chưa đúng:

if (myNumber === 0)
{
    doSomething();
}

Nên viết:

if (myNumber === 0) {
    doSomething();
}

Hạn chế nesting

If lồng trong if rất dễ gây nhầm lẫn và khá khó để đọc, hãy cố gắng lựa chọn cách viết khác để thay đổi cấu trúc này, biết đâu có lúc cần kiểm lại code và thay đổi code thì sao:

Không nên:

if (myNumber > 0) {
  if (myNumber > 100) {
       if (!hasDiscountAlready) {
           return addDiscountPercent(0);
       } else {
           return addDiscountPercent(10);
       }
  } else if (myNumber > 50) {
    if (!hasDiscountAlready) {
       return addDiscountPercent(5);
    }
  } else {
    if (!hasDiscountAlready) {
      return addDiscountPercent(0);
    } else {
      return addDiscountPercent(1);
    }
  }
} else {
     error();
}

Nên:

if (myNumber <= 0) {
   return error;
}if (!hasDiscountAlready) {
    return addDiscountPercent(0);
}if (myNumber > 100) { 
    return addDiscountPercent(10);
}if (myNumber > 50) { 
    return addDiscountPercent(5);
}return addDiscountPercent(1);

Đoạn code trên có thể thấy là dễ đọc hơn rất nhiều, phần lớn mình luôn cố gắng hạn chế if else, bí kíp của mình như sau:

Thay vì:

if (valid) { 
   return buy();
} else { 
   return error();
}

Thì viết:

return valid ? buy() : error();

Tận dụng tối đa số dòng cho files và functions

Tuy rằng mỗi dự án mỗi khác nên sẽ rất khó để thực hiện điều này, nhưng hãy cân nhắc mỗi khi thấy vài đoạn code đang trở nên phình to hơn, khi có kinh nghiệm rồi bạn sẽ tìm được độ dài phù hợp.

Ví dụ:

files chứa tối đa 80 dòng code

functions chứa tối đa là 15 dòng code

Tên file viết thường

MyFile.js nên để là myFile.js

Dùng tham số mặc định

Trong JavaScript nếu bạn không gán giá trị bới tham số khi gọi function thì nó sẽ thành undefined

Không nên:

myFunction(a, b) {
  return a + b;
}

Nên:

myFunction(a = 0, b = 0) { 
   return a + b;
}

Shorthand cho boolean

Không nên:

if (isValid === true)
if (isValid === false)

Nên:

if (isValid)
if (!isValid)

Hạn chế ternary statements không cần thiết

Thay vì:

const boo = a ? a : b;

Hày dùng:

const boo = a || b;

Dùng một biến duy nhất mỗi lần khai báo

Có nhiều ý kiến khác nhau về việc tách ra kiểu vầy nhưng mình thì cảm thấy khai báo nhiều cái một lúc sẽ dễ bị nhầm lẫn hay sót.

Thay vì viết:

let a = 1, b = 2;

Thì mình làm:

let a = 1;
let b = 2;

Kết luận

  • Coding standard trong bất kỳ ngôn ngữ nào đều giúp cải thiện độ readability và maintainability – tính bảo trì của application. Bạn có thể gặp rào cản trong việc thống nhất coding standard trong team, thì hãy thử qua những cách sau:
  • Desk review (nghiên cứu tại bàn), xem xét từng dòng code một
  • Tạo một application thống nhất từ đầu đến cuối, để các lập trình viên biết cần thêm/update cái gì
  • Khi tạo cái gì mới thì hãy để senior dev bắt đầu để tạo nên guideline cho các thành viên khác trong team.

Tham khảo thêm tại Medium

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

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

Bí thuật đơn giản hóa code của bạn

đơn giản hóa code

Tác giả: Eric Elliott

TL;DR: Abstractions (tính trừu tượng) sẽ là chìa khóa giúp code được đơn giản hóa đến mức tối đa. Khi code đơn giản, số lượng code cũng từ đó giảm đi. code trở nên dễ đọc, dễ adapt và duy trì hơn.

  11 mẹo đơn giản để tăng hiệu suất Java cấp tốc
  Làm animate siêu đơn giản với hook khi react component mount và unmount

Liệu rằng có phím tắt nào đẩy hiệu quả lên gấp 10 lần hay không? Nếu bạn biết bí mật này – sẽ mở ra một thế giới hoàn toàn mới về hiệu quả và khả năng phát triển phần mềm cho bạn?

Có nhiều ý kiến cho rằng, Thật ra chẳng có lối tắt nào đi đến thành công cả, tất cả mọi người đều phải luyện tập và luyện tập rất siêng năng. Điều này cũng đúng nhưng các chuyên gia bây giờ họ đang luyện cái gì, họ có bí kíp gì không?

Bí mật của các chuyên gia là họ biết đâu là sự khác biệt giữa năng suất trung bình và năng suất gấp 10. Với nó, bạn có thể viết code có thể tái sử dụng nhiều lần hơn, thậm chí ngay cả thêm requirements và thay đổi một số cấu trúc.

Bí quyết đẩy nhanh năng suất gấp nhiều lần chính là nắm vững tính trừu tượng – abstraction. Rất nhiều app bây giờ chứa hàng tấn code. Ví dụ nếu bây giờ in ra source code của top 10 app ra giấy thì bạn có tưởng tượng ra được số lượng giấy nhiều đến mức nào, có thể xếp thành tòa nhà cao tầng. Trong thực tế với số lượng code khổng lồ như vậy thì việc duy trì cũng rất tốn kém. Vì vậy càng nhiều code thì chi phí dành cho chúng càng nhiều.

Xem thêm Tại sao code của tôi thường ngắn gọn như vậy

Tính trừu tượng là chìa khóa của simple code

Tính trừu tượng (abstractions) chuẩn sẽ tạo ra code dễ đọc, dễ thích ứng và duy trì bằng các ẩn những chi tiết không quan trọng lắm với ngữ cảnh hiện tại, giảm số lượng code trùng lặp thực hiện cùng một việc.

Tính trừu tượng được hình thành bởi 2 yếu tố chính:

  • Generalization: loại bỏ các phần lặp và ẩn sau phần trừu tượng
  • Specialization: áp dụng tính trừu tượng cho trường hợp cụ thể, và chỉ thêm những gì khác biệt

Hãy xem qua đoạn code này:

const doubleList = list => {
  const newList = [];
  for (var i = 0; i < list.length; i++) {
    newList[i] = list[i] * 2;
  }
  return newList;
};

Đoạn code trên không có gì sai nhưng nó chứa khá nhiều chi tiết không cần thiết mấy:

  • Bao gồm chi tiết cấu trúc dữ liệu container/transport đang đuợc sử dụng (mảng), nghĩa là nó chỉ có thể hoạt động với mảng mà thôi. (state shape dependency).
  • Bao gồm logic lặp lại, nếu thực hiện thao tác khác mà cần truy cập các phần tử trong cấu trúc dữ liệu, bạn cần phải lặp lại logic trong đoạn code đó. Mà điều này sẽ vi phạm nguyên tắc DRY (Don’t Repeat Yourself).

Xem thêm DRY không hiệu quả, hãy dùng WET

  • Thay vì mô tả khai báo operation được thực hiện thì nó bao gồm nhiệm vị cụ thể và rõ ràng (thay vì dài dòng)

Tất cả những điều này đều không cần thiết và có thể đuợc ẩn sau abstraction. Trong trường hợp này thì abstractions trở nên phổ biến và biến đổi cách build app hiện nay, giảm số lượng for-loops.

Junior dev nghĩ rằng phải viết rất nhiều code để sản xuất ra giá trị, còn senior dev thì hiểu giá trị của những dòng code mà không cần được viết ra,

Hãy tưởng tượng một lập trình viên đã quen thuộc với việc sử dụng phương thức map trong các ngôn ngữ lập trình như JavaScript. Map tóm tắt các chi tiết như kiểu dữ liệu, kiểu cấu trúc dữ liệu, .. từ đó cải thiện độ hiệu quả của ứng dụng.

Jeremy Ashkenas đã giúp những phương thức như vậy phổ biến trong JavaScript, mở đường cho nhiều phím tắt, cú pháp đang được sử dụng hiện nay trong JavaScript (bằng cách tiên phong trong CoffeeScript). Ngoài ra ông đã tạo ra Underscore, Lodash và Backbone, phổ biến cấu trúc MVC trong JavaScript và tạo tiền đề cho Angular và React.

John Resig tạo ra jQuery rất phổ biến và có sức ảnh huởng, hình thành bộ sưu tập JavaScript module có thể tái sử dụng (plugin jQuery) mãi cho đến khi các Node module ES6 modules xuất hiện nhiều năm sau đó. Bộ API của jQuery có ảnh hưởng tới mức chúng tạo nền tảng cho DOM API hiện nay.

Abstraction phù hợp có thể là chiếc đòn bẩy – tác động đáng kể lên năng suất của những dòng code. Module, functions, variables, classes đều là các các dạng của abstraction lý do tồn tại của chúng là để làm abstractions/thành phần của abstraction dễ dàng hơn. Có thể nói không thể nào build một software phức tạp mà không dùng đến abstraction, đến những ngôn ngữ bậc thấp cũng sử dụng abstractions.

Bạn có thể tham khảo nội dung gốc tại Medium

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

Xem thêm việc làm Software Engineer lương cao, đãi ngộ tốt tại TopDev

Hướng dẫn cơ bản để làm việc với Javascript regular expression

regular expression
Hướng dẫn cơ bản để làm việc với Javascript regular expression

Bài viết được sự cho phép của tác giả Lưu Bình An

Giới thiệu

Regular Expression (hay gọi tắt là regex – đọc là ghi-ríc-cờ-sờ) là một string với format đặc biệt, với nó chúng ta có thể

  • Tìm text trong string
  • Thay thế substring trong string
  • Trích xuất thông tin từ một string

Tất cả các ngôn ngữ đều có hỗ trợ regex. Có thể mỗi ngôn ngữ có đôi chổ khác nhau, tuy nhiên nhìn chung thì nó được áp dụng giống nhau cho hầu hết.

Regex có thể nói là rất khó học, khó viết, khó nhớ, khó sửa. Tuy nhiên có những việc chỉ có thể thực hiện được với regex.

Ví dụ, kiểm tra một string có kết thúc bằng .com.football hay không

"google.com" → true
"www.vietnam.football" → true
"google.foobar" → false

regex cho yêu cầu đó

/(\.com|\.football)$/i

Khai báo regex

Phân tách cái regex ở trên

Hướng dẫn cơ bản để làm việc với Javascript regular expression

  • \ đặt trước các ký tự đặc biệt, dấu . là một ký tự đặc biệt
  • | là câu điều kiện or
  • $ là điều kiện phải xuất hiện ở cuối string
  • Đoạn nằm giữa /đoạn-nằm-giữa/, là chổ chúng ta viết các điều kiện. Đoạn-nằm-giữa có tên tiếng mỹ là pattern
  • Chữ i ở cuối, phía sau / là một dạng settingi là điều kiện chỉ hợp lệ nếu xuất hiện đúng một lần duy nhất. Có nhiều dạng setting khác nữa, phía dưới sẽ đề cập.

Trong javascript, regex là một object, có thể định nghĩa bằng 2 cách

// tạo 1 object mới
const regex1 = new RegExp('football');

// dùng regular expression literal 
const regex2 = /football/

Kiểm tra regex

Regex ở trên chúng ta đang tìm string football, không giới hạn gì cả, chữ football nằm ở đâu không quan trọng.

Kiểm tra regex bằng RegExp.test(string), sẽ trả về giá trị true/false

regex1.test('football');
// => true
regex1.test('blablabla football blablabla');
// => true
regex2.test('footba');
// => false
regex2.test('blab foot ballabla');
// => false

Xem ngay các tin tuyển dụng Javascript mới nhất

Một số điều kiện có sẵn

Đã khó rồi, các bạn còn đề nghị một số kiểu viết tắt cho bắt anh em căng não ra học

  • \d tương tự như [0-9], chỉ là các giá trị số
  • \D tương tự như [^0-9], không chưa các ký tự số
  • \w tương tự như [A-Za-z0-9], bao gồm ký tự chữ và số
  • \W tương tự như [^A-Za-z0-9], không chứa ký tự chữ và số
  • \s chứa các ký tự khoản trống như: space, tab, newline
  • \S không chứa ký tự khoản trống
  • \0 chứa ký tự null
  • \n chứa ký tự xuống dòng (newline)
  • \t chứ ký tự tab

Các điều kiện chúng ta hay sử dụng

Phải xuất hiện ở đầu câu: ^

Nếu muốn thêm điều kiện chữ football phải ở đầu câu

/^football/.test('football')     //✅
/^football/.test('bla football') //❌

Phải xuất hiện ở cuối câu: $

Điều kiện chữ football nằm ở cuối

/football$/.test('football')     //✅
/football$/.test('bla football') //✅
/football$/.test('football you') //❌

Nếu kết hợp cả 2 cú pháp trên, ta có câu điều kiện chỉ được phép có đúng chữ football

/^football$/.test('football') //✅

Phải bắt đầu bằng bằng 1 pattern và kết thúc bằng 1 pattern khác: .*

Bắt đầu bằng chữ hey và có kết thúc bằng chữ joe

/^hey.*joe$/.test('hey joe')             //✅
/^hey.*joe$/.test('heyjoe')              //✅
/^hey.*joe$/.test('hey how are you joe') //✅
/^hey.*joe$/.test('hey joe!')            //❌

Phải nằm trong khoản: [điểm bắt đầu - điểm kết thúc]

/[a-z]/ // có các ký tự a,b,c....x,y,z
/[A-Z]/ // có các ký tự A,B,C,...X,Y,Z
/[a-c]/ // có các ký tự a,b,c
/[0-9]/ // 0,1,2...8,9
/[a-z]/.test('a')  //✅
/[a-z]/.test('1')  //❌
/[a-z]/.test('A')  //❌

/[a-c]/.test('d')  //❌
/[a-c]/.test('dc') //✅

Hợp thể

/[A-Za-z0-9]/
/[A-Za-z0-9]/.test('a') //✅
/[A-Za-z0-9]/.test('1') //✅
/[A-Za-z0-9]/.test('A') //✅

Chỉ được phép xuất hiện 1 lần: kết hợp []^$

/^[A-Za-z0-9]$/

/^[A-Za-z0-9]$/.test('A')  //✅
/^[A-Za-z0-9]$/.test('Ab') //❌

Đảo ngược kết quả: [^]

/[^A-Za-z0-9]/.test('a') //❌
/[^A-Za-z0-9]/.test('1') //❌
/[^A-Za-z0-9]/.test('A') //❌
/[^A-Za-z0-9]/.test('@') //✅

Điều kiện hoặc|

/hey|ho/.test('hey') //✅
/hey|ho/.test('ho')  //✅

Xuất hiện ít nhất một lần: +

/^\d+$/ // là các số từ 0-9

/^\d+$/.test('1')     //✅
/^\d+$/.test('14')     //✅
/^\d+$/.test('144343') //✅
/^\d+$/.test('')       //❌
/^\d+$/.test('1a')     //❌

Chỉ đúng hoặc sai, không có thể cả đúng và sai: *

Nói vậy hơi khó hiểu, để giải thích rõ hơn nè, ví dụ yêu cầu phải là số từ 0-9, nếu kiểm tra 1a => false vì nó có 1 là đúng, a là sai, còn '' => true vì nó chỉ có sai không có đúng

/^\d*$/

/^\d*$/.test('12')     //✅
/^\d*$/.test('14')     //✅
/^\d*$/.test('144343') //✅
/^\d*$/.test('')       //✅
/^\d*$/.test('1a')     //❌

Đúng n lần: {n}

/^\d{3}$/ // có 3 ký tự số

/^\d{3}$/.test('123')  //✅
/^\d{3}$/.test('12')   //❌
/^\d{3}$/.test('1234') //❌

// hợp thể nào
/^[A-Za-z0-9]{3}$/.test('Abc') //✅

Đúng từ n đến m lần: {n,m}

/^\d{3,5}$/ // đúng từ 3,4,5 lần

/^\d{3,5}$/.test('123')    //✅
/^\d{3,5}$/.test('1234')   //✅
/^\d{3,5}$/.test('12345')  //✅
/^\d{3,5}$/.test('123456') //❌

Nếu không đưa vào giá trị m thì thõa từ n đến bao nhiêu cũng được

/^\d{3,}$/

/^\d{3,}$/.test('12')        //❌
/^\d{3,}$/.test('123')       //✅
/^\d{3,}$/.test('12345')     //✅
/^\d{3,}$/.test('123456789') //✅

Điều kiện đó không bắt buộc: ?

// \w bao gồm ký tự chữ và số
// \d tương tự như `[0-9]`
/^\d{3}\w?$/

/^\d{3}\w?$/.test('123')   //✅
/^\d{3}\w?$/.test('123a')  //✅
/^\d{3}\w?$/.test('123ab') //❌

Nhóm điều kiện

Để nhóm các điều kiện lại, đặt giữa ()

Ví dụ bên dưới, điều kiện thõa khi có đúng 3 ký tự số và theo sau đó là ký tự số hoặc chữ

/^(\d{3})(\w+)$/

/^(\d{3})(\w+)$/.test('123')          //❌
/^(\d{3})(\w+)$/.test('123s')         //✅
/^(\d{3})(\w+)$/.test('123something') //✅
/^(\d{3})(\w+)$/.test('1234')         //✅

Nếu đặt dấu + phía sau ()

/^(\d{2})+$/

/^(\d{2})+$/.test('12')   //✅
/^(\d{2})+$/.test('123')  //❌
/^(\d{2})+$/.test('1234') //✅

Lấy giá trị của 1 Group

Thay vì sử dụng RegExp.test(String) để trả về boolean, sử dụng

  • String.match(RegExp)
  • RegExp.exec(String)

Sẽ return một Array với những string thõa điều kiện

'123s'.match(/^(\d{3})(\w+)$/)
//Array [ "123s", "123", "s" ]

/^(\d{3})(\w+)$/.exec('123s')
//Array [ "123s", "123", "s" ]

'hey'.match(/(hey|ho)/)
//Array [ "hey", "hey" ]

/(hey|ho)/.exec('hey')
//Array [ "hey", "hey" ]

/(hey|ho)/.exec('ha!')
//null

Trường hợp group đó thõa điều kiện nhiều lần, chỉ trả về giá trị cuối cùng

'123456789'.match(/(\d)+/)
// Array ["123456789", "9"]

Setting

  • g: kiểm tra điều kiện nhiều lần
  • i: không phân biệt hoa thường
  • m: cho phép kiểm tra xuống dòng
  • u: bật hỗ trợ unicode
/hey/ig.test('HEy') //✅
new RegExp('hey', 'ig').test('HEy') //✅

Ứng dụng

Thay thế chuỗi

Hàm replace của String Object

"Hello world!".replace('world', 'dog') //Hello dog!
"My dog is a good dog!".replace('dog', 'cat') //My cat is a good dog!

Có thể truyền vào tham số đầu là một Regex

"Hello world".replace(/world/, 'dog') // Hello dog

Thêm g để thay thế nhiều lần

"My dog is a good dog!".replace(/dog/g, 'cat') //My cat is a good cat!

Sử dụng Group để di chuyển các phần text trong string

"Hello, world!".replace(/(\w+), (\w+)!/, '$2: $1!!!')
// "world: Hello!!!"

Lấy số từ String

'Test 123123329'.match(/\d+/)
// Array [ "123123329" ]

Kiểm tra email

/(\S+)@(\S+)\.(\S+)/
/(\S+)@(\S+)\.(\S+)/.exec('copesc@gmail.com')
//["copesc@gmail.com", "copesc", "gmail", "com"]

Lấy đoạn test nằm giữa dấu ""

const hello = 'Hello "nice flower"'
const result = /"([^']*)"/.exec(hello)
//Array [ "\"nice flower\"", "nice flower" ]

Lấy nội dung ở giữa html tag

/<span\b[^>]*>(.*?)<\/span>/

/<span\b[^>]*>(.*?)<\/span>/.exec('test')
// null
/<span\b[^>]*>(.*?)<\/span>/.exec('<span>test</span>')
// ["<span>test</span>", "test"]
/<span\b[^>]*>(.*?)<\/span>/.exec('<span class="x">test</span>')
z// ["<span class="x">test</span>", "test"]

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

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

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

Đa ngôn ngữ đơn giản trong Laravel

laravel
Đa ngôn ngữ đơn giản trong Laravel

Bài viết được sự cho phép của tác giả Nguyễn Trần Chung

Nếu bạn muốn làm một dự án với nhiều ngôn ngữ khác nhau, thì bài viết sau sẽ giúp các bạn việc đó dể dàng hơn.

  Các Laravel route tips giúp bạn cải thiện routing
  Cách sử dụng Laravel với Socket.IO

Trong laravel đã hộ trợ sẵn các bạn các Retrieving Translation Strings . Ví dụ trong blade có thể viết 3 cách để viết

//Cách 1
{{ __('Ngôn ngữ') }}

//Cách 2
{{ trans('Ngôn ngữ') }}

//Cách 3
@lang('Ngôn ngữ')

Để xác định ngôn ngữ cho dự án của bạn thì bạn có thể sửa tại config/app.php và thay đổi các cài đặt sau

/**  
*Bạn sửa 'en' thành 'vn' để thay đổi ngôn ngữ sang Tiếng Việt hoặc khác, tùy bạn 
* 'en' hay 'vn' hay ký tự khác tùy vào thư mục mà bạn sẽ tạo phía sau  
*/

//Đây là ngôn ngữ thay đổi cho dự án
'locale' => 'en',  

//Ngôn ngữ dự phòng, phòng khi ngôn ngữ đang sử dụng bị lỗi
'fallback_locale' => 'en',

Trong Laravel có cách khác để thay đổi ngôn ngữ là sử dụng

App::setLocale($locale);

Với cách này bạn có thể lấy từ DB rồi đẩy vào $locale để các thành viên tự đổi ngôn ngữ theo ý riêng. Nhưng trong phạm vi bài này, mình sẽ hướng dẫn cách để viết đa ngôn ngữ như thế nào, còn việc thay đổi Options sẽ có một bài khác.

Ok, giờ vào phần chính, bạn vào /resources/lang bạn sẽ thấy một folder có sãn là ‘en’ đây là thư mục chưa file ngôn ngữ “Tiếng Anh” của dự án bạn trong đấy có file “validation.php” chứa các nội dung tiếng anh khi các bạn Validation trong dự án bạn nên Dịch hết theo cách bạn muốn.

Ngoài ra trong đó có các chuổi tên kiểu có hai chấm trước từ đó như :

:attribute
:date
:min
:max
:other
:digits
:value

thì các bạn nhớ chừa ra đừng có dịch. vì nó sẽ thay thế giá trị vào đó nha!

ok! Khoan hãy việt hóa nha, các bác phải tạo một folder khác ngang hàng với ‘en’ đã tạo tên trùng với tên các bạn đã config trong file app.php mình tạo folder tên là ‘vn’. Ok giờ các bạn copy hết các file trong thư mục ‘en’ vào thư mục ‘vn’ rồi việt hóa nó đi.

Xong! các bác đã việt hóa các thứ có thể việt hóa. Bây giờ đến phần các bạn tự tạo ra các text riêng để dịch đây.

Các bạn sẽ tạo một file có tên là ‘content.php’ hoặc khác tùy bạn nội dung như sau:

<?php

return [

//Nội dung các chuổi text được dịch ở đây

];

Nội dung thật ra là tương tự như 4 file đã có.

Tiếp theo, mình sẽ sử dụng các template auth có sẵn khi các bạn tạo đăng nhập sẵn mà laravel có để đỡ mất công tạo template khác. :D. Ví dụ template Login.balde.php

Đa ngôn ngữ đơn giản trong Laravel

Mình sẽ lấy chữ E-Mail Address làm ví dụ.

Đa ngôn ngữ đơn giản trong Laravel

bạn sửa {{ __(‘E-Mail Address’) }} lại thành{{ __(‘content.E-Mail Address’) }} chỗ content thêm vào chính là file content.php mà bạn đã tạo, bạn đặt tên file như nào thì thêm vào như vậy. Rồi trong file content.php

Đa ngôn ngữ đơn giản trong Laravel

Bạn viết như trên. Ta sẽ có thành quả như sau:

Đa ngôn ngữ đơn giản trong Laravel

Tương tự các bạn có thể làm với các từ khác các kiểu nhé. Hoặc chia file ra.

Ngoài cách có sãn bạn cũng có thể dùng 2 cách còn lại mà mình đã ghi ở phần đâu nha.

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

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

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

Giới thiệu về Clean Architecture – Phần 1

clean architecture
Giới thiệu về Clean Architecture – Phần 1

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

Clean Architecture là một cách viết code, tổ chức code được giới thiệu bởi Robert C. Martin. Nói nôm na cho các bạn hiểu thì thông thường, khi xây dựng một Java project để expose ra các RESTful APIs, chúng ta sẽ build một project với nhiều package khác nhau như sau:

  Làm thế nào để sắp xếp Clean Architecture theo Modular Patterns trong 10 phút?
  Viết code sạch (Clean code) được gì? Phần 1

Giới thiệu về Clean Architecture – Phần 1

Trong đó:

  • Package com.huongdanjava.cleanarchitecture.rest sẽ chứa các Controller để handle request từ người dùng.
  • Package com.huongdanjava.cleanarchitecture.rest.dto sẽ chứa các Java class để handle data từ request của người dùng và data sẽ response lại cho người dùng.
  • Package com.huongdanjava.cleanarchitecture.service sẽ chứa các class handle việc xử lý business.
  • Package com.huongdanjava.cleanarchitecture.db sẽ chứa các class dùng để thao tác với database.
  • Package com.huongdanjava.cleanarchitecture.db.model chứa các model mapping database table với Java class.
  • Package com.huongdanjava.cleanarchitecture.security chứa các class liên quan đến xử lý security của ứng dụng.

Tất cả các dependencies của ứng dụng sẽ được khai báo trong tập tin pom.xml.

Đối với các ứng dụng nhỏ, việc tổ chức code như thế này sẽ không có vấn đề gì lớn lao. Nhưng đối với các ứng dụng lớn, nhiều chức năng, các bạn hãy tưởng tượng chỉ cần 1 thay đổi nhỏ, sẽ cần phải thay đổi code của toàn bộ project. Việc này sẽ rất khó quản lý và nếu như bạn là một người mới join vào dự án, sẽ rất khó khăn để bạn hiểu được ứng dụng đang làm gì và được viết code như thế nào.

Clean Architecture giới thiệu một cách viết code, tổ chức code mới, đảm bảo nguyên tắc separation of concerns khi viết code, dễ dàng thêm mới, mở rộng, loại bỏ các tính năng của ứng dụng mà không cần phải thay đổi nhiều code. Các bạn hãy xem hình ảnh dưới đây:

Giới thiệu về Clean Architecture – Phần 1

Đây là hình ảnh tổng quan về ý tưởng của Clean Architecture.

Lớp trong cùng nhất là lớp Entities (màu vàng), sẽ đảm nhận nhiệm vụ định nghĩa các Java POJO chứa các thông tin liên quan đến business của ứng dụng. Ví dụ như ứng dụng của bạn là về quản lý thông tin sinh viên thì lớp này sẽ chứa một Java class định nghĩa thông tin sinh viên gồm có những gì?

Lớp tiếp theo bên ngoài lớp Entities là lớp Use Cases, (màu hồng) lớp này sẽ chứa các class định nghĩa các business cases cần thiết cho ứng dụng. Với ứng dụng quản lý sinh viên ở trên thì các use cases mà chúng ta có thể định nghĩa trong lớp này là các class cho phép chúng ta thêm, xoá, sửa, cập nhập thông tin sinh viên.

Một điều lưu ý với 2 lớp trên, Entities và Use Cases, là chúng ta sẽ không sử dụng bất kỳ một external library hay framework nào, ngoài trừ lớp Use Cases thì có thể cần sử dụng các library liên quan đến Unit Testing.

Để các use cases có thể nói chuyện với các external system như database, web service, MQ server, chúng ta cần một lớp gọi là lớp Adapter (màu xanh lá cây). Sử dụng Java thì lớp Adapter này chứa những interface để cho lớp Use Cases sử dụng. Những interface này sẽ được implement bởi những thành phần ở lớp ngoài cùng trong hình vẽ trên (màu xanh dương) tuỳ theo nhu cầu của ứng dụng. Trong ví dụ về ứng dụng quản lý sinh viên thì chúng ta có thể định nghĩa các interface để lấy thông tin sinh viên từ database, cập nhập thông tin sinh viên,…

Có một nguyên tắc khi viết các ứng dụng theo Clean Architecture đó là, như các bạn thấy trong hình vẽ trên chỗ các dấu mũi tên từ ngoài vào trong, những thay đổi của lớp bên ngoài sẽ không ảnh hưởng gì đến code của những lớp bên trong. Những lớp bên trong sẽ không biết code của những lớp bên ngoài có gì.

Để áp dụng ý tưởng của Clean Architecture, đối với các ứng dụng Java, các bạn có thể xây dựng project với Maven Module project và thêm một lớp ngoài cùng tên là Configuration đảm nhận việc cấu hình cho ứng dụng sẽ chạy như thế nào. Không có lớp này thì ứng dụng không thể chạy được.

Trên đây là những ý tưởng cơ bản về Clean Architecture, trong bài viết sau, mình sẽ đi vào thực tế cách hiện thực một project sử dụng Clean Architecture sẽ như thế nào các bạn nhé!

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

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

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

Tổng quan về Sniffer là gì?

sniffer-la-gi

Packet sniffer – còn được gọi là bộ phân tích gói, bộ phân tích giao thức hoặc bộ phân tích mạng – theo dõi lưu lượng truy cập internet của bạn – bao gồm các trang web bạn truy cập và bất kỳ thứ gì bạn tải xuống hoặc tải lên – trong thời gian thực, khiến chúng có khả năng xâm nhập vào máy bạn khá mạnh. Nhưng có nhiều loại sniffer khác nhau, chúng có thể là phần cứng hoặc phần mềm.

Sniffers hoạt động bằng cách kiểm tra các luồng data packet (gói dữ liệu) truyền giữa các máy tính trong mạng cũng như giữa các máy tính nối mạng Internet. Packet Sniffer hay Protocol Analyzer là những công cụ thường được các kỹ thuật viên sử dụng để chuẩn đoán và phát hiện lỗi hệ thống mạng và các vấn đề liên quan. Còn các hacker thì sử dụng chúng với mục đích xấu như theo dõi bí mật network traffic và thu thập thông tin mật khẩu người dùng.

Vậy Sniffer “xấu tính” cụ thể là gì?

Nhưng nếu bạn đang ở đây tự hỏi “virus sniffer là gì”, thì có lẽ bạn đang quan tâm nhiều hơn vào kiểu sniffer độc hại: mã gián điệp. Hacker có thể “đánh hơi” được vòng đời truy cập của bạn, cho phép chúng ghi lại và phân tích mọi thứ bạn đang làm bằng sniffer. Trong đó bao gồm tên người dùng, mật khẩu, chi tiết thẻ tín dụng và các thông tin cá nhân ngoài ra còn nhiều thông tin nhạy cảm khác. Rõ ràng là bạn không muốn bị dính kiểu sniffer đó bây giờ và kể cả sau này. Chúng tôi sẽ tìm hiểu một số mẹo để giúp bạn ngăn chặn thủ đoạn ấy. Đầu tiên, chúng tôi sẽ trình bày chính xác cách thức hoạt động tính năng dò tìm của sniffer và phân tích các kiểu ứng dụng khác nhau của sniffer.

  Tôi đã hack 40 trang web trong vòng 7 phút như thế nào?

Nhưng trước khi tiếp tục -chúng ta cần phân biệt rõ sniffer và virus không hề giống nhau. Virus là một loại phần mềm độc hại chiếm quyền điều khiển các phần mềm khác trên thiết bị của bạn và sửa đổi phần mềm đó để sao chép và lây lan virus. Sniffer không hoạt động theo cách đó và đôi khi, chúng thậm chí còn không phải là phần mềm. Có rất nhiều sniffer tồn tại dưới dạng là các thiết bị phần cứng riêng lẻ.

Sniffer có nhiều tên gọi, bao gồm bộ phân tích gói, bộ phân tích giao thức hoặc bộ phân tích mạng như đã nói ở trên, cũng như máy dò mạng, máy dò tìm không dây và máy dò Ethernet. Từ đó hành động lợi dụng sniffer có thể được thực hiện thông qua phần mềm hoặc phần cứng, tùy thuộc vào mục đích của người sử dụng. Về cơ bản, chúng sử dụng sniffer để nắm bắt, giải mã và diễn giải các gói dữ liệu được gửi qua mạng bằng TCP / IP hoặc các giao thức khác.

Phần mềm sniffer dò tìm mạng được sử dụng để làm gì?

Sniffer ban đầu được thiết kế dành cho các kỹ sư mạng (network engineer) chuyên nghiệp sử dụng để theo dõi lưu lượng và đảm bảo quá trình sử dụng mạng phù hợp. Nhưng thật không may, những hacker là những kẻ rất xảo quyệt, và hiện chúng đang lợi dụng các phần mềm sniffer có sẵn trên mạng (đôi khi thậm chí là miễn phí!).

Sniffer là công cụ được sử dụng bởi:

Kỹ sư mạng (Network engineer): Để tối ưu hóa mạng của họ, các kỹ sư phải theo dõi lưu lượng truy cập của họ.

Quản trị viên hệ thống (System administrator): Tương tự, quản trị viên cần quan sát lưu lượng truy cập để thu thập dữ liệu về các chỉ số như băng thông khả dụng. Họ cũng có thể kiểm tra xem các hệ thống cụ thể đang hoạt động như thế nào, chẳng hạn như tường lửa, cũng như khắc phục sự cố.

Các chuyên gia an ninh mạng (Cybersecurity professional): Nhân viên Cybersec có thể học được nhiều điều từ việc giám sát mạng của họ. Tăng đột biến bất thường hoặc các loại lưu lượng truy cập khác nhau có thể chỉ ra phần mềm độc hại hoặc tin tặc trong hệ thống.

Chủ sở hữu công ty: Người sử dụng lao động có thể sử dụng phần mềm sniffer để theo dõi nhân viên của họ và tìm hiểu xem họ có đang chill Netflix trong khi lượng công việc họ còn dang dở.

Hacker: Nói chung, mọi tin tặc đều khai thác phần mềm sniffer để theo dõi mọi người và đánh cắp dữ liệu cá nhân của họ, thường với mục tiêu cuối cùng là đánh cắp danh tính hoặc để chiếm đoạt tài sản. Ngoài ra còn uy hiếp tống tiền bằng những thông tin nhạy cảm.

Tóm lại, đây chỉ là một số trong nhiều cách mà các trình sniffer dò tìm mạng được sử dụng:

Đối với mục đích bảo trì mạng, các mục đích sử dụng hợp pháp của trình sniffer là:

  • Nắm bắt các gói dữ liệu
  • Ghi lại và phân tích lưu lượng truy cập
  • Giải mã gói tin
  • Khắc phục sự cố mạng
  • Kiểm tra tường lửa
  • Đảm bảo lưu lượng truy cập thông suốt

Việc sử dụng sniffer bất hợp pháp, về cơ bản là do thám thông tin, bao gồm:

  • Nắm bắt thông tin cá nhân như tên người dùng, mật khẩu, số thẻ tín dụng, v.v.
  • Ghi lại các liên lạc như email và các tin nhắn theo thời gian thực
  • Giả mạo danh tính
  • Đánh cắp tiền từ những thông tin mật về tài khoản, ..v.v

Cách Sniffer vận hành?

Đầu tiên, một số thông tin cơ bản về “lưu lượng truy cập” trên internet mà chúng tôi đã đề cập. Cũng giống như khi ô tô (chở người) tạo nên luồng giao thông di chuyển trên đường, lưu lượng truy cập internet bao gồm các gói (mang dữ liệu) di chuyển qua một mạng. Khi bạn đang ngồi ở nhà, bạn hầu như không biết mặt mũi người đang lái các chiếc oto ngoài kia, nhưng nếu có một chiếc xe tải đậu trước nhà của bạn, bạn có thể kiểm tra xem ai đang ở bên trong. Tương tự như vậy, máy tính của bạn bỏ qua hầu hết lưu lượng truyền qua mạng và chỉ kiểm tra các gói dữ liệu cụ thể được gửi đến nó.

  Giới thiệu 15 website học và luyện hack hợp pháp

Do đó, có thể xem những sniffer giống như một trạm thu phí – chúng được cử đến để kiểm tra tất cả những chiếc xe đang chạy trên đường, không chỉ những chiếc chạy trong làn xe tải mà cả xe máy. Những sniffer không có bộ lọc sẽ kiểm tra mọi chiếc oto – chúng thu thập tất cả lưu lượng truy cập đi qua một mạng. Còn những sniffer có bộ lọc có thể được cài đặt cấu hình để chỉ kiểm tra một số loại lưu lượng nhất định. Điều này giống như một trạm thu phí chỉ dừng xe BMW hoặc chỉ xe oto màu xanh lam, tùy thuộc vào loại phương tiện giao thông mà chủ nhân của trạm thu phí / sniffer này quan tâm.

Nhưng chúng ta hãy đi sâu vào các chi tiết kỹ thuật hơn nữa về cách thức hoạt động của sniffer dò tìm mạng. Và việc sniffer có thể được thực hiện bằng phần mềm hoặc phần cứng.

Người quản lý mạng hoặc quản trị viên hệ thống có thể sử dụng phần cứng, chẳng hạn như bộ định tuyến có khả năng dò tìm được tích hợp sẵn. Sniffer dưới dạng phần cứng bao gồm một bộ adapter đặc biệt kết nối với mạng hiện có. Bộ adapter thu thập dữ liệu và lưu trữ hoặc gửi dữ liệu cùng đến người đang thu thập chúng để kiểm tra thêm.

Thay vào đó, các hacker có xu hướng sử dụng sniffer dưới dạng phần mềm. Thông thường, máy tính sẽ bỏ qua tất cả lưu lượng truy cập đến nơi khác trong mạng, nhưng các ứng dụng này về cơ bản sẽ thay đổi cài đặt và quyền của máy tính để thu thập và sao chép tất cả các gói dữ liệu có sẵn trên mạng. Điều này cho phép hacker lưu trữ tất cả dữ liệu mạng và phân tích chúng sau đó. Phương thức này được gọi là chế độ “lăng nhăng” (promiscuous), nó hoạt động lén lút và không hạn chế.

Người dùng máy tính bình thường có thể gặp phải những kẻ “dòm ngó” này qua việc truy cập các trang web không an toàn, tự động tải xuống các ứng dụng bất chính hoặc tự mắc vào một trò lừa đảo nào đó bao gồm các tệp đính kèm, liên kết bị nhiễm hoặc sử dụng mạng Wi-FI không an toàn ở những nơi công cộng.

sniffer-la-gi

Tấn công Sniffer chủ động và thụ động

Tùy thuộc vào loại mạng bạn đang sử dụng, hacker sẽ sử dụng các phương pháp sniffer khác nhau.

Nếu mạng của bạn được cấu trúc bằng cách sử dụng các hub – kết nối nhiều thiết bị với nhau trên một mạng – thì tất cả lưu lượng truy cập đều di chuyển tự do. Điều đó có nghĩa là máy tính của bạn hiện đang nhận được tất cả lưu lượng truy cập trên mạng, nhưng nó bỏ qua mọi thứ không liên quan đến nó. Hacker sẽ chèn một sniffer thụ động và thay vì bỏ qua những lưu lượng truy cập không liên quan, nó sẽ hấp thụ tất cả. Kiểu sniffer thụ động này khá khó để phát hiện.

Nếu bạn đang sử dụng một hệ thống mạng lớn hơn, với nhiều máy tính được kết nối hơn, thì không phải tất cả lưu lượng truy cập đều có thể đến được tất cả các thiết bị. Trong trường hợp này, bộ chuyển mạch mạng (switch) được sử dụng để chỉ lưu lượng truy cập đến thiết bị cụ thể mà nó được sử dụng. Để một hacker có thể thu thập dữ liệu thành công trong loại môi trường này, chúng phải bỏ qua các ràng buộc được thực thi bởi các thiết bị chuyển mạch, bắt đầu cấu hình cho sniffer một cách chủ động. Điều này thường được thực hiện bằng cách thêm lưu lượng bổ sung vào mạng, tuy nhiên điều này cũng làm cho nó dễ dàng phát hiện hơn là sniffer thụ động.

Cách bảo vệ hệ thống của bạn khỏi sniffer

Như người ta đã nói, phòng bệnh hơn là chữa bệnh, và điều này chắc chắn đúng khi nói đến những kẻ lợi dụng sniffer để đánh cắp thông tin trên mạng. Dưới đây là những cách tốt nhất để trang bị hàng phòng thủ của bạn:

  1. Sử dụng phần mềm chống virus mạnh: Phần mềm chống virus mạnh sẽ ngăn mọi phần mềm độc hại xâm nhập hệ thống của bạn. Nó cũng sẽ phát hiện bất kỳ thứ gì không nên có trên máy tính của bạn, chẳng hạn như sniffer và giúp bạn xóa nó
  2. Tránh sử dụng Wi-Fi nơi công cộng: Các mạng Wi-Fi mở, chẳng hạn như các mạng Wi-Fi trong quán cà phê hoặc sân bay, chúng đều không đáng tin cậy. Việc các hacker lợi dụng sniffer lên toàn bộ hệ thống mạng là quá dễ dàng. Bạn nên tránh hoàn toàn việc sử dụng chúng, trừ khi bạn chắc chắn rằng … điện thoại, máy tính của bạn không có thông tin gì “nguy hiểm”.
  3. Sử dụng VPN: Mạng ảo riêng đã được mã hóa kết nối và ẩn tất cả dữ liệu được gửi từ máy tính của bạn qua internet. Điều đó có nghĩa là kẻ theo dõi lưu lượng truy cập của bạn sẽ chỉ thấy thông tin xáo trộn và dữ liệu của bạn sẽ vẫn an toàn.
  4. Tránh các giao thức không an toàn: Một cách khác để đảm bảo dữ liệu của bạn luôn được bảo vệ là khi bạn lướt web hãy kiểm tra link bạn truy cập có HTTPS không. Khi nhìn vào thanh địa chỉ của một trang web (ví dụ: https://topdev.vn/blog/), bạn sẽ thấy HTTP hoặc HTTPS. Một số trình duyệt sẽ hiển thị biểu tượng khóa để biểu thị HTTPS (và nếu bạn nhấp vào thanh địa chỉ để mở rộng URL, bạn cũng sẽ thấy HTTPS ở đó). Chỉ HTTPS là an toàn, có nghĩa là thông tin liên lạc của bạn đã được mã hóa. HTTP thì không an toàn và trình duyệt của bạn có thể hiển thị một chữ i thay vì biểu tượng khóa. Bạn nên tránh HTTP khi có thể, và đặc biệt nên làm như vậy khi mua sắm trực tuyến.
      Hiểu hơn HTTPS với bồ câu đưa thư
  5. Cẩn thận với mọi thứ trên mạng: Như đã lưu ý trước đó, tội phạm mạng sử dụng các phương pháp như email lừa đảo và các trang web bị nhiễm để lừa nạn nhân vô tình tải xuống trình sniffer. Luyện tập các thói quen sử dụng trình duyệt web thông minh và tránh xa bất cứ điều gì khiến bạn khó hiểu.

Cách phát hiện sniffer trên hệ thống mạng của bạn

Như đã nói ở trên, sniffer thụ động rất khó bị phát hiện. Sniffer chủ động có thể nhìn thấy rõ hơn một chút, nhưng bạn vẫn sẽ cần một số hiểu biết về công nghệ. Nếu bạn nghi ngờ có thể có một trình sniffer ở trong máy bạn, bạn có thể dùng chính sniffer của riêng mình để khắc chế lại và theo dõi tất cả lưu lượng DNS trong mạng của bạn để phát hiện bất kỳ hoạt động đáng ngờ nào.

Một lựa chọn dễ dàng hơn là dựa vào các phương pháp phòng chống được đề cập ở trên, đặc biệt là sử dụng phần mềm chống virus và mạng riêng ảo (VPN) để mã hóa kết nối của bạn.

Xóa/gỡ sniffer như thế nào

Nếu bạn phát hiện ra mình bị nhiễm một phần mềm sniffer chuyên nghiệp, bạn cần phải gỡ bỏ phần mềm độc hại ngay. Bạn có thể thực hiện việc này thủ công bằng cách kiểm tra tất cả các ứng dụng hiện có trên máy tính của mình. Nhìn vào thư mục Tải xuống của bạn và sắp xếp theo ngày. Nếu bạn tìm thấy một số chương trình gần đây mà bạn không nhớ là mình đã cài đặt, hãy xóa chúng ngay lập tức. Tuy nhiên, bạn có thể sẽ gặp một phần mềm sniffer không cho phép gỡ cài đặt.

Trong trường hợp đó, bạn sẽ cần sử dụng công cụ chống phần mềm độc hại mạnh khác (đừng tải bậy trúng thêm cái sniffer nữa đó), các công cụ này sẽ quét và xóa phần mềm độc hại. Nó cũng có các biện pháp bảo vệ đặc biệt chống lại các bản tải xuống tiềm ẩn sniffer, các liên kết không an toàn và các tệp đính kèm email có hại, ngăn chặn những sniffer và virus khác.

Vài ví dụ về packet sniffers

tcpdump (một công cụ dòng lệnh cho Linux và các hệ điều hành dựa trên Unix khác)

CloudShark

Cain and Abel

Microsoft Message Analyzer

– CommView

– Omnipeek

– Capsa

– Ettercap

– PRTG

– Free Network Analyzer

– NetworkMiner

– IP Tools

Có một số công cụ sniffer miễn phí hoặc rẻ tiền trên mạng. Hầu hết chúng đều được bán trên thị trường với mục đích giúp bạn tìm hiểu về cách nắm bắt và phân tích lưu lượng mạng để khắc phục sự cố. Các giải pháp như Wireshark và CloudShark chỉ được cung cấp cho các mục đích sử dụng hợp pháp. Bên cạch đó thì cũng tồn tại những cái bất hợp pháp, chẳng hạn như BUTTsniffer.

Miễn là bạn làm theo các mẹo phòng tránh của chúng tôi ở trên, hy vọng bạn sẽ không gặp phải bất kỳ kẻ “dòm ngó” nào trong quá trình lướt web hằng ngày.

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

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