Home Blog Page 146

Tìm hiểu về Webpack và Create React App

Tìm hiểu về Webpack và Create React App

Bài viết được sự cho phép của tác giả Võ Xuân Phong

Khi làm việc với ReactJS, chúng ta đã nghe khá nhiều về 2 cái tên Webpack với Create React App. Vậy Webpack với Create React App khác nhau như thế nào? Chúng ta sẽ cùng nhau tìm hiểu ở bài viết này nhé.

Webpack với mục đích chung nhất là để đóng gói, nó dùng để chuyển đổi code React + ES6 sang Javascript thuần (plan-vanilla JS), nó cực kỳ hữu ích và mềm dẻo, nó có thể được cấu hình để bao gồm những thứ mà khi xây dựng một ứng dụng React có thể cần, nhưng nó tốn nhiều thời gian để developer hiểu và cấu hình thiết lập. Webpack cũng hoạt động tốt với Angular, Vue, NodeJS và kể cả là Web Assembly.

Vì lý do trên, mà Facebook đã tạo ra Create React App, chứa Webpack ở bên  trong. Mọi thứ đã được cấu hình sẵn, developer chỉ cần tập trung vào việc code, chứ không phải việc ngồi cấu hình cho dự án. Nhưng với Create React App, để cấu hình một cách linh hoạt như Webpack thì đó là một điệu cực kỳ khó khăn.

Bên dưới đây, là một số so sánh cụ thể hơn nữa về Create React App Và Webpack.

Tuyển dụng lập trình React các công ty HOT

Mô-đun và Npm package

Để dễ hiểu thì npm package là một thư mục hoặc một file có chứa hoặc sử dụng nhiều mô-đun.

Các bạn có thể tham khảo link này để biết sự khác biệt giữa mô-đun và npm package:

https://docs.npmjs.com/about-packages-and-modules

Webpack là một mô-đun đóng gói trong khi react-script là một npm package, nó chứa các dependency (gói thư viện) cần để khởi tạo nhanh một project ReactJS như “babel” và “webpack” cũng có trong danh sách các dependency của react-script.

Môi trường

Create React App không có file build cấu hình vì thế chúng ta không thể cấu hình cho nó. Nếu bạn muốn điều chỉnh một số thứ bạn phải sử dụng đến lệnh “npm run eject” để nó xuất ra cho bạn các file cấu hình để bạn điều chỉnh. Mà bạn biết rồi đấy code hay cấu hình của một ai đó sẽ khiến bạn khó hiểu và bối rối mỗi khi xem chúng.

Với Webpack bạn có toàn quyền cấu hình môi trường phát triển cho dự án của bạn, và cấu hình theo cái mà bạn mong muốn.

Server Side Rendering

Để cấu hình và thiết lập SSR với Create React App thì rất đau đầu, với Webpack thì mọi chuyện sẽ dễ dàng hơn.

  10 Java Web Framework tốt nhất

  10 trang web hàng đầu để tìm hiểu WordPress

Bảo trì dự án

Trong khi sử dụng Webpack, thì bạn sẽ hoàn toàn dễ dàng, thoải mái chỉnh sửa cấu hình của Webpack, khi có sự thay đổi hoặc bạn muốn nâng cấp dự án.

Với Create React App thì tất cả được quản lý bởi cộng đồng React.

Tổng kết

Create React App phù hợp nhất cho các dự án nhỏ, nó không phù hợp cho các dự án lớn và phức tạp.

Sử dụng Create React App, sẽ tiết kiệm được thời gian khởi tạo và thiết lập dự án cho các bạn mới học React. Các bạn có thể tập trung vào học cách code React mà không cần lo lắng hay quan tâm “babel” là gì hay các thiết lập phức tạp khác trong file cấu hình Webpack.

Kiến thức về Webpack như là một kỹ năng cần có.

Tham khảo:

  1. https://medium.com/@imbudhiraja/webpack-vs-create-react-app-cb72c47f8100
  2. https://stackoverflow.com/questions/52177318/webpack-build-vs-react-scripts-build

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

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

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

Chat app đơn giản với Flutter

Chat app đơn giản với Flutter

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

Trong bài viết này, mình sẽ chia sẻ đến các bạn một project nho nhỏ: Chat app đơn giản với Flutter. Mình sẽ tạo một chat app trên mobile, sử dụng Flutter framework, Firebase Authentication và Cloud Firestore.

  Biết chọn gì đây? Flutter, React Native hay Xamarin?
  Flutter Vs. React Native - Nên chọn framework nào?

Demo

Vì đây chỉ là một project nhỏ thôi nên tính năng của nó không có gì đặc biệt cả. Chat app của mình sẽ có tính năng sign in, sign up và chat, dĩ nhiên rồi.

Chat app đơn giản với Flutter
Sign up screen
Chat app đơn giản với Flutter
Chat screen
Demo Chat App

Trước hết thì mình cần phải thêm firebase vào project flutter của mình. Sau đó thêm các plugin firebase_corefirebase_auth và cloud_firestore

Sign in screen

Chức năng đăng nhập thì để đơn giản, mình chỉ sử dụng phương thức đăng nhập bằng Email/Password của Firebase Authentication. Đương nhiên là bạn có thể thêm các phương thức khác như Sign in with GoogleFacebook

Screen này sẽ được gọi đầu tiên nên mình sẽ check xem user đã sign in hay chưa, nếu rồi thì replace bằng chat screen.

Screen của mình chỉ có 2 TextField để nhập email và password, một Button sign in (thực hiện chức năng sign in) và một Button sign up (chuyển qua sign up screen).

Sign up screen

Sign up screen cũng đơn giản, mình sẽ có các TextField để nhập email, display name, password và confirm password, một Button sign up (thực hiện sign up, sau khi sign up xong thì chuyển qua chat screen).

Để dễ dàng quản lý hơn thì các phương thức sign in và sign up mình để chung trong class AuthService.

Chat screen

Cũng để dễ dàng quản lý, mình tạo một class MessageService chứa các phương thức static để send message và get message stream.

Mình build một cái message composer ở phía bên dưới cùng, nhấn vào icon send thì tin nhắn sẽ được gửi. Phần lớn phía bên trên là một StreamBuilder, với stream là message stream từ MessageService, builder sẽ return về một ListView.

Để cho nó có chút logic thì mình kiểm tra và thay đổi vị trí và màu sắc của các tin nhắn được gửi bởi người khác và người hiện tại sẽ khác nhau.

Lời kết

Hi vọng là các bạn sẽ thấy thích project nhỏ của mình, các bạn có thể xem source code đầy đủ tại đây. Nếu các bạn thấy bài viết này hay, đừng quên chia sẻ cho bạn bè cùng biết nha. Cảm ơn các bạn!

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

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

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

Micro frontend tại sao và như thế nào?

Micro frontend tại sao và như thế nào

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

Tại sao bạn cần biết đến Micro frontend

Vấn đề cần giải quyết:

  • Ứng dụng càng lúc càng phình ra về quy mô, cũng như độ phức tạp
  • Một codebase FE duy nhất mà muốn maintain thì chỉ có gặp ác mộng hằng đêm
  • Bạn có nhiều team FE khác nhau, mỗi team chỉ làm việc chính trên một phần tính năng nào đó rất cụ thể, chỉ 1 codebase mà hơn 5 team vào làm việc trên đó thì thôi xong
  • Bạn muốn có 1 codebase viết bằng typescript, một codebase viết js, một feature được build bằng React, feature khác được build Vue

Micro frontend là cái gì

Đây là cách tiếp cận cũng na ná như microservice, thay vì 1, chúng ta có nhiều codebase, và trên từng codebase chỉ quản lý một tính năng cụ thể mà thôi.

Có thể xem một ứng dụng web là một bộ kết hợp của nhiều tính năng, mỗi một tính năng như vậy được quản lý bởi một team

Micro frontend tại sao và như thế nào?

Thuật ngữ này được giới thiệu lần đầu vào 2016 bởi Thourghtworks Tech Radar

An architectural style where independently deliverable frontend applications are composed into a greater whole

Micro frontend tại sao và như thế nào?

Một cách trực quan hơn bạn có thể tham khảo hình sau

Micro frontend tại sao và như thế nào?

Còn đây là demo của trang microfrontends.com https://demo.microfrontends.com/

Nhiều công ty tuyển dụng Frontend Developer đãi ngộ tốt, ứng tuyển ngay!

Hiện thực hóa như thế nào?

Để có thể hiện thực hóa hoàn chỉnh micro frontend sẽ bao gồm rất nhiều thứ, ở đây chỉ tóm tắt một số vấn đề cơ bản cần giải quyết

Tương tác giữa các ứng dụng

Một câu hỏi được đặt ra đầu tiên là nếu tách ra thành nhiều bộ source như vậy, làm sao chúng có thể nói chuyện được với nhau? Một cách tổng quát, nên hạn chế việc trao đổi thông tin qua lại ít chừng nào tốt chừng đó, bởi vì nếu bạn làm ngược lại, nghĩa là bạn đang lặp lại vấn đề chúng ta muốn giải quyết ngay từ đâu: decoupling các tính năng với nhau.

Nhưng việc trao đổi giữa các ứng dụng với nhau là không tránh khỏi và cần thiết, chúng ta chỉ tiết chế chứ không loại bỏ hết, Custom event là một cách, cách khác, lấy mô hình truyền callback và data từ trên xuống trong React để làm kênh trao đổi thông tin, làm như thế nó sẽ rất tường minh, cách thứ 3 là thông qua thanh đường dẫn trên trình duyệt, chút nữa nói kỹ hơn.

Tựa chung, chúng ta không share state, mà chỉ share dữ liệu trong database như microservice.

Thư viện component dùng chung

Nó chung, ý tưởng re-use lại những component UI không có gì mới, nghe cũng rất hợp lý, mặc dù ai cũng biết việc đó khó làm.

Sai lầm thường thấy là việc tạo các component như vậy quá sớm, việc hào hứng quá mức vào xây dựng một Framework UI chuẩn không cần chỉnh, viết một lần xài mãi mãi, thống nhất giao diện trên mọi mặt trận là điều thường thấy ở mọi team. Tuy nhiên, trong thực tế, kinh nghiệm cho biết rằng việc đó rất khó, nếu không muốn nói là không thể, không thể ngồi nghĩ ra một bộ Framework với tất cả các API cần thiết rồi đưa cho tất cả các team xài, chắc gì API đó đã đáp ứng đúng nhu cầu cho tất cả các team? Lời khuyên là các team cứ tạo ra những component riêng trong codebase nếu họ thấy cần, dù cho nó có bị duplicate đây nữa cũng chẳng sao. Và khi đã chín mùi, những API nào cần thiết sẽ hiện nguyên hình, chúng ta đưa những cho đang bị duplicate vào trong thư viện dùng chung.

Tất nhiên cũng có những ngoại lệ, những component mà nhìn vào chúng ta biết ngay là cần đưa vào share component, như icon, label, button, autocomplete, drop-down, search, table. Và nhớ là chỉ đưa đúng UI logic, đừng đưa bất kỳ business logic và domain logic vào đây. Ví dụ như một component ProductTable cho riêng cái domain Product là không nên, chỉ nên làm một cái component Table.

Thoạt nghe làm một share component có vẻ đơn giản, nhưng nó lại là công việc đòi hỏi kỹ thuật phải rất cứng tay, và người có nhúng tay vào tất cả các team.

  Fluent Design – Ngôn Ngữ Thiết Kế Mới Của Microsoft
  9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2024

Styling

Styling 2020 là một câu chuyện dài, như mình đã kể trong một bài viết, tựa chung mà nói bạn có thể dùng BEM, dùng SASS, dùng CSS module, dùng CSS-in-JS, dùng Styled Component, dùng Tailwind, kiểu gì cũng được, miễn đảm bảo được style không chồng chéo lên nhau, thằng nào độc lập thằng đó, và tự tin đoạn code nó sẽ chạy như đúng như lường trước.

Các cách để integrate

Để hiện thực hóa ý tưởng của micro frontend, cũng có nhiều cách làm, cách nào cũng có đánh đổi. Tựu chung, nếu xét theo hướng giao diện, chúng ta có thể tổ chức nó theo dạng một ứng dụng dạng container, bao gồm những thành phần chung như headermenu, và các micro frontend sẽ nhúng vào phần ruột của trang

Micro frontend tại sao và như thế nào?

Cách 1: composition dùng server side template

Với một cách không chính thống lắm cho việc phát triển code FE, chúng ta render HTML ở phía server, với nhiều bộ template khác nhau. Chúng ta có một file index.html với các phần tử chung, server sẽ quyết định phần ruột trả về cho từng trang

<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Feed me</title>
  </head>
  <body>
    <h1> Feed me</h1>
    <!--# include file="$PAGE.html" -->
  </body>
</html>

Ở ví dụ này đang dùng với Nginx, biến $PAGE sẽ ứng với URL đang được request

server {
    listen 8080;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html;
    ssi on;

    # Redirect / đến /browse
    rewrite ^/$ http://localhost:8080/browse redirect;

    # Dùng HTML nào để insert dựa vào URL
    location /browse {
      set $PAGE 'browse';
    }
    location /order {
      set $PAGE 'order';
    }
    location /profile {
      set $PAGE 'profile'
    }

    # Cho phép render ở index.html
    error_page 404 /index.html;
}

Kỹ thuật này mình không nắm lắm, nên cũng chỉ để đây cho các bạn tham khảo, trong thực tế mình gặp và làm việc với những cách làm bên dưới nhiều hơn.

Integrate lúc build

Cách này sẽ publish cái micro frontend ở dạng package, container sẽ khai báo những micro frontend này ở dạng dependency. File package.json nó sẽ trông như thế này:

{
  "name": "@feed-me/container",
  "version": "1.0.0",
  "description": "A food delivery web app",
  "dependencies": {
    "@feed-me/browse-restaurants": "^1.2.3",
    "@feed-me/order-food": "^4.5.6",
    "@feed-me/user-profile": "^7.8.9"
  }
}

Thoạt nhìn, cũng khá hợp lý, tuy nhiên nếu để ý, bạn sẽ thấy chúng ta phải re-compile và release trên từng cục dependency, rồi sao đó lại phải release tiếp container. Đây vẫn không phải là cách làm được khuyến khích.

Integrate lúc run-time bằng iframe

Đây cũng là cách mà dự án mình đang dùng, một cách tiếp cận đơn giản nhất để compose nhiều ứng dụng với nhau trong trình duyệt đã có từ rất rất lâu. Lợi ích có thể kể thêm của cách làm này là phần styling và biến global đều độc lập và không bị đụng độ lẫn nhau

<html>
  <head>
    <title>Feed me!</title>
  </head>
  <body>
    <h1>Welcome to Feed me!</h1>

    <iframe id="micro-frontend-container"></iframe>

    <script type="text/javascript">
      const microFrontendsByRoute = {
        '/': 'https://browse.example.com/index.html',
        '/order-food': 'https://order.example.com/index.html',
        '/user-profile': 'https://profile.example.com/index.html',
      };

      const iframe = document.getElementById('micro-frontend-container');
      iframe.src = microFrontendsByRoute[window.location.pathname];
    </script>
  </body>
</html>

Nhược điểm của cách này là việc tích hợp giữa các phần của ứng dụng, như route, history, deep-link sẽ rất phức tạp, responsive cũng sẽ gặp nhiều vấn đề cần xử lý hơn.

Integrate lúc run-time bằng JavaScript

Đây là cách linh hoạt nhất, và được nhiều team chọn làm. Mỗi một micro frontend sẽ được nhét vào trong trang bằng thẻ <script />. Container sẽ làm nhiệm vụ cho mount micro frontend nào và thực thi các hàm liên quan để báo cho các micro frontend sẽ render ở đâu và khi nào.

<html>
  <head>
    <title>Feed me!</title>
  </head>
  <body>
    <h1>Welcome to Feed me!</h1>

    <!-- Nó không render bất cứ gì cả -->
    <!-- Nó sẽ đưa vào hàm entry-point vào `window` -->
    <script src="https://browse.example.com/bundle.js"></script>
    <script src="https://order.example.com/bundle.js"></script>
    <script src="https://profile.example.com/bundle.js"></script>

    <div id="micro-frontend-root"></div>

    <script type="text/javascript">
      // Những global function này được nhét vào window bằng các đoạn script include ở trên
      const microFrontendsByRoute = {
        '/': window.renderBrowseRestaurants,
        '/order-food': window.renderOrderFood,
        '/user-profile': window.renderUserProfile,
      };
      const renderFunction = microFrontendsByRoute[window.location.pathname];

      // Sau khi đã có các hàm cần thiết,
      // đưa id của element sẽ dùng để render
      renderFunction('micro-frontend-root');
    </script>
  </body>
</html>

Trên đây chỉ là ví dụ cơ bản nhất để mô tả kỹ thuật sẽ làm, thật tế có thể phải thêm thắt một số thứ khác. Không giống với cách integrate lúc build, bundle.js có thể được deploy một cách độc lập. Và khác iframe, chúng ta có thể linh động chọn lựa việc render micro frontend nào chúng ta thích.

Nếu có hứng thú với cách làm này, có thể tham khảo thêm ví dụ chi tiết hơn

Integrate lúc run-time bằng Web Component

Một lựa chọn khác cũng tương tự như cách làm trên, mỗi một micro frontend sẽ được link với element

<html>
  <head>
    <title>Feed me!</title>
  </head>
  <body>
    <h1>Welcome to Feed me!</h1>

    <!-- Chưa render gì cả -->
    <script src="https://browse.example.com/bundle.js"></script>
    <script src="https://order.example.com/bundle.js"></script>
    <script src="https://profile.example.com/bundle.js"></script>

    <div id="micro-frontend-root"></div>

    <script type="text/javascript">
      // Những element type này được định nghĩa ở các script trên
      const webComponentsByRoute = {
        '/': 'micro-frontend-browse-restaurants',
        '/order-food': 'micro-frontend-order-food',
        '/user-profile': 'micro-frontend-user-profile',
      };
      const webComponentType = webComponentsByRoute[window.location.pathname];

      // Tạo instance và đưa vào document ứng với từng loại phù hợp
      const root = document.getElementById('micro-frontend-root');
      const webComponent = document.createElement(webComponentType);
      root.appendChild(webComponent);
    </script>
  </body>
</html>

Khác nhau duy nhất so với cách trên có lẽ chỉ là việc dùng web component thay vì một interface chúng ta tự định nghĩa.

Trao đổi giữa Backend

Cái này chưa biết, không dám chém.

Kết

Micro frontend có thể không lạ với một số người và khá mới với số còn lại, thực tế mà nói đã có rất nhiều dự án đang áp dụng kiến trúc này (dự án mình đang làm).

Cùng hy vọng với bài viết này bạn đã thấy công việc của những lập trình viên frontend không còn đơn thuần là việc làm sao cho trang web bay, lượn, responsive mượt mà, nếu bạn muốn tiến xa hơn, giới hạn là chân trời.

Các bài viết đã tham khảo

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 IT hấp dẫn tại TopDev

Junior là gì? Yếu tố để cạnh tranh trong “cuộc chơi tuyển dụng”?

Junior là gì

Cuộc chơi tuyển dụng đã không còn là còn là sự cạnh tranh ngầm giữa những nhà tuyển dụng. Trong thời đại 4.0, các ứng viên cần nắm bắt được đâu là đâu là điều mà các nhà tuyển dụng tìm kiếm. Junior – một thuật ngữ chuyên ngành mô tả những ứng viên tiềm năng trong từng lĩnh vực tương ứng đã ra đời.

Vậy Junior là gì? Những tố chất nào một Junior cần sở hữu để tạo ra lợi thế trong hành trình tìm việc? Cùng TopDev theo dõi bài viết sau để thấy rõ những vấn đề được đề cập.

Junior là gì?

Tương tư như Senior, Internship hay Fresher, Junior là thuật ngữ được sử dụng để phân chia trình độ trên cơ sở thời gian, kinh nghiệm làm việc. Chúng đều là những thuật ngữ đã được quy ước trong giới hạn phạm vi doanh nghiệp; một ngành nghề hoặc một lĩnh vực nào đó.

  Junior developer là gì? Những quy tắc bất biến giành cho Junior developer
Junior là gì
Junior là gì?

Cụ thể, Junior là những người mới vào nghề, có ít kinh nghiệm hơn. Họ thường được phân công giải quyết những vấn đề khá đơn giản, không đòi hỏi quá nhiều về chuyên môn. Đối với một số nhiệm vụ (task) phức tạp, họ cần sự hỗ trợ từ những người có kinh nghiêm hơn.

Hãy bắt đầu từ một Junior! Đó là cách tốt nhất để bạn hoàn thiện bản thân từng ngày. Vì điều quan trọng nhất đối với một Junior chính là sự trải nghiệm và học hỏi.

Trong lĩnh vực IT, một Junior Developer là những newbie về công nghệ. Hoặc họ chỉ biết những khía cạnh đơn giản dựa trên nền tảng lý thuyết. Và khi nhìn nhận về góc độ ứng dụng thực tế, họ chưa có nhiều trải nghiệm. Việc của họ trong giai đoạn đầu là học thêm về công nghệ, tìm hiểu về các cấu trúc dự án; rèn luyện và hoàn thiện kỹ năng code từ các senior.

Những yếu tố giúp Junior cạnh tranh trong “cuộc chơi tuyển dụng”

Rất nhiều yếu tố có thể chi phối đến bản thân mỗi Junior. Trong giời hạn bài viết TopDev chỉ ra 2 yếu tố nổi bật sau đây:

Khả năng học hỏi và sự thích ứng

Đối với nhà tuyển dụng, điều họ cần tìm kiếm ở ứng viên Junior là khả năng học hỏi các kiến thức. Đồng thời, sự thích ứng ở một môi trường mới cũng là một yếu tố rất được quan tâm. Nó là cơ sở thúc đẩy Junior tự phấn đấu, trở thành phiên bản tốt hơn mỗi ngày. 

Khả năng học hỏi có thể hiểu là cách ứng viên sẵn sàng tiếp nhận các kiến thức; tự trang bị những kỹ năng cần thiết liên quan đến vị trí Junior tương ứng ngành nghề thuộc nhóm lĩnh vực mình theo đuổi. Cùng với đó, khả năng thích ứng không đơn thuần là linh động làm việc với môi trường, bạn cần phải rèn luyện các kỹ năng khác như: giao tiếp, thiết lập mối quan hệ (networking), làm việc nhóm (teamwork),…

Junior là gì

Chẳng hạn, bạn là một ứng viên ứng tuyển cho vị trí Junior Developer. Kiến thức chuyên môn là điều đầu tiên bạn cần có. Đừng phô bày thành thích qua điểm số! Nhà tuyển dụng chỉ xem xét bạn giải quyết những vấn đề đơn giản hay không. Tiếp theo là phải biết viết code và tối thiểu, code chạy thành công. Kỹ năng quản lý và xử lý – fix bug nhỏ cũng là một kỹ năng cần thiết.

Tất nhiên, nhà tuyển dụng sẽ có những đánh giá chính xác hơn về kiến thức chuyên môn, kỹ năng mềm lẫn tiềm năng phát triển của bạn thông qua buổi phỏng vấn. Nếu may mắn được chọn, hãy chắc chắn rằng bạn có trách nhiệm với công việc.

  Senior là gì? Phân biệt Senior và Junior thật chi tiết

Xây dựng hình ảnh thương hiệu tốt thông qua CV

Trước khi có cơ hội trải nghiệm phỏng vấn, liệu bạn đã biết cách tạo thu hút thông qua CV chưa? 

CV là tấm vé giúp bạn đến gần hơn với nhà tuyển dụng. Do vậy, hãy dành thời gian để đầu tư cho nó. Một chiếc CV chỉn chu, đảm bảo đúng nội dung lẫn hình thức visual sẽ tạo ra thiện cảm đặc biệ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.

Tạo CV chuẩn dành cho IT ngay tại TopDevJunior là gì

Qua CV, nhà tuyển dụng cũng đánh giá được một phần ứng viên:

1. Kỹ năng trình bàyviết CV của bạn có tốt hay không? Bạn đã thật sự quan tâm đến việc tạo dấu ấn cá nhân? Từ cơ sở này, họ sẽ đánh giá sơ bộ về khả năng làm việc, tính trách nhiệm của bạn với công việc.

2. Mục tiêu nghề nghiệp, kỹ năng – kinh nghiệm, cá tính riêng. Bạn đã thể hiện mình vừa đủ hay quá mức? Khó có thể nhìn nhận khả năng thật sự của một ứng viên thông qua CV. Nhưng cách bạn trình bày, sắp xếp nội dung và tổ chức bố cục sẽ thể hiện tất cả. 

Tăng hiệu quả ứng tuyển bằng cách tạo CV Online hiệu quả trên TopDev

Lời kết

Hãy tìm hiểu và trang bị cách thức viết CV đúng chuẩn. CV cần thể hiện chân thật những gì bạn có. Có rất nhiều tip về việc viết CV, điều quan trọng là bạn nên thông mình trong việc lựa chọn thông tin phù hợp. Điều này sẽ phản ánh các kỹ năng chọn lọc, phân tích và trình bày vấn đề của bạn.

Hãy nhớ, mọi thứ bạn thực hiện đều có những ý nghĩa riêng tác động đến kết quả ứng tuyển.

Junior là vị trí có phạm vi tuyển dụng rộng lớn. Nếu là một sinh viên ra trường, bạn không sợ không tìm kiếm được việc. Nếu là những người có trải nghiệm lâu năm và muốn nhảy việc, ít ra bạn vẫn tự tin vì các lợi thế sẵn có. Điều quan trọng là bạn có nhận ra được những gì mình còn thiếu sót hay không? Từ đó, thiết lập kế hoạch rèn luyện mình.

TopDev hy vọng bài viết đã có những phân tích cụ thể, giúp bạn đọc hiểu được khái niệm Junior là gì và nắm bắt được đâu là những yếu tố nổi bật giúp một Junior đủ sức cạnh tranh trên một sân chơi nghề nghiệp. Dù bạn ứng tuyển trong lĩnh vực nào, hãy chuẩn bị thật kỹ lưỡng các kỹ năng tương ứng. Chúc các bạn thành công!

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

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

Cân bằng công việc chính với dự án ngoài liệu có khó không?

Làm sao để cân bằng giữa công việc chính với các dự án ngoài?

Tác giả: Catalin Pit

Khi đang có một công việc toàn thời gian bạn khó có thể dành quá nhiều thời gian cho các dự án ngoài. Mình cố gắng duy trì các tài khoản mạng xã hội luôn active, dành thời gian  viết blog và thỉnh thoảng đăng tải các video lên YouTube nữa. Vậy nên đã có nhiều người hỏi rằng làm thế nào mình cân bằng được mọi thứ như thế?

  10 nguyên tắc lập trình nền tảng mà lập trình viên nào cũng cần biết

  20 trường hợp sử dụng lệnh Docker cho developer

Trước và sau giờ làm việc hành chính

Để bắt kịp mọi thứ, mình tranh thủ dậy sớm, chẳng hạn nếu bắt đầu làm việc lúc 9 giờ sáng, mình sẽ thức dậy lúc 6 giờ 45. Khoảng thời gian 2 tiếng dư ra trước giờ đi làm mình có thể làm thêm các việc khác. Đương nhiên là lịch trình này không cố định mà phụ thuộc vào nhiều yếu tố khác. Nhưng mình luôn cố gắng làm việc ít nhất 1 đến 2 tiếng trước khi đi làm, vì buổi sáng là lúc mình tràn đầy năng lượng nhất.

Làm sao để cân bằng giữa công việc chính với các dự án ngoài?

Vậy mình làm gì trong khoảng thời gian đó? Mình bắt đầu bằng việc kiểm tra thông báo trên các tài khoản mạng xã hội và lên lịch sẵn cho các nội dung trong ngày. Sau đó, dành toàn bộ thời gian còn lại để học thi chứng chỉ AWS – Amazon Web Services. Mất khoảng 1 tiếng rưỡi để mình tìm hiểu về các service mới cũng như thực hành một số bài tập của AWS. Sau khoảng thời gian này mình sẽ dành 8 tiếng cho công việc chính ở công ty.

Xem thêm Chuỗi chuyên đề độc quyền về Serverless từ Amazon Web Services

Khi có nhiều năng lượng hơn bình thường hoặc có thời gian rảnh rỗi, mình sẽ làm thêm các dự án phụ – side project bên ngoài sau giờ làm việc, nhưng thường giới hạn thời gian tối đa để làm là 1 tiếng. Sau khi đã làm việc 8 tiếng, mình cũng không cố quá để học thêm kiến thức gì mới, vì lúc này đã khá đuối sức và năng lực tập trung không còn nhiều nữa. Khi dành thời gian cho các dự án phụ sau giờ làm, chủ yếu là mình xây dựng nội dung cho cả mạng xã hội, blog và video YouTube vì nó giúp mình cảm thấy thư giãn hơn.

Lên lịch cho nội dung

Khi làm việc ở công ty bạn không thể lên nội dung hay online thường xuyên trên mạng xã hội, vậy nên mình phải lên lịch cho nội dung trước trong ngày. Với các bài đăng trên mạng xã hội thì mình hay tranh thủ những lúc nghỉ ngơi để post bài.

Riêng với blog và video YouTube mình phải dành nhiều thời gian hơn để nghiên cứu và sáng tạo nội dung sao cho hấp dẫn nhất, nên riêng nội dung cho 2 phần này mình phải làm trước hoặc sau khi đi làm ở công ty. Thông thường thì sẽ làm vào buổi sáng hoặc trước một ngày phát hành.

  Cách thức giúp AI hoạt động hiệu quả cho tổ chức của bạn

Tóm lại để có thể cân bằng 2, 3 công việc cùng lúc mà không bị quá tải mình cần lên kế hoạch làm việc rõ ràng để tránh ảnh hưởng đến việc chính. Với mình thì có thể tóm gọn lại như sau:

  • Thức dậy 2 tiếng trước khi làm việc và dành thời gian đó để lên lịch nội dung và học những thứ mới.
  • Hiếm khi làm thêm sau giờ làm việc hoặc khi đã làm thì thường sẽ là để tạo nội dung trên nhiều nền tảng khác nhau.
  • Lên lịch cho các nội dung của mình để tránh ảnh hưởng đến việc chính.
  • Sử dụng thời gian rảnh rỗi tại nơi làm việc để đăng nội dung trên các tài khoản mạng xã hội.

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

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

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

Constructor trong Java là gì?

Constructor trong Java là gì?

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

Trong bài viết này, chúng ta sẽ tìm hiểu về constructor của một đối tượng, làm thế nào để tạo ra chúng, sự khác nhau giữa constructor mặc định và constructor do chúng ta định nghĩa và cuối cùng overloaded constructor là gì các bạn nhé!

  10 Java Web Framework tốt nhất
  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java

Định nghĩa constructor

Trong Java, constructor là một phương thức đặc biệt, nó được dùng để khởi tạo và trả về đối tượng của lớp mà nó được định nghĩa. Constructor sẽ có tên trùng với tên của lớp mà nó được định nghĩa và chúng không được định nghĩa một kiểu giá trị trả về.

Ví dụ:

Trong ví dụ trên, chúng ta đã định nghĩa một constructor cho đối tượng Student, như các bạn thấy nó không có kiểu giá trị trả về và tên của nó trùng tên với lớp mà nó được định nghĩa.

Khi một đối tượng được khởi tạo bằng cách gọi constructor của nó với toán tử new thì nó sẽ gọi constructor của lớp cha và tất cả các instance variable sẽ được khởi tạo với giá trị mặc định của nó. Trở lại ví dụ trên thì khi khởi tạo đối tượng Student bằng cách gọi:

thì giá trị của biến age trong đối tượng Student sẽ có giá trị mặc định của kiểu int là 0.

Constructor mặc định

Nếu trong một đối tượng, chúng ta không định nghĩa một constructor nào cả thì mặc định Java sẽ thêm một constructor mặc định vào đối tượng của chúng ta.

Ví dụ, mình định nghĩa đối tượng Student như sau:

Lúc này, mình có thể khởi tạo đối tượng Student bằng cách:

Rõ ràng các bạn thấy, mặc dù mình không định nghĩa bất kỳ constructor nào trong đối tượng Student nhưng mình vẫn có thể khởi tạo đối tượng này.

Constructor mặc định sẽ không chứa bất kỳ tham số nào và khi được gọi để khởi tạo đối tượng, nó cũng gọi constructor của lớp cha và khởi tạo giá trị mặc định cho các instance variable.

Trong trường hợp chúng ta đã định nghĩa một constructor cho đối tượng:

thì Java sẽ không tự động thêm constructor mặc định nữa và khi đó nếu chúng ta cố gắng khởi tạo đối tượng bằng constructor mặc định thì sẽ bị lỗi compile ngay:

Constructor trong Java là gì?

Định nghĩa một constructor

Chúng ta có thể định nghĩa constructor cho một đối tượng bất kỳ, khi đó tất cả các thuộc tính của đối tượng bao gồm các phương thức, các instance variable có thể được gọi tùy theo định nghĩa của chúng ta.

Ví dụ:

Chúng ta có thể sử dụng bốn access modifier để định nghĩa cho một constructor, và do vậy chúng ta có thể giới hạn phạm vi truy cập của đối tượng từ những đối tượng khác.

Điều gì sẽ xảy ra nếu chúng ta định nghĩa một constructor với một kiểu giá trị trả về? Khi đó, Java sẽ coi nó như là một phương thức bình thường chứ không phải là một constructor.

Ví dụ:

Đối tượng Student lúc này chỉ có một constructor mặc định do Java thêm vào mà thôi. Nếu chúng ta khởi tạo đối tượng Student với một tham số name thì sẽ bị lỗi ngay.

Constructor trong Java là gì?

Overloaded constructor

Overloaded constructor là gì? Đó là khi chúng ta định nghĩa nhiều constructor cho một đối tượng và mỗi constructor sẽ có các tham số khác nhau cả về số lượng tham số lẫn kiểu dữ liệu của tham số.

Ví dụ:

Nguyên tắc để định nghĩa overloaded constructor là:

  • Các constructors, như mình đã nói, phải được định nghĩa sử dụng các tham số khác nhau cả về số lượng tham số lẫn kiểu dữ liệu của tham số.
  • Các constructor không được định nghĩa chỉ khác nhau ở access modifier.

Trong trường hợp đối tượng có nhiều constructor và chúng ta muốn gọi constructor này từ constructor khác thì bắt buộc chúng ta phải sử dụng từ khóa this như sau:

Câu lệnh this để gọi constructor khác này bắt buộc phải nằm ở dòng đầu tiên của constructor, nếu nó nằm sau một câu lệnh bất kỳ thì code chúng ta sẽ bị lỗi compile ngay:

Constructor trong Java là gì?

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 Java hấp dẫn tại TopDev

Database là gì? Các kiểu Database phổ biến và ứng dụng

Database là gì? Các kiểu Database phổ biến và ứng dụng

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

Ngày nay, công nghệ thông tin được xem là lĩnh vực đầu thể hiện mức độ phát triển của một quốc gia. Hiện nay, các ứng dụng liên quan thuộc phạm trù công nghệ IT đang rất được quan tâm. Database cũng là một trong những cụm từ phổ biến. Vậy Database là gì? Các mô hình Database phổ biến và ứng dụng cụ thể của mô hình này là gì? Hãy cùng khám phá các câu hỏi trên ngay sau đây.

Việc làm database hấp dẫn không cần kinh nghiệm cho bạn

Database là gì?

Database là từ được sử dụng phổ biến trong các lĩnh vực thuộc công nghệ thông tin, dữ liệu, lập trình và phần mềm… .Database là cơ sở dữ liệu, là một bộ sưu tập dữ liệu được tổ chức bày bản và thường được truy cập từ hệ thống máy tính hoặc tồn tại dưới dạng tập tin trong hệ quản trị cơ sở dữ liệu. Database còn có thể được lưu trữ trên thiết bị có chức năng ghi nhớ như: thẻ nhớ, đĩa cứng, CD…

Database là gì? Các kiểu Database phổ biến và ứng dụng

Database giữ vai trò chủ chốt trong các ứng dụng công nghệ

Vai trò của Database

Database có vai trò vô cùng quan trọng khi làm việc với hệ thống dữ liệu. Chúng giúp người dùng thành công trong việc kết nối các dữ liệu. Người dùng có thể truy cập hệ cơ sở dữ liệu nhanh chóng và dễ dàng hơn. Database chính là cơ sở nguồn để người dùng có thể truy xuất ra những thông tin cần thiết.

 Đặc điểm chính của Database chính là truy xuất ra những thông tin, dữ liệu bằng nhiều phương thức khác nhau. Các nội dung truy xuất được đảm bảo toàn vẹn dữ liệu ở mức độ cao. Đồng thời, nguồn thông tin khi xuất ra hoàn toàn không bị trùng lặp, nếu có thì xác suất cũng rất thấp. Một cơ sở dữ liệu Database cho phép nhiều người dùng đồng thời truy cập trong cùng một thời gian.

Các mô hình Database phổ biến hiện nay

  • Cơ sở dữ liệu Database dạng File: Database dạng File là dạng thường gặp nhất và cũng là mô hình phổ biến nhất hiện nay. Có thể dễ dàng thấy những tập tin, những thông tin được lưu trữ, chia sẻ và truy cập dưới dạng File. Cơ sở dữ liệu dạng File thường gặp nhất chính là *.mdb Foxpro. Bên cạnh đó, cơ sở dữ liệu này còn bao gồm những định dạng khác như text, dạng file ascii, dạng file *.dbf…
  • Cơ sở dữ liệu Database quan hệ: Đây cũng là một trong những mô hình dữ liệu được sử dụng rộng rãi nhất hiện nay. Ở mô hình này, các thực thể khác nhau, tức các nguồn dữ liệu khác nhau sẽ cùng được quy hợp, lưu trữ cùng một bảng dữ liệu và các dữ liệu này phải có quan hệ với nhau. Một vài cơ sở dữ liệu nổi tiếng có hỗ trợ Database quan hệ có thể kể đến như: Oracle, MS SQL Server, MySQL…
  • Cơ sở dữ liệu hướng đối tượng: Hệ cơ sở dữ liệu này cũng là một bảng dữ liệu thuần. Tuy nhiên, Database bổ sung thêm các trường hợp hướng đối tượng khác như: hành vi đối tượng nhằm thể hiện hành vi của đối tượng. Các đối tượng này cũng được phân cấp rất rõ ràng, mỗi cấp được gọi là một lớp dữ liệu. Hiểu một cách đơn giản hơn, chúng là tập hợp các nhóm đối tượng trong cùng một bảng và được thể hiện bằng dòng dữ liệu. Những hệ quản trị cơ sở dữ liệu hỗ trợ Database này bao gồm: MS SQL Server, Postgres, Oracle
  • Database bán cấu trúc: Cơ sở dữ liệu Database bán cấu trúc có thể lưu trữ nhiều dạng dữ liệu khác nhau. Và các thông tin, dữ liệu này thường được lưu trữ dưới định dạng XML. Ở mô hình này, các thông tin mô tả dữ liệu và đối tượng đều được trình bày trong các thẻ tag. Nhờ vào ưu điểm nổi bật này, hệ cơ sở dữ liệu vừa được mở rộng, vừa tiện lợi giúp người dùng có thể dễ dàng truy xuất những thông tin cần thiết. Theo các chuyên gia nghiên cứu, Database bán cấu trúc có thể sẽ là hướng đi mới đầy tiềm năng trong các lĩnh vực ứng dụng công nghệ dữ liệu.
  Database conventions
  26 công cụ và kỹ thuật trong Big Data có thể bạn chưa biết

Ứng dụng của Database

Hệ thống cơ sở dữ liệu đóng vai trò vô cùng quan trong trong thời đại thông tin – kỹ thuật như hiện nay. Chức năng chính của Database có thể kể đến là: lưu trữ, truy xuất và cập nhật dữ liệu cùng nhiều ứng dụng khác.

Database giúp quản lý các dịch vụ bảo mật và phục hồi hệ thống quản trị dữ liệu, giúp thực thi các ràng buộc bên trong hệ cơ sở này. Đồng thời, quản lý và kiểm soát tất cả các máy khách kết nối, truy cập vào hệ thống dữ liệu ở hệ thống nguồn. Hỗ trợ xử lý tất cả các truy cập dữ liệu và các chức năng điều khiển khác.

Ngoài ra, Database còn cung cấp tính năng kiểm soát đồng thời, giúp bảo mật chặt chẽ hơn. Tạo môi trường đa người dùng với điều kiện kết nối an toàn. Nhiều người có thể truy cập đồng thời và truy xuất được những dữ liệu cần thiết

Trên đây là những kiến thức bổ sung về Database cũng như các mô hình hệ thống cơ sở dữ liệu. Đây hứa hẹn là những thông tin vô cùng cần thiết cho những người học tập và ứng dụng công nghệ thông tin. Trong tương lai, hứa hẹn lĩnh vực này sẽ tạo nên một xu hướng phát triển bùng 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 IT lương cao hấp dẫn tại TopDev

Viết code dễ đổi, dễ test như thế nào?

Viết code dễ đổi, dễ test như thế nào?

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

Các lập trình viên chuyển sang code Python từ các ngôn ngữ lập trình khác như Java, C, Golang… thường bắt đầu code bằng việc bật một cái IDE to đùng (PyCharm) lên, rồi viết chục dòng code, sau đó bấm nút “tam giác” để chạy từ trên xuống dưới. Đó là cách làm phổ biến, tiêu chuẩn khi viết code C, Java, Golang… nhưng là một cách làm rất không … Python.

  "Code dễ đọc" là như thế nào?
  "Mẹo bỏ túi" cho dân coder mới vào nghề

Khi học Python, việc đầu tiên ta làm là bật python từ terminal, rồi gõ trực tiếp các dòng code vào đó, enter để thấy kết quả:

$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str(21 * 2) + " is the answer of life."
'42 is the answer of life.'

Còn khi đi làm, viết code Python? Cũng vậy!

Khả năng gõ code trực tiếp, enter thấy ngay kết quả như trên, là một tính năng cực kỳ hấp dẫn/quan trọng của Python cũng như các ngôn ngữ lập trình có REPL như Ruby, Clojure, JavaScript, LISP, Ocaml, Elixir, F#… nó cho phép người dùng khám phá, vui chơi thoải mái với dữ liệu một cách tương tác, thấy kết quả nhanh nhất, thay vì phải ngồi tưởng tượng, đoán, chờ compile, và dựa vào IDE trợ giúp như các ngôn ngữ không có REPL.

Viết code dễ đổi, dễ test như thế nào?

Đây là chế độ “interactive mode” của Python interpreter, khái niệm này có cái tên khác chung hơn là: REPL.

(Chú ý: Golang có các project như gore hay yaegi nhưng đều rất hạn chế so với REPL của các ngôn ngữ kể trên).

REPL

REPL – Read Eval Print Loop, là môi trường nhận đầu vào từ người dùng (Read), chạy input đó (Eval), in kết quả ra màn hình (Print), và cứ tiếp tục vậy (Loop).

Khái niệm này bắt nguồn từ ngôn ngữ lập trình cổ thứ 2 thế giới: LISP.

Việc viết code khi dùng các ngôn ngữ có REPL thường theo các bước:

  • bật REPL lên
  • gõ code thử cho tới khi thu được kết quả mong muốn
  • copy code đó vào editor/IDE

Ví dụ

Đoạn code Python 3 sau sẽ truy cập API của GitHub, lấy các repo của Pymivn về, lọc ra các repo có > 0 star, sắp xếp giảm dần theo số star, rồi in ra output ở dạng dễ đọc.

# githubstars.py
from urllib.request import urlopen
import json


def main():
    with urlopen("https://api.github.com/users/pymivn/repos") as f:
        repos = json.load(f)

    has_stars = []
    for repo in repos:
        if repo["stargazers_count"] > 0:
            has_stars.append((
                repo["stargazers_count"], repo["html_url"]
                ))

    has_stars.sort(reverse=True)
    for stars, url in has_stars:
        output = "{} - {}".format(stars, url)
        print(output)


if __name__ == "__main__":
    main()

Nếu viết theo kiểu này, rồi cho vào IDE, bấm nút tam giác để chạy, những nhược điểm sau sẽ xuất hiện:

  • Mỗi lần chạy, code sẽ truy cập vào API GitHub 1 lần, việc này ngoài chậm, phụ thuộc vào mạng internet mỗi lần chạy, còn thêm nhược điểm nữa là sẽ dùng tốn “quota” hàng ngày của bạn (VD GitHub chỉ cho phép gọi API n lần 1 ngày).
  • Trừ khi bạn code 1 lần chuẩn luôn, còn không thì mất khoảng 5 7 lần mới ra đoạn code trên.
  • Không test từng phần (bước) của đoạn code được.

Thay vì vậy, viết lại một phần code như sau

from urllib.request import urlopen
import json

def getrepos():
    with urlopen("https://api.github.com/users/pymivn/repos") as f:
        repos = json.load(f)
    return repos

def main():
    pass

Lưu vào file github.py, rồi vào terminal, bật python3 lên, gõ:

>>> import github
>>> repos = github.getrepos()
>>> type(repos), len(repos)
(<class 'list'>, 23)
>>> one = repos[0]
>>> one.keys()
dict_keys(['id', 'node_id', 'name', 'full_name', 'private', 'owner', 'html_url', 'description', 'fork', 'url', 'forks_url', 'keys_url', 'collaborators_url', 'teams_url', 'hooks_url', 'issue_events_url', 'events_url', 'assignees_url', 'branches_url', 'tags_url', 'blobs_url', 'git_tags_url', 'git_refs_url', 'trees_url', 'statuses_url', 'languages_url', 'stargazers_url', 'contributors_url', 'subscribers_url', 'subscription_url', 'commits_url', 'git_commits_url', 'comments_url', 'issue_comment_url', 'contents_url', 'compare_url', 'merges_url', 'archive_url', 'downloads_url', 'issues_url', 'pulls_url', 'milestones_url', 'notifications_url', 'labels_url', 'releases_url', 'deployments_url', 'created_at', 'updated_at', 'pushed_at', 'git_url', 'ssh_url', 'clone_url', 'svn_url', 'homepage', 'size', 'stargazers_count', 'watchers_count', 'language', 'has_issues', 'has_projects', 'has_downloads', 'has_wiki', 'has_pages', 'forks_count', 'mirror_url', 'archived', 'disabled', 'open_issues_count', 'license', 'forks', 'open_issues', 'watchers', 'default_branch'])
>>> one['stargazers_count']
0
>>> has_stars = [p for p in repos if p['stargazers_count'] > 0]
>>> len(has_stars)
8
>>> stars_urls = [(p['stargazers_count'], p['html_url']) for p in has_stars]
>>> stars_urls
[(7, 'https://github.com/pymivn/awesome'), (2, 'https://github.com/pymivn/cpuisfast'), (1, 'https://github.com/pymivn/hoidap-python'), (1, 'https://github.com/pymivn/lekhome'), (4, 'https://github.com/pymivn/math-stats-ml'), (3, 'https://github.com/pymivn/people'), (1, 'https://github.com/pymivn/pyjobs_crawlers'), (4, 'https://github.com/pymivn/Python_Hanoi_Meetup')]
>>> stars_urls.sort(reverse=True)
>>> fmt = "{} - {}"
>>> for i in stars_urls:
...     print(fmt.format(*i))
...
7 - https://github.com/pymivn/awesome
4 - https://github.com/pymivn/math-stats-ml
4 - https://github.com/pymivn/Python_Hanoi_Meetup
3 - https://github.com/pymivn/people
2 - https://github.com/pymivn/cpuisfast
1 - https://github.com/pymivn/pyjobs_crawlers
1 - https://github.com/pymivn/lekhome
1 - https://github.com/pymivn/hoidap-python

Với cách làm này, chỉ cần gọi GitHub API duy nhất 1 lần, còn sau đó thử thoải mái cho đến khi thu được kết quả mong muốn thì copy vào file cuối cùng:

import json
from urllib.request import urlopen


def getrepos():
    with urlopen("https://api.github.com/users/pymivn/repos") as f:
        repos = json.load(f)
    return repos


def has_stars(repo):
    return repo["stargazers_count"] > 0


def filter_repos_have_stars(repos):
    return [p for p in repos if has_stars(p)]


def get_star_url(p):
    return (p["stargazers_count"], p["html_url"])


def main():
    repos = getrepos()
    repos_have_stars = filter_repos_have_stars(repos)
    stars_urls = [get_star_url(p) for p in repos_have_stars]
    stars_urls.sort(reverse=True)
    fmt = "{} - {}"
    for i in stars_urls:
        print(fmt.format(*i))


if __name__ == "__main__":
    main()

Sau này nếu code có bug, lại bật REPL lên, gọi các function để debug trực tiếp dễ dàng, từng bước một.

$ ipython
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.9.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import github
In [2]: repos = github.getrepos()

In [3]: have_stars = github.filter_repos_have_stars(repos)

In [4]: len(have_stars)
Out[4]: 8

In [5]: [github.get_star_url(p) for p in have_stars]
Out[5]:
[(7, 'https://github.com/pymivn/awesome'),
 (2, 'https://github.com/pymivn/cpuisfast'),
 (1, 'https://github.com/pymivn/hoidap-python'),
 (1, 'https://github.com/pymivn/lekhome'),
 (4, 'https://github.com/pymivn/math-stats-ml'),
 (3, 'https://github.com/pymivn/people'),
 (1, 'https://github.com/pymivn/pyjobs_crawlers'),
 (4, 'https://github.com/pymivn/Python_Hanoi_Meetup')]

In [8]: sorted([github.get_star_url(p) for p in have_stars], reverse=True)

Out[8]:
[(7, 'https://github.com/pymivn/awesome'),
 (4, 'https://github.com/pymivn/math-stats-ml'),
 (4, 'https://github.com/pymivn/Python_Hanoi_Meetup'),
 (3, 'https://github.com/pymivn/people'),
 (2, 'https://github.com/pymivn/cpuisfast'),
 (1, 'https://github.com/pymivn/pyjobs_crawlers'),
 (1, 'https://github.com/pymivn/lekhome'),
 (1, 'https://github.com/pymivn/hoidap-python')]

Dev với IPython

IPython (pip install ipython) cung cấp thêm các tính năng giúp cách code này hiệu quả hơn.

IPython có màu mè, auto-indent tự thụt sau for/if giúp gõ nhanh hơn.

Magic command %hist sẽ hiện full history những gì user đã gõ, giúp copy code để paste ra IDE/Editor dễ hơn, không bao gồm output.

Magic command %edit sẽ mở hẳn editor ra để sửa code, sau khi đóng lại, code sẽ được chạy, các biến sẽ tồn tại trong môi trường đang code.

Ví dụ này gõ %edit lần đầu định nghĩa list ns, rồi gõ %edit lần 2 để print ra list ns định nghĩa trước đó:

$ ipython
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.9.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: %edit
IPython will make a temporary file named: /tmp/ipython_edit_2v90rimj/ipython_edit_wf_rn_nc.py
Editing... done. Executing edited code...
Out[1]: '\nns = [1,2,3,4]\n'

In [2]: ns
Out[2]: [1, 2, 3, 4]

In [3]: %edit
IPython will make a temporary file named: /tmp/ipython_edit_qb43pml6/ipython_edit_tph7_5x6.py
Editing... done. Executing edited code...
[1, 2, 3, 4]
Out[3]: 'print(ns)\n'

Đổi editor

ra shell, gõ echo $EDITOR xem đang đặt là gì, thay bằng câu lệnh mở editor mình muốn, ví dụ

$ export EDITOR=nano
$ ipython

Chạy file rồi bật REPL

Python hay IPython đều hỗ trợ option -i, sau khi chạy với 1 file code sẽ tự động vào chế độ interactive mode

Jupyter

Code trên Jupyter (pip install jupyter) cũng cho khả năng linh hoạt tương tự. Code xong File > Save As Python file.

Unittest

Trong các ngôn ngữ không có REPL, cách thử 1 đoạn code nhanh nhất là viết 1 function cần thử, rồi viết unittest, rồi chạy test thay vì chạy cả 1 chương trình ngàn dòng. Với Python, ta chỉ cần bật REPL lên, import module vào và khám phá.

Code viết theo cách mới trên vừa dễ gõ trực tiếp trong REPL, vừa dễ viết unittest, ví dụ viết nhanh unittest chạy bằng pytest (pip install pytest) như sau:

# test_github.py
import github


def test():
    bad = {"stargazers_count": 0, "html_url": "bad_repo"}
    good = {
        "stargazers_count": 69,
        "html_url": "https://github.com/pymivn/awesome",
        "blah": "blo",
    }
    sample_repos = [bad, good]
    assert github.filter_repos_have_stars(sample_repos) == [good]
    assert github.get_star_url(good) == (
        good["stargazers_count"],
        good["html_url"],
    )
    assert github.has_stars(bad) is False
    assert github.has_stars(good) is True

Viết code bằng REPL hay bằng unittest TDD đều mang tới một kết quả chung: code dễ sửa, dễ test.

Tất nhiên REPL không thay thế hoàn toàn cho unittest, nhưng nó mang lại môi trường thử nghiệm nhanh chóng tương đương như hơn nhiều unittest ở các ngôn ngữ khác.

Hành động của chúng ta

Cài ngay IPython, Jupyter rồi bật lên mỗi khi muốn code Python.

Kết luận

Đừng đọc tiếng Anh theo kiểu Tiếng Việt, đừng code Python theo kiểu Java. REPL là một phát minh có sức mạnh khủng khiếp mà các Pythonista nên vận dụng, sử dụng, và lạm dụng hết mình.

Bài viết gốc được đăng tải tại pp.pymi.vn
Có thể bạn quan tâm:

Randomart và thuật toán The Drunken Bishop

Randomart và thuật toán The Drunken Bishop

Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm

Khi tạo OpenSSH key ta hay bắt gặp một cái hình tên là randomart.

  Thuật toán là gì? 11 thuật toán hàng đầu dành cho lập trình viên
  20 thuật ngữ chuyên sâu trong Quản lý Nhân sự nội bộ
The key's randomart image is:
+---[RSA 2048]----+
|   .  o.+.       |
|  o .. +..       |
| o o. ... .      |
|. =  . =..       |
|.o.o  o.S .      |
| +. o  +.o o     |
|. oo..+o= o .    |
| +...o=*o= .     |
|o......EB        |
+----[SHA256]-----+

Có bao giờ bạn thắc mắc hình này dùng để làm gì không?

1. randomart là gì?

Khi tạo kết nối SSH tới một host nào đó, OpenSSH sẽ yêu cầu host đó cung cấp RSS key fingerprint.

$ ssh host.xyz
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.

Fingerprint này được dùng để xác thực host. Điều bạn cần làm với fingerprint này là kiểm tra xem nó có trùng với key của host đích mà bạn đang kết nối tới hay không. Trùng thì không có gì để bàn rồi. Còn không trùng thì … rất có khả năng bạn đang bị tấn công MiTM.

Randomart và thuật toán The Drunken Bishop

Nhưng những fingerprint này thường là những chuỗi vô nghĩa. Cách để so trùng những chuỗi này là … so trùng từng chữ bằng mắt. Chúa tạo ra con người hoàn hảo tuyệt đối. Trừ cặp mắt thôi. Điểm mù, saccades, đủ thứ cả. Chưa kể còn sai sót nữa. Bắt tui ngồi so những chuỗi dạng nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 cả ngày, thà bỏ nghề đi làm cách mạng còn hơn.

Vì vậy, randomart được sinh ra nhắm giải quyết bài toán này. Nó trực quan hóa những chuỗi vô nghĩa thành hình ảnh. Từ những hình ảnh này, người dùng có thể nhanh chóng phán đoán được độ đúng đắn của host key.

Đồng thời những hình ảnh này có thể sẽ rất khác nhau cho dù fingerprint của chúng chỉ lệch nhau một chút. Từ đó giúp giảm thiểu sai sót của user người truồng mắt trần.

Randomart của fingerprint ở trên có hình dạng như dưới. Để thấy hình randomart, bạn cần bật VisualHostKey=yes trong SSH config.

$ ssh host.xyz
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
+---[RSA 2048]----+
| =+o...+=o..     |
|o++... *o .      |
|*.o.  *o.        |
|oo.  ..o.= .     |
|.+o. .. S =      |
|*=+ .  o = .     |
|OE .  . o        |
| o     .         |
|                 |
+----[SHA256]-----+
Are you sure you want to continue connecting (yes/no)?

Nếu bạn chưa nhận ra, đây là host key của Github . Nếu một ngày pull code từ Github về mà không thấy hình ảnh quen thuộc này, tui sẽ lập tức đánh hơi được sự bất thường. Cách mạng đã tràn về như một cơn sóng rồi sao?

Randomart được tạo ra từ một thuật toán sặc mùi bia rượu: The Drunken Bitshop (tạm dịch: Say quắc ông giám mục).

2. Thuật toán

Thuật toán được tóm gọn trong một đoạn văn như sau:

Bishop Peter finds himself in the middle of an ambient atrium. There are walls on all four sides and apparently there is no exit. The floor is paved with square tiles, strictly alternating between black and white. His head heavily aching—probably from too much wine he had before—he starts wandering around randomly. Well, to be exact, he only makes diagonal steps—just like a bishop on a chess board. When he hits a wall, he moves to the side, which takes him from the black tiles to the white tiles (or vice versa). And after each move, he places a coin on the floor, to remember that he has been there before. After 64 steps, just when no coins are left, Peter suddenly wakes up. What a strange dream!

tạm dịch: Giám mục Peter đang ở giữa một cái sảnh với bốn mặt tường. Vang vọng là tiếng hát Khánh Phương với bài “Không lối thoát”. Sàn nhà lót bằng gạch trắng đen hình vuông. Đầu ổng rất nhức. Hẳn rồi, tối qua quắc quá mà. Ổng bắt đầu đi loạng choạng. Chính xác thì ông chỉ đi những bước xéo như con tượng trên bàn cờ vua. Khi đụng tường, ông đi một bước ngang hoặc dọc. Điều đó giúp ông chuyển từ ô đen sang ô trắng và ngược lại. Sau mỗi bước, ông đều đánh dấu lãnh thổ bằng cách đái một bãi đặt một đồng xu lên sàn, để ghi nhớ là ông đã đi qua đó rồi. Sau 64 bước, không còn đồng xu dính túi, Peter đột nhiên tỉnh dậy. Quả là một giấc mơ vế lù.

2.1. Bắt đầu

Thuật toán khá đơn giản, Peter cũng bắt đầu từ chính giữa phòng, kí tự hiệu là ‘S’.

1111111
01234567890123456
+-----------------+x (column)
0|                 |
1|                 |
2|                 |
3|                 |
4|        S        |
5|                 |
6|                 |
7|                 |
8|                 |
+-----------------+
y
(row)

2.2. Di chuyển

Giám mục Peter có thể di chuyển theo 4 hướng: , ứng với từng cặp bit của fingerprint.

bits hướng
00
01
10
11

Bắt đầu với một fingerprint dạng MD5 với các octet a1:b2:c3:d4:e5:f6:...:e1. Ta tiến hành dịch nó từ HEX sang binary như sau:

10100001:10110010:11000011:...:11100001

Đọc theo Little Endian, nó sẽ thành:

01 00 10 10 : 10 00 11 10 : ... : 01 00 10 11

Áp dụng với bảng ở trên, các bước đầu tiên của giám mục Peter lần lượt là:      . Dấu chấm tượng trưng cho những điểm mà ổng đã đi qua.

1111111
01234567890123456
+-----------------+x (column)
0|                 |
1|                 |
2|        .        |
3|       . .       |
4|    . . S        |
5|     .           |
6|                 |
7|                 |
8|                 |
+-----------------+
y
(row)

Đụng tường

Như đã mô tả, khi đụng tường Peter sẽ đi ngang hay dọc tùy theo hướng.

Giả sử ông ta đang ở vị trí 0-4 (x-y), và hướng tiếp theo của chúng ta là , giám mục sẽ đi .

1111111
  01234567890123456
+-----------------+x (column)
0|                 |
1|                 |
2|        .        |
3|.      . .       |
4|.   . . S        |
5| . . .           |
6|  .              |
7|                 |
8|                 |
+-----------------+
y
(row)

2.3. Đánh dấu

Để đánh dấu, ứng với số lần mà ô đó được đi qua, ta sẽ dùng các kí hiệu sau.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  . o + = * B O X @  %  &  #  /  ^  S  E

Nếu ô đó được đi qua 7 lần, ta sẽ đánh O, 11 lần sẽ đánh &, S là ô bắt đầu và E là ô kết thúc.

Và cứ như thế, một hình ảnh randomart đã được tạo ra.

3. Tham khảo

Các bạn có thể tham khảo về thuật toán tại paper The drunken bishop: An analysis of the OpenSSH fingerprint visualization algorithm.

4. Bài viết này sẽ giúp tui tăng lương như thế nào?

Như thường lệ bài viết không có giúp bạn tăng lương. Cơ mà có một số điều rút ra là:

  1. Luôn kiểm tra host key khi kết nối SSH, để lỡ có ăn hành thì cũng biết đường mà … đánh răng.
  2. Bật VisualHostKey=yes trong SSH config để kiểm tra bằng hình ảnh thay vì bằng chuỗi.

Bài viết gốc được đăng tải tại quan-cam.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

Cách thức giúp AI hoạt động hiệu quả cho tổ chức của bạn

AI

AI – Trí thông minh nhân tạo đã tạo ra sự thay đổi mạnh mẽ đối với không gian nhân sự. Sức mạnh tiềm lực của AI là rất lớn. Chúng được biểu hiện rõ qua quá việc hợp thức hóa công tác tuyển dụng. Đồng thời, chúng hiện đang được áp dụng vào chu trình vận hành của các tổ chức/doanh nghiệp, đặc biệt là các công ty về công nghệ. Vậy phải làm thể nào để chuẩn hóa quy trình phát triển? Nắm bắt về cơ chế hoạt động của AI là điểm mấu chốt của vấn đề.

Cùng TopDev điểm qua 4 cách trong bài viết sau đây để tìm ra các giải pháp. Bạn có thể áp dụng chúng để tiếp cận nhằm đo lường về hiệu suất; đảm bảo về khả năng hoạt động của AI trong tổ chức của mình.

1. Đầu tư vào nghiên cứu và đổi mới những vấn đề liên quan đến AI

Trí tuệ nhân tạo – AI đã có những bước phát triển nhảy vọt trong những năm gần đây. Tuy vậy nếu đặt nó trong bối cảnh cạnh tranh thực tế với nhiều sản phẩm sáng kiến khoa học, giá trị của nó vẫn chưa rõ ràng. Dù vậy, không thể phủ nhận những tiềm năng và lợi thế mà AI đang sở hữu. Đó cũng là lý do tại sao có nhiều sự đầu tư nghiên cứu và đổi mới có liên quan đến AI nhiều đến vậy. 

  AI và những điều bạn cần phải có trước khi đụng tới AI

AI

Thực tế cho thấy, AI khi được đầu tư với mức chi phí ổn định; định hướng áp dụng phù hợp với quy mô tổ chức, nó đã tạo ra một sự khác biệt đáng kể. Chẳng hạn, tổ chức sản xuất xe máy nổi tiếng Harley Davidson đã cải thiện dòng xe thế hệ đầu với 2.930% trong ba tháng sau khi hãng triển khai hệ thống tiếp thị dựa trên AI có tên Albert. 

2. Nhận ra tiềm năng và giáo dục về AI

Nhiều công ty đang bắt đầu nhận ra tiềm năng về việc xây dựng nền tảng và phát triển nhân sự dựa trên AI. Do vậy mà nhu cầu này ngày càng được quan tâm và chia sẻ. 

a

Khi mới bắt đầu, việc tập trung vào đào tạo kiến ​​thức kỹ thuật cấp cao về AI không hoàn toàn cần thiết. Các giám đốc điều hành về nhân sự nên nhận thức được các yếu tố cần thiết của AI. Cụ thể như: các chương trình học từ dữ liệu; cách các hệ thống AI có thể được tích hợp vào hoạt động hàng ngày; cách đầu tư chúng vào việc đổi mới cách thức tổ chức của doanh nghiệp. Điều này giúp tạo ra lợi thế cạnh tranh lành mạnh và lâu dài cho chủ doanh nghiệp. 

Ngoài ra, các nhà lãnh đạo nên liên tục xem xét một cách kỹ lưỡng lực lượng lao động của họ. Đó là cách giúp tìm ra các lĩnh vực phù hợp nhất. Đồng thời tạo ra cơ sở để áp dụng và triển khai thực hiện AI. Các khóa đào tạo và giáo dục về AI trực tuyến có thể là sự lựa chọn hoàn hảo. Trải nghiệm việc đào tạo (training) sẽ tạo ra nền tảng tốt. Đây là bước đầu giúp họ trang bị hành trang sẵn sàng cho diễn tiến bất ngờ từ sự phát triển của AI trong thời gian tới.

3. Tạo công việc mới để quản lý các lĩnh vực AI

Chính sự bùng nổ AI đã tạo ra những thay đổi lớn về cục diện phát triển. Tuy vậy, mặc dù cuộc cách mạng công nghệ có thể dẫn đến những hệ quả khó kiểm soát như tình trạng mất việc. Thế nhưng, ở một góc độ khác thì những tiến bộ này lại mang lại sự cân bằng lâu dài cho nền công nghiệp: tạo ra công việc mới và các lĩnh vực tương ứng để xử lý công việc.  

Xem thêm: HR & IT – “Cuộc chơi” hoàn hảo cho việc thu hút và giữ chân nhân tài

AI

Để duy trì và phát huy một cách thức hoạt động AI hiệu quả, các công ty cần có những nhận thức sâu sắc nhất về AI. Cụ thể, hãy quan tâm đến việc bắt đầu chuyển đổi công việc; tạo ra các cơ hội hướng tới một mô hình bổ sung phát triển công nghệ mới.  AI đang được vận dụng nhiều trong việc phân tích dữ liệu và tiếp thị dữ liệu số. Đó là một tín hiệu tốt.

Một điều quan trọng cần ghi nhớ: Tạo ra những công việc mới thông qua AI trong khắp cả một hệ thống chứ không đơn thuần tập trung vào các bộ phận liên quan đến công nghệ. Bộ phận nhân sự cần xác định đúng phạm vi lĩnh vực, từng nhiệm vụ; các công việc cần thực hiện. Như thế, việc ứng dụng AI vào quá trình vận hành sẽ đạt những hiệu quả cao hơn.

4. Phát triển “con người Nhân sự”

AI có ý nghĩa quan lớn trong việc định hướng phát triển các chiến lược nhân sự. Do vậy nhà lãnh đạo luôn phải cố gắng làm thế nào để tạo sự cân bằng. Khả năng tự động hóa của AI tạo ra lợi thế lớn trong việc xây dựng một hệ thống nhân sự vững mạnh.

Xem thêm: Phân tích con người – Chiến lược quan trọng trong ngành Nhân sự 

Song, một số lĩnh vực đòi hỏi khả năng phân tích sâu sắc hơn của con người. Vì thế, chúng ta thấy việc phát triển “con người nhân sự” là điều nên phải lưu tâm. Nếu AI có khả năng phân tích khoa học, logic không giới hạn thì con người có khả năng suy luận, năng lực phán đoán từ trí tuệ cảm xúc. Sự hòa hợp ấy sẽ tạo ra sự cân bằng, tính ổn định; đảm bảo được mức độ hiệu quả của các cách thức áp dụng thực tiễn.

AI vận hành hiệu quả các quy trình: thiết kế bảng lương, tuyển dụng, đánh giá hiệu quả của nhân viên, phân bổ lao động theo năng lực,… Nhưng một sự thật là, AI sẽ khó thay thế hoàn toàn bộ phận nhân sự vì sự thiếu sót về cảm tính.

Đây là yều tố cần có trong ngành nhân sự hoặc bất kỳ một lĩnh vực nào khác. Hiểu được vấn đề này, các nhà lãnh đạo nhân sự cần biết cách phát triển con người nhân sự. Không nên quá tập trung vào những điểm mạnh của AI mà quên đi con người vẫn là nhân tố trung tâm.

Lời kết

Lĩnh vực nhân sự gắn liền AI sẽ tiếp tục được áp dụng một cách chuyên sâu hơn. Việc lựa chọn AI – Trí tuệ nhân tạo là công cụ hỗ trợ quan trọng. Nó thúc đẩy hiệu suất và sự phát triển lâu dài của tổ chức. Đồng thời, nó phát huy hết những tiềm năng; tạo ra tính bền vững về công nghệ nhân sự. Các tổ chức/doanh nghiệp nên tiếp tục sáng tạo, khám phá và thích ứng để trở thành người đi đầu trong việc triển khai hiệu quả AI.

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

Xem thêm Top Việc làm Developer trên TopDev

Một thủ thuật nhỏ để tối ưu code nodejs

Một thủ thuật nhỏ để tối ưu code nodejs

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

Tôi code web asp.net c# đã lâu năm rồi, giờ có nhiều framework mới, công nghệ mới nên đôi khi cũng chưa có cơ hội để trải qua. Dù sao cũng là tầng lớp già rồi, khó có thời gian học được cái mới. Chính vì vậy, lựa chọn chơi với các bạn trẻ cũng là một cách học hỏi. Bạn trẻ thì có kiến thức mới nhưng lại thiếu kinh nghiệm. Mình già rồi có kinh nghiệm nhưng lại thiếu kiến thức mới. Già, trẻ chơi với nhau chắc chắn sẽ có bù đắp qua lại. Qua đó mà học hỏi đôi bên với nhau.

Tuyển dụng NodeJS lương cao hấp dẫn cho bạn

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

Hôm nay thằng cu em cho xem project code bằng nodejs. Có đọc qua vài file controller thì thấy một điều thế này. Đúng là hầu hết các bạn trẻ code static quá nhiều và hơn nữa là copy code đã thành tư tưởng cố hữu. Code cứ dài lê thê mà không đóng gói lại thành hàm, thành đối tượng để tái sử dụng lại. Điều mà tôi có nói tới trong bài viết Tại sao code của tôi thường ngắn gọn như vậy.

Đây là file controller history.js mà tôi đã đọc của thằng cu em.

const History = require("../services/history");
const { handleResponse, handleError } = require("../helpers/responseHandler");

const getHistoriesByBet = async (request, response, next) => {
  // console.log('request.body',request.body);
  return History.getHistoriesByBet(request.body)
    .then((result) => handleResponse({ result, response }))
    .catch((error) => next(handleError({ error, response })));
};

const getHistories = async (request, response, next) => {
  // console.log('request.body',request.body);
  return History.getHistories(request.body)
    .then((result) => handleResponse({ result, response }))
    .catch((error) => next(handleError({ error, response })));
};

const getBalance = async (request, response, next) => {
  // console.log('request.body',request.body);
  return History.getBalance(request.body)
    .then((result) => handleResponse({ result, response }))
    .catch((error) => next(handleError({ error, response })));
};

const createHistory = async (request, response, next) => {
  // console.log('request.body',request.body);
  return History.createHistory(request.body)
    .then((result) => handleResponse({ result, response }))
    .catch((error) => next(handleError({ error, response })));
};

const createWithdrawHistory = async (request, response, next) => {
  // console.log('request.body',request.body);
  return History.createWithdrawHistory(request.body)
    .then((result) => handleResponse({ result, response }))
    .catch((error) => next(handleError({ error, response })));
};

const getWithdraws = async (request, response, next) => {
  // console.log('request.body',request.body);
  return History.getWithdraws(request.body)
    .then((result) => handleResponse({ result, response }))
    .catch((error) => next(handleError({ error, response })));
};

module.exports = {
  getHistories,
  getBalance,
  createHistory,
  getHistoriesByBet,
  createWithdrawHistory,
  getWithdraws
};

Ở đây có thể hiểu là các hàm api ở controller sẽ gọi đến tầng lấy data để gửi xuống client. Nhưng mà có thể thấy. các hàm getHistoriesgetBalancecreateHistorygetHistoriesByBet,   createWithdrawHistorygetWithdraws cũng cùng một dạng mà copy đi copy lại.

Chính vì vậy mà tôi dù chưa code NodeJs nhưng cũng đã từng code javascript nên thêm một hàm getResponse như sau

class Controllers {
  //   constructor() {}

  constructor(service) {
    this.Service = service;
  }

  ////
  //// code code
  ////

  getResponse(method, request, response, next) {
    // console.log('request.body',request.body);
    const service = new this.Service();
    return service[method](request.body) // ddc ko ta?
      .then((result) => this.handleResponse({ result, response }))
      .catch((error) => next(this.handleError({ error, response })));
  }
}

Hàm getResponse trong đó có tham số method, còn Controller có thuộc tính this.Service. Và qua đó sẽ truy vấn this.Service thông qua key là method để lấy được hàm cần gọi. Và cuối cùng file History.js sẽ còn về được như sau

const History = require("../services/history");
const Controller = require("./Controllers");

class HistoryCtrl extends Controller
{
    constructor() { super(History) }

    getHistoriesByBet = async (request, response, next) => this.getResponse("getHistoriesByBet", request, response, next);
    getBalance = async (request, response, next) => this.getResponse("getBalance", request, response, next);
    createHistory = async (request, response, next) => this.getResponse("createHistory", request, response, next);
    getHistoriesByBet = async (request, response, next) => this.getResponse("getHistoriesByBet", request, response, next);
    createWithdrawHistory = async (request, response, next) => this.getResponse("createWithdrawHistory", request, response, next);
    getWithdraws = async (request, response, next) => this.getResponse("getWithdraws", request, response, next);
}

module.exports = HistoryCtrl;

Đơn giản vậy thui. Mà đã giảm đi phải tới 80% code ấy chứ. Chưa kể các file controller khác cũng tối ưu tương tự thì cũng một lượng code thừa tương đối được loại bỏ. Đây chỉ một trong rất nhỏ các thủ thuật để tối ưu code cho đơn giản và gọn gàng hơn. Còn nhiều thủ thuật khác mà gặp tùy từng tình huống thì tôi sẽ post để chia sẻ thêm.

Chúc các bạn code ngày càng tốt hơn

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

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

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

Trải nghiệm giáo dục Phần Lan cùng Hội thảo Khoa học Việc làm: Future Is Made In Finland

Bạn đang tìm kiếm một môi trường học tập chuyên nghiệp? Bạn mong muốn trải nghiệm tại một môi trường giáo dục quốc tế nhưng e ngại nhiều vấn đề? Đừng lo lắng vì Phần Lan là sự lựa chọn hoàn hảo dành cho bạn

Tại sao nên chọn Phần Lan?

Phần Lan là điểm đến trải nghiệm giáo dục lý tưởng của sinh viên quốc tế. Chính môi trường tiếp cận khoa học chuyên nghiệp với những đội ngũ là các chuyên gia đầu ngành, giáo dục nơi đây luôn lấy tiêu chuẩn về chất lượng làm sứ mệnh để định hướng phát triển.

Bạn có thể dễ dàng tìm thấy một hệ thống giáo dục đại học hàng đầu thế giới tại Phần Lan với hơn 400 chương trình cử nhân, các khóa học định hướng đảo tạo và phát triển tư duy,… Các chương trình, khóa học nơi đây luôn cập nhật những xu hướng giảng dạy mới nhất, tiếp thu và phát triển các kiến thức chuyên sâu nhất nhằm đáp ứng nhu cầu học tập, rèn luyện. Với những lý do đó, Phần Lan đã chứng tỏ rõ ràng vị thế của một quốc gia với nền giáo dục chất lượng, đảm bảo tính hội nhập với thế giới.

1. Phần Lan là một quốc gia hạnh phúc

Theo Báo cáo hạnh phúc toàn cầu mới nhất 2019 của Liên Hợp Quốc, do Gallup thực hiện, dựa trên 6 yếu tố ảnh hưởng đến hạnh phúc như tuổi thọ trung bình, phúc lợi xã hội, thu nhập, sự tự do, lòng rộng lượng và sự tin tưởng cao. Họ đánh giá đây là một quốc gia hạnh phúc nhất thế giới vì có tỷ lệ tham nhũng thấp, xã hội tiến bộ và hệ thống ngân hàng đáng tin cậy nhất trên thế giới.

2. Học phí hợp lý và học bổng hấp dẫn

Tùy vào các trường Đại học, ngành nghề mà các bạn du học sinh chọn sẽ có mức học phí khác nhau. Tuy nhiên, vẫn có những chính sách khuyến khích học tập bằng các suất học bổng có giá trị lên tới 100% học phí.

3. Hệ thống giáo dục đứng đầu thế giới

Đất nước Phần Lan là nước có hệ thống giáo dục Phổ thông thành công nhất thế giới dựa theo đánh giá của tổ chức của Organization Economic Cooperation and Development viết tắt là OECD vì các yêu tố như: giáo viên được đào tạo bài bản, cơ sở vật chất luôn đáp ứng và phục vụ tốt cho nhu cầu học tập, nghiên cứu của học sinh, sinh viên.

Bên cạnh đó, ngành giáo dục tại Phần Lan cũng được xem là “Trái tim của xã hội”, góp phần không nhỏ vào sự phát triển của đất nước. Đây là lý do rất nhiều sinh viên quốc tế ưu tiên lựa chọn Phần Lan làm nơi học tập.

4. Khoa học Ứng dụng: Trang bị thành công sau khi tốt nghiệp

Khi theo học tại các trường Đại học Khoa học Ứng dụng, thời lượng chương trình học của sinh viên sẽ bao gồm khoảng 50% lý thuyết và 50% là các dự án hoặc hoạt động học tập thực tiễn, cơ cấu chương trình học này giúp sinh viên làm quen và có kinh nghiệm với môi trường làm việc thực tế từ sớm.

5. Cơ hội làm thêm ngoài giờ kiếm thêm thu nhập

Ngoài những lý do trên, khi du học ở Phần Lan các bạn sinh viên có thể đăng ký làm thêm với thời gian 25 giờ/ tuần cộng với những ngày nghỉ lễ, Tết. Tận dụng khoảng thời gian này để giúp cho các bạn có thể kiếm thêm thu nhập, trang trải các chi phí học tập, sinh hoạt với mức thu nhập 8 – 15 euro mỗi giờ.

Sau khi tốt nghiệp, nếu chưa tìm được việc làm các bạn có thể ở lại đây 1 năm theo diện visa tìm kiếm công việc hoặc khởi nghiệp. Đây chính là cơ hội tuyệt vời khi bạn đang băn khoăn trước khi đưa ra quyết định “có nên du học Phần Lan hay không?”.

Với 5 lý do thuyết phục trên chắc chắn các bạn cũng hiểu được lý do vì sao đất nước Phần Lan thu hút nhiều bạn trẻ lựa chọn du học tại đây. Và đây cũng chính là câu trả lời dành cho các bạn trước khi đưa ra quyết định có nên du học tại đây hay không.

Hội thảo Khoa học Việc làm – Webinar Series: Future Is Made In Finland

Đáp ứng những mong muốn cũng như tạo ra cơ hội để các bạn có trải nghiệm thực tế về môi trường học tập, chương trình giảng dạy, nghiên cứu tại Phần Lan, hội thảo Khoa học Việc – Webinar Series: Future Is Made In Finland đã ra đời.

Khóa học nhằm nhấn mạnh tầm quan trọng của một số lĩnh vực nghiên cứu và công nghệ. Bên cạnh đó, một số cách tiếp cận nổi bật ở thời điểm hiện tại được đội ngũ chúng tôi khai thác nhằm phát triển nâng cao quá trình chuyển đổi về một tương lai bền vững hơn. Khóa học mở ra cơ hội tiếp cận cho mọi cá nhân có sự quan tâm. Hãy 

Thông tin chi tiết chuỗi Hội Thảo 

Mở đầu cho chuỗi Hội thảo là tập đầu tiên bắt đầu từ thứ Tư tuần sau, ngày 14 tháng 10 lúc 16:00  theo giờ Việt Nam.

Chuỗi Hội Thảo trên web đầy đủ sẽ như sau:

  • 14/10/2020 – 16h, EP I: Future is Made in Finland – want to be part of it?
  • 26/10/2020 – 17h, EP II: Bioeconomy Defines the Future
  • 28/10/2020 – 17h, EP III: Join the Revolution of Light and Image
  • 3/11/2020 – 17h, EP IV: First in 6G
  • 11/11/2020 – 17h, EP V: Get REAL, AI!
  • 17/11/2020 – 17:00, EP VI: Future is Mad in Finland – Design it yourself!
  • [To be announced] EP VII: Future is Female – Discussion with Women in Sciences & Tech

Hãy tham gia cùng chúng tôi khám phá tương lai thông qua 7 giai đoạn tuyệt vời để hiểu về sự thay đổi, các thách thức đang tồn tại; cách mà khoa học đang giải quyết các vấn đề về các hệ sinh thái phát triển hàng đầu trên thế giới.

Tìm hiểu chi tiết thông tin về chuỗi Hội thảo và đăng ký ngay tại: https://www.studyinfinland.fi/future-is-made-in-finland

10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows

10-dieu-ban-co-the-lam-voi-linux-ma-ban-khong-the-lam-voi-windows

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

Windows và linux có khá nhiều điểm khác nhau.

Trong bài này tôi sẽ chỉ ra 10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows. Bắt đầu nào.

1. Bạn có thể tải mã toàn bộ mã nguồn (source) của Linux.

+ Link: https://github.com/torvalds/linux
+ Mã nguồn của tất cả các phần mềm cũng có sẵn.
+ Ở chiều ngược lại: windows là mã nguồn đóng (closed source), bạn không thể xem hay tải nó.

2. Bạn có thể cài đặt bản cập nhật (install updates) mà không cần phải khởi động lại (reboot) máy tính.

+ Điều này là đúng với hầu hết các phần mềm chạy trên Lunix
+ Thậm chí đối với cả các kernel > 4.0
+ Đối với Windows thì cần phải khởi khởi động lại.

3. Bạn có thể cắm (plug) thiết bị vào mà không cần lo lắng về việc tìm / tải xuống trình điều khiển (driver).

+ Trừ một số thiết bị chuyên dụng cao.
+ Ở windows thì sẽ cần phải download.

4. Bạn có thể chạy Linux từ USB, CD, DVD, …

+ Đối với windows không có lựa chọn như vậy tồn tại.

  10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows
  6 câu lệnh linux hay dùng trong phân tích log

5. Bạn có thể chạy Linux cả năm mà không cần phải khởi động lại.

+ Nó cực kỳ ổn định
+ Ít phân mảnh bộ nhớ
+  Windows: hệ thống sẽ bị chậm sau một khoảng thời gian.
Hình sau sẽ mình hoạt 1 máy chạy Linux 1002 ngày mà chưa cần khởi động lại:

      10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows

6. Bạn có thể chạy (run) Linux trên hầu như bất kỳ phần cứng nào.

+ Bao gồm cả những chiếc máy tính, laptop cũ cấu hình thấp, những máy tính cũ từ những năm 1990, thậm chí 1980 đều có thể chạy được Linux.
+ Windows: Yêu cầu phần cứng tối thiểu phải đạt 1 con số nhất định, càng bản windows mới thì càng yêu cầu phần cứng cấu hình cao hơn

7. Bạn có thể sửa lỗi linux bị hỏng với một đĩa cd.

+ Một vài lỗi của windows cũng có thể sửa được với 1 đĩa CD Linux
+ Windows: sửa chữa hệ thống (system repair) chỉ là lựa chọn

8. Bạn có thể cập nhật tất cả các phần mềm thường xuyên chỉ với một dòng lệnh đơn giản.

+ Ví dụ đối với Ubuntu bạn chỉ cần chạy lệnh “apt-get upgrade”.

     + Windows: cập nhật phần mềm chỉ có trong windows update.

9. Bạn có thể di chuyển ổ cứng từ máy linux này sang máy khác.

     + Phần lớn được thực hiện bằng cách không cần diver (trình điều khiển) cụ thể.

     + Windows: thường sẽ không hoạt động đúng, vì vậy bạn phải cài lại drive.

10. Bạn có thể tùy chỉnh mọi thứ theo nghĩa đen

      + font, icon, themes,…

      + Thậm chí có cả themes Windows, Mac cho Linux

      + Windows: một số tùy chỉnh có sẵn nhưng nó không có nhiều và không chỉnh sửa được nhiều như trên Linux.

Ngoài ra: bạn có thể cài phần mềm  mà không cần lo lắng về virus hay malware.

Nghĩa là bạn không cần phần mềm diệt virus.

Phần mềm từ kho chính thức sẽ không bao giờ chứa mã độc hại.

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

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

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

Viết code trong trình duyệt với Microsoft Visual Studio Online

Viết code trong trình duyệt với Microsoft Visual Studio Online

Việc phát triển phần mềm và web đã thay đổi hoàn toàn trong những năm gần đây. Các nhóm không còn phải ngồi chung ở cùng một nơi. Ngoài ra, các công cụ có sẵn cho những người đang phát triển phần mềm, ứng dụng và trang web cũng đã được cải thiện.

Mặc dù vậy, vẫn có những tình huống mà bạn có thể cần một môi trường làm việc tập trung. Đây là nơi các công cụ phát triển từ xa như Visual Studio Online xuất hiện. Bài viết hôm nay sẽ xem xét công cụ này ảnh hưởng như thế nào đến mọi thành viên làm việc trong một nhóm phát triển từ xa.

Vào Visual Studio Online

Viết code trong trình duyệt với Microsoft Visual Studio Online

Trong một thông báo gần đây, Microsoft đã tiết lộ Visual Studio Online cho phép lập trình tương tác từ nhiều vị trí. Visual Studio Online có cả trình soạn thảo code trong trình duyệt hoàn chỉnh và đóng vai trò trung tâm để đồng bộ với trình soạn thảo cục bộ của người dùng.

Visual Studio Online là cái tên đã xuất hiện được một thời gian. Đó là tên ban đầu của dịch vụ Azure DevOps, một hệ thống quản lý dự án trực tuyến.

Cái tên này có ý nghĩa hơn nhiều trong bối cảnh hiện nay, vì những gì Microsoft dường như sẽ khởi chạy là một máy chủ hoàn toàn từ xa, được lưu trữ đồng hành với Visual Studio Code và Visual Studio.

Visual Studio Code là gì?

Viết code trong trình duyệt với Microsoft Visual Studio Online

Để hiểu được ý nghĩa của Visual Studio Online, bạn sẽ cần phải làm quen với Visual Studio Code (VS Code).

VS Code là trình soạn thảo code miễn phí của Microsoft dành cho các nhà phát triển. Trái ngược với Visual Studio (IDE flagship của Microsoft), VS Code có mã nguồn mở và gần với các trình soạn thảo văn bản như Sublime Text và Atom hơn là một Integrated Development Environment (IDE) đầy đủ.

Có sẵn cho Windows, Mac và Linux, nó cung cấp một môi trường gọn nhẹ và đầy đủ tính năng để lập trình. Tiện ích mở rộng giúp hoàn thành code và kiểm tra lỗi trong code nguồn (linting). Visual Studio Live Share cho phép lập trình cộng tác thông qua kết nối Internet. Visual Studio Online được thiết lập để thu hẹp khoảng cách hơn nữa, cho phép các môi trường lập trình được chia sẻ.

Visual Studio Online sẽ hoạt động như thế nào?

Viết code trong trình duyệt với Microsoft Visual Studio Online

Thay vì việc mọi người cấu hình môi trường phát triển trên máy cục bộ, Visual Studio Online mang đến trải nghiệm của một nhóm làm việc trên cùng một hệ thống. Để hiểu lý do tại sao điều này lại có sức mạnh lớn đến vậy, hãy xem xét các bước cần thiết để làm việc trong một nhóm phát triển.

Mọi người cần phải có sẵn các công cụ và thư viện giống nhau. Các máy phát triển khác nhau có thể chạy những hệ điều hành hoặc phiên bản phần mềm không giống nhau. Việc quản lý gói và kiểm soát phiên bản có thể giúp ích, nhưng từng thành viên trong nhóm sẽ tự kiểm soát môi trường của họ.

Ngay cả phần cứng cũng có thể là một vấn đề. Nếu máy của bạn không tương thích với các yếu tố của một dự án thì cho đến gần đây, bạn không còn lựa chọn nào khác ngoài việc mua một máy tính mới. Bây giờ, ngay cả khi không có gì được cài đặt cục bộ, bạn vẫn có thể làm việc với bất kỳ thiết lập phát triển nào.

  "Code dễ đọc" là như thế nào?
  "Mẹo bỏ túi" cho dân coder mới vào nghề

Có phải ý tưởng này đã tồn tại?

IDE trực tuyến hoàn toàn không có gì mới và Amazon AWS Cloud9 IDE là một môi trường mạnh mẽ giàu tính năng. Tương tự, có nhiều dịch vụ thuê bao trực tuyến được thiết kế để phát triển nhóm với quy mô nhỏ hơn.

Thậm chí có những IDE trực tuyến sử dụng cơ sở mã nguồn mở VS Code, và bất kỳ ai quen thuộc với phần mềm này cũng sẽ cảm thấy không có gì xa lạ.

Có một môi trường từ xa có thể truy cập thông qua cả trình duyệt và cục bộ là điều hoàn toàn có thể về mặt kỹ thuật với bất kỳ dịch vụ nào trong số này. Ngược lại, những gì Visual Studio Online có thể sẽ làm là biến mình thành một trải nghiệm hợp lý và dễ tiếp cận hơn.

Điều gì làm cho Visual Studio Online trở nên đặc biệt?

Viết code trong trình duyệt với Microsoft Visual Studio Online

Đưa toàn bộ dự án vào một máy sao cho hiệu quả có nghĩa là mọi người luôn làm việc với cùng một thiết lập. Bất kể bạn là một lập trình viên dày dạn kinh nghiệm hay mới đi làm ngày đầu tiên, mọi thứ đều đã được thiết lập trước.

Nếu nhu cầu của dự án thay đổi, ví dụ, đối với một hệ thống hoặc framework mới, chỉ có một môi trường phát triển cần thay đổi và những thay đổi đó sẽ tự động chuyển sang từng thành viên của nhóm.

Về lý thuyết, sẽ không có sự khác biệt giữa làm việc tại nhà trên máy phát triển thông thường của bạn, trên máy tính đi mượn hoặc thậm chí trên điện thoại thông minh, nếu bạn có thể viết code bằng ngón tay cái!

Visual Studio Online có thể làm gì?

Tại thời điểm viết bài, dù chưa chính thức, nhưng quy trình làm việc chung trên Visual Studio Online dường như đã được đặt ra. Nó sẽ có tất cả các tính năng tương tự VS Code như hoàn thành code, kiểm tra lỗi trong code nguồn (linting) và cộng tác trong trình duyệt.

Hơn nữa, tất cả các chi tiết dự án, cùng với những tùy chọn và theme của người dùng, sẽ đồng bộ giữa mọi phiên bản trình duyệt và trình soạn thảo code cục bộ.

Microsoft cũng đã công bố tích hợp IntelliCode, tận dụng machine learning để đưa ra gợi ý và hoàn thành code tốt hơn dựa trên thói quen. Mặc dù chưa được xác nhận, nhưng rất có khả năng IntelliCode sẽ có thể mở rộng cho toàn bộ các nhóm, cho phép những công cụ động dựa trên kiến ​​trúc của một dự án.

Vậy thiết lập tùy chỉnh cho việc lập trình của từng cá nhân thì sao?

Viết code trong trình duyệt với Microsoft Visual Studio Online

Một nhược điểm rõ ràng cho cách tiếp cận chỉ gồm một máy phát triển duy nhất nằm ở việc tùy chỉnh cá nhân. Nếu bạn đã quen với một quy trình làm việc, bố cục hoặc shortcut tùy chỉnh cụ thể, mọi thứ có thể khó điều chỉnh.

May mắn thay, đây không phải là cách mà Visual Studio Online sẽ hoạt động. Theme cho mỗi người dùng sẽ cho phép thiết lập cá nhân. Mặc dù chắc chắn sẽ có một số khác biệt giữa việc sử dụng trình chỉnh sửa ngoại tuyến, nhưng trải nghiệm người dùng sẽ tương tự như môi trường tại nhà của bạn.

Một điều cần lưu ý là Visual Studio Online không phải là sự thay thế cho VS Code hoặc Visual Studio. Nó là một ứng dụng đồng hành cho phép người dùng code trực tiếp trong trình duyệt. Quy trình công việc giả định liên quan đến việc liên kết thiết lập cục bộ với dịch vụ trực tuyến mới.

Tại sao lại cần một trình soạn thảo code từ xa?

Nếu đã sử dụng máy tính tại nhà để phát triển, bạn có thể tự hỏi tại sao lại phải bận tâm tới Visual Studio Online.

Nó có thể không dành cho tất cả mọi người. Các nhà phát triển riêng lẻ hoặc bất kỳ ai làm việc với vi điều khiển hoặc phần cứng khác có thể không được hưởng lợi từ môi trường phát triển dựa trên đám mây. Hơn nữa, nếu bạn đã quen thuộc với một trình soạn thảo code khác và thoải mái sử dụng những môi trường ảo để lập trình, thì việc chuyển đổi có vẻ vô nghĩa.

Lợi ích thực sự từ Visual Studio Online sẽ dành cho các nhà phát triển mới bắt đầu. Không cần phải đau đầu với một lĩnh vực có nhiều khó khăn như quản lý các gói.

Điều quan trọng hơn nữa là Visual Studio Online mở ra sự phát triển cho bất kỳ ai. Việc sử dụng Chromebook, điện thoại thông minh hay PC cũ sẽ không quan trọng nữa, vì bạn có quyền truy cập vào cùng các công cụ.

Có thể tìm thấy Visual Studio Online ở đâu?

Vào thời điểm viết bài, VS Online không có sẵn cho tất cả mọi người. Có một bản xem trước riêng tư và bạn có thể đăng ký với Microsoft (tại đây) để truy cập. Khả năng là bạn sẽ phải đợi cho đến khi nó ở phiên bản beta công khai để dùng thử.

Nếu bạn muốn trải nghiệm thứ gì đó có khả năng gần như giống hệt, thì đã có sẵn phiên bản trực tuyến của VS Code. Vì nó là phần mềm mã nguồn mở, nên không có gì ngăn bạn xây dựng một phiên bản cho máy chủ của riêng mình. Nếu điều này có vẻ như quá sức với bạn, các trang web như Coder.com và StackBlitz.com đều là phiên bản trình duyệt của VS Code.

Visual Studio Online sẽ đưa sự phát triển trực tuyến lên một tầm cao mới. Để có thể tận hưởng lợi ích của lập trình cộng tác, bạn nên làm quen với Visual Studio Live Share.

Trong khi bạn đang chờ đợi phiên bản Visual Studio Online, tại sao không thử một trong nhiều IDE dựa trên trình duyệt đã có sẵn này nhỉ?

Chúc bạn tìm được lựa chọn phù hợp!

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

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

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

Sập server, làm gì đây?

Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm

Phỏng vấn

Có nhiều lần đi phỏng vấn tui bị hỏi câu này.

 

Giả sử service tự dưng lăn đùng ra chết không còn gửi được request nữa, bạn sẽ làm gì?

Lần nào được hỏi tui cũng nghĩ một câu chuyện khoa học viễn tưởng rồi phang bừa. Cá nhân tui nghĩ đây là một câu hỏi nhằm đánh giá khả năng tiếp cận & giải quyết vấn đề của bạn, chứ không hẳn là có câu trả lời cụ thể.

Tuy nhiên đi làm thì cũng có lúc … server lăn ra chết thật. Vậy thì bạn sẽ làm gì?

Thực tế

Sau đây là một câu chuyện có thật của các nhân vật hư cấu.

Có một hôm trúng ngay lượt Quần Cam on-call, app của công ty tự nhiên load dữ liệu mới rất chậm, tài khoản Twitter của app được tag liên tục để phàn nàn.

Đây là một sự cố nghiêm trọng vì nó ảnh hưởng đến hầu hết app users. Vì vậy công ty đã quyết định nhanh là cần phải cập nhật lên Twitter để trấn an tình hình. Sau một lúc, lượng retweet tăng lên, lượng phàn nàn giảm xuống.

Ví dụ như tweet cập nhật status của Github mỗi lần con unicorn xuất hiện…

Bài học #1: Đánh giá mức ảnh hưởng và thông báo đến users.

Cùng lúc đó Quần Cam bắt đầu tiến hành xem xét chuyện gì đang xảy ra. Lúc đầu, Quần phán đoán chắc do bên dữ liệu làm ăn sống nhăn không bắn dữ liệu về. Giả thuyết nghe có vẻ hợp lý bởi chuyện này đã từng xảy ra trước đó. Nhưng để nói có sách mách có chứng trước khi gửi mail chửi rủa, Quần kiểm chứng lại thông số trên Grafana. Số liệu hiển thị traffic bên đó vẫn đổ về bình thường.

Bài học #2: Luôn xem bảng thông số sau khi đoán bừa.

Chết server, làm gì đây?

Hình minh hoạ bảng thông số (nguồn: Wikimedia)

Tiếp theo Quần lại nghĩ: Có khi nào tắc nghẽn xảy ra ở load-balancer hay không?. Lần chết service gần nhất là do HAProxy không xử lý kịp các HTTPS handshake, lần này bảng thông số cũng cho thấy những triệu chứng tương tự: một số lượng concurrent session khá lớn. Nghĩ chắc là đúng, Quần đã giảm số lượng HTTPS request từ phía client đi một nửa.

Nhưng hướng tiếp cận đó không giải quyết được vấn đề. Truy hồi về cùng thời điểm ở các tuần trước, bảng thông số đều hiển thị lượng session tương tự. Tóm lại chỉ là do người truy cập vào đông thôi.

Bài học #3: (again) Số liệu có thể đánh lừa bạn.

Lúc này Quần Cam tự thấy là nên nhờ sự trợ giúp từ đồng đội. Năm cái quần vẫn hơn một cái quần.

Chết server, làm gì đây?

  Có gì mới với Server-Side Rendering trong React 16?
  Web server là gì? Hiểu rõ về web server

Bài học #4: Kêu gọi đồng đội nếu cảm thấy cần thiết.

Lúc này Quần và đồng đội đã loại bỏ được giả thuyết là tắc nghẽn xảy ra từ phía traffic, bây giờ họ bắt đầu xem xét phần import dữ liệu. Họ có một con worker để ghi các dữ liệu từ phía cung cấp thông qua một queue. Thông số cho thấy queue đang hoạt động tốt, họ tự hỏi điều gì đó đang diễn ra ở chính con worker.

Đọc logs thì họ thấy các tác vụ diễn ra chậm hơn so với bình thường, đặc biệt là các SQL thực hiện query cực chậm ở một cái bảng. Đọc tới khúc đó, một dev khác là Đầm Cam lập tức nhân ra chị đã phạm một sai lầm trong tuần. Chị có viết một con worker có sử dụng chức năng lock bảng để import dữ liệu cũ vào cái bảng đó. Chị đã rất cẩn thận chạy nó vào 11 giờ đêm hôm trước để tránh ùn tắc nhưng không ngờ nó chạy lâu tới như vậy.

Sau khi biết được lỗi, họ liền tắt con worker đó. Mọi thứ lập tức trở lại bình thường.

Bài học #5: Chọn giải pháp nhanh nhất để phục hồi hệ thống.

Ngay hôm sau, Đầm đã tiến hành đưa toàn bộ các tác vụ của mình vào một con worker có độ ưu tiên thấp hơn, đảm bảo việc vận hành không gây ảnh hưởng đến những critical worker khác.

Bài học #6: Luôn tính toán các giải pháp lâu dài để phòng ngừa sự cố tương tự xảy ra.

Bên cạnh đó Quần Cam ghi ghép lại sự việc để những người khác trong team có thể đọc lại. Nhờ đó mà hôm nay anh ấy có tư liệu để viết blog.

Bài học #7: Note lại các sự cố để làm cơ sở học tập sau này.

Bài viết này có thể giúp tui tăng lương như thế nào?

Như thường lệ bài viết không có giúp bạn tăng lương, nhưng tui có thể rút ra một số điểm để giúp bạn trả lời câu hỏi trên.

Luôn dùng thông số để làm cơ sở tìm lỗi. Luôn thu thập các metrics hệ thống trong quá trình chạy, không có số liệu thì lúc gặp sự cố ta như mò kim đáy bể.

Truy đúng critical failure trước khi đưa ra giải pháp. Dùng kĩ thuật 5-whys hay bất kì cái gì để giúp bạn tìm ra ngọn nguồn sự cố. Tuỳ tiện đưa ra giải pháp dựa trên phán đoán chỉ tốn thời gian của bạn mà không giúp được gì cả.

Chọn giải pháp nhanh nhất để phục hồi hệ thống. Nếu bạn làm việc với hệ thống ảnh hưởng đến hàng triệu user, mỗi giây service không hoạt động đều ảnh hưởng đến việc kinh doanh của công ty, mà như vậy thì ảnh hưởng đến việc nhận lương của bạn chứ chưa nói đến tăng lương. Hãy tìm cách hồi phục hệ thống nhanh nhất có thể, nhưng luôn tính toán một giải pháp lâu dài.

Cái kết

Bạn đồng ý với Quần Cam hay cho rằng tui đang nói tầm bậy? Hãy bình luận ở phía dưới nhé.

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

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

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

Front End Developer và những sai lầm hay gặp ở các “newbie”

Những sai lầm hay gặp ở các

Tác giả: John Au-Yeung

Các dev thường dễ mắc sai sót khi làm việc, tuy nhiên hoàn toàn có thể tránh được những sai lầm này nếu biết về nó từ trước. Bài viết này sẽ chỉ ra những lỗi sai mà các newbie front end developer hay gặp nhất và cách để khắc phục chúng như thế nào.

Phụ thuộc quá nhiều vào việc sử dụng Frameworks

Nhiều front end developer có thói quen phụ thuộc hoàn toàn vào frameworks dù rõ ràng  vẫn có thể tự làm được những việc đó mà không cần dùng đến framework. Vậy nên tốt nhất, hãy chỉ dùng framework khi đã thành thạo với các cấu trúc JavaScript đơn giản và thao tác DOM. Nếu không thì sẽ khó mà hiểu được nguyên lý hoạt động của vấn đề đó.

Xem thêm Top 7 JavaScript Frameworks

Front end Developer không nên đặt tất cả code ở một chỗ

JavaScript đã có các module tiêu chuẩn những năm gần đây nên không có lí do gì để sử dụng các scripts quá dài nữa. Hãy sử dụng module để chia code thành các phần khác nhau để dễ quản lý hơn. Bạn cũng không nên sử dụng biến toàn cục – global variables nữa mà hãy chuyển sang sử dụng nhiều biến xuất trên từng module.

Ngoài ra, nếu  muốn gom các code thành một custom component, front end developer có thể sử dụng web components API để thực hiện và sử dụng ở bất kỳ nơi nào. Các project được tạo bởi framework đều chia code thành các module, đây là phương pháp tốt nhất mà bạn nên thực hiện để tránh các sai lầm.

Nhiều công ty tuyển dụng Frontend Developer đãi ngộ tốt, ứng tuyển ngay!

Sử dụng Inline-styles

Inline-styles làm trang làm việc của lập trình viên lộn xộn hơn nên hãy chuyển chúng vào một file CSS để làm gọn lại và có thể tái sử dụng cùng một kiểu ở nhiều nơi.

Không loại bỏ các phần thừa thãi

Block elements có chiều rộng 100% sẽ trở nên dư thừa. Các front end developer không cần đặt chiều rộng của nó 100% vì nó được mặc định theo 100% chiều rộng của element phần tử chứa nó. Chrome sẽ cảnh báo khi phát hiện có quá nhiều phần tử không cần thiết trên trang.

Các front end developer không tối ưu hóa hình ảnh

Nhiều trường hợp vẫn chưa có kết nối ổn định, nên để có chất lượng ảnh tốt nhất bạn hãy nén các file ảnh lại. Cũng không nên sử dụng nhiều hình ảnh có kích thước megabytes vì sẽ mất rất nhiều thời gian để tải xuống và tốn nhiều băng thông hơn.

  10 Kỹ năng quan trọng cần có của Front-end để tìm công việc dễ dàng hơn
  20 công cụ và tài liệu hay ho dành cho Front-end

Sử dụng Bootstrap cho Layout (bố cục)

Sử dụng Bootstrap sẽ phát huy hiệu quả tốt nhất khi flexbox và grid được phát hành hoặc khi nó không có sẵn nhiều trên các trình duyệt. Hiện tại đã có thể sử dụng cả hai để tạo layout cho page, kể cả Bootstrap cũng sử dụng flexbox và grid cho layout của mình.

Nên thay vì sử dụng Bootstrap các front end developer nên sử dụng flexbox và grid để tạo layout dễ dàng hơn. Chúng ta có thể quên các nguyên tắc cơ bản khi tạo layout nếu phụ thuộc quá nhiều vào Bootstrap.

Xem thêm Bootstrap là gì? Tặng 20 Templates Bootstrap miễn phí

Không sử dụng tag Heading cho mục đích tạo kiểu

Thẻ heading sẽ giúp người đọc phân biệt được các đề mục trong một bài viết và ảnh hưởng đến tiêu chuẩn SEO, do đó hãy điều chỉnh các thẻ heading sao cho hợp lý để tăng chất lượng bài viết.

Nhúng phông chữ sai cách

@font-face dùng để chỉ định tên phông chữ cho các chữ được nhập, nhưng vẫn có thể thay đổi độ đậm nhạt và giữ nguyên tên trong cả khối đối với phông chữ thông thường so với các phông chữ khác.

Ví dụ, thay vì viết như sau:

@font-face {
  font-family: 'Open Sans';
  src: url('opensans.woff2');
}

@font-face {
  font-family: 'Open Sans Bold';
  font-weight: bold;
  src: url('opensans-bold.woff2');
}

Chúng ta nên viết:

@font-face {
  font-family: 'Open Sans';
  src: url('opensans.woff2');
}

@font-face {
  font-family: 'Open Sans';
  src: url('opensans-bold.woff2');
}

Sau đó đặt cỡ chữ theo kiểu của mình và phông chữ sẽ được chọn tự động từ chữ có kích cỡ phù hợp hoặc các kiểu khác trong danh sách.

Ví dụ, chúng ta có thể sử dụng Open Sans như sau:

.foo {
  font-family: 'Open Sans';
  font-weight: bold;
}

Sau đó, trình duyệt sẽ chọn mặt phông chữ Open Sans đã font-weight được đặt thành đậm.

Kết luận

Inline-styles không thật sự hiệu quả nên chúng ta hãy chuyển sang tệp CSS để có thể sử dụng lại. Bên cạnh đó, hãy nhúng phông chữ đúng cách với lệnh @font-face. Và vì có nhiều người dùng kết nối chậm hơn nên hãy tối ưu hóa bài viết cho phù hợp nhất để mọi người đều có thể tiếp cận được. Trên đây là một số vấn đề mà các front end developer nên xem qua để tránh gặp sai sót khi lập trình.

Phỏng dịch theo bài viết gốc tại dev.to

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

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

6 công cụ tuyển dụng phổ biến trong ngành Nhân sự

tuyển dụng nhân sự

Việc xây dựng một đội ngũ nhân sự tiềm năng rất quan trọng. Và để làm được điều này, các công cụ hỗ trợ tuyển dụng thật sự đóng vai trò hữu ích. Bài viết sau đây sẽ bật mí với bạn 6 công cụ giúp hợp thức hóa quy trình tuyển dụng nhân sự. Đây được xem là giải pháp thiết thực giải quyết bài toán tuyển dụng của các doanh nghiệp vừa và nhỏ.

1. BambooHR

BambooHR là một nền tảng nguồn nhân lực hoàn chỉnh. Nó bao gồm các công cụ tiện ích tuyển dụng nhân sự như: hệ thống theo dõi người nộp đơn, cơ sở dữ liệu các nhân của ứng viên,… Ngoài ra, công cụ này là một bộ phần mềm có thể giúp bạn quản lý và đánh giá nhân viên của mình. 

tuyển dụng nhân sự

BambooHR được đánh giá là dễ sử dụng, đáp ứng hoàn toàn các nhu cầu. Những vấn đề về theo dõi ứng viên tích hợp, chữ ký điện tử; hệ thống hóa cơ sở dữ liệu và quản lý hiệu suất công việc,.. đều được giải quyết tối ưu.

2. XOR

XOR là một mô hình chatbot được thiết lập trên nền tảng sử dụng trí thông minh nhân tạo.

  AI và những điều bạn cần phải có trước khi đụng tới AI

tuyển dụng nhân sự

Mục đích là để hướng dẫn ứng viên xuyên suốt quá trình tuyển dụng. Đồng thời, giúp ứng viên xác định sự phù hợp của họ đối với vị trí cần ứng tuyển. Một số hữu ích từ công cụ này phải kể đến việc giảm thiểu những khó khăn trong quá trình tuyển dụng. 

Với hình thức là một chatbot, XOR giúp tôi ưu hóa thời gian tuyển dụng. Cụ thể, nó giúp sàng lọc trước các ứng cử viên. Từ đó, đưa ra các định hướng về phương án trả lời phù hợp nhất.

3. JazzHR

JazzHR được biết đến là một hệ thống cho phép bạn theo dõi ứng viên suốt quá trình tuyển dụng; tạo và phân phối các bài đăng về công việc để thu hút ứng viên. 

Công cụ tuyển dụng này rất tiềm năng và đáp ứng đủ các tiêu chí của vị trí hiện tại. JazzHR cho phép người dùng cập nhật các mô tả công việc. Đồng thời, triển khai chúng lên các trang web tìm việc khác nhau như LinkedIn, Glassdoor,… Nó có một hệ thống theo dõi ứng viên rất tuyệt vời. Một điểm đặc biệt nữa chính là nó cho phép bạn quản lý toàn bộ quá trình phỏng vấn thông qua hệ thống.

Xem thêm: Kinh nghiệm sử dụng Linkedin hiệu quả cho tuyển dụng nhân sự 

tuyển dụng nhân sự

Cụ thể, nó bao gồm một công cụ báo cáo, đánh giá quy trình; cho phép số hóa tất cả những giấy tờ liên quan đến nhu cầu tuyển dụng. Hiện nay tại Việt Nam cũng đã có xuất hiện platform hỗ trợ tuyển dụng tích hợp. Không dừng lại ở việc theo dõi vị trí tuyển dụng, chúng còn là nền tảng chung cho ứng viên để tương tác đọc blog, tạo CV online. Từ đó tạo thêm nguồn ứng viên tiềm năng cho doanh nghiệp với mức chi phí tối ưu từ phía TopDev.

4. Merlin

Merlin là một công cụ tuyển dụng dành riêng cho các ứng viên thuộc nhóm người lao động phổ thông.

tuyển dụng nhân sự

Dịch vụ của Merlin tập trung vào các ngành nghề và lao động. Chúng tập hợp những người có nhu cầu tìm việc và định hướng nghề nghiệp chung; mang lại cho họ những cơ hội.

Merlin có một cổng thông tin cho cả người sử dụng lao động và người lao động. Nó được dùng để duy trì quan hệ đối tác với các thương hiệu lớn. Chính điều này tạo ra các lợi thế lớn hơn trong việc tìm kiếm các ứng viên phù hợp.

5. ClearCompany

ClearCompany không đơn thuần tìm kiếm nguồn ứng viên mới, mà nó còn giúp bạn xây dựng hệ thống quản lý khi họ bắt đầu làm việc cho bạn. Các chức năng chuyên dụng của công cụ này: thu nhận tài năng thông qua tuyển dụng, quản lý hiệu suất công việc trong toàn bộ quá trình. 

Xem thêm: 5 lưu ý để viết đánh giá hiệu suất của bạn

tuyển dụng nhân sự

ClearCompany còn cung cấp một quy trình với sự vận hành hoàn hảo. Các nhân viên được đảm bảo định hướng rõ về các quy trình làm việc và thăng tiến. 

6. Facebook Jobs

Facebook Jobs ra đời với mục đích kết nối những người lao động có nhu cầu tìm việc với các doanh nghiệp. Không có gì ngạc nhiên khi Facebook tiến hành phát triển không gian việc làm sau khi tung ra Facebook Marketplace.

Đối với các doanh nghiệp vừa và nhỏ, Facebook Jobs là một công cụ thật sự hữu ích. Vì nó giúp tìm kiếm nguồn lao động có sẵn ở phạm vi lân cận. Tuy nhiên, bạn vẫn phải đảm bảo các quy trình tuyển dụng nhân sự từ khi bắt đầu. Điều này giúp giảm thiểu những rủi ro có thể xảy đến. Đồng thời, bạn có thể nắm bắt và sử dụng công cụ một cách tốt nhất. 

Lời kết

Trong bất kỳ công việc nào thì việc sử dụng các công cụ phù hợp là điều rất quan trọng. Mỗi công cụ với đặc tính, chức năng khác nhau và tùy vào từng vị trí trong quy trình tuyển dụng mà bạn nên lựa chọn những công cụ hỗ trợ tương ứng. Bạn nên dành thời gian để tự mình xác định xem các công cụ này có thật sự phù hợp với quá trình tuyển dụng hay không. Đối với quá trình tuyển dụng của các doanh nghiệp vừa và nhỏ thì đây được xem là bí quyết giúp tiết kiệm thời gian, đơn giản hóa và mang lại hiệu quả cao.


Tuyển Dụng Nhân Tài IT Cùng TopDev
Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products

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

Xem thêm Việc làm IT lương cao trên TopDev

Top 7 công ty công nghệ Hàn Quốc tại Việt Nam mà các lập trình viên không nên bỏ qua

Top 7 công ty công nghệ Hàn Quốc tại Việt Nam mà các lập trình viên không nên bỏ qua

Việt Nam đang bước vào thời kỳ công nghệ 4.0, vai trò của công nghệ ngày càng trở nên thiết yếu đối với nhiều hoạt động trong đời sống. Bên cạnh đó, Việt Nam được xem là “mảnh đất màu mỡ” với các công ty công nghệ Hàn Quốc đến và mở rộng thị trường hoạt động. 

Một trong những sự kiện lớn trong ngành công nghệ tại Việt Nam năm 2020 chính là sự hợp tác giữa Korea IT Cooperation Center tại TP. HCM (KICC HCMC) và Nền tảng tuyển dụng chuyên về IT hàng đầu Việt Nam – TopDev. Sau cái bắt tay chiến lược này, các nhân tài công nghệ càng có nhiều lựa chọn hơn khi tìm kiếm nơi phát triển sự nghiệp lập trình phù hợp, đặc biệt nhất chính là cơ hội trải nghiệm môi trường làm việc chuyên nghiệp tại nhiều công ty công nghệ tiên tiến đến từ Hàn Quốc.

Mời bạn khám phá Top 7 công ty công nghệ Hàn Quốc xuất hiện trong kỳ này để nắm bắt cho chính mình cơ hội tốt và phù hợp nhất nhé!

Top 7 công ty công nghệ Hàn Quốc tại Việt Nam mà các lập trình viên không nên bỏ qua

1. DaouKiwoom Innovation

DaouKiwoom Group là một trong những công ty hàng đầu về CNTT và dịch vụ tài chính của Hàn Quốc với tổng doanh thu 2,2 tỷ USD, lợi nhuận 1 tỷ USD và có hơn 5.000 nhân viên vào năm 2020. 

DaouKiwoom Group đã mở rộng sang Mỹ, Nhật Bản, Trung Quốc, Indonesia, Pháp và Việt Nam. Tạo ra những bước phát triển vượt bậc trong lĩnh vực CNTT, tài chính và dịch vụ.

⇒ Nếu bạn đang tìm kiếm một nơi để bạn có thể phát triển những kỹ năng của mình, một môi trường làm việc chuyên nghiệp, năng động, hãy đến với DaouKiwoom Innovation. Nhiều vị trí mới cùng mức lương hấp dẫn đang chờ đợi bạn.

2. Smilegate Việt Nam

Smilegate là công ty có trụ sở chính tại Hàn Quốc, thành lập từ năm 2002. Hoạt động kinh doanh trong các lĩnh vực phát triển trò chơi điện tử, dịch vụ và đầu tư. Với định hướng của mình, Smilegate mong muốn trở thành đối tác phát triển nền tảng và dịch vụ tốt nhất tại Việt Nam và Đông Nam Á. 

Smilegate luôn tìm cách thúc đẩy sự phát triển của nền tảng bằng cách chiêu mộ các nhân tài trong ngành, chuyên quản lý việc phát triển & vận hành các sản phẩm, dịch vụ và nền tảng.

Nếu bạn đang tìm kiếm một môi trường làm việc tuyệt vời cùng đãi ngộ xứng đáng, Smilegate Việt Nam hứa hẹn sẽ là điểm đến lý tưởng cho sự phát triển của sự nghiệp bạn.

3. HANBIRO Việt Nam

Hanbiro Việt Nam là công ty có vốn đầu tư từ Hàn Quốc, là nhà cung cấp CNTT-TT chuyên về vận hành quản lý máy chủ, phát triển và bán phần mềm (Mail, Groupware, CRM). Công ty Hanbiro có 5 chi nhánh trên khắp thế giới như Hàn Quốc, Việt Nam, Nhật Bản, Mỹ và Trung Quốc. 

Làm việc tại Hanbiro Việt Nam, bạn có thể tận hưởng môi trường sáng tạo và năng động để khuyến khích người lao động nghĩ khác và thử cách mới. Bên cạnh đó, khi làm việc với các chuyên gia cao cấp của Hàn Quốc, bạn có thể học hỏi được nhiều kinh nghiệm và có cơ hội được đi nước ngoài.

Hãy trở thành một thành viên của đại gia đình Hanbiro Việt Nam, để được “làm điều mình thích và yêu điều mình làm” bạn nhé. 

4. Công ty TNHH Megazone Việt Nam

Megazone Cloud là một trong những nhà cung cấp dịch vụ quản lý đám mây (MSP) lớn nhất ở khu vực Châu Á Thái Bình Dương. Kể từ khi thành lập vào năm 1998 công ty đã cung cấp các dịch vụ CNTT đến doanh nghiệp và hiện có hơn 1000 chuyên gia. Các khách hàng của Magezone là các “ông lớn” như Samsung Electronics Co. và LG Electronics Inc. đến các tổ chức tài chính và công ty khởi nghiệp.

Gần đây, Megazone đang tích cực mở rộng thị trường toàn cầu bằng cách thành lập các công ty con ở nước ngoài tại Hoa Kỳ, Nhật Bản, Trung Quốc, Việt Nam,… 

Nếu bạn đang tìm kiếm một nơi làm việc vừa có nhiều đãi ngộ tốt vừa được thể hiện năng lực với các đối tác lớn trong và ngoài nước thì Megazone chính là lựa chọn phù hợp nhất!

Vị trí Full-Stack Java Software Engineer tại Megazone Việt Nam vẫn đang chờ bạn đế khám phá và chinh phục.

5. BrickMate Group

BrickMate Group (BMG) là một công ty phát triển CNTT toàn cầu có trụ sở chính tại Seoul, Hàn Quốc. Công ty bao gồm các kỹ sư và hơn 300 nhà phát triển đến từ Hàn Quốc và Việt Nam giải quyết các vấn đề liên quan đến việc phát triển phần mềm, giải pháp thương mại điện tử, ứng dụng kinh doanh,…

BrickMate đã và đang làm việc với nhiều công ty khởi nghiệp và là đối tác phát triển web/ứng dụng với một số doanh nghiệp nổi tiếng như Samsung, Kyobo, LG, Megazone,…

Nắm bắt ngay cơ hội trở thành một nhân tố tài năng của BrickMate Group, những vị trí tuyển dụng mới đang chờ bạn apply!

6. TSB Vietnam

Total Soft Bank Ltd. là công ty đến từ Hàn Quốc cung cấp các giải pháp logistics hàng hải và TSB Việt Nam là công ty con của Total Soft Bank. Đây là một trong những công ty hàng đầu thế giới về các giải pháp hậu cần hàng hải. 

TSB Vietnam được xem như là trung tâm QA và R&D của Total Soft Bank tại Việt Nam với mục tiêu biến trung tâm này thành một tổ chức phát triển phần mềm cạnh tranh và đầy thách thức.

Cơ hội việc làm cho các lập trình viên tại TSB Vietnam luôn rộng mở. Tham gia ngay hôm nay với vị trí Software Developers (Java/PHP/C#) bạn nhé!

7. Công ty cổ phần GO2JOY VIỆT NAM

Go2Joy là công ty có vốn đầu tư nước ngoài, chuyên về phát triển ứng dụng di động. Sau 3 năm hoạt động, công ty tự hào là đơn vị hàng đầu cung cấp ứng dụng đặt phòng theo giờ với hơn 100,000++ lượt tải xuống và 20,000++ người thật check-in từ ứng dụng.

Với nhu cầu mở rộng không ngừng, Go2Joy đang tìm kiếm những nhân viên chuyên nghiệp, trẻ trung, năng động, có chí cầu tiến để gia nhập vào đội ngũ cùng mang đến những tính năng mới, ưu việt hơn cho ứng dụng.

⇒ Bạn hoàn toàn có thể sở hữu ngay 1 trong 2 slot tại Go2Joy để trực tiếp trải nghiệm những điều đáng mong chờ cho sự nghiệp:

Software Development Manager (PHP/Laravel 7,8/Native/Flutter)

Top 7 công ty công nghệ Hàn Quốc tại Việt Nam mà các lập trình viên không nên bỏ qua

Với sự xuất hiện của Top 7 công ty công nghệ Hàn Quốc trong kỳ này, hi vọng bạn sẽ có thêm những thông tin cực hữu ích và sớm tìm được môi trường làm việc phù hợp nhất để có thể thỏa sức đam mê và bung xõa hết mọi giới hạn của bản thân.

⇒ Và đừng quên, KICC HCMC X TopDev sẽ còn mang đến cho cộng đồng IT Việt Nam nhiều cơ hội mới. Hãy chờ đón những bài viết tiếp theo cùng những cơ hội mới hấp dẫn bạn nhé!

________________________________

Dự án được hỗ trợ bởi Korea IT Cooperation Center tại TP. HCM (KICC HCMC) – thuộc Cơ quan Xúc tiến CNTT Hàn Quốc (NIPA), phối hợp cùng TopDev – Nền tảng tuyển dụng CNTT hàng đầu tại Việt Nam với mục đích thúc đẩy tuyển dụng việc làm CNTT cũng như quảng bá cho Korean IT Companies trong cộng đồng lập trình viên lớn nhất tại Việt Nam.

Liên hệ: Korea IT Cooperation Center tại TP. HCM (KICC HCMC)

☎️ Hotline: 84 28 35208135 (Vietnamese) | 84 28 35208136 (Korean)

E-mail: HCMC@nipa.kr

Address:135 Hai Bà Trưng, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh

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

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

Code Đức

Code Đức

Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm

Bắt đầu một câu chuyện

Vài ngày trước một người bạn nhờ tui xem giùm trang web của nó bị người dùng phàn nàn là hack tiền ảo.

Tui mò vào thì thấy cái này.

Code Đức

Đây là một script sẽ chạy mỗi khi bạn truy cập vào trang web, “hâm nóng” CPU của bạn một chút, và “làm dày” túi tiền của chủ nhân script đó một chút bằng cách đào tiền ảo Monero.

Trang web này bạn tui nhờ một bên developer tên X phát triển website. Tui nghi ngờ X đã làm điều này, nhưng tui chưa đủ bằng chứng xác thực (chắc tui không bao giờ có). Đó là lý do vì sao tui không công bố tên.

Vì sao tui lại nghĩ thế?

Ban đầu tui nghĩ cái script này do X tắc trách cài theme WordPress lậu mà bị dính đòn, sau đó tui bác bỏ vì trang staging không có.

Giả thiết khác là website bị hack, cơ mà một hacker nghiệp dư nhất cũng biết phải alias CoinHive dưới một tên khác, và … đừng đặt tên biến là miner .

Khi phản ánh về vấn đề này, developer đổ thừa cho nhà cung cấp hosting Y (thuộc dạng lớn nhất Việt Nam hiện nay) với luận điệu vì Y có access của hosting nên Y đã làm việc này. Không biết bạn sao chứ tui thấy thật là .

Nếu nhất thiết phải chọn một bên giữa X và Y để tin, xin lỗi tui chọn Z #ahihi. Tại sao? #ahihi cái nữa, vì tui thích.

Sự chuyên nghiệp

Đôi khi, chỉ cần một phút yếu lòng buông thả bản thân, ai cũng có thể sa vào lối suy nghĩ ai biết đâucó chết ai đâuchắc không sao.

  • CPU nóng lên một chút có chết ai đâu.
  • Trễ deadline một chút chắc không sao.
  • Cái lỗi nhỏ xíu như vậy ai phát hiện đâu.

Từ đó ta luôn có thể lầy hơn.

  • Cài script đào chút coin chút có chết ai đâu.
  • Làm freelance trong giờ làm việc có ai biết đâu.
  • Ứng dụng có lỗi bảo mật cơ mà tạm thời chắc không sao. #yolo

Hầu như ai cũng đồng ý như vậy là không chuyên nghiệp. Bản thân tui cũng từng không chuyên nghiệp. Tui cũng từng gặp nhiều người không chuyên nghiệp. Khi làm những việc không chuyên nghiệp, vô hình trung ta đạp đổ chén cơm của chính mình và tạo ra tiếng thúi cho những người làm nghề chân chính.

Đứng trước ngưỡng chuyên nghiệp thì bạn có hai lựa chọn … một bạn là một trong số họ, hai bạn là số còn lại.

Tỏ ra chuyên nghiệp chính là bạn đang tôn trọng cái nghề của mình.

  "Code dễ đọc" là như thế nào?
  Vừa học vừa chơi! Top 15+ game lập trình miễn phí

Code đức

Vậy như thế nào mới được gọi là chuyên nghiệp? Hơn nữa chuẩn đạo đức của mỗi người khác nhau, làm sao để ta tránh được việc dùng tiêu chuẩn của bản thân để đánh giá người khác?

Mỗi ngành đều có đạo đức nghề nghiệp riêng, như chuẩn mực để những người làm nghề tuân theo. Ví dụ như ngành Y tế có Y đức, ngành vận tải có đạo đức của tài xế thì ngành Phần mềm cũng phải có “Code Đức”. IEEE-CS và ACM có một bản code đức như thế tên là Software Engineering Code of Ethics and Professional Practice.

Bản code đức này gồm 8 nguyên tắc về public interestclient & employersản phẩmsự phán xétquản lýnghề nghiệpđồng nghiệp và bản thân.

Tui sẽ tóm tắt lại một số điểm quan trọng.

1) Chỉ approve sản phẩm khi tin rằng nó an toàn

Bạn không cung cấp các sản phẩm không an toàn (như chèn CoinHive script chẳng hạn), làm giảm chất lượng cuộc sống, hay khi biết chắc rằng nó sẽ ảnh hưởng tiêu cực đến người khác.

2) Sẵn sàng đóng góp kĩ năng của mình cho các mục đích tốt

Theo cách hiểu của tui thì là giúp đỡ các bạn newbie, đóng góp cho các phần mềm mã nguồn mở, nâng cao cảnh giác của mọi người về bảo mật, vv.

3) Thành thật về kinh nghiệm và kĩ năng.

Không khai man CV, không chém gió về khả năng của mình, không nhận những gì mà mình không làm. Theo tui nghĩ thì nếu không tuân theo nguyên tắc này, ảnh hưởng tiêu cực cho bạn nhiều hơn là cho cộng đồng.

4) Giữ bí mật thông tin có được trong quá trình làm việc.

Đơn giản là đừng làm ông chú ở Viettel.

5) Không chấp nhận các job ngoài luồng mà ảnh hưởng đến công việc chính

Tui từng gặp nhiều bạn thiếu chuyên nghiệp đến mức mang tiếng OT để ở lại công ty làm freelance, đến nỗi trễ cả deadline.

6) Cố gắng tối đa để đưa ra sản phẩm chất lượng cao, với một acceptable cost và schedule.

Không phóng đại deadline, không vẽ thêm việc để làm, không charge tiền khách hàng quá mức.

7) Trả lương công bằng

Ngược lại là một nhà quản lý, phải đảm bảo việc trả lương công bằng cho developer.

8) Luôn không ngừng nâng cao bản thân

Dev phải cầu thị, luôn học hỏi để nâng cao trình độ kĩ thuật và kinh nghiệm của bản thân.

Bài viết này sẽ giúp tui tăng lương như thế nào?

Như thường lệ bài viết không có giúp bạn tăng lương. Nhưng mà:

Tui mong nó góp một phần nhỏ trong việc: tăng nhận thức về sự chuyên nghiệp, từ đó ta có một cộng đồng sạch hơn, thơm hơn, lành mạnh hơn.

Bạn có thể cài No Coin, một extension để chặn các script đào coin trên trình duyệt Chrome.

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

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

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

Hàm Python do người dùng tự định nghĩa

Hàm Python do người dùng tự định nghĩa

Bài viết được sự cho phép của ucode.vn

Bên cạnh các hàm Python tích hợp sẵn, bạn còn có thể tự định nghĩa hàm Python, những hàm này gọi là hàm Python do người dùng định nghĩa (user-defined functions). Việc sử dụng những hàm tự định nghĩa này có lợi ích gì, cách để định nghĩa hàm trong Python ra sao, chúng ta sẽ tìm hiểu trong bài này.

Tìm việc làm python các vị trí to 20M

Hàm Python do người dùng định nghĩa là gì?

Các hàm mà ta tự mình định nghĩa để thực hiện một số công việc cụ thể được gọi là hàm do người dùng định nghĩa. Việc định nghĩa hàm và gọi hàm đã được đề cập đến trong bài hàm Python.

Các hàm có sẵn trong Python được gọi là hàm tích hợp. Nếu ta sử dụng những hàm được người dùng khác viết dưới dạng thư viện, thì những hàm này gọi là hàm thư viện (library function). Như vậy, hàm ta tự định nghĩa có thể trở thành một hàm thư viện đối với người dùng nào đó.

Ưu điểm khi sử dụng hàm Python do người dùng định nghĩa

Hàm do người dùng định nghĩa giúp phân tích một chương trình lớn thành những phần nhỏ, khiến chương trình dễ hiểu, dễ duy trì và gỡ lỗi hơn.
Khi một đoạn code bị lặp lại trong chương trình, thì có thể sử dụng hàm để gom đoạn code này lại và chạy khi cần bằng cách gọi hàm.
Các lập trình viên cùng làm việc trong một dự án lớn, có thể phân chia công việc cho nhau bằng cách tạo các hàm khác nhau.

  11 tip học Python dành cho các “newbie”
  20 tài liệu học Python thiết thực để trở thành lập trình viên chuyên nghiệp

Ví dụ về hàm do người dùng tự định nghĩa

Để định nghĩa một hàm, bạn đã biết khi tìm hiểu về tổng quan về hàm Python. Ở đây, mình sẽ nhắc lại cú pháp cơ bản khi định nghĩa 1 hàm:

def ten_ham(DoiSo1,DoiSo2,...,DoiSon)

    khối lệnh của hàm

Ví dụ:

def them_so(a,b):
 tong = a + b
 return tong

so1 = 5
so2 = 6
so3 = int(input("Nhập một số: "))
so4 = int(input("Nhập một số nữa: "))

print("Tổng hai số đầu là: ", them_so(so1, so2))

print ("Tổng của hai số sau là: ", them_so(so3, so4))

Trong ví dụ trên, hàm int(), input(), print() là hàm tích hợp sẵn trong Python. Ở đây, chúng ta định nghĩa hàm them_so(), có chức năng là thêm hai số, tính tổng 2 số và trả về kết quả. Đầu ra của chương trình này như sau:

Nhập một số: 8
Nhập một số nữa: 10
Tổng hai số đầu là: 11
Tổng của hai số sau là: 18

Việc đặt tên hàm theo chức năng hoặc nhiệm vụ của hàm sẽ giúp người đọc code dễ hiểu hơn, bạn nên luyện tập điều nay khi code.

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

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

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