Tuesday, December 12, 2017

Hướng dẫn download video từ nhóm kín trên Facebook

1. Mở video bạn muốn download

 

Mở video bạn muốn download lên, click chuột phải vào video và chọn Hiển thị Url video

Xem url của video bạn muốn download
 
Xem url video bạn muốn download

2. Copy Url video và mở sang một tab mới

 

Một cửa sổ nhỏ hiển thị ra, click chuột phải vào và chọn Đi đến https://www.facebook.com....

Mở video facebook sang một cửa sổ mới
 
Mở video sang một cửa sổ mới

Ở trên mình đang sử dụng trình duyệt Google Chrome tiếng việt, nếu trình duyệt của bạn khác bạn có thể chọn Sao chép(copy)  url video và mở sang một tab mới.

Copy lấy url video facebook và mở sang một tab mới

Copy lấy url của video, mở video sang tab mới.

Mở tab mới của trình duyệt, click chuột phải chọn Dán (paste) sau đó nhấn enter

Mở tab mới trên trình duyệt và dán url video đã copy vào sau đó nhấn Enter

3. View source và copy nguồn facebook

 

Khi mở video facebook trên một tab mới của trình duyệt rồi, bạn nhấn phím Ctrl + U, hoặc nhấn chuột phải vào một khoảng trống nào đó trên trang và chọn Xem nguồn trang.

View source - xem nguồn trang facebook

View source - xem nguồn trang facebook

Màn hình view source facebook hiện ra với một mớ các thẻ html, bạn không cần quan tâm đến những mớ hỗn độn này, bạn nhấn phím Ctrl + A để chọn tất cả, sau đó nhấn Ctrl + C để copy toàn bộ.

Nhấn ctrl + a để chọn tất cả, nhấn ctrl + c để copy toàn bộ
View source trang web facebook và copy toàn bộ

4. Mở Facebook private video downloader

 

Facebook private video downloader là một trang web miễn phí cho phép download video từ nhóm kín của facebook.

Nhấn vào link : www.video-fb.com để mở trang web

Tại mục Download private Facebook videos, click chuột phải và chọn Dán (paste) mã nguồn video facebook đã copy ở trên vào, sau đó nhấn nút Download.

Download video từ nhóm kín facebook

Dán mã nguồn facebook đã copy ở trên vào, sau đó nhấn Download

5. Download video

 

Sau khi ấn download ở bước 4, chờ một lúc để Facebook private video downloader phân tích và lọc video

Video sau khi tìm thấy, nếu là video HD thì sẽ có 2 tùy chọn là Download SD, và HD. Tùy theo nhu cầu của bạn nhận Download SD hoặc HD để download video

Facebook private video downloader, download video từ nhóm kín facebook


Như vậy là xong, chúc bạn thành công.
Video chi tiết:

Hướng dẫn bật tính năng hỗ trợ Download nhanh như IDM trên Google Chrome
[​IMG]

Trình duyệt của Google Chrome trên phiên bản PC cũng như Android đang được cập nhật khá nhiều tính năng mới và một trong số đó là tính năng Parallel Download trên Chrome 63, hỗ trợ download nhanh như IDM.

Đây là một trong những tính năng dự kiến sẽ ra mắt trong phiên bản Chrome 64, mà người dùng đang rất mong chờ. Hiện nay đa số người dùng đều phải sử dụng IDM hay công cụ hỗ trợ tải để tăng tốc trong Chrome, nhưng giờ đây chỉ cần bật tính năng Parallel Download tốc độ tải sẽ được nâng cao hơn nhờ việc sử dụng đa luồng nhằm tăng tốc quá trình tải xuống.

Theo lý thuyết tính, năng này sẽ làm tăng tốc độ tải xuống trong Google Chrome nếu thời gian tải file của bạn lớn hơn 2s. Bởi vì tính năng này sẽ tạo ra ba luồng để tăng tốc độ tải xuống. Hiện tại tính năng này chỉ xuất hiện trên Chrome 63 phiên bản PC, với phiên bản dành cho Android thì tính năng này sẽ tự động được kích hoạt cho người dùng đang sử dụng phiên bản Chrome DevChrome CanaryChromiumChrome BetaChrome Stable...

Nếu muốn kiểm tra tính năng này ngay bây giờ trên Chrome Beta, bạn có thể enable bằng cách sao chép và dán dòng này vào thanh địa chỉ của bạn. Mình đã thử trên phiên bản Chrome 63 phiên bản bình thường (không phải là beta) thì bạn vẫn có thể bật và trải nghiệm tính năng này:

Mã:
chrome://flags#chrome-parallel-download

[​IMG]
Thật ra tính năng này đã được xuất bản cách đây ba tháng, và bây giờ nó đã sẵn sàng để sử dụng. Tốc độ tải sẽ không tạo ra sự khác biệt nhiều hơn so với bình thường nếu tải những tập tin nhỏ, nhưng bạn có thể thấy sự khác biệt nếu tải các tập tin lớn.

Hãy trải nghiệm sự khác biệt nhé!

Friday, December 8, 2017

Hướng dẫn đăng ký domain quốc tế tại VHost.Vn
Để chủ động và nhanh chóng trong việc đăng ký domain quốc tế tại vHost.vn, Quý khách có thể thực hiện theo hướng dẫn sau: 1. Truy cập https://vhost.vn/ten-mien/dang-ky-ten-mien1  2. Nhập tên domain muốn đăng ký –> chọn Kiểm tra2  3. Nếu tên miền chưa có ai đăng ký, bạn sẽ nhận được thông báo như hình  –> click Đặt hàng ngay.3  4. Nếu có nameserver riêng, bạn có thể thay đổi. Hoặc giữ nguyên mặc định để sử dụng DNS do vHost cung cấp miễn phí –> Click Cập nhật giỏ hàng.4  5. Kiểm tra thông tin số tiền –> click Thanh toánthanhtoan  6. Nhập đầy đủ thông tin cá nhân của quý khách. Lưu ý:
  • Nhập tiếng Việt không dấu để quá trình đăng ký không bị lỗi.
  • Trong phần Di động, điền số di động có +84 và bỏ số 0 đầu để nhận được thông báo qua SMS.7
  7. Chọn Phương Thức Thanh Toán –> Chấp nhận điều khoản sử dụng –> click Hoàn tất đơn đặt hàng.8

Tuesday, November 21, 2017

Cách sử dụng từ khóa const trong C++
A. NỘI DUNG:
I. Mở đầu
Như ta đã biết, trong các đời sống cũng như trong mọi lĩnh vực, luôn có các giá trị không thể thay đổi gọi là hằng số,
Vd: số π với 100 chữ sô thập phân:
3,141592653589793238462643383279502884197169399375 10582097494459230781640628620899862803482534211706 79
Vấn đề là trong tin học, cứ mỗi khi dùng đến giá trị π thì chả lẽ cứ viết hết tất cả các chử số???
II. Hằng
Nếu dùng một biến để lưu trữ giá trị của hằng số thì có một vấn đề là biến thì thay đổi được giá trị ==>lỗi.
VD:
C++ Code:
  1. float PI=3.14;
  2. //////
  3. PI=8;
  4. //////
Đoạn mã trên không báo lỗi.
Loại lỗi này rất khó nhận thấy nhưng để lại hậu quả rất to lớn. nếu sau đó ta không chú ý cứ dùng biến đó trên các đoạn mã cần số π, vậy ta phải dùng hằng để khai báo cho giá trị này.
a. Khai báo hằng:
Có 2 cách khai báo hằng
- Dùng chỉ thị #define:
Code:
#define A "gia tri"
tác dụng: định nghĩa macro A đại diện cho giá trị dùng để thay thế A trong đoạn mã trừ những đoạn trong "" thành giá trị.
chỉ thị #define còn có nhiều tác dụng khác.
- Dùng từ khóa const:
Code:
const kiểu tên_hằng=giá_trí;
kiểu const tên_hằng=giá_trí;
VD:
C++ Code:
  1. const int x=8;
Tác dụng: Khai báo 1 hằng kiểu int tên x có giá trị bằng 8.
Sau khi khai báo thì ta không thể thay đổi x, ví dụ:
C++ Code:
  1. x=8; //lỗi
Câu lệnh trên báo lỗi vì ta cố gắng thay đỏi 1 hằng số.
III. Từ khóa const trong C++
Như ta đã biết ở trên, từ khóa const dùng để khai báo hằng:
const kiểu tên_hằng=giá_trí;
kiểu const tên_hằng=giá_trí;
VD:
C++ Code:
  1. const int x=8;
  2. int const y=4;
Vấn đề ở đây là hai cách khai báo này có khác nhau không? Và từ khóa const còn tác dụng nào không?
Câu trả lời là có.
1. Từ khóa const với con trỏ
Đối với biến con trỏ ta nên phân biệt hai điều: vùng nhớ con trỏ trỏ đến và giá trị của vùng nhớ đó.
Vd:
C++ Code:
  1. int x = 10, y = 20;
  2. const int *px = &x;
Khai báo như vậy, giá trị của vùng nhớ mà px đang trỏ đến là không thể thay đổi được thông qua thay đổi (*px). Do đó, ta có các câu lệnh sau:
C++ Code:
  1. *px = 15;// lỗi
  2. px = &y;
  3. = 16;
Con trỏ này gọi là con trỏ hằng

Vì ta dùng *px để thay đỏi giá trị của vùng nhớ mà px đang trỏ đến.
Chú ý: Giá trị của x vẫn có thể được thay đổi, ta chỉ không thể thay đổi giá trị này thông qua px.
Nhưng với các khai báo sau:
C++ Code:
  1. int x = 10, y = 20;
  2. int* const px = &x;
Thì px không thể thay đổi vùng nhớ đang trỏ đến, nhưng giá trị của vùng nhớ có thể thay đổi thông qua px
C++ Code:
  1. *px=y;
  2. *px=&y;//lỗi
Con trỏ này gọi là hằng con trỏ

Với khai báo sau:
C++ Code:
  1. int x = 10;
  2. const int* const px = &x;
Bạn không thể thay đổi nơi px đang trỏ đến và thông qua (*px) cũng không thể thay đổi giá trị vùng nhớ đó.
2. Từ khóa const với đối tượng
Giả sử ta có lớp với hàm tạo sau:
C++ Code:
  1. class A
  2. {
  3.     int a;
  4. public:
  5.     A(int t=0){a=t;}
  6.     //...
  7. };
a. Hằng đối tượng
Để khai báo hằng đối tượng ta dùng từ khóa const như sau:
C++ Code:
  1. const a(4);
  2. const A b;
Ta không thể thay đổi giá trị các thuộc tính của hằng đối tượng, kể cả thông qua con trỏ.
VD: ta có hàm sau
C++ Code:
  1. void A::set(int x)
  2. {
  3.     a=x;
  4. }
Thì ta không thể dùng hàm này để thay đổi giá trị của hằng đối tượng lớp A.
b. Tham chiếu hằng, con trỏ hằng
Giả sử có hàm có đối tượng đầu vào sau
Code:
type C(A a)
{
 //Các câu lệnh
}
Một đối tượng object sẽ được tạo và máy sẽ copy toàn bộ giá trị của a vào object rồi xử lý. Vấn đề phát sinh là khi ta có một class với kích thước lớn thì việc chép giá trị vào tham số hình thức ở hàm sẽ làm cho chương trình trở nên chậm đi và đặc biệt là sẽ hao phí bộ nhớ và sau khi ra khỏi hàm, bộ nhớ bị hủy khi đó sẽ gọi hàm hủy, rất dễ dẫn đến tình trạng giải phóng lại vùng nhớ đã được giả phóng.
Vì vậy người ta thường dùng tham số chuyền vào là con trỏ hay tham chiếu:
Code:
type C(A *a)
{
 //Các câu lệnh
}
hoặc
Code:
type C(A &a)
{
 //Các câu lệnh
}
Hàm trên sử dụng tham số hình thức là một biến con trỏ và hàm dưới dùng một biến tham chiếu. Hai cách khai báo này sẽ cho kết quả tương tự nhau nếu ta không dùng con trỏ để trỏ vào đối tượng khác trong khi dùng hàm. Khi này, với lời gọi hàm như trên thì địa chỉ của x sẽ được truyền vào, do đó sẽ tránh được việc phải chép cả cấu trúc với kích thước lớn.
Nhưng với khai báo như thế thì giá trị của biến truyền vào có thể bị thay đổi thông qua biến object (vì là biến con trỏ hoặc tham chiếu), trong khi với cách khai báo như cũ thì ta không hề muốn giá trị này bị sửa đổi chút nào. Do đó, từ khóa const được sử dụng:
Code:
type C(const A *a)
{
 //Các câu lệnh
}
Code:
type C(const A &a)
{
 //Các câu lệnh
}
Lưu ý: 1. dạng khai báo A const &a không còn được khuyến khích.
2. Hàm trả về con trỏ có thể có dạng
C++ Code:
  1.     const A* functionName(/*các đối số*/);
hay
C++ Code:
  1.     A const * functionName(/*các đối số*/);
hay
C++ Code:
  1.     const A *const  functionName(/*các đối số*/);
Khi đó nó được hiểu như trường hợp con trỏ ở trên.
c. Phương thức hằng.
Ở trên ta đã nhắc đến phương thức hằng, vậy phương thức hằng là gì? Tác dụng của nó?
Như ta đã biêt, một hằng đối tượng thì không thể thay đổi các thuộc tính của nó và không được phép gọi các phương thức có thể làm thay đổi các thuộc tính của nó, trừ trường hợp đặc biệt: các thuộc tính mutable. các phương thức được các hằng đối tượng sử dụng gọi là phương thức hằng, hay nói cách khác, các hằng đối tượng chỉ làm việc trên các phương thức hằng.
Giả sử với lớp A có một phương thức print() như sau:
C++ Code:
  1. class A
  2. {
  3.     int a;
  4. public:
  5.     A(int t=0){a=t;}
  6.     //...
  7.     void print();
  8. };
C++ Code:
  1. void A::print()
  2. {
  3.     cout<<a;
  4. }
Ta thấy phương thức này không hề làm thay đổi các thuộc tính của a, Nhưng nó không thể làm việc được với hằng đối tượng.
Giả sử ta có 2 câu lệnh sau:
C++ Code:
  1. const A a;
  2. a.print();//////lỗi
Vì sao trình dịch báo lỗi?
Ta thấy trong hàm print() không hề có lệnh thay đổi thuộc tính???
Lí do là trình dịch không thể biết được là ta có thay đổi thuộc tính hay không ở phương thức không hằng vì một phương thức không hằng có thể thay đổi được thuộc tính.
Vậy làm sao để có thể cho hàm trên thực hiện được với hằng đối tượng?
Ta phải khai báo hàm print() là một phương thức hằng bằng cách thêm từ khóa const vào sau khai báo của nó trong khai báo lớp như sau:
C++ Code:
  1. void print() const;
Khi đó print() trở thành mọt phương thức hằng và lớp A Cần được khai báo như sau:
C++ Code:
  1. class A
  2. {
  3.     int a;
  4. public:
  5.     A(int t=0){a=t;}
  6.     //...
  7.     void print() const;
  8. };
Khi đó 2 câu lệnh này sẽ chạy được:
C++ Code:
  1. const A a;
  2. a.print();//////OK
Nếu ta thay đổi một thuộc tính của đối tượng thuộc lớp A thông qua phương thức print() thì sẽ có lỗi.
VD:
C++ Code:
  1. void A::print()
  2. {
  3.     cout<<a;
  4.     a=7; //////lỗi
  5. }
Vì ta cố gắng thay đổi thuộc tính thông qua phương thức print() là một phương thức hằng.
Điều này khá hay trong môi trường làm việc cộng tác. Nếu nhiều người cùng xây dựng một lớp: thì cần xác định cái gì cần thay đổi, thay đổi bằng phương thức nào?…
Ở trên có nhắc đến thuộc tính mutable. Vậy thuộc tính này là gì?
Ta đã biết một phương thức hằng thì không được thay đổi các thuộc tính của đối tượng gọi nó. nhưng đôi khi cần phải thay đổi các thuộc tính này thông qua phương thức hằng, kể cả hằng đối tượng, khi đó chỉ cần khai báo trước thuộc tính đó từ khóa mutable.
Vậy nếu ta muốn có một phương thức hằng trả về một con trỏ không thể thay đổi giả trị của vùng nhớ, cũng như vùng nhớ mà con trỏ ấy đang trỏ tới, có tham số đầu vào là một con trỏ cũng không thể thay đổi giả trị của vùng nhớ, và vùng nhớ mà nó trỏ tới thì ta có một câu lệnh khai báo như sau:
C++ Code:
  1.     const A *const  functionName(const A * const) const; //5 từ const!!

UPDATE
trong C++ giả sử có hàm:
Code:
type1 ham(type&);//không thay đổi đối số trong thân hàm nha
Khi đó bạn gọi hàm như sau 
Code:
ham(6);////////loi
Khi đó có lỗi, vì sao?
Vì 6 là 1 hằng.
bạn cần khai báo tường minh hơn.
Và khi đó cần thay đổi hàm này như sau
Code:
type1 ham(const type&);/////////
khi đó lời gọi hàm trên có tác dụng