Home Blog Page 125

4 thói quen bạn cần thay đổi để thành công

thói quen

Nhiều nghiên cứu cho thấy, những người thành công hầu như đều sở hữu cho mình những thói quen tích cực. Chúng cũng có ý nghĩa lớn, chi phối đến những quyết định quan trọng của họ. Song, quá trình ấy cần họ chọn lọc và nỗ lực rèn luyện bởi có rất nhiều thói quen tiêu cực bủa vây. Cùng TopDev tìm hiểu về 4 thói quan bạn cần thay đổi nếu muốn trở thành người thành công!

Dấu hiệu sinh hoạt chưa khoa học

Những dấu hiệu cụ thể mà một người khó thành công đó là: Ngủ quá nhiều, nghĩ quá nhiều về mọi thứ; hoặc thậm chí là ăn quá nhiều.

thói quen
Những thói quen tiêu cực sẽ tác động nếu bản thân bạn không nhận ra chúng!

Điều bạn cần làm để thay đổi là việc tự rèn luyện và chủ động cải thiện thay đổi các thói quen. Hãy tập ra khỏi giường đúng giờ. Đừng “nướng” qáu lâu để rồi ảnh hưởng đến chất lượng và hiệu quả của công việc.

Quan tâm nhiều đến khối óc của bạn. Đừng suy nghĩ quá nhiều nếu bạn cảm thấy có dấu hiệu của sự căng thẳng. Việc làm cho tâm trí bạn thư giãn là có ý nghĩa rất quan trọng đến sưc khỏe tinh thần của bạn.

Ngưng hóng hớt “chuyện đời – chuyện người”

Đây là biểu hiện của một người sẽ khó thành công. Khi hóng hớt tức là bạn đang soi mói, “tìm tòi” những khía cạnh tiêu cực của người khác.

Xem thêm các việc làm về tuyển dụng Data Scientist 

Điều này vô tình tạo ra một sự lãng phí năng lượng tinh thần khổng lồ. Đồng thời, bạn khó có thể tập trung vào việc phát triển bản thân. Từ đó dẫn đến việc bạn dậm chân tại chỗ.

Những mục tiêu phi thực tế

Không một người nào thành công nào mà không xác lập mục tiêu cho mình cả. Tuy nhiên, nếu bạn có mục tiêu thì nó phải đảm bảo tính khả thi.

Xem thêm các việc làm NTQ Solution tuyển dụng

thói quen
thói quen

Mục tiêu, kế hoạch cần dược chuẩn hóa xây dựng một cách khoa học. Cụ thể, nó được thiết lập dựa trên các hệ giá trị như năng lực, tính cách, môi trường,… Nếu không bạn sẽ dễ dàng rơi vào trạng thái căng thẳng. Và tất nhiên, bạn khó có thể thực hiện bất cứ điều gì cả.

Áp lực từ việc trở thành người đa nhiệm

Nhiều người thành công họ không chỉ đơn thuần ở việc chỉ làm một công việc, một nhiệm vụ nào đó. Họ thực hiện rất nhiều task, các dự án thậm chí quản lý rất nhiều dự án lớn nhỏ khác nhau.

Tuy nhiên, nếu chưa có đủ sự trải nghiệm về kỹ năng chuyên môn cùng việc áp dụng thực tế, bạn khó có thể thành công.

Một freelancer IT không thể tự tin nhận nhiều job nếu chuyên môn của họ không thật sự giỏi. Trở thành người đa nhiệm thật sự không hề dễ dàng. Đó là một quá trình dài và vì thế, đừng cố sức nếu bạn chưa đủ sức thực hiện.

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

Xem thêm Top Việc làm ngành it trên TopDev

Xử lý SSL Certificate trong Selenium WebDriver

Xử lý SSL Certificate trong Selenium WebDriver

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

Khai bút đầu xuân, cũng là đánh dấu sự trở lại sau một thời gian kha khá dài không có bài viết thường xuyên cập nhật. Với mục tiêu cho năm mới đó là cống hiến nhiều hơn, mặc dù dạo gần đây và trong tương lai gần thì mình không có nhiều thời gian rảnh buổi tối để làm anh hùng bàn phím như này nữa.

Bài viết đầu tiên đậm chất kỹ thuật, khô khan nhưng lại chứa hàm lượng kiến thức vừa đủ để có thể áp dụng vào thực tế. :))) Hi vọng rằng bài viết sẽ có chút hữu ích cho các bạn nào cần thông tin – cũng là làm phong phú thêm kết quả tìm kiếm hiển thị trên Google search! – Cũng là một cách cống hiến đúng không nào! 😀

  System Design Cơ Bản: HTTPS, SSL, AND TLS
  Các kiểu “đợi chờ” trong Selenium Webdriver: Implicit wait, Explicit wait và Fluent wait

Đầu tiên tìm hiểu một chút về SSL Certifycate, mình nói sơ qua lý thuyết thôi, vì thực tế là cả tài liệu tiếng Việt và tiếng Anh đều cung cấp rất đầy đủ và chi tiết về cái này rồi, như nó là gì, phân loại ra sao, mục đích sử dụng như thế nào, những lợi ích mà nó đem lại cho người dùng là gì… và cùng rất nhiều thông tin khác nữa, nói ra thì dài lắm, nên các bạn cần thì tự tìm hiểu thêm, ở đây là mức vừa đủ để khỏi bỡ ngỡ thui nha!

SSL Cetificate là gì?

SSL là viết tắt của Secure Socket Layer, là một tiêu chuẩn an ninh công nghệ toàn cầu tạo ra một liên kết được mã hóa giữa máy chủ web và trình duyệt. Liên kết này đảm bảo tất cả các dữ liệu trao đổi giữa máy chủ web và trình duyệt luôn được bảo mật và an toàn.

Chứng thư số SSL tích hợp trên ứng dụng client để người dùng khi truy cập có thể xác minh được tính xác thực, tin cậy của website, đảm bảo mọi dữ liệu, thông tin trao đổi giữa ứng dụng và người dùng được mã hóa, tránh nguy cơ bị can thiệp. Các bạn xem qua cách thức hoạt động theo sơ đồ phía dưới:

Xử lý SSL Certificate trong Selenium WebDriver
Source: SSL Sertificate

Ví dụ:

  1. Truy cập trang Web: https://www.vietcombank.com.vn/
  2. Enter
  3. Chúng ta sẽ quan sát thấy thông tin chứng chỉ SSL như vùng khoanh ở hình ảnh phía dưới, khi click vào sẽ hiển thị popup thông tin nhỏ phía dưới:

Xử lý SSL Certificate trong Selenium WebDriver

Liên quan đến SSL Certification, trên các trình duyệt sẽ có thông báo hiển thị khác nhau như:

Chrome:

Xử lý SSL Certificate trong Selenium WebDriver

FireFox:

Xử lý SSL Certificate trong Selenium WebDriver

IE:

Xử lý SSL Certificate trong Selenium WebDriver

Trên thực tế khi viết các automation script, không phải sẽ gặp phải tình huống này quá thường xuyên, nhưng cũng là một trường hợp tương đối đặc biệt mà mình nghĩ là nếu hiểu và biết cách xử lý thì sẽ có hướng tiếp cận nhanh và phù hợp hơn.

Đối với từng loại trình duyệt thì sẽ có những điều chỉnh tương ứng với trình duyệt đó, tùy thuộc vào trình duyệt mà bạn dự định sẽ thực thi test, lý do vì sao thì chính là mấy hình ảnh phía trên kia chính là câu trả lời đó! :)))

Ở đây mình sẽ tổng hợp lại các bước để xử lý được trường hợp này, cơ bản là cũng không có đưa ra được cụ thể một link ví dụ nào để thực hành, nếu gặp trong thực tế, thì các bạn có thể thử áp dụng luôn, nếu có vướng mắc gì thì có thể liên hệ với mình để cùng tìm cách giải quyết nhé! 😀

Trên trình duyệt Chrome:

//Chrome
	DesiredCapabilities ch=DesiredCapabilities.chrome();
	ch.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);
	ch.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
		
	System.setProperty("webdriver.chrome.driver", "D:\\Program\\Webdriver\\chromedriver.exe");
	WebDriver driver = new ChromeDriver(ch);

Trên trình duyệt FireFox:

//FireFox:

    FirefoxProfile ffProfile = new FirefoxProfile();
    ffProfile.setAcceptUntrustedCertificates(true);
    ffProfile.setAssumeUntrustedCertificateIssuer(false);
     
    FirefoxDriver driver = new FirefoxDriver(ffProfile)

Trên trình duyệt IE:

Điểm khác với hai trình duyệt phía trên, ta phải thực hiện một bước trước khi thực hiện tương tác với Certificate, thì sẽ phải thực hiện bước điều hướng bằng cách sử dụng Javascript executor:

driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");

Xử lý SSL Certificate trong Selenium WebDriver

Sau đó thực hiện tương tự như thực hiện phía trên với Chrome/Firefox:

DesiredCapabilities cap= new DesiredCapabilities();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
System.setProperty("webdriver.ie.driver","IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver(capabilities);

Trên đây là các bước thực hiện giúp bạn xử lý SSL certificate với Selenium đối với các trình duyệt Chrome, FireFox và IE. Các bạn có thể thử và nếu có vấn đề gì thì để lại bình luận phía dưới hoặc liên hệ trực tiếp với mình nhé. Mình không chắc sẽ đưa ra ngay được đáp án chính xác tuy nhiên sẽ hứa cùng các bạn tìm hiểu vấn đề và giải quyết vấn đề :))))

Chúc mừng năm mới, nhiều điều mới mẻ và tốt đẹp sẽ chào đón chúng ta! <<tung hoa, tung hoa>>

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

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Avalability vs Consistency

Avalability vs Consistency

Bài viết được sự cho phép của tác giả Edward Thiên Hoàng

CÁC PATTERNS VỀ SỰ NHẤT QUÁN (CONSISTENCY)

Với nhiều bản sao của cùng một dữ liệu, chúng ta phải đối mặt với các tùy chọn về cách đồng bộ hóa để client có một cái nhìn nhất quán về dữ liệu.

TÍNH NHẤT QUÁN LỎNG LẺO (WEAK CONSISTENCY)

Sau một lệnh ghi, có thể đọc được hoặc không được ngay lập tức.

Cách tiếp cận này được thấy trong các hệ thống như memcached. Tính nhất quán yếu, lỏng lẻo hoạt động tốt trong các use cases thời gian thực như VoIP, trò chuyện video và trò chơi nhiều người chơi trong thời gian thực. Ví dụ: nếu bạn đang thực hiện một cuộc gọi điện thoại và mất liên lạc trong vài giây, khi bạn lấy lại kết nối, bạn không nghe thấy những gì được nói trong khi mất kết nối.

  Bài toán đồng thuận trong Distributed Systems
  System Design Cơ Bản - Phần 5: Indexes

TÍNH NHẤT QUÁN CÓ ĐỘ TRỄ (EVENTUAL CONSISTENCY)

Sau một lệnh ghi, các lệnh đọc sẽ thấy được data cùng với một độ trễ (thường trong vòng một phần nghìn giây). Dữ liệu được nhân rộng không đồng bộ.

Cách tiếp cận này được nhìn thấy trong các hệ thống như DNS và email. Tính nhất quán cuối cùng hoạt động tốt trong các hệ thống có sẵn cao.

TÍNH NHẤT QUÁN CHẶT (STRONG CONSISTENCY)

Sau khi ghi, sẽ đọc được dữ liệu ngay lập tức. Dữ liệu được nhân rộng đồng bộ.

Cách tiếp cận này được nhìn thấy trong các hệ thống file và RDBMS. Tính nhất quán mạnh mẽ hoạt động tốt trong các hệ thống cần bảo đảm tính ACID.

THAM KHẢO THÊM TẠI:

Transactions across data centers

CÁC PATTERNS VỀ TÍNH KHẢ DỤNG, SẴN SÀNG (AVAILABILITY)

Có hai patterns chính để hỗ trợ tính khả dụng cao (high availability): fail-over (chuyển đổi dự phòng) và replication (nhân bản).

FAIL-OVER

ACTIVE-PASSIVE

Với chuyển đổi dự phòng dạng active-passive, các lệnh check heartbeats được gửi giữa máy chủ active và máy chủ passive ở chế độ standby. Nếu heartbeats bị gián đoạn, máy passive sẽ chiếm địa chỉ IP của máy active và tiếp tục dịch vụ.

Thời gian ngừng hoạt động được xác định bởi liệu máy passive đã chạy ở chế độ ‘hot’ standby hay liệu nó có cần khởi động từ chế độ ‘cold’ standby hay không. Chỉ có máy chủ active xử lý request.

Chuyển đổi dự phòng dạng active-passive cũng có thể được gọi là chuyển đổi dự phòng master-slave.

ACTIVE-ACTIVE

Trong active-active, cả hai máy chủ đều xử lý request, phân tán tải giữa chúng.

Nếu các máy chủ được công khai ra internet, DNS sẽ cần biết về IP công khai của cả hai máy chủ. Nếu các máy chủ nằm trong nội bộ, logic ứng dụng sẽ cần biết về cả hai máy chủ.

Chuyển đổi dự phòng hoạt động active-active cũng có thể được gọi là chuyển đổi dự phòng master-master.

NHƯỢC ĐIỂM CỦA CHUYỂN ĐỔI DỰ PHÒNG

Chuyển đổi dự phòng thêm phần cứng và tăng độ phức tạp.
Có khả năng mất dữ liệu nếu hệ thống hoạt động bị lỗi trước khi bất kỳ dữ liệu mới được ghi nào có thể được nhân rộng (replicate) sang máy passive.

NHÂN RỘNG (REPLICATION)

MASTER-SLAVE REPLICATION

14-1

Máy chủ master phục vụ đọc và ghi, sao chép ghi vào một hoặc nhiều máy slave chỉ phục vụ đọc. Các slave cũng có thể sao chép thêm các slave theo kiểu giống như mô hình cây. Nếu master ngừng hoạt động, hệ thống có thể tiếp tục hoạt động ở chế độ chỉ đọc cho đến khi một máy slave được thăng cấp thành master hoặc có một master mới được cung cấp.

Nhược điểm:

  • Cần logic để thăng cấp một máy slave thành máy master.
  • Có khả năng mất dữ liệu nếu máy master bị lỗi trước khi bất kỳ dữ liệu mới được ghi nào có thể được sao chép sang các máy salve khác.
  • Việc nhân rộng yêu cầu phải thêm phần cứng và tăng thêm độ phức tạp.

MASTER-MASTER REPLICATION

14-2

Cả hai máy master phối hợp với nhau phục vụ đọc ghi. Nếu một trong hai chủ bị hỏng, hệ thống có thể tiếp tục hoạt động với cả đọc và ghi.

Nhược điểm:

  • Sẽ cần đến một bộ cân bằng tải hoặc sẽ cần thay đổi logic ứng dụng để xác định nơi ghi.
    Hầu hết các hệ thống master-master đều có tính nhất quán lỏng lẻo (vi phạm ACID) hoặc tăng độ trễ ghi do đồng bộ hóa.
  • Giải quyết xung đột xuất hiện nhiều hơn khi nhiều nút ghi được thêm vào và do đó sẽ làm tăng độ trễ (latency).
  • Và tất nhiên, việc nhân rộng yêu cầu phải thêm phần cứng và tăng thêm độ phức tạp.

CÁC TÍNH KHẢ NĂNG KHẢ DỤNG

Tính khả dụng thường được định lượng theo thời gian hoạt động (hoặc thời gian chết) theo phần trăm thời gian dịch vụ có sẵn. Tính khả dụng thường được đo bằng số lượng các số 9 – một dịch vụ có 99,99% khả dụng được mô tả là có bốn số 9.

99.9% AVAILABILITY – 3 SỐ 9

Duration Acceptable downtime
Downtime per year 8h 45min 57s
Downtime per month 43m 49.7s
Downtime per week 10m 4.8s
Downtime per day 1m 26.4s

99.99% AVAILABILITY – FOUR 9S

Duration Acceptable downtime
Downtime per year 52min 35.7s
Downtime per month 4m 23s
Downtime per week 1m 5s
Downtime per day 8.6s

KHẢ DỤNG SONG SONG VS THEO TRÌNH TỰ

Nếu một dịch vụ bao gồm nhiều thành phần dễ bị lỗi, tính khả dụng chung của dịch vụ phụ thuộc vào việc các thành phần đó theo trình tự hay song song.

THEO THỨ TỰ

Tính khả dụng chung giảm khi hai thành phần có sẵn < 100% theo thứ tự:

Tính khả dụng (tổng) = Tính khả dụng (Foo) * Tính khả dụng (Bar)

Nếu cả Foo và Bar đều có sẵn 99,9%, tổng số khả dụng của chúng theo thứ tự sẽ là 99,8%.

SONG SONG

Tính khả dụng chung tăng khi hai thành phần có sẵn < 100% song song:

Tính khả dụng (tổng) = 1 – (1 – khả dụng (Foo)) * (1 – khả dụng (Bar))

Nếu cả Foo và Bar đều có sẵn 99,9%, thì tổng khả dụng song song của chúng sẽ là 99.9999%.

Theo system-design-primer

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

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Máy tính lượng tử là gì? Tìm hiểu về máy tính lượng tử

Máy tính lượng tử là gì? Tìm hiểu về máy tính lượng tử

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

Như các bạn đã biết, các máy tính hiện đại ngày nay có bộ xử lý trung tâm là CPU (hay còn gọi là Chip) đang dần đạt đến giới hạn vật lý có thể đạt được.

Hiện tại là tiến trình 7nm, tương lai các CPU chỉ còn 2nm thậm chị là 1nm. Khi các bóng bán dẫn đạt tới mức này, việc thu nhỏ thêm là vô cùng khó khăn.

Nhiều chuyên gia và người yêu công nghệ cho rằng, để thay cho giải pháp bóng bán dẫn, các nhà khoa học sẽ nghiên cứu tới các máy tính lượng tử (cấp độ phân tử).

#1. Máy tính lượng tử là gì?

Khác với máy tính kỹ thuật số, máy tính lượng tử hoạt động dựa trên hoạt động của cơ học lượng tử, để xử lý dữ liệu đầu vào. Như vậy, hiểu đơn giản máy tính lượng tử là máy tính hoạt động trên cơ sở của những hạt lượng tử.

Các hoạt động chủ yếu của lượng tử được áp dụng vào máy tính lượng tử là tính chồng chập và vướng víu lượng tử.

Không giống với các máy tính kỹ thuật số thông dụng ngày nay, dữ liệu được mã hóa thành số nhị phân (bit) và gán cho nó 2 giá trị TẮT và MỞ tương ứng là 0 và 1. Và nó chỉ có thể nhận được 1 trong 2 giá trị 0 hoặc 1.

Còn các máy tính lượng tử sử dụng đơn vị là “qubits” (quantum bits, bits lượng tử ) với các giá trị nằm trong khoảng từ 0 tới 1. Nó có thể nhận được cả 2 giá trị 0 và 1 cùng một lúc.

Để có thể giải thích thì nguyên lý hoạt động của máy tính lượng tử dựa trên 2 hoạt động cơ học là tính chồng chập và vướng víu lượng tử là rất khó hiểu với đại đa số chúng ta, nên mình xin phép không đề cập đến.

Chúng ta chỉ cần biết rằng máy tính lượng tử là máy tính từ những hạt cơ bản (lượng tử) và nó hoạt động nhờ trên các hoạt động của cơ học lượng tử.

#2. Khả năng tính toán gấp nhiều lần so với máy tính kỹ thuật số

Theo nghiên cứu, các máy tính lượng tử có khả năng xử lý theo cấp số nhân (theo số lượng qubits). Chỉ với việc tăng một số lượng nhỏ qubits thì ta sẽ có gấp nhiều lần năng lực xử lý của máy tính.

Tuy nhiên, đó là chỉ là trên lý thuyết, việc thêm một lượng qubits phải đảm bảo không có lỗi nào trong quá trình xảy ra rối lượng tử và chỉ vài sai lệnh nhỏ trong vấn đề tính toán là mọi việc đều công cốc.

  Kỹ thuật phần mềm vs Khoa học máy tính - Nên chọn ngành nào/
  Tại sao có rất ít người chọn ngành Khoa học máy tính?

#3. Máy tính lượng tử có hình dạng như thế nào?

Không giống với các máy tính thông thường, các máy tính lượng tử có hình dáng khá là đặc biệt, chúng trông giống như một chiếc đèn chùm khổng lồ và các chuyên gia cũng gọi đó là kiến trúc đèn chùm.

Máy tính lượng tử là gì? Tìm hiểu về máy tính lượng tử
Hình dạng máy tính lượng tử

Cũng giống như các máy tính thông thường, máy tính lượng tử cũng có một nhân trung tâm là một siêu chip với các qubit được sắp xếp theo dạng bàn cờ vua.

Nhân chip và cụ thể là các qubits có cấu tạo là các vi tụ điện được làm từ Niobium với độ cứng ngang với Titan.

Các cực của qubit được làm để dao động, và không duy trì một trạng thái cố định nào, chính vì lý do này nên máy tính lượng tử có khả năng xử lý mạnh hơn máy tính thông thường.

Máy tính lượng tử là gì? Tìm hiểu về máy tính lượng tử
Nhân chip máy tính lượng tử

Con chip này được đặt trong một trường vi sóng điện từ, hoạt động trong điều kiện lạnh, cực lạnh, thậm chí ở mức gần 0oK.

Để đạt được ngưỡng nhiệt này, cách hiệu quả và ít tốn kém nhất hiện tại là  máy tính sẽ được nhấn chìm trong một bể Heli lỏng.

#4. Phần mềm của máy tính lượng tử

Nếu bạn trông chờ máy tính lượng tử cũng chạy hệ điều hành, hay các soft như máy tính thông thường thì đã làm các bạn thất vọng rồi. Thực tế thì hiện nay không có một phần mềm nào hoạt động được trên máy tính lượng tử.

Để kiểm tra khả năng xử lý của máy tính, các chuyên gia đã phải nghiên cứu ra các tác vụ công cụ riêng đặc biệt có thể nói là độc nhất vô nhị để chạy trên siêu máy tính này.

Có thể thấy rõ, tuy chúng ta đã đạt được những bước tiến lớn trong ngành này nhưng vẫn chưa thể áp dụng lên thực tiễn được.

Nếu so sánh với việc sản xuất máy bay thì chúng ta chỉ đang ở giai đoạn những chiếc máy bay đầu tiên trên thế giới, chỉ nhấc lên khỏi mặt đất chứ không thể gọi là bay đúng nghĩa.

Sẽ còn quá sớm để nói rằng máy tính lượng tử sẽ được ứng dụng vào cuộc sống, ít nhất cũng cần 40 tới 50 năm nữa chúng ta mới có được những chiếc máy lượng tử ứng dụng vào phổ thông.

Trong khoảng thời gian đó, máy tính kỹ thuật số sẽ đứng trước chướng ngại vật lý về kích thước bóng bán dẫn, chúng ta chỉ có thể chờ xem liệu tiến bộ khoa học sẽ làm gì với rào cản này.

Trên đây là bài viết cơ bản nhất về máy tính lượng tử, một ngành khoa học mới và vô cùng phức tạp. Bài viết nhằm đem lại cho các bạn những kiến thức cơ bản và dễ hiểu nhất về máy tính lượng tử nên không tránh khỏi những thiếu sót.

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

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

Xem thêm Tìm việc IT hấp dẫn trên TopDev

Kỹ sư phát triển và kỹ sư kiểm thử đều test app giỏi như nhau?

Kỹ sư phát triển và kỹ sư kiểm thử đều test app giỏi như nhau?

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

Câu hỏi này là đề tài tranh luận phức tạp. Kỹ sư phát triển kiểm thử mã của họ. Kết quả của quá trình kiểm thử này là gì? Phải chăng là toàn bộ những luồng làm việc  của hệ thống? Thông thường, kỹ sư phát triển chỉ nhìn thấy những luồng làm việc chính và cơ bản của sản phẩm, và thường không đi sâu vào chi tiết từng luồng làm việc khác nhau. Kỹ sư kiểm thử giỏi sẽ giúp app không bị crash ở những luồng không mong muốn.

  Biện hộ: Vì sao các Developer không test phần mềm của họ?
  5 app dù bị đánh giá thấp nhưng không nên bỏ qua

It’s not a bug, it’s a feature

Vấn đề chính trong việc kiểm thử do kỹ sư phát triển tiến hành là việc không nắm rõ, hiểu nhầm các yêu cầu chức năng. Nếu một yêu cầu chức năng bị hiểu nhầm bởi kỹ sư phát triển, bất kế kỹ sư phát triển tiến hành kiểm thử sâu đến mức độ nào, lỗi sẽ không bao giờ được tìm thấy. Và lỗi sẽ được kỹ sư phát triển nhìn nhận, ngay từ ban đầu, như một chức năng – It’s not a bug, it’s a feature 🙂

Những kỹ sư phát triển cho rằng: mã do tôi viết và tôi tự tin nó hoạt động một cách chính xác. Không cần phải kiểm thử luồng làm việc này, không cần kiểm thử cách ứng xử kia, và tôi biết là nó/ứng dụng làm việc một cách chính xác và hợp lý. Kết quả là, kỹ sư phát triển bỏ qua khả năng xảy ra lỗi.

Kỹ sư phát triển và kỹ sư kiểm thử

Kỹ sư phát triển luôn cảm thấy mã hoạt động chính xác. Và anh ta sẽ làm kiểm thử để khẳng định mã hoạt động chính xác. Nhưng, lý do gì đển kỹ sư kiểm thử tiến hành kiểm thử ứng dụng? Để tìm ra lỗi ở một điểm nào đó và kỹ sư kiểm thử tiến hành kiểm thử để chứng minh ứng dụng không làm việc một cách chính xác. Đây chính là điểm khác biệt chính trong cách tiến hành kiểm thử của kỹ sư phát triển và kỹ sư kiểm thử.

Kỹ sư phát triển có nên làm kiểm thử với mã của họ?

Về cá nhân, tôi không có vấn đề gì nếu kỹ sư phát triển kiểm thử mã của họ. Sau tất cả, đó là sản phẩm của họ. Họ biết mã rất rõ. Họ biết các bẫy trong mã. Nơi mã có thể có lỗi, nơi nào cần chú ý nhiều hơn, đâu là luồng làm việc quan trọng của ứng dụng. Kỹ sư phát triển có thể tiến hành các kiểm thử đơn vị và có thể thiết lập những trường hợp biên – boundary cases.

Kỹ sư phát triển và kỹ sư kiểm thử đều test app giỏi như nhau?

Đó là tất cả những gì để kỹ sư phát triển có thể trở thành một kỹ sư kiểm thử tốt. Nhưng, hầu hết kỹ sư phát triển nhìn nhận kiểm thử là một công việc mệt mỏi, bất kể họ hiểu hệ thống tốt như thế nào họ cũng sẽ bỏ qua nhiều luồng kiểm thử khác nhau. Nếu một kỹ sư phát triển tìm thấy lỗi trong mã của họ khi đang tiến hành kiểm thử đơn vị, lỗi sẽ tương đối dễ chỉnh sửa, một phần vì mã vừa mới được viết ra; hơn là chỉnh mã để sửa lỗi do nhóm kiểm thử tìm thấy vài ngày sau đó. Nhưng, việc này cũng chỉ hiệu quả khi mà kỹ sư phát triển cảm thấy hứng thú với việc kiểm thử.

Trách nhiệm của kỹ sư kiểm thử là đảm bảo tất cả các luồng làm việc của hệ thống đều được kiểm thử. Kỹ sư kiểm thử nên chỉ ra sự quan trọng của từng vấn đề khả dĩ để kiểm tra rằng hệ thống không bị thiếu sót ở bất kỳ đâu.

Mỗi người trong nhóm đều là chuyên gia trong từng lĩnh vực của họ. Kỹ sư phát triển thường nghĩ về cách phát triển ứng dụng trong khi kỹ sư kiểm thử nghĩ về cách người dùng cuối sử dụng ứng dụng đó.

Kết luận

Vậy nên, về cơ bản, sẽ không có vấn đề gì nếu kỹ sư phát triển tiến hành những bài kiểm thử đơn vị cơ bản. Kỹ sư phát triển có thể kiểm thử vài điều kiện đặc biệt mà họ biết là nghiêm trọng và không thể bỏ qua. Nhưng vẫn còn những kỹ sư kiểm thử giỏi trong nhóm. Đừng phí thời gian của kỹ sư phát triển. Để dự án thành công, cần có đội ngũ kiểm thử độc lập để kiểm thử ứng dụng. Và, sau cùng, trách nhiệm của kỹ sư kiểm thử là làm cho sản phẩm tốt hơn cho người dùng.

Bạn nghĩ sao?

Dịch từ softwaretestinghelp

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

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

Xem thêm Tuyển tester lương cao hấp dẫn trên TopDev

Cách tạo các biểu mẫu cơ bản bằng React Hooks

Cách tạo các biểu mẫu cơ bản bằng React Hooks

Trong Dự án React cho người mới bắt đầu này, chúng ta sẽ học cách xây dựng các biểu mẫu cơ bản bằng cách sử dụng React hook. Chúng ta sẽ tìm hiểu cách quản lý state biểu mẫu, xử lý xác thực và làm việc với trình xử lý gửi.

Kiểm tra thử nào:

Bắt tay xử lý vấn đề

Nếu bạn muốn tự mình thực hiện trước, đây là các tình huống (bạn cũng có thể lấy CSS / source code bên dưới):

  • Người dùng có thể nhập các giá trị vào biểu mẫu React Hooks
  • Khi người dùng nhấp vào gửi, nếu bất kỳ trường nào trống, thì thông báo lỗi sẽ xuất hiện màu đỏ
  • Nếu biểu mẫu được gửi và hợp lệ, thông báo thành công sẽ xuất hiện

Video hướng dẫn

Source code tham khảo

Source code trên GitHub

Bắt đầu thôi! Add state

Chúng ta sẽ bắt đầu bằng cách thêm một đối tượng state để giữ biểu mẫu của React Hooks. Chúng ta sẽ lấy một dòng mới ở đầu App function trong App.js và thêm phần sau:

const [values, setValues] = useState({
	firstName: '',
	lastName: '',
	email: '',
});

Chúng ta có ba trường trên biểu mẫu mà chúng ta cần biết state.

Bây giờ, state ban đầu sẽ là một đối tượng. Và đối tượng này sẽ có ba giá trị, một giá trị cho mỗi trường này. Vì vậy, chúng ta sẽ gọi chúng một cái gì đó tương tự như những gì chúng được gọi trong biểu mẫu.

firstName sẽ được đặt thành trống ban đầu, giống với lastName và giống với email.

Và bây giờ, bạn sẽ nhận thấy lỗi “useState is not defined”, vì vậy bạn cần nhập nó từ React tại đây. Thực hiện việc này ở đầu tệp như một phần của quá trình nhập:

import React, { useState } from "react";

Được rồi, bây giờ nó cho chúng ta biết rằng các biến này chưa được sử dụng. Điều này là tốt vì chúng ta chưa áp dụng các giá trị này cho biểu mẫu của React Hooks. Nhưng tất cả những gì chúng ta đã làm cho đến nay là chúng ta đã tạo một đối tượng state và đối tượng state này kéo firstName, lastNameemail.

Bây giờ chúng ta có một số giá trị ở state, nên áp dụng chúng vào các trường input. Thêm một thuộc tính value vào mỗi trường input của bạn như sau:

<input
    id="first-name"
    class="form-field"
    type="text"
    placeholder="First Name"
    name="firstName"
    value={values.firstName}
/>

<input
    id="last-name"
    class="form-field"
    type="text"
    placeholder="Last Name"
    name="lastName"
    value={values.lastName}
/>

<input
    id="email"
    class="form-field"
    type="text"
    placeholder="Email"
    name="email"
    value={values.email}
/>

Tất cả những gì chúng ta đã làm ở đây là nói, “Được rồi, đối với input này, giá trị sẽ là bất kỳ giá trị nào ở state.” Hãy lưu điều này và xem những gì đang diễn ra trong các biểu mẫu trong React Hooks, để đảm bảo mọi thứ vẫn hoạt động.

Xem thêm các việc làm React hấp dẫn lương cao

Nếu bạn chọn một input và bắt đầu gõ mạnh trên bàn phím, không có gì xuất hiện trên màn hình. Vậy điều gì đang xảy ra ở đây?

Cập nhật input states

Chà, chúng ta đã nói rằng giá trị của input này sẽ là bất kể nó ở state nào.

Ví dụ: firstName hiện được đặt thành trống vì đó là những gì chúng ta đặt nó thành, nhưng chúng ta chưa nói với input, “Được rồi. Bất cứ khi nào tôi nhập hoặc input thay đổi, tôi muốn bạn tiếp tục và cập nhật state mới các giá trị. “

Bất cứ khi nào chúng ta làm những việc như thế này, nó sẽ cho phép React hooks kiểm soát một cách hiệu quả. Vì vậy, chúng ta phải yêu cầu React hooks cập nhật các giá trị.

Điều này có nghĩa là chúng ta phải cập nhật các giá trị state bất cứ lúc nào chúng ta nhập vào các trường này.

Được chứ. Cách đơn giản nhất để làm điều này là tạo một trình xử lý cho mỗi trường input này, trình xử lý này sẽ cập nhật state bất kỳ khi nào xảy ra sự kiện thay đổi.

Hãy tiếp tục và thêm phần sau ngay bên dưới các đối tượng state:

const handleFirstNameInputChange = (event) => {
	event.persist();
	setValues((values) => ({
		...values,
		firstName: event.target.value,
	}));
};

Điều này diễn ra sự kiện mà chúng ta nhận được từ onChange. Về cơ bản chúng ta đang cập nhật đối tượng này và sau đó lưu nó trở lại state.

Chúng ta sẽ sao chép các giá trị cũ bằng cách thực hiện dấu ba chấm, còn được gọi là toán tử chênh lệch. Và sau đó, chúng ta sẽ chỉ nhập các giá trị và thêm dấu phẩy.

Tiếp theo, chúng ta sẽ nói rằng firstName sẽ bằng event.target.value. chúng ta muốn thêm điều này vào input của chúng ta. Vì vậy, trong JSX của chúng ta trong input cho tên, chúng ta sẽ lấy một dòng mới ở đâu đó (ở bất kỳ đâu, điều đó không thực sự quan trọng) và thêm thuộc tính onChange như sau:

<input 
    id='first-name' 
    class='form-field' 
    type='text' 
    placeholder='First Name' 
    name='firstName' 
    value={values.firstName} 
    onChange={handleFirstNameInputChange} />

Bây giờ, nếu chúng ta truy cập trình duyệt của mình và bắt đầu nhập, bạn có thể thấy rằng mọi thứ hoạt động. Phần còn lại của chúng không hoạt động vì chúng ta chưa thêm trình xử lý cho chúng. chúng ta sẽ xem xét điều đó trong một phút.

Chỉ để tóm tắt lại những gì đang xảy ra: bất cứ khi nào chúng ta nhập vào ô này, sự kiện onChange sẽ xảy ra cho mọi lần nhấn phím. Điều này được gọi mọi lúc.

Sự kiện được React hooks chuyển vào và chúng ta muốn cập nhật đối tượng state của mình. Vì vậy, để làm điều đó, chúng ta gọi hàm setValues và truyền vào một đối tượng mới với các giá trị được cập nhật.

Bây giờ, chúng ta chỉ muốn làm điều tương tự cho lastNameemail. Thêm một trình xử lý khác cho mỗi:

const handleLastNameInputChange = (event) => {
	event.persist();
	setValues((values) => ({
		...values,
		lastName: event.target.value,
	}));
};

const handleEmailInputChange = (event) => {
	event.persist();
	setValues((values) => ({
		...values,
		email: event.target.value,
	}));
};

Và đừng quên thêm các thuộc tính onChange vào các trường input cho mỗi:

<input
    id="last-name"
    class="form-field"
    type="text"
    placeholder="Last Name"
    name="lastName"
    value={values.lastName}
    onChange={handleLastNameInputChange}
/>
<input
    id="email"
    class="form-field"
    type="text"
    placeholder="Email"
    name="email"
    value={values.email}
    onChange={handleEmailInputChange}
/>

Bây giờ là thời điểm của sự thật. Mọi thứ đang hoạt động hay chúng ta đã làm hỏng thứ gì đó trong quá trình? Hãy thử tìm nó và xem. Điền vào một số dữ liệu và các trường input sẽ hoạt động ngay bây giờ.

Mặc dù các trường input của chúng ta đang hoạt động, chúng ta vẫn gặp một vấn đề nếu chúng ta nhập nội dung trong biểu mẫu và cố gắng gửi, nó sẽ không làm được gì cả. Nó sẽ chỉ làm mới trang và tất cả dữ liệu biểu mẫu của React Hooks sẽ bị mất.

Hiển thị thông báo thành công

Sau khi nhấp vào đăng ký, nó sẽ hiển thị thông báo thành công nếu biểu mẫu hợp lệ. Những gì chúng ta muốn làm là truy cập JSX của chúng ta và ngay bên dưới biểu mẫu thêm một div mới. Một lần nữa, tôi đã thêm các lớp cho bạn để có một thông báo thành công:

<div class='success-message'>Success! Thank you for registering</div>

Tất nhiên, bây giờ, điều này sẽ không đi đến đâu. Nó chỉ giả vờ rằng chúng ta đã gọi một máy chủ hoặc một điểm kết thúc ở đâu đó. Và nó quay lại với một thông báo thành công, vì vậy chúng ta sẽ hiển thị thông báo này cho người dùng.

Nhưng hiện tại nó xuất hiện mọi lúc. Những gì chúng ta muốn là chỉ hiển thị điều này nếu người dùng đã gửi biểu mẫu bằng React Hooks thành công.

Vì vậy, chúng ta sẽ thêm một đối tượng state khác như sau:

const [submitted, setSubmitted] = useState(false);

Chúng ta sẽ giữ phần này tách biệt với các giá trị vì nó là một phần khác của biểu mẫu. Không muốn trộn mọi thứ vào đây và gây ra toàn bộ kết xuất lại. Điều này sẽ cho chúng ta biết liệu biểu mẫu đã được gửi hay chưa.

Ban đầu, nó sẽ được đặt thành false vì lần đầu tiên người dùng truy cập vào trang, nó sẽ không được gửi.

Và bây giờ, chúng ta chỉ muốn thực hiện một số nội dung thông minh trong JSX để nói, “Nếu được gửi là đúng, thì chúng ta muốn hiển thị thông báo thành công.”

Cập nhật dòng mà chúng ta vừa thêm vào như sau:

{showSuccess && <div class='success-message'>Success! Thank you for registering</div>}

Chúng ta sẽ gói gọn thông điệp thành công của mình trong một toán tử bậc ba. Về cơ bản, đó là một câu lệnh if viết tắt cho phép chúng ta hiển thị động mọi thứ trên trang.

Giờ đây, thông báo thành công sẽ chỉ xuất hiện nếu showSuccess là đúng. Như bạn có thể thấy bây giờ trong trình duyệt, điều này đã biến mất.

Nếu chúng ta quay trở lại đối tượng state của chúng ta để submitted và thay đổi điều này thành true, nó sẽ xuất hiện lại. Và nó có

Chúng ta sẽ thay đổi điều này trở lại thành false. Và sau đó, chúng ta sẽ làm mới Chrome của mình và chỉ cần xem điều gì sẽ xảy ra ngay bây giờ.

Chúng ta chưa cho nút đăng ký hoặc biểu mẫu biết điều gì sẽ xảy ra trên hội nghị, vì vậy nó vẫn sẽ làm mới trang. Bây giờ, chúng ta chỉ cần một trình xử lý mới để xử lý việc nhấp vào nút đăng ký.

Nếu chúng ta chuyển sang trình xử lý sự kiện của mình và thêm những thứ sau:

const handleSubmit = (e) => {
	e.preventDefault();
	setSubmitted(true);
};

event.preventDefault sẽ ngăn quá trình làm mới xảy ra mà chúng ta đã thấy.

Chúng ta sẽ thêm một số logic nữa vào đây trong một phút nữa về xác thực và các thứ. Nhưng hiện tại, chúng ta chỉ nói “setSubmitted” là đúng.

Tiếp theo, chúng ta cần yêu cầu biểu mẫu gọi hàm này khi nó được gửi. Cập nhật JSX để bao gồm thuộc tính onSubmit trong thẻ biểu mẫu như sau:

<form class='register-form' onSubmit={handleSubmit}>
	//... other code
</form>

Bây giờ nếu chúng ta chạy mã trên trình duyệt, bấm vào nút đăng ký, thông báo hiện ra.

Thêm Validation và hiển thị thông báo lỗi

Biểu mẫu của chúng ta cho đến nay trông rất ổn, nhưng chúng ta thiếu một thành phần quan trọng của bất kỳ biểu mẫu nào và đó là xác thực. Nếu chúng ta xem xét ví dụ làm việc của mình, nếu tôi gửi điều này với bất kỳ trường trống nào, một lỗi sẽ xuất hiện cho biết, “Vui lòng nhập thông tin chi tiết của bạn”.

Bên dưới mỗi input, chúng ta sẽ thêm một <span> sẽ chứa thông báo lỗi. JSX của bạn sẽ trông giống như sau:

<input
    id="first-name"
    class="form-field"
    type="text"
    disabled={showSuccess}
    placeholder="First Name"
    name="firstName"
    value={values.firstName}
    onChange={handleInputChange}
/>
<span id="first-name-error">Please enter a first name</span>

<input
    id="last-name"
    class="form-field"
    type="text"
    placeholder="Last Name"
    name="lastName"
    value={values.lastName}
    onChange={handleInputChange}
/>
<span id="last-name-error">Please enter a last name</span>

<input
    id="email"
    class="form-field"
    type="text"
    placeholder="Email"
    name="email"
    value={values.email}
    onChange={handleInputChange}
/>
<span id="email-error">Please enter an email address</span>

Bạn có thể thấy những lỗi này luôn xuất hiện, bởi vì chúng ta không có bất kỳ logic điều kiện nào cho biết “không xuất hiện”.

Bây giờ, chúng ta chỉ muốn các thông báo lỗi này hiển thị nếu nút đăng ký đã được nhấp.

Quay lại code. Chúng ta muốn thêm một số logic có điều kiện vào và xung quanh các thông báo lỗi để chúng chỉ xuất hiện nếu nút đã được nhấp và trường trống:

{submitted && !values.firstName && <span id='first-name-error'>Please enter a first name</span>}

Những gì chúng ta đang làm ở đây là kiểm tra xem biểu mẫu đã được gửi và đối tượng state firstName có trống không. Nếu vậy, chúng ta muốn hiển thị thông báo lỗi. Một lần nữa, chúng ta chỉ sử dụng một toán tử bậc ba, không có gì lạ!

Làm tương tự cho các lỗi khác:

{submitted && !values.lastName && <span id='last-name-error'>Please enter a last name</span>}

//...other code

{submitted && !values.email && <span id='email-error'>Please enter an email address</span>}

Nếu chúng ta để trống biểu mẫu và nhấp vào đăng ký, lỗi sẽ xuất hiện. Nếu chúng ta bắt đầu nhập mọi thứ, chúng ta có thể thấy rằng lỗi sẽ biến mất. Và nếu chúng ta xóa những gì chúng ta đã nhập, lỗi sẽ quay trở lại.

Hãy thử và gửi một số thứ. Được rồi, vì vậy điều này có vẻ đang hoạt động.

Điều cuối cùng chúng ta muốn làm là đảm bảo rằng thông báo thành công này chỉ xuất hiện nếu biểu mẫu hợp lệ. Hãy tiếp tục và thêm một giá trị state mới:

const [valid, setValid] = useState(false);

Điều này được sử dụng để cho chúng ta biết liệu biểu mẫu của chúng ta có hợp lệ hay không – hãy nhớ rằng, sử dụng các đối tượng state là một cách tốt để giữ “state” của các phần khác nhau trong ứng dụng của bạn (ai có thể đoán được?).

Thông báo thành công sẽ chỉ xuất hiện nếu đã gửi là đúng và theo dõi cũng đúng. Vì ban đầu chúng ta đã đặt giá trị hợp lệ là false, nên nó sẽ không hiển thị.

Xem thêm các việc làm về tuyển dụng Business Analyst

Trong hàm handleSubmit của chúng ta, chúng ta muốn nói rằng giá trị là true nếu một biểu mẫu hợp lệ. Chúng ta có thể làm điều này bằng cách kiểm tra từng giá trị state của chúng ta cho các trường biểu mẫu, đảm bảo rằng chúng là một giá trị trung thực.

Thêm những điều sau:

const handleSubmit = (event) => {
event.preventDefault();
if(values.firstName && values.lastName && values.email) {
    setValid(true);
}
setSubmitted(true);
}

Nếu bất kỳ trường nào trong số này là false, thì valid hợp lệ sẽ vẫn là false. Điều này có nghĩa là div thông báo thành công sẽ không được hiển thị. Hãy xem nó hoạt động. Nếu chúng ta nhấp vào đăng ký mà không có trường, thông báo lỗi của chúng ta sẽ hiển thị. Hãy nhập một số nội dung hợp lệ, nhấn đăng ký và thông báo xuất hiện!

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

Xem thêm tuyển dụng IT hấp dẫn trên TopDev

Tập chấp nhận và khắc phục sai lầm

Chấp nhận sai lầm và đạt thành công từ chúng

Sai lầm thường được xem là một danh từ mang tính tiêu cực, nhưng bạn hoàn toàn có thể nhìn nhận nó theo hướng tích cực hơn. Đơn giản vì chúng ta luôn mắc lỗi, nên ít nhất hãy biến chúng thành bài học để có thể khắc phục sai lầm.

Không ai là hoàn hảo – chúng ta luôn mắc lỗi và điều hoàn toàn tạo nên con người chúng ta. Chúng ta không sống trong một thế giới hoàn hảo, và chính sự không hoàn hảo là điều khiến cuộc sống trở nên năng động hơn.

Đôi khi, ngay cả một sai sót nhỏ cũng có thể dẫn đến những tổn thất lớn về tài chính, đặc biệt là đối với các bạn lập trình viên ngoài kia.

Nhưng thay vì chỉ cảm thấy tồi tệ khi mắc sai lầm, bạn có thể làm một vài điều để khắc phục sai lầm đó.

1. Học từ sai lầm

Chấp nhận sai lầm và đạt thành công từ chúng

Nguyên tắc vàng khi bạn mắc sai lầm là bạn phải học được gì từ đó.

Tôi chắc rằng tất cả các bạn đã nghe qua điều này (và đang nghĩ “Ờ cảm ơn ông, nói điều ai cũng biết”). Nhưng những bạn đã nghe qua khái niệm này đã từng thực sự áp dụng nó chưa?

Ông bà ta có rất nhiều câu ca dao tục ngữ, đại ý là bạn không nên mắc cùng một sai lầm hai lần. Nhưng trên thực tế, mọi người đều có thể mắc những sai lầm giống nhau lặp đi lặp lại. Học hỏi từ sai lầm không đảm bảo rằng bạn sẽ không mắc phải sai lầm tương tự nữa.

Xem thêm các việc làm Citigo tuyển dụng

Có rất nhiều điều bạn có thể học được từ sai lầm của mình: Nó đã xảy ra như thế nào? Nó đã ảnh hưởng đến gì? Nó nghiêm trọng ra sao?

Những bài học sẽ không bao giờ là đủ cả.

Nhưng điều quan trọng nhất là bạn cố gắng hiểu về sai lầm đó một cách đầy đủ. Ít nhất thì giảm tối thiểu khả năng nó xảy ra lần nữa hoặc khắc phục sai lầm. Và hãy chắc rằng bạn mắc phải sai lầm theo cách hoàn toàn khác lúc đầu.

2. Đưa ra giải pháp thay vì bào chữa

Chấp nhận sai lầm và đạt thành công từ chúng

Bất cứ khi nào có chuyện gì đó xảy ra vì một sai lầm, điều đầu tiên mà hầu hết mọi người làm là đưa ra lời bào chữa. Thậm chí còn có một số câu trả lời và đổ lỗi cho qua chuyện, mà họ quên mất điều quan trọng nhất là: giải quyết vấn đề.

Thay vì viện lý do, thì việc tìm giải pháp nên là ưu tiên hàng đầu của bạn. Tất nhiên, có thể có một lý do chính đáng nào đó khiến bạn mắc lỗi, nhưng điều đó có thể đợi cho đến khi bạn tìm ra giải pháp phù hợp.

Hãy sử dụng thời gian của bạn một cách hiệu quả. Khi mọi thứ được xử lý ổn thỏa, bạn có thể giải thích những gì đã xảy ra một cách cẩn thận và đưa ra phân tích để khắc phục sai lầm.

3. Không biết thì không sao, nhưng cố tình lờ đi thì không đượcChấp nhận sai lầm và đạt thành công từ chúng

Thường chúng ta mắc sai lầm vì chúng ta không biết điều gì đó. Nhưng những sai lầm kiểu đó có ổn không?

Mọi người mắc sai lầm khi bước vào lãnh thổ không xác định là điều bình thường. Nhưng câu hỏi thực sự bạn cần đặt ra là nếu người đó không biết hoặc không cố gắng biết, bởi vì những điều đó hoàn toàn khác nhau.

Đôi khi trong cuộc sống, chúng ta đi đường tắt và tìm ra cách dễ dàng để thực hiện một điều gì đó. Chẳng có vấn đề gì với việc đấy cả.

Nhưng những gì mọi người thường quên là các phím tắt có thể gây hiểu lầm, và vâng, có thể là từ mạnh ở đây. Mọi người có xu hướng bỏ qua khả năng xảy ra sự cố và không nghĩ nhiều về hậu quả.

Khi ai đó nói “Tôi không biết”, điều này thường được dịch thành “Tôi không buồn biết.” Mọi người có xu hướng tìm cách dễ dàng để làm điều gì đó và tiếp tục không biết về những gì họ đang làm. Họ không buồn nhìn sâu hơn vì mọi thứ có vẻ ổn.

Khi bạn vô tình gây ra sai lầm vì bạn thực sự không biết điều gì đó, điều đó là tốt. Nhưng khi bạn gây ra sai lầm do cố tình thiếu hiểu biết, điều đó không ổn. Bởi vì cho dù bạn mắc phải sai lầm bao nhiêu lần, bạn cũng sẽ không bao giờ rút ra được bài học từ nó.

4. Đừng quên chia sẻ sai lầm của bạn

Chấp nhận sai lầm và đạt thành công từ chúng

Thường khi chúng ta mắc lỗi, chúng ta chỉ cố gắng khắc phục sai lầm và tiếp tục học tập từ đó. Chúng tôi quên rằng điều rất quan trọng là phải chia sẻ những sai lầm của chúng tôi.

Chúng ta có thể bối rối trước viễn cảnh trông thật ngớ ngẩn. Nhưng may mắn thay, lợi ích vượt xa điều đó.

Đầu tiên và quan trọng nhất, nó sẽ giúp người khác tránh mắc phải những sai lầm như bạn đã làm. Và trong sâu thẳm họ sẽ thực sự biết ơn vì điều đó.

Không chỉ vậy, chia sẻ những sai lầm của bạn có thể mang lại cho bạn một cái nhìn mới và khác biệt về những gì người khác có thể nghĩ về nó. Họ có thể cho bạn một góc nhìn mới hoặc có thể là một giải pháp tốt hơn để xử lý nó.

Đừng quên chia sẻ những sai lầm của bạn, bởi vì chia sẻ là quan tâm.

5. Đúc kết từ hậu quả

Chấp nhận sai lầm và đạt thành công từ chúng

Hãy nhớ rằng mọi sai lầm đều đi kèm với hậu quả. Chúng có thể gây tổn thất tài chính, hoặc thậm chí ảnh hưởng đến uy tín của bạn.

Cần phải xác định rõ ràng và hiểu rõ hậu quả, vì hiểu rõ hậu quả sẽ trở thành yếu tố răn đe khi tiếp cận bất kỳ tình huống nào. Nó cũng sẽ giúp bạn xem xét tốt hơn cách bạn sẽ giải quyết vấn đề.

Xem thêm các việc làm về tuyển dụng Business Analyst

Đôi khi, hậu quả có thể ở lại với bạn trong một thời gian dài. Và bạn phải chịu đựng nó và chịu mọi hậu quả vì đó là trách nhiệm của bạn.

Nhưng dù hậu quả có lớn đến đâu thì cũng đừng quá khắt khe với bản thân. Giữ một tinh thần tốt và sự tích cực là chìa khóa để giải quyết hậu quả.

Kết bài

Sai lầm không phải là dấu chấm hết cho mọi thứ. Cuộc sống vẫn tiếp diễn và mọi thứ không ngừng vận động. Một số thứ bị bỏ lại phía sau và những thứ mới phát sinh.

Điều tốt nhất bạn có thể làm với bất kỳ sai lầm nào là học hỏi từ nó một cách tốt nhất có thể và biến nó thành một sai lầm thành công.

Cuộc sống là một hành trình quá dài để bạn có thể mắc kẹt vì một sai lầm. Hãy tiếp tục và tận hưởng chuyến đi.

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Các công cụ hữu ích hỗ trợ bạn trong việc tạo testdata

Các công cụ hữu ích hỗ trợ bạn trong việc tạo testdata

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

Mới nghỉ Tết xong, nhoáng cái đã một tuần trôi qua, thế rồi lại chẳng mấy chốc mà lại đến Tết nữa thôi… còn nhiều nợ quá chưa trả được. Hihi

Hôm nay nhân một ngày không có nhiều bận rộn như mọi ngày mới lại ngồi viết cái gì đó cho khỏi quên cảm giác viết blog :))) dù biết rằng số lượng và độ đều đặn đã giảm dần trong khoảng thời gian gần đây.

  Một vài khái niệm cơ bản về HTTP dành cho các tester
  Tester là gì? Kỹ năng cần thiết để trở thành một Tester

Dưới đây là danh sách một số ứng dụng mà mình đánh giá khá cao về mức độ hữu ích mà nó đem lại, và mình nghĩ là nó cũng sẽ hữu ích với các bạn trong công việc kiểm thử, và những việc khác nữa nếu như bạn biết cách áp dụng và tận dụng được những cái mà các công cụ này cung cấp.

1. lettercount.com

Ứng dụng web này cung cấp một công cụ giúp bạn có thể đếm số lượng ký tự, số lượng từ có trong một đoạn, một câu văn bất kỳ nào đó, sẽ hữu ích trong trường hợp tạo hoặc kiểm tra dữ liệu test mà có yêu cầu về số lượng từ, ký tự nhập vào. Các ký tự tiếng việt, dấu cách, ký tự đặc biệt… đều thoải mái. 😀 Các bạn có thể truy cập cụ thể vào link phía trên để tìm hiểu chi tiết hơn nhé.

Đơn giản hơn chúng ta cũng có thể sử dụng MS Word để kiểm tra số lượng từ và ký tự nếu thấy thuận tiện hơn 😀

2. loremipsum.de

Chúng ta có thể sử dụng ứng dụng này để tạo dữ liệu test trong trường hợp cần một lượng dữ liệu text lớn, một đoạn văn dài, ví dụ như các trường ghi chú, hoặc thông tin chi tiết, mô tả nào đó…. Ta có thể tùy chọn số lượng ký tự/ từ/ đoạn văn mong muốn, ứng dụng này sẽ cho đầu ra tương ứng phù hợp với yêu cầu đã chọn. Sau đó chỉ cần click nut copy là bạn có thể paste vào bất cứ textbox nào!

3. convertcase.net

Một ứng dụng mình nghĩ cũng rất là hay ho :)) giúp bạn có thể thay đổi cách viết/hiển thị của một đoạn text thành viết hoa, viết thường, thành hoa thường lẫn lộn, viết hoa các chữ cái đầu, chỉ viết hoa chữ cái đầu câu, … không phụ thuộc vào đầu vào của bạn viết như thế nào, chỉ cần lựa chọn các yêu cầu thay đổi chỉ sau một cú click chuột là bạn sẽ có được đầu ra tương ứng. Điều này cũng khá hữu ích trong việc tạo các dữ liệu test liên quan đến text. Ngoài ra còn cực kỳ hữu ích trong trường hợp có nhiều đoạn text, hoặc đoạn text dài thì ta có thể thay đổi kiểu viết hoa viết thường (hay kiểu mix giữa hoa thường :v) một cách đơn giản và nhanh chóng hơn bao giờ hết! 😀

4. URL Decoder/Encoder

Ứng dụng này giúp bạn giải mã/mã hóa một URL bất kỳ nào đó, chỉ cần copy và paste vào textbox trên ứng dụng, click Decode / Endcode thì bạn sẽ có ngay kết quả tương ứng. Ứng dụng giúp chúng ta dễ dàng giải mã các URL JavaScript rối rắm khó đọc thành một đường dẫn có thể đọc được.

5. Rubular

“Rubular a Ruby regular expression editor”, đây là ứng dụng hỗ trợ bạn tạo và kiểm tra cú pháp regular expression (biểu thức chính quy), (nếu bạn chưa quen thuộc với thuật ngữ này thì có thể tìm hiểu tại đây để hiểu thêm nhé), hiện nay có rất nhiều ứng dụng hỗ trợ bạn trong việc này, Rubular là một trong những ứng dụng đó nhé! 😀 Từ biểu thức bạn tạo, copy dữ liệu cần kiểm tra sau đó kiểm tra kết quả. Bên cạnh đó bạn cũng có thể tạo cho mình một permalink để có thể chia sẻ link biểu thức cùng với dữ liệu test và kết quả vừa làm với người khác.

6.Numverify

Numverify giúp bạn kiểm tra định dạng số điện thoại, tạo mã JSON về thông tin của số điện thoại đó một cách nhanh chóng, chỉ cần paste vào đó một số điện thoại bất kỳ, ứng dụng sẽ giúp bạn kiểm tra dãy số đó đã đúng định dạng của một số điện thoại hay chưa? Số điện thoại này thuộc quốc gia nào, thuộc nhà mạng nào, hay số này là thuê bao di động hay cố định… Bạn cũng có thể xem thông tin đó dưới dạng mã JSON, Numverify hỗ trợ kiểm tra thông tin số điện thoại của 232 nước trên thế giới.

Valid x
Local Format 4158586273
Intl. Format +14158586273
Country United States of America
Location Novato
Carrier AT&T Mobility LLC
Line Type Mobile

7. WEPAY testing

Wepay cung cấp môi trường, dữ liệu để chúng ta có thể sử dụng những tài khoản ngân hàng, hay các thẻ tín dụng ảo, rất hữu ích khi bạn cần test những hệ thống cần thông tin liên quan đến tài khoản ngân hàng, thông tin dữ liệu thẻ tín dụng, thanh toán…v…v… Chi tiết các bạn hãy truy cập vào link phía trên để tìm hiểu thêm nhé! 😀

8. Online random file generator

Ứng dụng này giúp bạn tạo ra các file với kích thước dung lượng của file tùy ý, tùy chọn tên file, định dạng file mong muốn một cách nhanh chóng. Chỉ sau một vài thao tác, bạn đã có một file bất kỳ và dung lượng như ý, sẽ rất tiện lợi trong những trường hợp tạo dữ liệu test cho hệ thống cần file đính kèm.

Rồi tạm thời thế đã nhỉ, mình nghĩ đây là một trong những những công cụ hay ho và hữu ích trong việc tạo các dữ liệu test, bạn có đang dùng những công cụ hay tiện ích nào khác nữa không? Cùng chia sẻ với mình ở bình luận phía dưới nhé! 😀 Mình đặc biệt thích số 8 và số 3 vì mình sử dụng nó nhiều nhất trong số những danh sách trên. Hi vọng cũng góp phần giúp ích cho các bạn trong công việc chuẩn bị dữ liệu kiểm thử cũng như trong quá trình kiểm thử của các bạn.

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

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

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

Khi bạn sử dụng máy tính mỗi ngày và trong một thời gian dài thì sẽ không thể tránh khỏi việc tồn tại một vài thư mục nào đó có dung lượng rất lớn (nếu như sau bao năm bạn đã không dọn dẹp máy tính).

Hay là trước đó bạn đã tải về rất nhiều tài liệu học tập rồi để đấy mà quên béng đi mất, cho đến khi máy tính của bạn sắp full bộ nhớ, bạn muốn tìm những file đang chiếm nhiều dung lượng (mà không cần thiết) để xóa bớt đi.

  Cách mạng 0.4 của Neovim: Floating Window
  40 phím tắt dành cho người dùng Windows

Bạn có đang mất công mở từng thư mục ra để xem nó đang ở đâu, và đang chiếm bao nhiêu dung lượng không? Vâng, nếu bạn đang làm như thế thì đúng là thất sách đấy, làm như vậy sẽ tốn rất mất thời gian của bạn.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Để giải quyết cho vấn đề trên thì trong bài viết này mình sẽ giới thiệu đến bạn phần mềm TreeSize, giúp bạn tiết kiệm được rất nhiều thời gian cho việc tìm kiếm file có dung lượng lớn.

Làm thế nào để tìm ra các file có dung lượng lớn trên Windows?

+ Bước 1: Bạn truy cập vào trang này (link dự phòng / link dự phòng) để tải phần mềm TreeSize. Hiện tại thì có 3 phiên bản khác nhau nhưng chỉ có bản TreeSize Free là miễn phí, bạn tải bản Free cho mình nhé.

=> Sau khi tải xong thì bạn tiến hành cài đặt như hướng dẫn có sẵn cho đến khi quá trình cài đặt kết thúc là xong. Rất dễ thôi!

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Và bên dưới là các bước cài đặt mà bạn có thể tham khảo nếu cần

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows
Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

+ Bước 2: Sau đó bạn mở phần mềm TreeSize Free lên để sử dụng. Giao diện khá giống với Windows Explorer. Bạn tìm đến phần Select Directory để chọn phân vùng ổ cứng mà bạn muốn quét.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Hoặc chọn biểu tượng Folder phía trên để chọn từng Folder mà bạn muốn.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

+ Bước 3: Sau khi chọn xong, sẽ có thông báo xuất hiện yêu cầu bạn Restart lại TreeSize với quyền Admin để phần mềm có thể mở các thư mục.

Vì nếu không thì bạn chỉ có thể xem được thông tin bên ngoài chứ không truy cập được vào Folder hay File được. Bạn nhấn Do not show again để lần sau nó không xuất hiện nữa rồi nhấn Restart as administrator.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Phần mềm sẽ bắt đầu quét ổ cứng được chọn, rồi nó sẽ hiển thị ra các thông tin như kích thước tệp, tỉ lệ phần trăm,.. các thứ.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Bạn có thể sử dụng TreeSize như là một File Explorer vì bạn có thể mở, xóa, sao chép, di chuyển file,… một cách hoàn toàn bình thường.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Nếu bạn muốn biết những Folder nào đang chiếm tỉ lệ phần trăm bao nhiêu thì có thể nhấn vào biểu tượng % như trong hình bên dưới để xem nhé.

Sử dụng tính năng này thì bạn sẽ biết chắc chắn những Folder đang chiếm quá nhiều dung lượng ổ cứng của bạn.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Để xem tỉ lệ phần trăm của các Folder con nằm trong một Folder mẹ thì bạn có thể nhấn chọn vào Folder mẹ.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Sau đó, tìm đến tính nănng Expand => và nhấn chọn level 1 để kiểm tra.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Bạn có thể thấy kết quả như hình dưới.

Cách tìm File/ Folder đang chiếm dung lượng lớn trên Windows

Còn nếu bạn muốn xem các Folder khác mà nằm trong các Folder con thì bạn có thể chọn level 2 hoặc level 3… tùy bạn, nhưng mình vẫn khuyên là làm từng bước và chỉ nên chọn level 1 để đỡ rối.

Lời Kết

Vậy là mình đã hướng dẫn xong cho bạn cách tải và sử dụng phần mềm TreeSize Free để tìm kiếm các File và Folder đang chiếm dung lượng lớn trong ổ cứng của bạn rồi nhé.

Nói tóm lại là công cụ này sẽ giúp bạn tiết kiệm rất nhiều thời gian so với việc bạn tự kiểm tra từng Folder đấy. Nó cũng có giao diện khá quen thuộc của File Explorer nên bạn có thể sử dụng một cách dễ dàng ngay từ lần đầu tiên.

Hi vọng là bài viết này sẽ hữu ích với bạn. Chúc bạn thực hiện thành công!

Bài viết gốc được đăng tải tại blogchiasekienthuc.com
Có thể bạn quan tâm:
Xem thêm Việc làm Developer hấp dẫn trên TopDev

Nhật kí những ngày đầu làm Tester

Nhật kí những ngày đầu làm Tester

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

Chào các bạn! Mục đích bài viết này của mình là chia sẻ những kỉ niệm của những ngày đầu làm Tester với những bạn đã và đang có mục tiêu trở thành tester trong tương lai.

Mình bắt đầu tìm hiểu về kiểm thử phần mềm từ năm cuối đại học, vì ở trường mình không được học môn này nên về cơ bản đều phải tự tìm hiểu hết :((…

Việc làm cho tester

Những nguồn tin nào mình chưa hiểu hay có thắc mắc gì cần giải đáp thì mình post bài lên các diễn đàn như testingvndiễn đàn testervn…Bảo vệ tốt nghiệp xong, thấy kiến thức mình còn quá ít, chỉ mới tìm hiểu cơ bản về kiểm thử, tìm tòi trên mạng, mình bắt đầu tham gia một khóa học kiểm thử trong 3 tháng…

.Sau 3 tháng, kết quả có khả quan hơn chút, nhưng vốn tiếng anh của mình còn kém nên đi xin việc rất khó khăn…Hầu như công ty nào có nhu cầu tuyển tester mình đầu apply vào nhưng qua vòng test đến vòng phỏng vấn đều “tạch” …:((….lúc đó thực sự nản luôn ấy…

Cuối cùng mình xin đi thực tập không lương ở một công ty gia công phần mềm trên đường Phạm Ngọc Thạch….thật may là mọi chuyện đều ổn. Những ngày đầu, có khó khăn hay thắc mắc gì các anh chị trong team đều hỗ trợ rất nhiệt tình….mình cố gắng học việc và học hỏi môi trường, cách làm việc, kinh nghiệm…nói chung học được gì thì học tất ^^…Và giờ thì mình thấy rất ổn. Hi vọng các bạn đừng bỏ cuộc, hãy kiên nhẫn, rồi sẽ có kết quả.

  Automation skills cho tester già mà lười
  Con đường trở thành Business Analyst của Tester

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

Xem thêm việc làm tester hcm, hà nội, đà nẵng hấp dẫn trên TopDev

5 Tips để trở thành Developer Pro

5 Tips để trở thành Developer Pro

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Mọi thức đều có level từ thấp đến cao… và developer cũng cũng chia level khác nhau từ intern, fresher, junior, senior, tech lead…

Việc để đạt 1 level mới của developer là cả một chặng đường dài, việc này đòi hỏi thời gian và công sức. Tuy nhiên để “thuận giò xuôi bướm” hơn, 5 Tips sau sẽ giúp ta sử dụng thời gian, công sức hiệu quả.

Xem thêm Các việc làm, tuyển Developer hấp dẫn trên TopDev

1. Nâng cao khả năng DEBUG

Mọi dòng code bạn viết ra đều tiềm ẩn khả năng gây lỗi, mọi phần mềm đều có lỗi không nhiều thì ít. Vì vậy, để trở thành một dev có tâm và có tầm, bạn cần rèn luyện kĩ năng tìm bug, fix bug, bạn cần trở thành một cao thủ xử lý bug và bug không thể lọt qua những business flow thông thường được.

Tuy nhiên, mình thấy rằng các bạn dev thường lảng tránh quá trình debug, khiến cho skill debug không tốt. Mỗi khi phát hiện bug, họ thường tìm kiếm đến một dev khác trình cao hơn để tìm kiếm sự trợ giúp.

Hệ quả là dev trình cao ngày càng cao bởi vì họ được tiếp xúc với nhiều bug, họ học được cách phán đoán, cách debug và xử lý bug, còn bạn nhờ vả mà không quan sát thì không nắm được gì cả!

Để có thể nâng cao khả năng dev và debug, mình nghĩ rằng:

  • Học cách tự giải quyết các vấn đề của bản thân, độc lập debug và xử lý bug.
  • Đừng vội đi nhờ sự trợ giúp còn bản thân thì ngồi nhìn, chỉ nên tìm kiếm sự trợ giúp khi bạn đã thật sự cố gắng hết sức và Nên áp dụng Mob programming cho bản thân mình là Driver và người giúp mình là behavior.
  • Bạn có thể sẽ hoàn thành task chậm hơn, mệt mỏi hơn vì debug và fix bug của chính mình, nhưng bạn sẽ học được nhiều thứ hơn là kinh nghiệm debug.

2. Quan sát mọi thứ hoạt động

Công việc dành cho các vị trí fresher, junior thường khá đơn giản, thông thường là làm theo một cái gì đó có sẵn.

Ví dụ: sửa một function dựa trên function đã có

Lý do: bởi trình độ của fresher, junior chưa đủ để có thể tự làm một công việc độc lập ở mức mediate task. Việc này không có gì sai, làm theo những thứ có sẵn do các anh senior làm sẽ giúp chúng ta học được nhiều điều về chuẩn viết code và thuật toán họ dùng.

Tuy nhiên, nếu bạn quá dựa dẫm vào những thứ có sẵn, chỉ biết copy/ paste từ những thứ có sẵn, chỉnh sửa chút cho phù hợp mà chưa thật sự hiểu gì về nó thì không tốt! Một nguy cơ tìm ẩm bug có thể xảy ra vì sự sai lệch thuật toán mà bạn viết thêm vào!

Để có thể phát triển nhanh, tốt nhất thì mình nghĩ:

  • Bạn cần giữ một cái đầu mở, một cái đầu tò mò. Đừng dễ dãi với những gì bạn làm, hãy tò mò, hãy hiểu tại sao nó lại được làm ra như vậy.
  • Hãy cố gắng hiểu tại sao mấy thánh trên stackoverflow lại hướng dẫn như vậy chứ đừng chỉ copy/paste code của họ.
  • Hãy hiểu tại sao code cũ lại được code như vậy chứ đừng chỉ bắt chước làm theo.
  • Có thể bạn sẽ hoàn thành task chậm hơn, mệt mỏi hơn, đôi khi còn bị sếp chỉ trích vì làm việc chậm không bằng X, Y, Z. Tuy nhiên, hãy nghĩ cho bản thân bạn, học cách mọi thứ hoạt động sẽ tốt cho bạn và sản phẩm bạn làm ra.

3. Đừng chỉ hoàn thành task, hãy nhìn vào bức tranh lớn

Công việc dành cho các vị trí thấp thường rất đơn giản, những công việc này thông thường chỉ là một phần nhỏ trong một hệ thống lớn.

Vì vậy, các bạn dễ rơi vào tình trạng như con tốt trên bàn cờ, không hiểu được toàn bộ thế cục, không mở mang được đầu óc, không học được những kiến thức phức tạp hơn.

Đôi khi công ty trả lương để bạn hoàn thành task, chứ không để tìm hiểu những thứ chúng ta không có trách nhiệm. Giả sử như task của bạn là sửa 1 con số 0 –> 1 trên form thì dĩ nhiên là họ không muốn bạn dành cả tiếng đồng hồ để tìm hiểu cách hoạt động mọi thứ.

Tuy nhiên, việc luôn cố gắng nhìn vào bức tranh lớn hơn giúp chúng ta học hỏi được nhiều thứ hơn, hiểu về hệ thống hơn biết chính xác hơn công việc của mình, lâu dần chúng ta có thể đảm nhiệm nhiều công việc phức tạp hơn, như vậy cũng có lợi cho đồng đội và công ty.

Để không trở thành con tốt thì mình nghĩ:

  • Hãy dành thời gian tìm hiểu xem những thứ bạn đang được giao làm nằm ở đâu trong hệ thống, nhiệm vụ của nó là gì, tại sao người ta lại làm như vậy…
  • Bạn sẽ học được cách họ thiết kế hệ thống, cách hoạt động của một hệ thống lớn hơn, thậm chí là cách nghiệp vụ của họ vận hành…
  • Đừng chỉ chăm chăm làm việc như một tên lính đánh thuê, sai đâu đánh đó, như vậy không tốt cho lối suy nghĩ mở của bạn.

4. Tìm và vá lỗ hổng kiến thức

Đã bao giờ bạn rơi vào tình trạng đang làm trên ngôn ngữ nào đó nhưng không biết học nó như thế nào chưa? Nếu bạn đã từng thì lý do là bởi bạn đã bỏ qua một việc quan trọng đó là theo dõi và vá lỗ hổng trong kiến thức của bản thân.

Có một thời gian mình luôn gặp khó khăn trong việc xử lý bất đồng bộ của JS nó làm mình vướn vào 1 đống promise và callback hell, nhưng tại thời điểm làm việc thì mình không có đủ thời gian để học bài bản, sau đó thì mình lại quên mất là mình cần vá lại kiến thức đó.

Kết quả là những lần sau gặp phải mình lại tốn rất nhiều thời gian, mọi chuyện cứ lặp lại vài lần như vậy.

Cuối cùng mình quyết định tạo một danh sách để nhắc bản thân cần cải thiện kiến thức này, sau đó thì mình không quên nữa và tình hình được cải thiện.

Mình giữ thói quen mỗi khi gặp kiến thức gì mình không biết, kiến thức gì quan trọng mà mình chưa hiểu mình đều đưa vào danh sách “lỗ hổng kiến thức” để cải thiện dần.

Kết quả khá khả quan. Đôi khi không phải chúng ta không có thời gian để cải thiện mà chỉ đơn giản là chúng ta không biết bản thân cần cải thiện gì mà thôi. Vì vậy việc theo dõi lỗ hổng kết thức sẽ giúp bạn dần lấp đầy khoảng trống, nâng cao khả năng hơn.

5. Rèn luyện bản thân

Ngoài công việc dev ở công ty, thì hãy dành thời gian rèn luyện bản thân mỗi ngày. Chúng ta có rất nhiều lĩnh vực, kiến thức cần rèn luyện ngoài kỹ thuật, hãy dành thời gian cho chúng như tạo 1 thói quen tốt cho bản thân.

Đọc sách về soft skillclean code, sách về lịch sử, một giờ học tiếng Anh, một giờ tập gym hoặc đi bộ… sẽ giúp bạn trở thành một con người tốt hơn về 1 mặc nào đó, một con người tốt hơn thì cũng là một developer pro hơn.

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

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

CSS là gì?

Các kỹ thuật xử lý vấn đề về nội dung trong CSS mà bạn nên biết

CSS là gì?

CSS là viết tắt của Cascading Style Sheets, nó là một ngôn ngữ được sử dụng để tìm và định dạng lại các phần tử được tạo ra bởi các ngôn ngữ đánh dấu (HTML). Nói ngắn gọn hơn là ngôn ngữ tạo phong cách cho trang web. Bạn có thể hiểu đơn giản rằng, nếu HTML đóng vai trò định dạng các phần tử trên website như việc tạo ra các đoạn văn bản, các tiêu đề, bảng,…thì CSS sẽ giúp chúng ta có thể thêm style vào các phần tử HTML đó như đổi bố cục, màu sắc trang, đổi màu chữ, font chữ, thay đổi cấu trúc…

CSS được phát triển bởi W3C (World Wide Web Consortium) vào năm 1996, vì HTML không được thiết kế để gắn tag để giúp định dạng trang web.

Phương thức hoạt động của CSS là nó sẽ tìm dựa vào các vùng chọn, vùng chọn có thể là tên một thẻ HTML, tên một ID, class hay nhiều kiểu khác. Sau đó là nó sẽ áp dụng các thuộc tính cần thay đổi lên vùng chọn đó.

Mối tương quan giữa HTML và CSS rất mật thiết. HTML là ngôn ngữ markup (nền tảng của site) và CSS định hình phong cách (tất cả những gì tạo nên giao diện website), chúng là không thể tách rời.

Bố cục và cấu trúc một đoạn CSS

Bố cục của một đoạn CSS

Bố cục CSS thường chủ yếu dựa vào hình hộp và mỗi hộp đều chiếm những khoảng trống trên trang của bạn với các thuộc tính như:

  • Padding: Gồm không gian xung quanh nội dung (ví dụ: xung quanh đoạn văn bản).
  • Border: Là đường liền nằm ngay bên ngoài phần đệm.
  • Margin: Là khoảng cách xung quanh bên ngoài của phần tử.

Cấu trúc của một đoạn CSS

Một đoạn CSS bao gồm các phần như thế này:

vùng chọn {    thuộc tính : giá trị;    thuộc tính: giá trị;    ..... }

Nghĩa là nó sẽ được khai báo bằng vùng chọn, sau đó các thuộc tính và giá trị sẽ nằm bên trong cặp dấu ngoặc nhọn {}. Mỗi thuộc tính sẽ luôn có một giá trị riêng, giá trị có thể là dạng số, hoặc các tên giá trị trong danh sách có sẵn của CSS. Phần giá trị và thuộc tính phải được cách nhau bằng dấu hai chấm, và mỗi một dòng khai báo thuộc tính sẽ luôn có dấu chấm phẩy ở cuối. Một vùng chọn có thể sử dụng không giới hạn thuộc tính.

Định nghĩa của các phần này như sau: 

  • Bộ chọn (Selector): là mẫu để chọn phần tử HTML mà bạn muốn định nghĩa phong cách. Các selector được áp dụng cho các trường hợp sau:
    • Tất cả phần tử theo một dạng cụ thể nào đó, ví dụ phần tử tiêu đề h1.
    • Thuộc tính id và class của các phần tử.
    • Các phần tử dựa vào mối liên quan với các phần tử khác trong cây phân cấp tài liệu.
  • Khai báo (Declaration): Khối khai báo chứa một hoặc nhiều khai báo, phân tách với nhau bằng các dấu chấm phẩy. Mỗi khai báo gồm tên và giá trị đặc tính CSS, phân tách bằng dấu phẩy. Khai báo CSS luôn kết thúc bằng dấu chấm phẩy, khối khai báo nằm trong các dấu ngoặc móc. Trong ví dụ dưới đây, các phần tử <p> sẽ được căn giữa, chữ màu đỏ.
    p {   color: red;   text-align: center; }
  • Thuộc tính (Properties): Những cách mà bạn có thể tạo kiểu cho một phần tử HTML. (Với trường hợp này thì color được xem là một trong những  thuộc tính của phần tử p). Chính vì vậy, với CSS thì bạn chỉ cần lựa chọn thuộc tính mà chính bạn muốn tác động nhất trong bộ quy tắc của mình.
  • Giá trị thuộc tính: Ở bên phải của thuộc tính sau dấu hai chấm(:), chúng ta sẽ sở hữu giá trị thuộc tính mà việc lựa chọn trong số đó sẽ xuất hiện nhiều lần để có thể cho một thuộc tính cụ thể nào đó.

Về danh sách các thuộc tính của CSS bạn có thể xem qua CSS Reference của Mozilla.

Ví dụ:

HTML là ngôn ngữ đánh dấu với HTML từng thẻ sẽ được dùng với ý nghĩa khác nhau.

<html>
<head>
   <meta charset="utf-8">
   <title>CSS là gì</title>
</head>
<body>
    <h1>Tiêu Đề - Phần Tử H1</h1>
    <p>Nội dung văn bản, phần tử P</p>
    <div>Nội dung văn bản, phần tử DIV</div>
</body>
<html>

HTML được dùng để thêm nội dung và mô tả ý nghĩa của từng nội dung sử dụng các thẻ, tuy nhiên nó không quy định cách thức hiển thị các nội dung trên trang như thế nào.

Ngược lại với HTML, CSS không được sử dụng để thêm nội dung hay mô tả ý nghĩa của nội dung trên trang. CSS được sử dụng để thiết lập cách trình bày hay hiển thị của nội dung trên trang web.

body {
    color: red; /* thiết lập màu chữ */
    font-size: 14px; /* thiết lập cỡ chữ */
}

h1 {
    color: black; /* thiết lập màu chữ mới cho các phần tử h1 */
    font-size: 18px; /* thiết lập cỡ chữ mới cho các phần tử h1 */
}

p {
    color: blue; /* thiết lập màu chữ mới cho các phần tử p */
}

Tại sao sử dụng CSS?

Đây là ba lợi ích chính của CSS:

1. Giải quyết một vấn đề lớn

Trước khi có CSS, các thẻ như phông chữ, màu sắc, kiểu nền, các sắp xếp phần tử, đường viền và kích thước phải được lặp lại trên mọi trang web. Đây là một quá trình rất dài tốn thời gian và công sức. Ví dụ: Nếu bạn đang phát triển một trang web lớn nơi phông chữ và thông tin màu được thêm vào mỗi trang, nó sẽ trở thành một quá trình dài và tốn kém. CSS đã được tạo ra để giải quyết vấn đề này. Đó là một khuyến cáo của W3C.

Nhờ CSS mà source code của trang Web sẽ được tổ chức gọn gàng hơn, trật tự hơn. Nội dung trang web sẽ được tách bạch hơn trong việc định dạng hiển thị. Từ đó, quá trình cập nhập nội dung sẽ dễ dàng hơn và có thể hạn chế tối thiểu làm rối cho mã HTML.

2. Tiết kiệm rất nhiều thời gian

Định nghĩa kiểu CSS được lưu trong các tệp CSS bên ngoài vì vậy có thể thay đổi toàn bộ trang web bằng cách thay đổi chỉ một tệp. Sử dụng CSS sẽ giúp bạn không cần thực hiện lặp lại các mô tả cho từng thành phần. Từ đó, bạn có thể tiết kiệm được tối đa thời gian làm việc với nó, làm code ngắn lại giúp kiểm soát dễ dàng hơn các lỗi không đáng có.

CSS tạo ra nhiều style khác nhau nên có thể được áp dụng với nhiều trang web, từ đó giảm tránh việc lặp lại các định dạng của các trang web giống nhau.

3. Cung cấp thêm các thuộc tính

CSS cung cấp các thuộc tính chi tiết hơn HTML để định nghĩa giao diện của trang web. CSS giúp người dùng nhiều styles trên một trang web HTML nên khả năng điều chỉnh trang của bạn trở nên vô hạn.

Tham khảo thêm các vị trí tuyển lập trình CSS lương cao tại Topdev.

Các phiên bản của CSS

CSS được xuất hiện lần đầu tiên vào ngày 10/10/1994 bởi Håkon Wium Lie. Bắt đầu đó, các phiên bản của CSS dần được hình thành qua nhiều giai đoạn. Từ lúc xuất hiện đến nay, CSS đã có nhiều phiên bản khác nhau. Các phiên bản mới sẽ giúp vá các lỗi của phiên bản cũ và mang đến nhiều cải tiến hơn.

Phiên bản 1

Với phiên bản đầu tiên CSS có những đặc điểm cụ thể như: thuộc tính font chữ, màu văn bản, hình nền, các thuộc tính văn bản, căn lề, định vị cho các yếu tố, nhận dạng duy nhất và phân loại chung các nhóm thuộc tính.

Phiên bản 2

CSS phiên bản 2 được W3C phát triển vào tháng 5 năm 1998. Với những cải tiến từ phiên bản CSS đầu tiên và mang đến những cải tiến mới như định vị tuyệt đối, tương đối và cố định các yếu tố chỉ mục z. Khái niệm về các loại phương tiện, hỗ trợ cho các biểu định kiểu âm thanh và văn bản hai chiều. Xuất hiện các kiểu font chữ mới để định dạng văn bản.

CSS 2.1

Ngoài ra, sau phiên bản 2 còn có một sự nâng cấp khác là CSS 2.1 được release vào tháng 4 năm 2011. Nhằm mục đích sửa lỗi và loại bỏ những tính năng kém hoặc không tương thích cho người dùng.

CSS3

CSS3 là phiên bản thay thế cho CSS2 với sự thay đổi đáng chú ý là module. Các module có khả năng mở rộng các tính năng được xác định trong CSS2. Nhằm duy trì khả năng tương thích ngược.

Đặc biệt, CSS3 mang đến các bộ chọn (selector) và thuộc tính (properties) mới cho phép linh hoạt hơn với bố cục và trình bày trang. Nhờ đó, người lập trình có thể tạo ra các hiệu ứng hình ảnh mà không cần tạo ra hình ảnh trước đó.

CSS 4

CSS 4 là phiên bản kế thừa CSS 3 hiện vẫn đang được cập nhật, phát triển và được dự đoán sẽ có rất nhiều phương thức mới được thêm vào như: Mutability, Hyperlink…

Tổng hợp: Tuyển dụng CSS lương cao lên đến 3000 USD

Cách nhúng CSS vào website

Để CSS có thể thực thi trên website hoặc HTML Documents thì phải tiến hành nhúng CSS vào website. Nếu không, các định dạng CSS sẽ không thực thi trên HTML. Có 3 cách nhúng CSS vào website:

  • Inline CSS – Nhúng trực tiếp vào tài liệu HTML thông qua cặp thẻ <style> </style>.
  • Internal CSS – dùng thẻ <style> bên trong thẻ <head> của HTML để tạo ra nơi viết mã CSS.
  • External CSS – Tạo một tập tin .css riêng và nhúng vào tài liệu HTML thông qua cặp thẻ <link>. CSS là gì

Inline CSS

Đặt thuộc tính style vào thẻ mở của phần tử HTML, giá trị của thuộc tính style là các cặp thuộc tính định dạng CSS. Mã CSS chỉ tác động nên chính phần tử đó.

Internal CSS

Đặt các cặp thuộc tính định dạng CSS vào bên trong cặp thẻ <style type=”text/css”></style>

Cặp thẻ <style type=”text/css”></style> thì được đặt bên trong cặp thẻ <head></head>

External CSS

Với External CSS: Ta đặt các thuộc tính định dạng vào bên trong tập tin CSS. Đây là một tập tin hoàn toàn độc lập so với file (File này thường được đặt phần mở rộng là .css) sau đó dùng thẻ link <link rel=”stylesheet” type=”text/css” href=”đường dẫn đến tập tin CSS”> đặt ở phần head (cặp thẻ <head></head> của các tập tin HTML) để có thể thực hiện nhúng tập tin CSS vào trang web.

THam khảo thêm các vị trí cho lập trình IT tại đây

HTML5 khác HTML như thế nào?

Định dạng chuẩn và quy ước viết code trong HTML5

HTML hay HyperText Markup Language, là thành phần quan trọng nhất và là khung sườn của World Wide Web. Tuy nhiên, nếu chỉ riêng HTML thôi thì khá đơn điệu bởi vì nó chỉ có thể cung cấp các trang web tĩnh; nhằm đáp ứng nhu cầu ngày càng tăng về các tính năng ấn tượng hơn, HTML đã được kết hợp với các thành phần khác như CSS, Javascript…

Tuy nhiên website ngày càng khá cồng kềnh và các trình duyệt khác nhau thực hiện những tính năng theo cách riêng của chúng. HTML5 sinh ra để giải quyết những vấn đề lớn của HTML, giúp cho trang web trở nên hiệu quả và đẹp đẽ hơn.

HTML5 là gì?

HTML5 là một ngôn ngữ cấu trúc và trình bày nội dung cho World Wide Web. Đây là phiên bản thứ 5 của ngôn ngữ HTML, được giới thiệu bởi World Wide Web Consortium (W3C). HTML5 vẫn sẽ giữ lại những đặc điểm cơ bản của HTML4 và bổ sung thêm các đặc tả nổi trội của XHTML, DOM cấp 2, đặc biệt là JavaScript.

Với sự ra đời của HTML5 cùng với các ứng dụng cần những hiệu ứng đồ họa và chuyển động đặc biệt, lập trình viên có thể sử dụng Canvas với kiểu bitmap hoặc SVG với kiểu vector. Không chỉ áp dụng cho việc thiết kế các trang web trực quan, HTML5 còn được áp dụng để tạo ra các thư viện đồ họa giúp tạo ra các ứng dụng đồ thị, game trong cả môi trường 2D và 3D như những ứng dụng trên desktop.

HTML5 có gì mới?

  1. HTML đã hoạt động rất tốt, nhưng nó rõ ràng là có một số nhược điểm. Dựa vào đó HTML5 được xây dựng dựa trên các nguyên tắc sau đây:
  • Ít phụ thuộc vào các plugin cho các chức năng.
  • Scripting nên được thay thế bằng markup bất cứ khi nào có thể.
  • Chạy được trên bất kỳ thiết bị (ví dụ, có sẵn trên tất cả các thiết bị và cung cấp các trải nghiệm giống nhau đối với người dùng).
  • Hỗ trợ và chạy trên bất kỳ trình duyệt nào.

2. HTML5 đã bổ sung thêm rất nhiều các thẻ đánh dấu (markup) mới:

  • Các thẻ <header> và <footer> giúp bạn tách các phần trên và dưới của các block nội dung. Để có thể sử dụng nhiều lần trên một trang duy nhất.
  • Thẻ <article> giúp xác định một phần cụ thể về nội dung, ví dụ, một bài blog hoặc một bình luận của độc giả.
  • Thẻ <nav> để xác định những phần nào được coi là khối điều hướng.
  • Thẻ <section> cho phép bạn xác định một phần nội dung nào đó; tương tự như các thẻ <div> hiện nay.
  • Các thẻ <audio> và <video> để đánh dấu những nội dung bao gồm âm thanh hoặc video.
  • Thẻ <canvas> cho phép bạn vẽ đồ họa sử dụng một ngôn ngữ kịch bản riêng biệt. SVG, canvas và những hình dạng vector đều được hỗ trợ bởi HTML5.
  • Thẻ <embed> dùng để nhúng các nội dung hoặc các ứng dụng bên ngoài vào trang web.
  • Có nhiều element được giới thiệu trong HTML. Một vài trong số chúng là quan trọng nhất: summary, time, aside, audio, command, data, datalist, details, embed, wbr, span, figure, footer, header, article, hgroup, bdi, canvas, keygen, mark, meter, nav, output, progress, rp, rt, ruby, section, source, track, video.

3. HTML5 cũng bỏ đi một số thẻ: <acronym>, <applet>, <font>, <frame>, <frameset>, <noframes>, và một số khác như isindex, basefont, dir, big, center, strike…

4. HTML5 không còn thuộc tính type trong thẻ <script><link>: Trong những phiên bản HTML trước đây trong thẻ <script><link> bạn cần khai báo thêm thuộc tính type cho chúng. Việc khai báo thuộc tính này là không cần thiết là vì hai thẻ trên đã hàm ý rằng chúng là các thẻ tham chiếu đến stylesheets và các tập mã lệnh.

5. HTML5 sử dụng web SQL databases, application cache để lưu dữ liệu tạm trong khi HTML chỉ có cache của trình duyệt.

6. HTML5 hỗ trợ hoàn toàn cho JavaScript để chạy nền nhờ vào JS web worker API.

Các ưu điểm của HTML5

1. HTML5 đa nền tảng và responsive.

Bạn không phải trả tiền bản quyền nếu bạn quyết định sử dụng HTML5 cho trang web của mình. Nó đa nền tảng, có nghĩa là bạn có thể sử dụng nó trên hầu hết mọi thiết bị. Nó hoạt động giống nhau cho dù bạn truy cập một trang web thông qua máy tính để bàn, máy tính xách tay, điện thoại thông minh hay thậm chí là tivi của bạn. Miễn là trình duyệt bạn đang sử dụng hỗ trợ HTML5, thì rất có thể nó sẽ hoạt động như bình thường.

HTML5 cho phép phát triển các ứng dụng thích ứng với các độ phân giải, kích thước màn hình, tỷ lệ và nguyên tắc khác nhau. Các tính năng nâng cao trong các thiết bị hiện đại có thể được thực hiện với HTML5, chúng cung cấp trải nghiệm người dùng phù hợp với ngữ cảnh trong nhiều thiết bị như điện thoại thông minh & máy tính bảng.

2. Nó hỗ trợ âm thanh và video.

Thông qua việc sử dụng phần tử CANVAS, bạn có thể chạy nhiều thành phần khác nhau thông qua trang web của mình, trang web đã từng yêu cầu ứng dụng nhúng hoặc phần mềm được cài đặt ở phía người dùng (Flash, Silverlight…). Điều đó có nghĩa là HTML5 cho phép bạn tạo đồ họa động, kết hợp trò chơi trực tuyến và sử dụng video tương tác. Thậm chí có những trò chơi và video offline hiện có thể thực hiện được nhờ những gì HTML5 cung cấp.

3. Code bằng HTML5 rõ ràng và nhất quán.

Nó đơn giản, dễ hiểu và rất dễ đọc. Bạn có thể nhanh chóng tách nội dung khỏi style, giúp dễ dàng hơn trong việc code rõ ràng. Không mất nhiều thời gian để các lập trình viên mới học ngôn ngữ với cấu trúc này, có nghĩa là bất kỳ ai có đam mê trong lĩnh vực này đều có thể học theo.

4. Có nhiều layout elements hơn cho nội dung của bạn.

Nếu bạn đã quen với các phiên bản HTML cũ hơn, thì bạn biết các tùy chọn của mình đã có: Div, Heading, Paragraph và Span. Với HTML5, bạn có rất nhiều elements để sử dụng khi thiết kế bố cục trang của mình. Headers, footers, areas, và sections đều sẵn sàng giúp bạn làm việc tốt hơn.

5. Cung cấp lợi ích tối ưu hóa công cụ tìm kiếm.

SEO ngày nay hướng về giá trị nội dung hơn bất kỳ thứ gì khác, mà HTML5 giúp bạn cung cấp nội dung theo những cách hấp dẫn hơn. Bạn có thể tăng chuyển động thông qua tính năng mới như <form> chẳn hạn.

6. HTML5 hỗ trợ bở một cộng đồng đông đảo.

Điều đó có nghĩa là bạn có thể tự mình tìm thấy sự hỗ trợ cần thiết để khắc phục lỗi. Cũng có nghĩa là bạn sẽ gặp ít vấn đề về update hơn theo thời gian vì các bản cập nhật có thể theo thời gian thực.

7. Local storage và caching.

Local storage là một nâng cấp cực lớn của HTML5. Trong những ngày trước-HTML5, nếu lập trình viên muốn lưu bất kỳ thông tin nào, họ phải tạo cookies.

Các cookie được sử dụng để theo dõi dữ liệu người dùng duy nhất trong nhiều năm nhưng chúng có những nhược điểm nghiêm trọng. Lỗ hổng lớn nhất là tất cả dữ liệu cookie của bạn được thêm vào mỗi HTTP request header. Điều này có thể dẫn đến tác động đến thời gian phản hồi của server. Vì vậy, bạn nên làm là giảm kích thước cookie.

Với HTML5, chúng ta có thể làm tốt hơn bằng cách sử dụng session Storage & local Storage thay cho cookie. Nó không phải là cơ sở dữ liệu vĩnh viễn nhưng cho phép bạn lưu trữ dữ liệu có cấu trúc tạm thời.

Với HTML 5, Trong khi xây dựng trang web, Bạn có thể chỉ định các tệp mà trình duyệt sẽ lưu vào bộ nhớ cache. Vì vậy, nếu bạn reload trang khi bạn đang offline, trang vẫn sẽ hiển thị chính xác. Loại bộ nhớ đệm này có nhiều ưu điểm như duyệt ngoại tuyến, tệp tải nhanh hơn nhiều và giảm tải trên máy chủ.

8. Tái sử dụng.

Từ góc độ kinh doanh, HTML5 giúp bạn tiết kiệm thời gian và tiền bạc. Bởi vì nó có thể được triển khai trên nhiều nền tảng, bạn không còn bị ép buộc bất kỳ đâu. Bạn có thể phát triển một lần, sử dụng cùng một mã, tại bất kỳ hệ thống nào.

9. Nó hoạt động tốt với tính nhất quán tuyệt vời.

HTML5 giúp bạn nhúng video và âm thanh biểu đồ, animation và nhiều loại nội dung phong phú khác, mà không cần sử dụng bất kỳ plugin hoặc chương trình bên thứ ba nào. Vì chức năng hiện được tích hợp sẵn trong trình duyệt và bạn có thể truy cập các ứng dụng HTML5 mà không cần tải xuống chúng vào điện thoại của bạn.

10. Xử lý lỗi tốt hơn

Một trong những khác biệt chính giữa HTML và HTML5 là xử lý lỗi tốt hơn. Tại sao điều đó lại cần thiết?

Khi làm việc hay học HTML, trong quá trình coding, không ai có thể viết một mã code mà không bao giờ bị lỗi cả. Chỉ là chưa mà thôi.

Một trong những mục tiêu lớn nhất của việc phát triển HTML5 là giúp dễ dàng hơn trong việc tạo khai báo cú pháp, giúp xử lý code HTML bị lỗi tốt hơn.

Tham khảo thêm: Các vị trí tuyển dụng lập trình html5 lương cao tại Topdev

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

1. Có nhiều chuẩn video khác nhau cho HTML5.

Ngày nay có một loạt các chuẩn video khác nhau dựa trên trình duyệt mà bạn đang sử dụng. Có ba định dạng video chính hiện đang được sử dụng: Ogg, H.264 và VP8 / WebM. Đầu tiên được hỗ trợ bởi mọi thứ ngoại trừ Internet Explorer. Thứ hai được hỗ trợ bởi mọi thứ ngoại trừ Firefox. Đối với thứ ba, nó được hỗ trợ đầy đủ bởi mọi thứ, mặc dù nó có thể yêu cầu cài đặt thủ công.

2. Nó yêu cầu các trình duyệt hiện đại để sử dụng.

Nếu bạn có người dùng cố gắng truy cập trang web của mình thông qua một trình duyệt cũ hơn, thì bạn sẽ không thể truy cập được HTML5. Phải giải quyết sự thiếu tương thích nhất định với Internet Explorer. Từ góc độ kinh doanh, nếu khách truy cập trang web của bạn không thể truy cập vào một trang web đầy đủ chức năng, điều đó sẽ tạo ra một vấn đề. Họ sẽ không đổ lỗi cho trình duyệt hoặc IE cũ hơn của họ. Họ sẽ đổ lỗi cho bạn.

3. Có những vấn đề bản quyền phải được xem xét.

Rich media của bạn được cung cấp ở dạng nén, nhiều định dạng do bạn có thể gặp phải nhiều khả năng tương thích với trình duyệt. Điều đó có nghĩa là có những vấn đề cấp phép bản quyền mà bạn phải xem xét.

4. Khả năng đáp ứng nhiều thiết bị có thể là một vấn đề đau đầu.

Mục tiêu của việc tạo một trang web hiện đại là làm cho nó khả dụng trên tất cả thiết bị, responsive sẽ là thế mạnh cực lớn của nó. Tuy nhiên nếu bạn đang phát triển một trang web, bạn phải xem nội dung của mình trên tất cả các loại thiết bị và trình duyệt để đảm bảo nội dung giống nhau vì luôn có khả năng nội dung đó không hiển thị như bình thường.

5. HTML5 vẫn đang hoàn thiện từng ngày.

Mặc dù một số người có thể coi đây là một lợi thế, nhưng sự phát triển không ngừng của ngôn ngữ thực tế có trong HTML5 đòi hỏi bạn phải luôn cố gắng. Bản thân ngôn ngữ này khá ổn định. Về lý thuyết, bất cứ điều gì có thể thay đổi bất cứ lúc nào. Trên thực tế, đây là một mối đe dọa hơn là một bất lợi thực sự vào lúc này.

6. Chơi game gặp khó khăn với JavaScript trong HTML5.

JavaScript là ngôn ngữ kịch bản duy nhất của HTML5. Nó là một ngôn ngữ rất có linh động, lý tưởng cho nhiều ứng dụng. Tuy nhiên, từ góc độ chơi game, vẫn thiếu các tính năng cần thiết cho trải nghiệm chơi game mạnh mẽ.

Nếu bạn đang bắt đầu phát triển trang web hoặc đang tìm cách cập nhật trang web cũ hơn của mình, thì HTML5 sẽ là tùy chọn hiệu quả nhất dành cho bạn. Mặc dù nó có thể không hoàn hảo cho mọi giải pháp, nhưng bạn sẽ thấy rằng những ưu điểm và nhược điểm của HTML5 hạn chế những tiêu cực, làm nổi bật những mặt tích cực và cung cấp cho bạn một nền tảng đơn giản làm nổi bật tất cả những điểm mạnh của bạn.

Tham khảo thêm: Các vị trí tuyển dụng lập trình html5 lương cao tại Topdev

HTML là gì?

HTML cơ bản toàn tập cho người mới phần 2

HTML là gì?

HTML là viết tắt của cụm từ Hypertext Markup Language (tạm dịch là Ngôn ngữ đánh dấu siêu văn bản). HTML được sử dụng để tạo và cấu trúc các thành phần trong trang web hoặc ứng dụng, phân chia các đoạn văn, heading, titles, blockquotes… và HTML không phải là ngôn ngữ lập trình.

Một tài liệu HTML được hình thành bởi các phần tử HTML (HTML Elements) được quy định bằng các cặp thẻ (tag và attributes). Các cặp thẻ này được bao bọc bởi một dấu ngoặc ngọn (ví dụ <html>) và thường là sẽ được khai báo thành một cặp, bao gồm thẻ mở và thẻ đóng. Ví dụ, chúng ta có thể tạo một đoạn văn bằng cách đặt văn bản vào trong cặp tag mở và đóng văn bản <p> và </p> :

<p>Đây là cách bạn thêm đoạn văn trong HTML.</p>

Nhưng một số thẻ đặc biệt lại không có thẻ đóng và dữ liệu được khai báo sẽ nằm trong các thuộc tính (ví dụ như thẻ <img>).

Cha đẻ của HTML là Tim Berners-Lee, cũng là người khai sinh ra World Wide Web và chủ tịch của World Wide Web Consortium (W3C – tổ chức thiết lập ra các chuẩn trên môi trường Internet). Các thiết lập và cấu trúc HTML được vận hành và phát triển bởi World Wide Web Consortium (W3C). Bạn có thể kiểm tra tình trạng mới nhất của ngôn ngữ này bất kỳ lúc nào trên trang W3C’s website.

Tham khảo việc làm lập trình viên HTML mới nhất

HTML hoạt động ra sao?

Các website hoạt động như thế nào?

Khi bạn gõ ra 1 tên miền, trình duyệt mà bạn đang sử dụng (chẳng hạn như Chrome) sẽ kết nối tới 1 máy chủ web, bằng cách dùng 1 địa chỉ IP, vốn được thấy bằng cách phân giải tên miền đó (DNS). Máy chủ web chính là 1 máy tính được kết nối tới internet và nhận các yêu cầu tới trang web từ trình duyệt của bạn. Máy chủ sau đó sẽ gửi trả thông tin về trình duyệt của bạn, là 1 tài liệu HTML, để hiển thị trang web!

Một tập tin HTML sẽ bao gồm các phần tử HTML và được lưu lại dưới đuôi mở rộng là .html hoặc .htm. Khi một tập tin HTML được hình thành, việc xử lý nó sẽ do trình duyệt web đảm nhận. Trình duyệt sẽ đóng vai trò đọc hiểu nội dung HTML từ các thẻ bên trong và sẽ chuyển sang dạng văn bản đã được đánh dấu để đọc, nghe hoặc hiểu (do các bot máy tính hiểu).

Bạn có thể xem chúng bằng cách sử dụng bất kỳ trình duyệt web nào (như Google Chrome, Safari, hay Mozilla Firefox). Trình duyệt đọc các files HTML này và xuất bản nội dung lên internet sao cho người đọc có thể xem được nó.

Thông thường, trung bình một web chứa nhiều trang web HTML, ví dụ như: trang home, trang product, trang blog…

Cấu trúc một đoạn HTML

Mỗi trang HTML chứa một bộ các tag (cũng được gọi là elements). Mỗi thẻ sẽ có những tác dụng nhất định, giúp xây dựng nên một cấu trúc hoàn chỉnh cho Website. Bạn có thể xem như là việc xây dựng từng khối của một trang web. Nó tạo thành cấu trúc cây thư mục bao gồm section, paragraph, heading, và những khối nội dung khác.

Hầu hết các HTML elements đều có tag mở và tag đóng với cấu trúc như <tag></tag>.

Để biết bố cục HTML của một trang web như thế nào, bạn có thể xem code ví dụ của một trang HTML được cấu trúc như thế nào:

<!DOCTYPE html>

<html>

    <head>

        <title>Page Title</title>

    </head>

    <body>

 

        <h1>The Main Heading</h1>

        <h2>A catchy subheading</h2>

        <p>First paragraph</p>



    </body>

</html>

Trong đó:

    • <!DOCTYPE html>: khai báo kiểu dữ liệu hiển thị
    • <html> và </html>: cặp thẻ bắt buộc, element cấp cao nhất, có nhiệm vụ đóng gói tất cả nội dung của trang HTML
    • <head> và </head>: khai báo các thông tin meta của trang web như: tiêu đề trang, charset
    • <title> và </title>: cặp thẻ nằm bên trong thẻ <head>, dùng để khai báo tiêu đề của trang
    • <body> và </body>: cặp thẻ dùng để đóng gói tất cả các nội dung sẽ hiển thị trên trang
    • <h1></h1>, <h2></h2>: định dạng dữ liệu dạng heading. Thông thường có 6 cấp độ heading trong HTML, trải dài từ <h1> tới <h6>. Trong đó, <h1> là cấp độ heading cao nhất và <h6> là cấp độ heading thấp nhất.
    • <p> và </p>: cặp thẻ chứa các đoạn văn bản của trang web

Các tag thông dụng của HTML

HTML tags được sử dụng chủ yếu là 2 loại chính: block-level tags và inline tags.

  1. Elements Block-level : đây là loại tag cấp cao nhất, sẽ sử dụng toàn không gian trang web và luôn bắt đầu dòng mới của trang web. 3 block-level tags mà tất cả các trang HTML đầu cần có đó là <html></html>, <head></head><body></body>.
  2. Inline elements chỉ chiếm phần nhỏ không gian web và không bắt đầu dòng mới của trang web. Chúng thường dùng để định dạng nội dung bên trong của block level elements.

Block-Level Tags

3 block level tags của mỗi trang HTML cần có những tag như là <html><head>, và <body>.

  1. Tag <html></html> là element cao nhất dùng để đóng gói mỗi trang HTML.
  2. Tag <head></head> chứa các thông tin meta như là tiêu đề trang và charset.
  3. Cuối cùng, <body></body> tag dùng để đóng gói tất cả nội dung sẽ hiện trên trang.
<html>

<head>

<!-- META INFORMATION -->

</head>

<body>

<!-- PAGE CONTENT -->

</body>

</html>

Inline Tags

Inline tags thường được dùng để định dạng, tạo bố cục cho nội dung bên trong của block-level tags.. Ví dụ như, tag <strong></strong> sẽ định dạng chữ in đậm, trong khi đó tag <em></em> sẽ định dạng chữ in nghiên.

Hyperlinks cũng là yếu tố element mà cần tag <a></a> và attributes href để xác định link cụ thể: <a href="https://topdev.vn/">Click me!</a>

Ảnh cũng là element inline. Bạn có thể thêm ảnh bằng cách sử dụng tag <img> mà không cần tag đóng. Nhưng bạn cũng cần sử dụng attribute src để xác định nguồn ảnh, ví dụ như:

<img src="/images/example.jpg" alt="Example image">

Nếu bạn muốn tìm hiểu thêm về tag HTML, hãy cân nhắc xem qua cheat sheet HTML

>>> Xem thêm: HTML5 khác HTML như thế nào?

Ưu và nhược điểm HTML

HTML là một ngôn ngữ đánh dấu siêu văn bản nên nó sẽ có vai trò xây dựng cấu trúc siêu văn bản trên một website, hoặc khai báo các tập tin kỹ thuật số (media) như hình ảnh, video, nhạc. Tuy nhiên, HTML có ưu và nhược điểm của riêng nó.

Ưu điểm:

  • Được sử dụng rộng rãi, có rất nhiều nguồn tài nguyên hỗ trợ và cộng đồng sử dụng lớn.
  • Học đơn giản và dễ hiểu.
  • Mã nguồn mở và hoàn toàn miễn phí.
  • Markup gọn gàng và đồng nhất.
  • Tiêu chuẩn thế giới được vận hành bởi World Wide Web Consortium (W3C).
  • Dễ dàng tích hợp với các ngôn ngữ backend như PHP, Python…

Khuyết điểm:

  • Được dùng chủ yếu cho web tĩnh. Đối với các tính năng động như update hay realtime thời gian thực, bạn cần sử dụng JavaScript hoặc ngôn ngữ backend bên thứ 3 như PHP.
  • Một số trình duyệt chậm hỗ trợ tính năng mới.

Xem ngay tin tức tuyển dụng HTML Hồ Chí Minh đãi ngộ tốt

HTML đóng vai trò gì trong website

Với những ưu và khuyết điểm trên, điều đó không có nghĩa là chỉ sử dụng HTML để tạo ra một website mà HTML chỉ đóng một vai trò hình thành trên website. Một website chuẩn sẽ được hình thành bởi:

  • HTML – Xây dựng cấu trúc và định dạng các siêu văn bản.
  • CSS – Định dạng các siêu văn bản dạng thô tạo ra từ HTML thành một bố cục website, có màu sắc, ảnh nền,….
  • Javascript – Tạo ra các sự kiện tương tác với hành động của người dùng (ví dụ như là chat, update nội dung, hiệu ứng slide).
  • PHP – Ngôn ngữ lập trình để xử lý và trao đổi dữ liệu giữa máy chủ đến trình duyệt.
  • MySQL – Hệ quản trị cơ sở dữ liệu truy vấn có cấu trúc.

Nếu website là một cơ thể hoàn chỉnh thì HTML chính là bộ xương của cơ thể đó. Dù website thuộc thể loại nào, giao tiếp với ngôn ngữ lập trình nào để xử lý dữ liệu thì vẫn phải cần HTML để hiển thị nội dung ra cho người dùng xem.

HTML, CSS và Javascript bổ trợ cho nhau như thế nào?

Tuy HTML được đánh giá là khung sườn cho website nhưng nó vẫn chưa đủ khả năng xây dựng một trang web chuyên nghiệp. Do đó, các lập trình viên thường chỉ sử dụng HTML để thêm các element dạng văn bản và xây dựng giao diện cấu trúc cho phần nội dung trên trang.

Với khả năng tương thích cao, HTML khi kết hợp cùng CSS và Javascript sẽ có thể giúp tăng trải nghiệm cho người dùng và thiết lập được các chức năng cao cấp khác. Cụ thể:

  • CSS đóng vai trò chính trong việc thiết kế, xây dựng background, màu sắc và các hiệu ứng cho trang

CSS (Cascading Style Sheets) lại là một ngôn ngữ giúp định hình phong cách cho website. Chúng ta sử dụng CSS để định dạng phần nội dung được chỉ định trong tài liệu HTML. Nói thêm, CSS được phát triển bởi W3C vào năm 1996 nhằm hỗ trợ nhiều tính năng mà HTML chưa thể làm được, ví dụ như gắn tag để định dạng trang web.

  • Javascript có nhiệm vụ giúp tạo ra các chức năng động như: thư viện hình ảnh, slider, pop-up…

Website có hai loại chính:

  • Website tĩnh (static web) – Là một website không giao tiếp với máy chủ web để gửi nhận dữ liệu mà chỉ có các dữ liệu được khai báo sẵn bằng HTML và trình duyệt đọc.
  • Website động (dynamic web) – Là một website sẽ giao tiếp với một máy chủ để gửi nhận dữ liệu, các dữ liệu đó sẽ gửi ra ngoài cho người dùng bằng văn bản HTML và trình duyệt sẽ hiển thị nó. Để một website có thể giao tiếp với máy chủ web thì sẽ dùng một số ngôn ngữ lập trình dạng server-side như PHP, ASP.NET, Ruby,..để thực hiện. Ví dụ như một website làm bằng WordPress là website động.

Các phần mềm để lập trình HTML

Để lập trình web hiệu quả và tiết kiệm thời gian, công sức, bạn có thể sử dụng các phần mềm lập trình HTML miễn phí và hiệu quả dưới đây:

Tài nguyên tham khảo HTML

HTML là thành phần cực kỳ quan trọng của một website. Các thiết lập và cấu trúc HTML được vận hành và phát triển bởi World Wide Web Consortium (W3C). Bạn có thể kiểm tra tình trạng mới nhất của HTML bất kỳ lúc nào trên trang W3C’s website.

Soạn một đoạn HTML đầu tiên

Soạn thảo văn bản HTML ở đây nghĩa là chúng ta sẽ tập viết một văn bản được định dạng bằng các thẻ HTML chứ không phải là tạo ra một tập tin HTML hoàn chỉnh.

Hãy sử dụng Sublime Text để soạn thảo, Sublime Text là một chương trình soạn thảo văn bản (Text Editor) miễn phí mà thường là phục vụ cho việc soạn thảo các loại văn bản đơn giản cho đến các đoạn code phức tạp.

Bản miễn phí của Sublime Text sẽ tự động hiển thị bảng hỏi bạn mua bản quyền sau vài lần ấn Save, bạn có thể ấn No để từ chối.

Hoặc bạn có thể thao tác trực tiếp tại: https://www.w3schools.com/html/html_examples.asp

Hy vọng với thông tin bài viết này bạn đã hiểu rõ hơn về HTML là gì? Đừng quên cập nhật thêm các kiến thức kinh nghiệm bổ ích về HTML và ngành lập trình công nghệ nhé! Chúc các bạn có những điều mới mẻ thú vị hơn cho hành trình nghề Dev sắp tới.

Xem tin tức tuyển dụng lập trình viên lương cao tại TopDev

Xampp là gì? Cách sử dụng và cài đặt XAMPP

XAMPP là gì?

XAMPP là viết tắt của 5 module được tích hợp bên trong nó bao gồm là Cross-Platform (X), Apache (A), MariaDB (M), PHP (P) và Perl (P). XAMPP là một phần mềm nguồn mở và miễn phí dùng để tạo web server trên máy tính cá nhân (Localhost), XAMPP tương thích với các hệ điều hành phổ biến như : Linux, MacOS, Windows,..

Ưu điểm lớn nhất của XAMPP là mã nguồn mở và tính dễ sử dụng, tương đối đơn giản, gọn nhẹ nên được sử dụng ngày càng phổ biến hiện nay.

XAMPP được ứng dụng rộng rãi từ người dùng phổ thông đến lập trình viên, nhằm để vận hành cũng như phát triển các website dùng ngôn ngữ lập trình PHP như: WordPress, Joomla!, Magento, Drupal, OpenCart, phpBB,..

Localhost là gì?

Localhost là được ghép từ hai chữ “local” và “host”, localhost là tên gọi của máy chủ được vận hành trên máy tính bạn đang dùng mà không cần phải kết nối mạng.

Localhost bao gồm nhiều ứng dụng đi kèm với nhau và tất cả các ứng dụng đó sẽ kết hợp với nhau để tạo ra một môi trường có thể chạy mã nguồn sửng dung ngôn ngữ lập trình Php trên máy tính của chính bạn bao gồm:

  • Webserver là Apache, đây là webserver được sử dụng thông dụng nhất.
  • PHP để xử lý code PHP.
  • MySQL để lưu trữ và xử lý cơ sở dữ liệu (database), đây là cơ sở dữ liệu được dùng phổ biến nhất trong thế giới web.
  • Phần mềm PHPMyAdmin để xem và quản lý cơ sở dữ liệu MySQL.

Sử dụng localhost rất tiện lợi do có tốc độ xử lý nhanh vì web server lúc này đã nằm ngay trên máy tính của bạn.

Localhost vận hành như thế nào?

Khi set up Localhost vào máy tính, thì máy tính của bạn đã có sẵn một Webserver để chạy ứng dụng website với địa chỉ là http://127.0.0.1. Đây là địa chỉ IP dạng localhost, ngoài ra bạn cũng có thể chạy localhost với đường dẫn là http://localhost.

Khi cài Localhost, mỗi khi cần sử dụng bạn sẽ cần mở bảng điều khiển của localhost lên và kích hoạt cho nó khởi động các ứng dụng đi kèm.

Cách cài đặt XAMPP và tạo Localhost

Để tải XAMPP, đầu tiên bạn truy cập vào địa chỉ https://www.apachefriends.org/download.html và chọn phiên bản XAMPP phù hợp với hệ điều hành của máy tính bạn đang sử dụng.

  LAMP là gì? Tổng quan về LAMP/LEMP stack

Sau khi tải file cài đặt về xong và double click file vừa download hoặc chạy bằng quyền administrator bằng cách right click lên file vừa download > Run as administrator. Nếu máy tính bạn có chương trình duyệt virus sẽ xuất hiện hộp thoại “Question”, không cần lo lắng, cứ chọn “Yes”:

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Ngay sau đó là hộp thoại “Warning” về quyền User điều khiển. Nếu bạn chạy bằng quyền administrator thì không cần quan tâm tới cảnh báo này, chọn “Ok” để tiếp tục. Còn muốn an toàn hơn thì bạn cứ việc chọn cài XAMPP ở ổ đĩa khác với ổ cài Window là được (chọn ổ đĩa tại bước Setup – Installation folder).

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Hãy chạy nó, sau đó chọn Next.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

 

Tại màn hình này chọn các ứng dụng kèm theo của bộ XAMPP, bạn có thể bỏ những phần không cần thiết đi nhe, tuy nhiên cứ chọn hết và “Next” thôi, vì sau này sẽ có dịp dùng đến.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Ở phần chọn đường dẫn, bạn hãy chọn đường dẫn cần lưu cài đặt của XAMPP. Lưu ý rằng đường dẫn này bạn phải nhớ vì khi cài đặt web lên localhost, bạn phải truy cập vào thư mục này. Bạn nên để mặc định là c:\xampp. Tiếp tục ấn Next.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Ở trang kế tiếp, bạn bỏ chọn phần “Learn more about Bitnami for XAMPP“. Và ấn Next 2 lần nữa để bắt đầu quá trình cài đặt XAMPP.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Sau khi cài xong, ấn nút Finish để kết thúc cài đặt và mở bảng điều khiển của XAMPP. Tuy nhiên, hãy khởi động lại máy sau khi cài đặt xong để tránh tình trạng không khởi động được localhost.

Khởi động Localhost

Bây giờ bạn hãy vào thư mục c:\xampp và mở file xampp-panel.exe lên để bật bảng điều khiển của XAMPP.

Xampp là gì? Cách sử dụng và cài đặt XAMPPBảng điều khiển của XAMPP

Bạn để ý sẽ thấy hai ứng dụng Apache và MySQL có nút Start, đó là dấu hiệu bảo 2 ứng dụng này chưa được khởi động, hãy ấn vào nút Start của từng ứng dụng để khởi động Webserver Apache và MySQL Server lên thì mới chạy được localhost.

Nếu cả hai ứng dụng chuyển sang màu xanh như hình dưới là đã khởi động thành công.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Sau khi khởi động xong, bạn hãy truy cập vào website với địa chỉ là http://localhost sẽ thấy nó hiển thị ra trang giới thiệu XAMPP như hình dưới.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Những lỗi thường gặp khi khởi động webserver và cách sửa lỗi

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Để cho việc sử dụng XAMPP về sau được trơn tru, không lỗi lầm gì. Bạn cần có một số thiết lập sau:

Bước 1: Bạn vào thư mục đã cài đặt  phần mềm XAMPP trong ổ C theo đường dẫn này: C:\xampp;

Bước 2: Trong thư mục này bạn tìm đến tập tin xampp-control.exe >> nhấn chuột phải và chọn vào mục Properties để mở cửa sổ thuộc tính của nó lên.

Bước 3: Chọn tab Compatibility và tick vào mục Run this program as an administrator để phần mềm này được chạy với quyền Administrator, tiếp theo là nhấn vào Apply và OK để áp dụng tùy chỉnh này.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

  • Khi cài xong thì sẽ dễ gặp lỗi không khởi động được Apache là do xung đột port 80. Port này có rất nhiều chương trình sử dụng như Skype, IIS, World Wide Web Publishing service, HTTP Server API, … Cách giải quyết là tắt các chương trình trên sau đó khởi động lại Apache là được:
    • Skype, IIS hay HTTP Server API, … thì close ứng dụng tương ứng.
    • World Wide Web Publishing service thì nhấn tổ hợp phím: Window + R > gõ services.msc > tìm trong hộp thoại vừa hiện ra “World Wide Web Publishing Service” > click chuột phải chọn “Stop”.
    • Cách tốt nhất là các bạn nên đổi port của Apache sang port khác. Cách giải quyết nằm phía bên dưới bài viết.
  • Sau khi tắt ứng dụng tương ứng xong thì click chọn “Start” để khởi động lại Apache, màn hình như bên dưới là thành công.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

  • Gõ lên trình duyệt http://localhost/ nếu xuất hiện chữ “It works!” (hoặc hiển thị màn hình dashboard của Xampp) là bạn đã cài đặt thành công.

phpMyAdmin

  • phpMyAdmin đã được tích hợp sẵn bên trong bộ cài đặt Xampp, nên khi cài xong Xampp hoàn thành thì ta có thể sử dụng được phpMyAdmin.
  • Click vào button “Admin” tương ứng với “MySQL” để mở trang phpMyAdmin

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Cấu trúc thư mục làm việc và thao tác trên localhost

1. Cấu trúc folder và file

Thư mục thao tác từ đây về sau chính là C:\xampp\htdocs\. Bây giờ bạn hãy vào thư mục C:\xampp\htdocs\ và tạo một thư mục tên “myproject”, thư mục này sẽ chứa website của mình.

Để chạy được các file có trong project này, bạn cần gõ lên trình duyệt http://localhost/myproject/ khi này nếu không có file index thì các file hay folder bên trong sẽ được liệt kê đầy đủ.

Tiếp tục thử tạo file hello-world.php với nội dung bên trong là đoạn code PHP

<?php
echo "Hello World!";
?>

Sau đó gõ lên trình duyệt http://localhost/myproject/hello-world.php ta sẽ thấy được kết quả như bên dưới:

Hello World!

Như ở trên đã hướng dẫn bạn tạo một thư mục tên là myproject trong thư mục htdocs và bạn có thể sử dụng đường dẫn http://localhost/myproject để chạy. Vậy bây giờ có thể nói, thư mục C:\xampp\htdocs\myproject chính là thư mục gốc của tên miền http://localhost/myproject.

Nếu bạn click vào file ảnh đó thì trình duyệt sẽ hiển thị ảnh với đường dẫn là http://localhost/myproject/tên-tập-tin. Đây được xem là một link ảnh trong website của bạn.

Tương tự, hãy thử tạo một thư mục bất kỳ rồi copy một tập tin nào đó vào, thì bây giờ bạn có thể truy cập xem ảnh với đường dẫn là http://localhost/myproject/tên-folder/tên-tập-tin.

Như vậy bạn có thể hiểu, cái đường dẫn trên website nó sẽ phân thứ cấp tùy theo cấu trúc thư mục và file trong đó.

2. Cơ sở dữ liệu MySQL (Database)

Khi tạo database, bạn phải nhớ là nó bao gồm 3 thành phần chính là:

  • Tên user của database.
  • Mật khẩu của user database.
  • Tên database.
  • Database Host (thường thì điền là localhost, bất kể là bạn dùng ở localhost hay host bình thường).

Đối với localhost, bạn không cần tạo user cho database mà sẽ sử dụng thông tin user như sau:

  • Tên user database: root
  • Mật khẩu: bỏ trống

Do vậy, chúng ta chỉ cần tạo database là đủ.

Để tạo database, bạn hãy truy cập vào localhost với đường dẫn http://localhost/phpmyadmin. Sau đó bạn nhấp vào menu Databases. Phpmyadmin là phần mềm quản lý database

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Sau đó ở phần Create databsae, bạn nhập tên database cần tạo vào ô Database name, phần Collation bạn hãy chọn là utf8_unicode_ci như hình dưới rồi ấn nút Create kế bên.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Tạo xong hãy nhìn bên menu tay trái, nếu nó xuất hiện tên database vừa tạo là thành công. Vậy bây giờ, chúng ta tạm có một databse với các thông tin như:

  • Database Host: localhost
  • Database user: root
  • Database password: trống
  • Database name: topdevblog

3. Cách đổi port mạng cho Localhost

Mặc định Localhost sẽ sử dụng cổng 80, tuy nhiên nếu như đã nói ở trên là có rất nhiều phần mềm dùng port 80. Để tránh bị đụng gây ra lỗi, bạn nên thiết lập cho Apache trong Localhost sử dụng một cổng khác, như 8080 chẳng hạn.

Trước khi đổi, các bạn lưu ý là sau khi đổi xong thì bạn phải truy cập vào website với tên miền http://localhost:8080 thay vì chỉ là http://localhost.

Để đổi port, bạn mở bảng điều khiển XAMPP lên và chọn nút Config của Apache, sau đó chọn Apache (httpd.conf).

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Sau đó bạn tìm dòng này:

Listen 80

Đổi thành

Listen 8080

Sau đó bạn Stop cái Apache và Start lại rồi thử truy cập vào localhost theo đường dẫn http://localhost:8080. Nếu truy cập được thì bạn đã làm thành công.

Cài đặt WordPress trên Localhost

Sau khi cài đặt xong một localhost hoàn chỉnh rồi, bây giờ có thể tiến hành cài đặt WordPress vào localhost để khởi tạo một website.

Trước khi cài đặt, các bạn nên tạo một thư mục riêng tại thư mục “C:\\xampp\htdocs” để dễ dàng quản lý.

Các bước cài đặt WordPress trên XAMPP là gì?

1. Tải mã nguồn từ website WordPress.org

Hãy tải phiên bản mới nhất của mã nguồn WordPress tại địa chỉ https://wordpress.org/.

Sau đó giải nén ra sẽ có được một thư mục mang tên wordpress. Tiếp tục, hãy truy cập vào thư mục wordpress, bạn sẽ thấy có một số thư mục tên là wp-admin, wp-includes, wp-content và một số tập tin tên là index.php, wp-config-sample.php,…Tất cả tập tin và thư mục này, chúng ta gọi nó là mã nguồn WordPress.

2. Copy code WordPress vào Localhost

Bây giờ, hãy copy toàn bộ file và thư mục này vào thư mục website của bạn trong localhost (ví dụ: C:\xampp\htdocs\blog). Nghĩa là bạn chỉ copy các file và thư mục mã nguồn thôi, không copy cả thư mục wordpress vì chúng ta cần cài WordPress vào tên miền http://localhost/blog mà, nếu bạn copy cả thư mục wordpress vào thì website của bạn sẽ có đường dẫn là http://localhost/blog/wordpress/.

3. Tạo một database

Để chạy được WordPress thì localhost của bạn phải có một database dùng MySQL để nó có thể lưu trữ các dữ liệu bao gồm bài viết, page…

Xampp là gì? Cách sử dụng và cài đặt XAMPP

4. Chạy website để cài đặt

Sau khi copy xong, hãy mở bảng điều khiển của XAMPP lên và khởi động Apache và MySQL. Sau đó truy cập vào website với đường dẫn http://localhost/blog

Lúc này, nó sẽ hiện ra bảng chọn ngôn ngữ cần cài đặt cho WordPress, hãy chọn là English và ấn Continue.

Ở bước tiếp theo, nó sẽ nhắc nhở cho bạn là chưa tiến hành đổi file wp-config-sample.php thành wp-config.php và khai báo thông tin database vào đó. Hãy ấn Let’s Go để nó tự làm việc đó cho bạn.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Và bây giờ là nhập thông tin database..

Xem thêm các tin tuyển dụng lập trình viên WordPress mới nhất

Trên localhost, User Name của database là root, mật khẩu có thể để trống (vẫn có cách thiết lập nhưng không cần thiết) và Database Host là localhost.

Table Prefix nghĩa là tiền tố của database chứa dữ liệu WordPress, mặc định nó sẽ là wp_, chúng ta có thể đổi nó thành bất cứ cái gì nhưng phải bắt buộc có _ đằng sau.

Khi nhập xong thông tin database, hãy ấn nút Submit để làm bước kế tiếp. Nếu bước kế tiếp nó hiện ra như hình dưới thì nghĩa là bạn đã nhập thông tin database chính xác, hãy ấn nút Run the install để bắt đầu cài đặt.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Ở bước cài đặt này, các bạn sẽ cần phải thiết lập các thông tin quan trọng cho website như Tên của website, tên tài khoản admin cùng mật khẩu,…Nhập xong hãy ấn nút Install WordPress.

Xampp là gì? Cách sử dụng và cài đặt XAMPP

Và nếu nó hiện chữ Success! như thế này là bạn đã cài đặt thành công, click vào nút Log in để đăng nhập vào bảng quản trị WordPress.

Và ở đây, nếu truy cập vào tên miền chính như http://localhost/blog, nó sẽ ra trang chủ của website WordPress.

Còn nếu muốn truy cập vào trang quản trị Admin của WordPress thì sẽ thêm /wp-admin vào đường dẫn thành http://localhost/blog/wp-admin.

Hy vọng với bài viết này bạn sẽ hiểu rõ hơn về Xampp là gì? Cũng như cách sử dụng và cài đặt xampp như thế nào. Nếu còn thắc mắc gì hay có góp ý thêm cho chúng mình. Inbox gửi thông tin, chúng mình luôn lắng nghe ạ

Tham khảo thêm các vị trí tuyển lập trình IT mới nhất tại TopDev

System Design Cơ Bản: Domain Name System (DNS)

domain name system

Bài viết được sự cho phép của tác giả Edward Thiên Hoàng

DNS là viết tắt của cụm từ Domain Name System, mang ý nghĩa đầy đủ là hệ thống phân giải tên miền. Hiểu một cách ngắn gọn nhất, DNS cơ bản là một hệ thống chuyển đổi các tên miền website mà chúng ta đang sử dụng, ở dạng http://www.tenmien.com sang một địa chỉ IP dạng số tương ứng với tên miền đó và ngược lại.

Thao tác này của DNS giúp liên kết các thiết bị mạng với nhau nhằm mục đích định vị và gán một địa chỉ cụ thể cho các thông tin trên internet.

Xem thêm Việc làm designer hấp dẫn trên TopDev

CHỨC NĂNG CỦA DNS LÀ GÌ?

Về chức năng, DNS có thể được hiểu như một “người phiên dịch” và “truyền đạt thông tin”. DNS sẽ làm công việc dịch tên miền thành một địa chỉ IP gồm 4 nhóm số khác nhau. Ví dụ như http://www.tenmien.com thành 421.64.874.899 hoặc ngược lại dịch một địa chỉ IP thành tên miền.

Khi “dịch” như thế, trình duyệt sẽ hiểu và đăng nhập vào được. Và khi người dùng đăng nhập vào một website, thay vì phải nhớ và nhập một dãy số địa chỉ IP của hosting, thì chỉ cần nhập tên website là trình duyệt tự động nhận diện.

Mỗi máy tính trên Internet đều có một địa chỉ IP duy nhất. Địa chỉ IP này được dùng để thiết lập kết nối giữa server và máy khách để khởi đầu một kết nối. Bất kỳ khi nào, bạn truy cập vào một website tùy ý hoặc gửi một email, thì DNS đóng vai trò rất quan trọng trong trường hợp này.

Trong vô vàn trang web trên thế giới, sẽ không có ai có thể nhớ hết từng dãy số địa chỉ IP trong mỗi lần đăng nhập. Do đó, khái niệm tên miền được đưa ra, từ đó mỗi trang web sẽ được xác định với tên duy nhất.

Tuy nhiên, địa chỉ IP vẫn được sử dụng như một nền tảng kết nối bởi các thiết bị mạng. Đó là nơi DNS làm việc phân giải tên domain thành địa chỉ IP để các thiết bị mạng giao tiếp với nhau. Đồng thời, bạn cũng có thể tải một website bằng cách nhập trực tiếp địa chỉ IP thay vì nhập tên domain của website đó.

DNS đóng vai trò như một “người phiên dịch”

DNS đóng vai trò như một “người phiên dịch”

CÁC LOẠI DNS SERVER VÀ VAI TRÒ CỦA NÓ

ROOT NAME SERVERS LÀ GÌ?

Đây là máy chủ tên miền chứa các thông tin, để tìm kiếm các máy chủ tên miền lưu trữ (authority) cho các tên miền thuộc mức cao nhất (top-level-domain).

Máy chủ ROOT có thể đưa ra các truy vấn (query) để tìm kiếm tối thiểu các thông tin về địa chỉ của các máy chủ tên miền authority thuộc lớp top-level-domain chứa tên miền muốn tìm.

Sau đó, các máy chủ tên miền ở mức top-level-domain có thể cung cấp các thông tin về địa chỉ của máy chủ authority cho tên miền ở mức second-level-domain chứa tên miền muốn tìm. Quá trình tìm kiếm tiếp tục cho đến khi chỉ ra được máy chủ tên miền authority cho tên miền muốn tìm. Theo cơ chế hoạt động này thì bạn có thể tìm kiếm một tên miền bất kỳ trên không gian tên miền.

Một điểm đáng chú ý khác, quá trình tìm kiếm tên miền luôn được bắt đầu bằng các truy vấn gửi cho máy chủ ROOT. Nếu như các máy chủ tên miền ở mức ROOT không hoạt động, quá trình tìm kiếm này sẽ không được thực hiện.

Để tránh điều này xảy ra, trên mạng Internet hiện tại có 13 hệ thống máy chủ tên miền ở mức ROOT. Các máy chủ tên miền này nói chung và ngay trong cùng một hệ thống nói riêng đều được đặt tại nhiều vị trí khác nhau trên mạng Internet.

DNS là gì, Các nhánh gốc của máy chủ hay còn gọi là Root name server

Các nhánh gốc của máy chủ hay còn gọi là Root name server

Hiện nay tại các nhà đăng ký tên miền, việc Quản lý DNS dễ dàng hơn bao giờ hết. Bạn có thể Quản lý bản ghi DNS dễ dàng thêm mới, thay đổi IP, thay đổi địa chỉ phân phối email.

LOCAL NAME SERVERS LÀ GÌ?

Server này chứa thông tin, để tìm kiếm máy chủ tên miền lưu trữ cho các tên miền thấp hơn. Nó thường được duy trì bởi các doanh nghiệp, các nhà cung cấp dịch vụ Internet (ISPs).

Hệ thống máy chủ DNS riêng của mỗi đơn vị

Hệ thống máy chủ DNS riêng của mỗi đơn vị

CƠ CHẾ HOẠT ĐỘNG CỦA DNS LÀ GÌ?

Giả sử bạn muốn truy cập vào trang có địa chỉ matbao.vn

Trước hết chương trình trên máy người sử dụng gửi yêu cầu tìm kiếm địa chỉ IP ứng với tên miền matbao.vn tới máy chủ quản lý tên miền (name server) cục bộ thuộc mạng của nó.

Máy chủ tên miền cục bộ này kiểm tra trong cơ sở dữ liệu của nó có chứa cơ sở dữ liệu chuyển đổi từ tên miền sang địa chỉ IP của tên miền mà người sử dụng yêu cầu không. Trong trường hợp máy chủ tên miền cục bộ có cơ sở dữ liệu này, nó sẽ gửi trả lại địa chỉ IP của máy có tên miền nói trên.

Trong trường hợp máy chủ tên miền cục bộ không có cơ sở dữ liệu về tên miền này nó sẽ hỏi lên các máy chủ tên miền ở mức cao nhất (máy chủ tên miền làm việc ở mức ROOT). Máy chủ tên miền ở mức ROOT này sẽ chỉ cho máy chủ tên miền cục bộ địa chỉ của máy chủ tên miền quản lý các tên miền có đuôi .vn.

Tiếp đó, máy chủ tên miền cục bộ gửi yêu cầu đến máy chủ quản lý tên miền Việt Nam (.VN) tìm tên miền matbao.vn.

Máy chủ tên miền cục bộ sẽ hỏi máy chủ quản lý tên miền vnn.vn địa chỉ IP của tên miền matbao.vn. Do máy chủ quản lý tên miền vnn.vn có cơ sở dữ liệu về tên miền matbao.vn nên địa chỉ IP của tên miền này sẽ được gửi trả lại cho máy chủ tên miền cục bộ.

Cuối cùng, máy chủ tên miền cục bộ chuyển thông tin tìm được đến máy của người sử dụng. Người sử dụng dùng địa chỉ IP này để kết nối đến server chứa trang web có địa chỉ matbao.vn.

Cách thức hoạt động của DNS

Cách thức hoạt động của DNS

NGUYÊN TẮC LÀM VIỆC CỦA DNS LÀ GÌ?

Mỗi nhà cung cấp dịch vụ vận hành và duy trì DNS server riêng của mình, gồm các máy bên trong phần riêng của mỗi nhà cung cấp dịch vụ đó trong Internet.

Tức là, nếu một trình duyệt tìm kiếm địa chỉ của một website bất kỳ thì DNS server phân giải tên website này phải là DNS server của chính tổ chức quản lý website đó chứ không phải là của một tổ chức (nhà cung cấp dịch vụ) nào khác.

INTERNIC (Internet Network Information Center) chịu trách nhiệm theo dõi các tên miền và các DNS server tương ứng. INTERNIC là một tổ chức được thành lập bởi NFS (National Science Foundation), AT&T và Network Solution, chịu trách nhiệm đăng ký các tên miền của Internet. INTERNIC chỉ có nhiệm vụ quản lý tất cả các DNS server trên Internet chứ không có nhiệm vụ phân giải tên cho từng địa chỉ.

DNS có khả năng tra vấn các DNS server khác để có được một cái tên đã được phân giải. DNS server của mỗi tên miền thường có hai việc khác biệt.

  • Thứ nhất, chịu trách nhiệm phân giải tên từ các máy bên trong miền về các địa chỉ Internet, cả bên trong lẫn bên ngoài miền nó quản lý.
  • Thứ hai, chúng trả lời các DNS server bên ngoài đang cố gắng phân giải những cái tên bên trong miền nó quản lý. DNS server có khả năng ghi nhớ lại những tên vừa phân giải. Để dùng cho những yêu cầu phân giải lần sau. Số lượng những tên phân giải được lưu lại tùy thuộc vào quy mô của từng DNS.

SỬ DỤNG DNS NHƯ THẾ NÀO?

Vì tốc độ của DNS khác nhau, nên người sử dụng có thể tự chọn DNS server cho riêng mình. Trong trường hợp sử dụng DNS của nhà cung cấp mạng, người sử dụng không cần phải điền địa chỉ DNs vào kết nối mạng của mình.

Còn nếu trong trường hợp sử dụng máy chủ DNS khác, sẽ phải điền địa chỉ cụ thể của máy chủ đó vào. Để thay đổi DNS Server bạn có thể làm như sau:

  • Bước 1: Trước tiên, bạn vào phần Control Panel, nhấn Start Menu lên sau đó gõ Control Panel là thấy.
  • Bước 2: Tại đây bạn truy cập vào View network status and tasks.
  • Bước 3: Sau đó truy cập vào mạng internet bạn đang sử dụng
  • Bước 4: Tiếp theo nhấn vào phần Properties, nơi đây sẽ cho phép chúng ta thay đổi DNS máy tính.
  • Bước 5: Bạn sẽ thấy có một phần tên là Internet Protocol Version 4, hãy nhấn vào đó.
  • Bước 6: Trong Internet Protocol Version 4 lựa chọn Use the following DNS server addresses và tiến hành đổi DNS tại đây.

Cuối cùng nhấn vào OK để xác nhận thiết lập vừa rồi, như vậy là chúng ta đã hoàn tất công đoạn thay đổi DNS.

Việc đổi địa chỉ DNS giúp việc lướt web được nhanh hơn

DNS SERVERS VÀ ĐỊA CHỈ IP

Như đã đề cập ở trên, nhiệm vụ chính của một DNS (Domain Name Server) là giải quyết (hay nói cách khác là biên dịch) một tên miền thành một địa chỉ IP. Điều này nghe có vẻ đơn giản nhưng thực tế thì không hề đơn giản một chút nào cả. Lý do là bởi vì:

– Có hàng tỷ các địa chỉ IP đang được sử dụng.
– Máy chủ DNS đang xử lý “hàng tỷ” các yêu cầu trên Internet vào các thời điểm bất kỳ.
– Mỗi ngày có hàng triệu người đang thêm và thay đổi tên miền cũng như địa chỉ IP.

Để giải quyết các vấn đề, máy chủ DNS dựa vào hiệu suất mạng và các giao thức Internet. Đối với địa chỉ của IP, mỗi một máy tính trên mạng Internet đều có một địa chỉ IP duy nhất (bao gồm chuẩn IPV4 và IPV6) do IANA (Internet Assigned Numbers Authority) quản lý.

  Cách thiết lập một dự án Symfony để làm việc với Docker Subdomains
  Cách thiết lập một project symfony hỗ trợ làm việc với các subdomain

DANH SÁCH DNS PHỔ BIẾN NHẤT HIỆN NAY

Xem thêm: Danh sách đầy đủ DNS phổ biến nhất hiện nay.

DNS GOOGLE:

DNS Google là một trong những DNS server được sử dụng nhiều nhất hiện nay vì tốc độ nhanh và ổn định.

8.8.8.8

8.8.4.4

DNS OPENDNS:

208.67.222.222

208.67.220.220​

DNS CLOUDFLARE:

Cloudflare là một dịch vụ DNS trung gian, giúp điều phối lưu lượng truy cập qua lớp bảo vệ CloudFlare.

Xem thêm: Cloudflare là gì?

1.1.1.1

1.0.0.1

DNS VNPT:

203.162.4.191

203.162.4.190

DNS VIETTEL:

203.113.131.1

203.113.131.2

DNS FPT:

210.245.24.20

210.245.24.22

DNS nói chung là một phần vô cùng thiết yếu và quan trọng trong quản trị mạng và website. Hy vọng với những thông tin chi tiết mà Mắt Bão cung cấp cho bạn phía trên, bạn sẽ phần nào hiểu rõ hơn về khái niệm DNS và cách sử dụng nó một cách hiệu quả.

Theo matbao

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

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

Cái nút Unsubscribe

Cái nút Unsubscribe

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

Một buổi chiều đẹp trời, anh ấy check mail và tình cờ nhìn thấy chức năng Unsubscribe mà Google đã khéo léo thêm vào bên dưới mỗi thanh tiêu đề. Thật là một chức năng hữu ích! anh thầm nghĩ, và không ngại ngần dành suốt 5 tiếng đồng hồ tiếp theo để click vào từng cái nút ấy. Thậm chí, anh còn search cả những email spam cũ, đã lâu ngày không thấy gửi tiếp. Đã diệt thì phải trừ tận gốc. Anh nghĩ thế. Xong xuôi đâu vào đấy, anh vươn vai thở phào một cái và tắt máy đi ngủ, lòng tràn đầy vui sướng vì một ngày mai không còn nhìn thấy mail spam.

  "Bắt đầu từ vị trí dev, làm tốt sẽ được trao cơ hội trở thành leader"
  20 trường hợp sử dụng lệnh Docker cho developer

Sáng ngày hôm sau…

Anh vừa đi vừa chửi, anh chửi thằng Google vì cái nút Unsubscribe vô dụng, anh chửi cái hộp mail vì càng lúc càng đầy thêm những mail quảng cáo, anh chửi đám dịch vụ vì ngay khi anh vừa bấm nút unsubscribe, chúng liền gửi thêm hàng tá, hàng tá email quảng cáo vào cái hộp mail xấu số của anh. Tính từ đêm qua đến lúc thức dậy, anh nhận thêm hơn 200 email quảng cáo, có cả những mail đến từ những dịch vụ đã ngừng gửi mail cho anh từ lâu lắm rồi.


Sau nhiều đêm trằn trọc suy nghĩ, anh đi đến một kết luận: Thôi mình đếu xài Gmail nữa vậy.

Thay vào đó, là quay lại cách đọc mail của mấy ông già thời cổ đại: fetch toàn bộ mail về máy tính, rồi dùng Mutt (nếu thích xài terminal) hoặc Thunderbird (nếu thích xài GUI) để đọc.

Mấu chốt của việc trên nằm ở chỗ fetch toàn bộ mail về máy tính. Tức là sẽ dùng các công cụ như offlineimap hoặc mbsync để tải toàn bộ mail từ Google về máy tính, thường là thông qua giao thức IMAP hoặc POP3. Dữ liệu email sẽ được lưu vào máy tính dưới dạng file, các file này thường sẽ được lưu dưới định dạng Maildir hoặc Mbox.

Một khi đã có dữ liệu mail nằm trong máy tính, ta có thể dùng các trình đọc mail có hỗ trợ giao thức Maildir hoặc Mbox, là Mutt hoặc Thunderbird.

Và vì có dữ liệu mail nằm trong máy tính (kể cả các mail spam), ta có toàn quyền xử lý, phân loại email theo ý mình mà không cần phụ thuộc vào Gmail. Đến đây thì chấp cả họ nhà tụi spammer, ta có thể chủ động tìm và xóa đám mail rác ngay trên máy tính.

Để xóa mail rác từ máy tính, có 10000001 cách, ví dụ, đoạn lệnh sau sẽ tìm tất cả các mail có chứa từ khóa thefullsnack.com trong thư mục ~/mail/inbox và đưa hết vào thư mục ~/mail/trash, để lần sync tiếp theo nó sẽ bị xóa, hoặc thích thì có thể thay bằng lệnh rm để xóa nó luôn.

cd ~/mail/inbox && rg -l -e "thefullsnack.com" | xargs -I {} mv {} ~/mail/trash/

Để scale up, có thể viết một script chứa tất cả các regex pattern (vì lệnh rg hoặc ag sử dụng regex để search) cần lọc, và chạy script này mỗi lần sync email từ server về.


Quá nhiều thứ cần làm một cách thủ công… có thể khắc phục bằng cách viết script, dù sao đây cũng là cái giá phải trả để giành được quyền kiểm soát hoàn toàn cái inbox của mình.

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

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Tái cấu trúc mã nguồn: Chia nhỏ mã nguồn

Tái cấu trúc mã nguồn: Chia nhỏ mã nguồn

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

Tách phương thức: Tách từ một phương thức dài lấy một phương thức mới nhỏ hơn. Việc chia từ một phương thức dài thành nhiều phương thức nhỏ sẽ làm mã tốt hơn như: dễ hiểu, để bảo trì, dễ tái sử dụng hơn.

  9 mã nguồn mở cho file upload field
  Tái cấu trúc mã nguồn

Các bước:

  1. Tạo phương thức mới có tên phù hợp với chức năng.
  2. Sao và dán đoạn mã muốn tách từ phương thức ban đầu vào phương thức mới.
  3. Tìm tất cả các tham chiếu ở đoạn mã sao tới các biến của phương thức ban đầu. Các biến này sẽ là các biến cục bộ và tham số của phương thức mới.
  4. Khai báo biên cục bộ cho tất cả các biến tạm ở đoạn mã sao.
  5. Tìm tất cả các biến ở hàm gốc bị thay đổi giá trị ở đoạn mã sao. Nếu chỉ có một bị thay đổi thì có thể truyền giá trị đó vào bằng đối số và gán cho giá trị tương ứng. Nhưng nếu có nhiều hơn thì phải chú ý!
  6. Truyền tất cả mọi biến được tham chiếu chỉ để đọc ở mã được sao vào phương thức mới như tham số.
  7. Biên dịch để kiểm tra xem mọi biến cục bộ đã được xử lý.
  8. Thay đoạn mã đã sao bằng phương thức mới.
  9. Biên dịch và kiểm thử.

Ví dụ:

[sourcecode language=”java”] void printOwing() {
Enumeration e = _orders.elements();
double outstanding = 0.0;

// print banner
System.out.println ("**************************");
System.out.println ("***** Customer Owes ******");
System.out.println ("**************************");

// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}

//print details
System.out.println ("name:" + _name);
System.out.println ("amount" + outstanding);
}

[/sourcecode]

Dễ dàng tách đoạn mã hiển thị tiêu đề bằng các cắt và dãn

[sourcecode language=”java”] void printOwing() {
Enumeration e = _orders.elements();
double outstanding = 0.0;

printBanner();

// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}

//print details
System.out.println ("name:" + _name);
System.out.println ("amount" + outstanding);
}

void printBanner() {
// print banner
System.out.println ("**************************");
System.out.println ("***** Customer Owes ******");
System.out.println ("**************************");
}

[/sourcecode]

Ví dụ có biến cục bộ chỉ để đọc: Trong trường hợp này ta đơn giản là truyền chúng theo tham số. Ở ví dụ trên ta có thể tách phương thức để in ra thông tin chi tiết từ phương thức printOwning

[sourcecode language=”java”] void printOwing() {

Enumeration e = _orders.elements();
double outstanding = 0.0;

printBanner();

// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}

printDetails(outstanding);
}

void printDetails (double outstanding) {
System.out.println ("name:" + _name);
System.out.println ("amount" + outstanding);
}

[/sourcecode]

Và bạn có thể truyền vào số lượng biến cục bộ tùy thích.

Ví dụ có gán giá trị cho biến cục bộ:

Trong trường hợp này chúng ta chỉ đề cập tới trường hợp biến cục bộ của hàm gốc, nếu là có thay đổi giá trị cho tham số thì xem kỹ thuật tái cấu trúc xóa gán cho tham số.

Từ phương thức printOwing có ở trên:

[sourcecode language=”java”] void printOwing() {

Enumeration e = _orders.elements();
double outstanding = 0.0;

printBanner();

// calculate outstanding
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}

printDetails(outstanding);
}

[/sourcecode]

Ta có thể tách thành:

[sourcecode language=”java”] void printOwing() {
printBanner();
double outstanding = getOutstanding();
printDetails(outstanding);
}

double getOutstanding() {
Enumeration e = _orders.elements();
double outstanding = 0.0;
while (e.hasMoreElements()) {
Order each = (Order) e.nextElement();
outstanding += each.getAmount();
}
return outstanding;
}

[/sourcecode]
  • Tách lớp: tách một phần của lớp đã tồn tại thành một lớp mới. Một lớp có kích thước tăng dần và tới trở nên khó hiểu và khó bảo trì. Lúc đó ta phải tách nhỏ lớp đó ra.

    Các bước:

  1. Cách chia trách nhiệm của các lớp
  2. Tạo lớp mới để chia sẻ trách nhiệm với lớp ban đầu
  3. Tạo một liên kết từ lớp ban đầu tới lớp mới
  4. Thực hiện viên di chuyển từng trường và phương thức từ lớp cũ sang lớp mới
  5. Biên dịch và kiểm thử.

Ví dụ:Ta phải tách một lớp đơn giản:

[sourcecode language=”java”] class Person…
public String getName() {
return _name;
}
public String getTelephoneNumber() {
return _officeAreaCode + " " + _officeNumber;
}
String getOfficeAreaCode() {
return _officeAreaCode;
}
void setOfficeAreaCode(String arg) {
_officeAreaCode = arg;
}
String getOfficeNumber() {
return _officeNumber;
}
void setOfficeNumber(String arg) {
_officeNumber = arg;
}

private String _name;
private String _officeAreaCode;
private String _officeNumber;

[/sourcecode]
  1. Cách chia trách nhiệm của các lớp: ta muốn chia thành một lớp chứa thông tin về số điện thoại.
  2. Tạo lớp mới để chia sẻ trách nhiệm với lớp ban đầu
    [sourcecode language=”java”] class TelephoneNumber {}
    [/sourcecode]
  3. Tạo một liên kết từ lớp Person tới lớp TelephoneNumber

    [sourcecode language=”java”] class Person
    private TelephoneNumber _officeTelephone = new TelephoneNumber();[/sourcecode]

  4. Thực hiện viên di chuyển từng trường và phương thức từ lớp cũ sang lớp mới
    [sourcecode language=”java”] class Person…
    
    public String getName() {
    
    return _name;
    
    }
    
    public String getTelephoneNumber(){
    
    return _officeTelephone.getTelephoneNumber();
    
    }
    
    TelephoneNumber getOfficeTelephone() {
    
    return _officeTelephone;
    
    }
    
    private String _name;
    private TelephoneNumber _officeTelephone = new TelephoneNumber();
    class TelephoneNumber…
    public String getTelephoneNumber() {
    return ("(" + _areaCode + ") " + _number);
    }
    String getAreaCode() {
    return _areaCode;
    }
    void setAreaCode(String arg) {
    _areaCode = arg;
    }
    String getNumber() {
    return _number;
    }
    void setNumber(String arg) {
    _number = arg;
    }
    private String _number;
    private String _areaCode;
    
    [/sourcecode]
  5. Biên dịch và kiểm thử.

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

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Cài đặt Filebeat trên CentOS

Cài đặt Filebeat trên CentOS

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

Thông thường, khi deploy các ứng dụng lên môi trường production, chúng ta sẽ deploy lên nhiều server khác nhau. Việc quản lý log trên nhiều server sẽ gây ra rất nhiều khó khăn, mất thời gian mà không hiệu quả. Sẽ tốt hơn nếu chúng ta sử dụng giải pháp centralize tất cả các file logging. Điều này có nghĩa là chúng ta sẽ cài đặt để các server đang deploy ứng dụng có thể gửi tất cả các log message của ứng dụng về một server chính, trên server chính chúng ta sẽ sử dụng các công cụ để các log message có thể hiển thị một cách trực quan nhất.

  11 công cụ hữu ích để kiểm tra và tối ưu hóa các file CSS
  9 mã nguồn mở cho file upload field

Trong thế giới ELK (Elasticsearch-Logstash-Kibana), để hiện thực được ý tưởng trên, các bạn có thể dùng các công cụ Beats để thực hiện. Beats là các công cụ có nhiệm vụ chính là data shipper, bao gồm: Filebeat, Metricbeat, Packetbeat, Winlogbeat, Auditbeat, Heartbeat, Functionbeat. Trong bài viết này, mình sẽ hướng dẫn các bạn cài đặt công cụ Filebeat các bạn nhé!

Đầu tiên, tương tự như khi cài đặt Elasticsearch hay Kibana, nếu server của các bạn chưa cài đặt Elasticsearch hoặc Kibana repository, thì các bạn cần cài đặt repository của Filebeat vào

Các bạn cần thêm Filebeat public signing key trước bằng cách chạy câu lệnh sau:

Kết quả của mình như sau:

Cài đặt Filebeat trên CentOS

Tiếp theo, các bạn cần tạo mới một tập tin để thêm Filebeat repository:

sudo vi /etc/yum.repos.d/filebeat.repo

rồi thêm vào tập tin này nội dung như sau:

Bây giờ thì các bạn có thể chạy câu lệnh sau để cài đặt Filebeat rồi:

Cài đặt Filebeat trên CentOS

Nhập “Y” để tiếp tục các bạn nhé!

Kết quả cài đặt:

Cài đặt Filebeat trên CentOS

Sau khi cài đặt xong, các bạn có thể bắt đầu cấu hình để Filebeat có thể thực hiện nhu cầu của chúng ta. Tập tin cấu hình của Filebeat có tên là filebeat.yaml nằm trong thư mục /etc/filebeat của CentOS đó các bạn!

Trong những bài viết tới, mình sẽ hướng dẫn các bạn cách cấu hình Filebeat các bạn nhé!

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

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

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Cài đặt Laravel

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

Yêu cầu hệ thống để cài đặt Laravel

Laravel framework có một vài yêu cầu về hệ thống. Hiển nhiên là các yêu cầu này đã được đầy đủ trong Laravel Homestead, vì thế Laravel rất khuyến khích các bạn sử dụng Homestead cho môi trường phát triển. Tuy nhiên với những bạn không rành cấu hình phức tạp có thể dùng web server phổ biến trên localhost là XAMPP.

Để có thể cài Laravel, bạn phải đáp ứng được các yêu cầu bắt buộc sau:

  • PHP >= 7.1.3
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension
  • Ctype PHP Extension
  • JSON PHP Extension

Đối với Windows: sử dụng phần mềm tạo Webserver trên Windows như Openserver, Wamp, Xampp, Ampps… 

Cài đặt Laravel

Cài đặt Composer

Laravel sử dụng Composer để quản lý các thư viện phụ thuộc. Vì vậy, trước khi sử dụng Laravel, cần đảm bảo rằng đã cài đặt trình soạn thảo trên máy.

Bạn vào https://getcomposer.org/doc/00-intro.md để set up composer. Hướng dẫn bên dưới là cho Windows

Khởi động file Composer-Setup.exe

Lựa chọn thư mục cài đặt, đặt chung với XAMPP.

Lựa chọn đường dẫn đến phiên bản PHP muốn sử dụng (Ở đây dùng PHP 7.18 trên XAMPP).

Nhấn Install để cài đặt.

Cài đặt Laravel thông qua Laravel Installer

Bạn mở Terminal (CMD hoặc Git Bash), gõ dòng lệnh sau:

composer global require “laravel/installer”

– Đối với Windows, đường dẫn là:

%appdata%Composervendorbin

-Đối với MacOS và Linux, đường dẫn là:

~/.composer/vendor/bin

Sau khi cài đặt xong, bạn di chuyển vào thư mục htdocs của XAMPP. Sau đó mở cửa sổ lệnh (đối với windows thì nhấp Shift + chuột phải và chọn Command Window Here hoặc Git Bash Here) và gõ:

laravel new blog

Trong đó blog chính là tên thư mục laravel project của bạn. Vậy là chúng ta đã cài đặt xong Laravel rồi đấy.

Cài đặt Laravel thông qua Composer

Di chuyển thẳng vào thư mục htdocs của XAMPP, tại đây mở cửa sổ lệnh và gõ lệnh:

 composer create-project –prefer-dist laravel/laravel blog

Trong đó blog chính là tên thư mục laravel project của bạn.

Cài đặt Laravel thủ công

Clone project laravel trên github tại địa chỉ https://github.com/laravel/laravel sau đó tại thư mục gốc của project chạy lệnh terminal sau:

composer install

Sử dụng framework Laravel

Sau khi cài đặt hoàn tất, mở WebServer của bạn lên, đến thư mục public trong thư mục Laravel project hoặc từ thư mục Laravel project, gõ lệnh:

php artisan serve

Khi đó trên màn hình console xuất hiện thông báo: ”Laravel development server started on http://localhost:8000/”.

Vào trình duyệt gõ:

http://localhost:8000

Cấu hình laravel

Quyền hạn thư mục

Phải chắc chắn rằng 2 thư mục storage và bootstrap/cache phải có quyền write bởi web server (nginx, apache,…) ,nếu không có quyền ghi thì Laravel sẽ không chạy được. Trên windows thông thường không cần phải cấu hình gì, còn trên linux, macOS chạy lệnh sau:

# Nginx
chown -R nginx:nginx /home/chungnguyenblog
# Cho phép quyền ghi cho thư mục
chmod -R 777 storage/ bootstrap/cache/

Nếu bạn dùng hosting không chạy được lệnh thông qua ssh thì bạn nên dùng các ftp client như File Zilla:

1. Click chuột phải vào folder

2. File Permissions…

3. Numberic Value 777

4. Check vào ô Recurse into subdirectories và nhấp OK.

Application Key

Nếu cài laravel theo cách 1 và cách 2 thì Application Key mặc định được tạo, nếu làm thủ công bạn phải đổi tên hoặc copy file .env.example thành .env, sau đó chạy lệnh terminal sau:

php artisan key:generate

Nếu application key không được thiết lập, các user sessions và các dữ liệu mã hoá khác sẽ không được bảo mật an toàn. Và project sẽ báo lỗi không chạy được.

Quyền hạn thư mục và Application Key không được cấu hình đầy đủ thì 99% project sẽ báo lỗi khi đưa lên vps – hosting và khiến những bạn newbie rất bối rối không biết cách xử lý.

Tham khảo thêm vị trí tuyển dụng Laravel lương cao tại Topdev