Git – Các vấn đề về conflict

Trước tiên, bạn chỉ nên đọc bài viết này nếu đã nắm được các phần cơ bản về git. Nếu chưa, hãy tìm hiểu trong series Git cho người mới bắt đầu

Conflict là gì?

Nói một cách đơn giản, conflict là xung đột xảy ra khi chúng ta tiến hành merge branch. Vậy khi nào merge bị conflict và khi nào thì không bị, chúng ta hãy cùng xem một ví dụ đơn giản sau:

Đầu tiên, ta khởi tạo git và tạo file test_file, sau đó add file vào và commit trong nhánh mặc định là master:

$ git init
$ touch test_file
$ git add test_file
$ git commit -m "Initial commit"

Bây giờ, ta đang làm việc trong nhánh master với 1 file là test_file.


Tiếp theo, ta tạo nhánh newbranch để làm việc:

$ git checkout -b newbranch

Từ đây, mọi thay đổi trên nhánh newbranch sẽ không ảnh hưởng đến nhánh master và ngược lại cho tới khi chúng được merge. Ta tiến hành thêm nội dung cho file test_file rồi commit:

$ echo "line 1 in newbranch" >> test_file
$ git add test_file
$ git commit -m "Edit test file in newbranch"

Lúc này, nội dung trong file test_file đã được thêm ở dòng đầu tiên, tuy nhiên chỉ là trong nhánh newbranch. Giờ hãy quay về lại nhánh master:

$ git checkout master

Như đã nói ở trên, mọi thay đổi trên nhánh newbranch không ảnh hưởng đến nhánh master nên file test_file ở nhánh master lúc này vẫn như ban đầu (còn trống). Ta thêm dòng đầu tiên cho test_file này với nội dung khác rồi commit:

$ echo "line 1 in master" >> test_file
$ git add test_file
$ git commit -m "Edit test_file in master"

Tới đây, ta đã có 2 file test_file khác nhau trong mỗi nhánh. Để kiểm tra nội dung mỗi file, ta có thể checkout qua nhánh tương ứng và dùng lệnh cat test_file:

Bây giờ, chúng ta merge 2 nhánh này lại với nhau để xem điều gì sẽ xảy ra, sử dụng lệnh:

$ git merge newbranch

Lúc đó màn hình hiện lên thông báo:

Điều này có nghĩa là đã có xung đột xảy ra khi merge 2 file test_file với nhau. Ta có thể sử dụng

cat test_file  để xem nội dung của test_file sau khi merge, kết quả thu được là:

Như vậy, khi ta gộp 2 nhánh lại, git sẽ tự động gộp 2 file test_file lại và cập nhật sự thay đổi. Nhưng khi phát hiện file đã bị thay đổi trên cùng một dòng từ cả 2 nhánh, git không biết nên cập nhật chỉnh sửa của nhánh nào. Vì thế, git sẽ hiện thông báo conflict như ở trên. Nếu ở mỗi nhánh, ta chỉnh sửa file ở các dòng khác nhau thì khi merge sẽ không xảy ra conflict

Xử lý khi gặp conflict

Conflict xảy ra là một chuyện rất bình thường khi làm việc với git, vậy thì xử lý conflict như thế nào? Rất đơn giản, git đã cung cấp đầy đủ tên file cũng như đánh dấu lại những chỗ bị conflict. Tất cả những gì bạn phải làm đó là chỉnh sửa file bị conflict này cho phù hợp.

Tiếp tục ví dụ trước, như được thông báo, file bị conflict là test_file, ta tiến hành chỉnh sửa file này bằng cách dùng lệnh vi test_file, giả sử ta giữ lại 2 dòng đã thêm như sau:

Sau đó lưu lại, add file và commit.

$ git add test_file
$ git commit -m "Resolve conflict and commit"

Lưu ý: File test_file sau khi sửa sẽ được cập nhật ở nhánh hiện tại (master branch) trong khi file test_file ở nhánh còn lại (newbranch) không thay đổi tức là giữ nguyên trạng thái như lúc chưa merge.

Các trường hợp có thể xảy ra conflict

Như đã nói ở trên, conflict chỉ xảy ra khi gộp file bị thay đổi cùng một dòng. Do vậy các thao tác như merge branch, rebase branch hay pull file, push file,… gây ảnh hưởng trực tiếp tạo ra việc gộp file đều có khả năng xảy ra conflict. Và cách để xử lý những conflict này thì vẫn là xử lý bằng tay như đã đề cập ở phần trên.

 

Git dành cho người mới bắt đầu (phần 1).

Git là gì ?

Trước khi bắt đầu với git, chúng ta sẽ cùng nhau tìm hiểu về khái niệm hệ thống quản lí phiên bản (Version Control System).
Version Control System (VCS) là hệ thống nhằm quản lí những thay đổi của 1 số tập tin theo thời gian. Ngoài việc cho phép bạn khôi phục lại trạng thái trước đó của những tập tin đã thay đổi, nó còn cung cấp những thông tin về thời gian thực hiện chỉnh sửa, nội dung cũng như người chỉnh sửa. Việc sử dụng một VCS (Version Control System) cũng mang lại 1 lợi ích to lớn đó là trong một số trường hợp, vì 1 lí do nào đó nếu bạn mất các tập tin thì bạn có thể dễ dàng phục hồi phục nó.
what is git

Truyền, nhận dữ liệu giữa 2 chip esp8266

Một chủ đề khá hấp dẫn là làm sao để 2 esp8266 nói chuyện với nhau (truyền-nhận dữ liệu giữa 2 esp8266) mà không cần thông qua Access Point nào.
Trước tiên, bạn cần biết esp8266 là gì? làm thế nào để sự dụng nó thì trang web https://arduino.esp8266.vn là 1 sự lựa chọn hoàn hảo. Hãy tìm hiểu về nó. Việc kết nối với 2 esp8266 (hoặc nhiều hơn) thực sự không khó, bạn chỉ cần đọc tài liệu để hiểu các chế độ làm việc của esp8266, có kiến thức về C và tìm hiểu các thư viện arduino.

Ứng dụng nào trong thực tế ?. Chúng ta hãy xem một nông dân công nghệ, ông ta trồng rau trên cánh đồng rộng khoảng 5km2, điều đáng nói là ông ta tạo ra một hệ thống giám sát và điều khiển nhiệt độ, độ ẩm dùng WIFI bằng cách kết nối các module esp8266 mà không sử dụng bất kì sợi dây nào (tất nhiên phải có 1 số dây nối với cảm biến 🙂 )

Làm thế nào ?. Ông ta chia khu vực 5km2 này thành 4 khu đất nhỏ hơn, ở mỗi khu ông ấy dùng 9 esp8266 kết nối với nhau. Tại khu vực trung tâm sẽ đặt 1 center-box gồm 1 module esp8266, 1 board arduino NANO và 1 module GPRS 3G tương thích với arduino. Ở mỗi phần, ông sắp xếp các esp8266 theo hình thức kết hợp giữa dạng mesh và dạng star , trong đó 6 esp8266 là các clients để đọc dữ liệu từ môi trường, 3 esp8266 còn lại giống như bộ phận trung gian để truyền-nhận dữ liệu. Mô hình kết nối như hình dưới (kiến thức về mạng Wireless Infrastructure and Topologies có thể tham khảo tại đây

6 esp8266 đọc dữ liệu chủ yếu ở chế độ DEEP-SLEEP, chỉ wake-up khoảng 1h trong ngày đề đọc dữ liệu nhằm tiết kiệm năng lượng. 3 esp8266 trung gian vận hành ở 2 chế độ, chế độ AP (access point: tạo kết nối để những esp8266 client  truy cập, truyền và nhận dữ liệu với nhau) và chế độ ST (Station mode: chế độ này nó như  1 client và kết nối đến AP tiếp theo).

GPIO với raspberry

Giới thiệu

Raspberry Pi được hiểu như một máy tính với với các cổng HDMI, chuột, bàn phím, ngõ vào camera, kết nối internet và chạy bằng hệ điều hành Linux. Nhưng Raspberry Pi nhiều tính năng hơn 1 máy tính nhỏ vì nó là một công cụ cho phép tạo các dự án phần cứng nhanh chóng. Pi có bi-derectional I/O pins (sử dụng như input và output), cho việc PWM , uart , spi … nhằm phục vụ cho các dự án phần cứng của bạn. Bài hướng dẫn này dùng cho Raspberry Pi phiên bản B, B+ và phiên bản mới Raspberry Pi 2 model B. Hình ảnh về Pi Wedge model B tham khảo hình bên dưới:

Việc điều khiển ngõ ra vào của Raspberry Pi yêu cầu bạn phải biết một ít kiến thức về lập trình. Có nhiều ngôn ngữ cho bạn, chúng tôi đã so sánh và nhận thấy có 2 lựa chọn tối ưu, dễ điều khiển GPIO là Python và C language. Nếu bạn chưa từng điều khiển LED hoặc đọc tín hiệu nút nhấn bằng cách dùng Raspberry Pi thì bài hướng dẫn này sẽ giúp bạn bắt đầu.

ESP8266 mac scan

Chip ESP8266 là chip WiFi giá rẻ có nhiều tính năng hữu dụng, một trong những tính năng đó là lắng nghe

Ngày nay đa số mọi người đều có smartphone, dĩ nhiên là phải có WiFi, các smartphone này thường phải scan liên tục để tìm mạng Wifi hiện hữu, hoặc trao đổi dữ liệu với các AP đã kết nối. Tất cả các thao tác trên đều phát ra địa chỉ MAC (duy nhất) của điện thoại.

Như vậy là bạn đã có thể hình dung được, nếu ESP8266 có thể lắng nghe bất kỳ gói tin nào thì nó cũng có thể phát hiện bất kỳ thiết bị hỗ trợ WiFi nào ở gần.

Môi trường phát triển ứng dụng cho Raspberry Pi trên OS X

Tổng quan

Hiện tại Raspberry PI đã ra phiên bản 3, với nhiều tính năng vượt trội, đặc biệt là đã tích hợp Wifi + BLE trong khi giá vẫn không đổi. Chính sự thay đổi này đã làm giá của RPI giảm đi rất nhiều, bởi vì trước đây việc sử dụng RPI bắt buộc phải mua thêm 1 cái USB Wifi là khó tránh khỏi.

Nhưng, việc xây dựng môi trường lập trình ứng dụng trên RPI không phải là đơn giản, nếu bạn không có 1 cái màn hình hỗ trợ HDMI và không có luôn 1 cái cổng Mạng (Macbook giờ mất luôn cái cổng huyền thoại này :cry:) thì đảm bảo là không thể luôn.

Bài viết này sẽ giúp bạn dễ dàng để xây dựng một môi trường lập trình hoàn hảo với 1 máy tính kết nối Wifi và 1 con RPI hỗ trợ Wifi. Không cần Monitor HDMI, không cần cáp mạng

alt text

Mô hình sử dụng Git Branches hiệu quả

Mở đầu

Ngay bây giờ, tôi sẽ giới thiệu với các bạn mô hình sử dụng Git mà tôi đã và đang sử dụng trong các dự án khoảng một năm trở lại đây. Đó là một mô hình thực sự thành công, nhưng mãi đến giờ tôi mới có cơ hội để có thể viết về nó và chia sẻ với các bạn. Tôi sẽ không đi vào chi tiết dự án, mà chỉ xoay quanh chiến lược quản lý các phân nhánh mà thôi.

Học lập trình hiệu quả

Trong bài viết dưới đây, tôi sử dụng Git để quản lý version cho toàn bộ source code. Nếu các bạn có hứng thú với việc phân tích dữ liệu thời gian thực dựa vào hoạt động trên Git, có thể tham khảo phần mềm mà GitPrime mà công ty tôi phát triển.

Tìm hiểu về giao thức MQTT

MQTT (Message Queuing Telemetry Transport) là một giao thức gởi dạng publish/subscribe sử dụng cho các thiết bị Internet of Things với băng thông thấp, độ tin cậy cao và khả năng được sử dụng trong mạng lưới không ổn định.

Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho các ứng dụng M2M

MQTT cũng là giao thức sử dụng trong Facebook Messager

Và MQTT là gì? Để có một cái nhìn toàn diện hoặc định nghĩa chi tiết, chỉ cần google “what is mqtt”, “mqtt slides” … Trong bài viết này chúng ta chỉ nói ngắn gọn thôi, đủ để hiểu giao thức MQTT, bao gồm các định nghĩa “subscribe”, “publish”, “qos”, “retain”, “last will and testament (lwt)” – Và chỉ dành cho những ai đang muốn tìm hiểu về MQTT, không thì đọc toàn chữ thôi, mỏi mắt lắm.

Phần cứng fast prototype cho IoTs

Giới thiệu

  • Bài viết này nhằm mục đích giới thiệu về IoT (Internet Of Things), các phần cứng, platform hỗ trợ
  • Những ưu điểm của vượt trội của các platform dùng LUA, Javascript, Python và C/C++ cho MCU

Nội dung

Trong giai đoạn phát triển như vũ bão về kỹ thuật điện tử và máy tính hiện nay, phần cứng ngày càng mạnh mẽ và rẻ hơn. Đặc biệt là các thiết bị với khả năng kết nối Internet và đảm nhận các công việc tự động hóa cho con người. Thì việc lập trình cho thiết bị, cho máy tính trở nên ngày càng quen thuộc hơn với nhiều người.

Thuật ngữ IoTs (Internet Of Things) ngày càng phổ biến cùng với các ứng dụng rộng rãi của nó với xã hội. Và một điều không thể phủ nhận là “miếng bánh” IoTs cực kỳ lớn mà không có nhà sản xuất hay công ty nào có thể ôm hết. Thị phần của nó phát triển theo cấp số nhân và được dự báo bởi những tổ chức uy tín hàng đầu thế giới: