Category: LẬP TRÌNH

  • Guest Post là gì?

    Guest Post là gì?

    Guest Post là gì?

    Giả sử bạn có một webiste, thì Guest Post là một bài đăng đến từ một người khách nào đó khi vào website của bạn. Các anh em SEOer hay dùng từ viết tắt là GP.

    Guest Post là g

    Nếu bạn là người đi mua Guest Post có thể hiểu đơn giản là bài viết của bạn được đăng vào một website, blog của người khác. Các website, blog của người khác đó phải có chất lượng (các chỉ số tốt, nhiều traffic – nhiều người xem).

    Guest Post là một bài viết chất lượng được đăng ở nhiều website khác nhau. Trong bài Guest Post sẽ có link trỏ về bài viết trong website của bạn. Trong lĩnh vực SEO, Guest Post chiếm một vị trí rất quan trọng.

    Guest Post có tác dụng gì?

    Guest Post mang lại một số lợi ích cho bất kỳ doanh nghiệp nào. Bằng cách chia sẻ kiến ​​thức chuyên môn của mình trên các trang web của các công ty khác, bạn có thể tạo dựng mình như một nhân vật có uy tín trong thị trường, xây dựng mối quan hệ với các nhà lãnh đạo tư tưởng khác trong lĩnh vực của bạn và giới thiệu thương hiệu của bạn với lượng khách hàng hoàn toàn mới.

    Guest Post là gì? 1
    • Xây dựng backlink cực kỳ chất lượng. Khác với những cách xây dựng liên kết phổ biến khác, vì bạn có thể kiểm soát nội dung lẫn website cần Guest Post, nguồn backlink chủ yếu là dofollow. Chính vì thế nó thật sự rất chất lượng. Xem thêm List Danh sách diễn đàn đi backlink dofollow 2022.
    • Tăng thêm lượng người dùng truy cập website. Khi đặt trao đổi Guest post với các website uy tín lượng traffic của bạn sẽ tăng rất nhanh. Những bài viết có Guest post chất lượng kích thích người dùng click vào Guest post nhiều hơn. Đây chính là con đường mà nhiều khách hàng ghé thăm website của bạn. Thường khách hàng tham quan website của bạn bằng con đường này đã có đánh giá tốt về bài viết và hứng thú với sản phẩm/dịch vụ mà bạn đang bán. Khả năng chuyển đổi hành động mua sắm từ những Guest post này rất cao.
    • Tăng tỉ lệ chuyển đổi. Một số khách hàng khi quyết định mua hàng hay sử dụng dịch vụ, không đơn thuần chỉ là tìm kiếm từ khóa chính → vào website đúng nhu cầu → mua, mà họ tìm kiếm rất nhiều và so sánh nhiều website khác nhau. Thật tuyệt vời nếu bài Guest Post của bạn lên top google với các từ khóa liên quan.
    • Xây dựng thương hiệu. Giúp thương hiệu của bạn được nhắc đến nhiều hơn (Brand mentions).

    Những lưu ý khi trao đổi, mua Guest post

    Guest Post mang lại nhiều lợi ích cho SEO, giúp tăng thứ hạng, trust web từ đó tăng doanh thu bán hàng online. Khi sử dụng Guest post bạn nên lưu ý một số vấn đề như sau.

    Miễn là bạn cẩn thận và cân nhắc về việc tạo các GP có giá trị cao cho các trang web hợp pháp, thì đó có thể là một công cụ tuyệt vời để tăng thứ hạng SEO.

    Trao đổi Guest Post với website có cùng chủ đề

    Guest Post có cùng chủ đề thường chỉ được trao đổi với các website hoặc blogger là chủ yếu. Nếu có bán Guest post thì người bán cũng bán với giá rất cao. Tuy nhiên, chỉ những Guest post này mới có giá trị. Bạn hãy tìm các bài viết có nội dung tương đồng với sản phẩm/dịch vụ/thương hiệu mà mình đang cung cấp để trao đổi hoặc mua Guest post. Số lượng Guest post nhiều cũng không tốt bằng đi Guest post chất lượng, khoa học.

    Website có nhiều traffic organic search

    Website nhiều traffic search từ Google đồng nghĩa với việc trang Web đó có tầm ảnh hưởng lớn, được Google đánh giá cao. Như vậy, chất lượng backlink sẽ cao hơn. Bởi thế, khi lựa chọn Website mà bạn muốn đăng Guest Post cần có traffic search càng cao càng tốt.
    Lượng traffic của website là điều đầu tiên và quan trọng nhất mà bạn nên xem khi sử dụng Guest post. Sau tiêu chí này mới nên quan tâm đến Organic Keywords.

    Các chỉ số Reffering domain và chỉ số DR UR nên là những điều sau cùng cần quan tâm. Theo chúng tôi các bạn không nên mua Guest post tại các website có chỉ số UR và DR cao bằng việc ưu tiên chọn các website có lượng Traffic cao.

    Chỉ trao đổi Guest Post với website chất lượng

    Có người cần nhiều Guest post nên trao đổi hoặc mua Guest post ở mọi website. Tuy nhiên, những web có chứa mã độc hại, nội dung web không lành mạnh (cờ bạc, cá cược, đồi trụy) sẽ phản tác dụng SEO, làm website của bạn bị giảm trust. Lượng khách hàng từ những Guest post này cũng không có giá trị nhiều trong việc chuyển đổi mua sắm.

    Chỉ mua guest post ở website không bị sanbox hoặc bị tác vụ thủ công. Việc website bị sanbox (mất index) hoặc tác vụ mất dần index có thể ảnh hưởng nghiêm trọng tới website của bạn. Bạn có thể kiểm tra nhanh một website có bị sanbox không bằng cách kiểm tra site:domain_cần_check trên Google.

    Chỉ mua GP ở những website có ít link out. Hiện nay các blogger bán link rất nhiều. Số lượng bài viết có link có thể còn nhiều hơn số lượng bài viết không có link trên website. Bạn có thể kiểm tra cơ bản xem trên header hoặc footer hay sidebar có gắn liên kết ra bên ngoài không, nếu có thì phải xem nó là link dofollow hay nofollow, nếu là dofollow thì bạn hãy cân nhắc kỹ khi đặt link trên website đó.

    Website được cập nhật thường xuyên

    Website đối tác đăng bài đều đặn và liên tục chứng tỏ Website đó đang phát triển mạnh và được duy trì đều đặn. Trên thực tế, Google rất ưu ái những Website như thế này. Vì thế, chất lượng Backlink cũng được đánh giá tốt hơn. Khi lựa chọn đối tác đăng bài, hãy chú ý đến vấn đề này!

    Cân đối số lượng Guest Post hợp lí

    Guest post càng nhiều thì càng có khả năng SEO, tăng Traffic và lượt truy cập là suy nghĩ sai lầm.

    Nếu bạn đặt nhiều Traffic trên những site rác, site thiếu uy tín thì hầu như sẽ không có giá trị. Guest post nên nằm trong cộng đồng các website có hệ sinh thái tốt, tương trợ lẫn nhau để cùng đẩy nhau phát triển lâu dài.

    Đầu tư nội dung chất lượng

    Content vẫn là chất xúc tác quyết định giá trị của Guest post. Mọi thứ đều bắt đầu từ nội dung có giá trị, trình bày khoa học, bố cục chặt chẽ và lôi cuốn người đọc. Chỉ có những nội dung này mới thúc đẩy người đọc tin tưởng và click vào các Guest post.

    Bài viết phải đảm bảo về unique, không sai lỗi chính tả. Những bài viết chuẩn SEO lại càng gia tăng độ tin cậy cao hơn. Những bài viết có nội dung tương tự nhau sẽ không được Google đánh giá cao.

    Việc sử dụng từ khóa cũng phải linh hoạt và có sự thay đổi để đảm bảo cho việc đánh giá chất lượng của các trình duyệt tìm kiếm.

    Nên đầu tư một đội ngũ content chất lượng và am hiểu chuyên sâu về nội dung mà bạn khai thác.

  • Chia sẻ danh sách IP Spam Bot

    Chia sẻ danh sách IP Spam Bot

    Gần đây website của chúng tôi mỗi ngày có hàng trăm bình luận spam bằng các thứ tiếng nước ngoài, đặc biệt là tiếng Nga.

    Chia sẻ danh sách IP Spam Bot 2

    Cùng với đó là lượng truy cập tăng và CPU luôn trong tình trạng 100% gây lỗi 503 rất khó chịu.

    Có nhiều cách để chặn các bot spam nước ngoài đó như dùng plug in, dùng cloudflare… Nhưng có một cách rất đơn giản là bạn hãy chặn các IP spam bot đó bằng cách thêm lệnh chặn truy cập từ các IP đó vào tệp .htaccess trong thư mục gốc của website.

    Dưới đây là danh sách các ip spam bot mà chúng tôi đã tổng hợp, bạn có thể sử dụng luôn mà không cần lọc thủ công:

    deny from 93.81.221.181
    deny from 118.71.233.153
    deny from 83.149.21.139
    deny from 92.38.136.69
    deny from 92.119.114.118
    deny from 195.181.166.143
    deny from 223.151.179.70
    deny from 188.126.73.214
    deny from 46.161.11.64
    deny from 188.126.73.206
    deny from 168.91.111.93
    deny from 178.17.182.30
    deny from 37.120.232.51
    deny from 188.126.79.14
    deny from 89.187.168.82
    deny from 194.113.106.76
    deny from 138.128.109.145
    deny from 156.146.36.197
    deny from 194.195.91.23
    deny from 42.7.111.129
    deny from 185.232.21.140
    deny from 138.199.36.201
    deny from 161.117.5.252
    deny from 185.130.184.220
    deny from 89.187.165.104
    deny from 194.60.69.218
    deny from 104.144.240.22
    deny from 196.242.21.161
    deny from 196.242.115.115
    deny from 185.112.82.230
    deny from 196.196.216.253
    deny from 92.124.163.215
    deny from 185.232.21.147
    deny from 178.17.182.246
    deny from 185.112.82.239
    deny from 45.87.212.60
    deny from 196.196.216.137
    deny from 196.245.186.246
    deny from 191.96.168.21
    deny from 45.152.182.149
    deny from 45.153.160.139
    deny from 192.42.116.13
    deny from 185.220.0.0/16
    deny from 195.144.21.219
    deny from 198.98.56.248
    deny from 81.17.18.62
    deny from 45.145.128.85
    deny from 46.183.218.142
    deny from 146.70.16.247
    deny from 102.129.145.231
    deny from 195.78.54.198
    deny from 116.203.224.180
    deny from 84.200.246.242
    deny from 72.221.196.152
    deny from 5.231.237.54
    deny from 154.13.1.21
    deny from 195.246.120.82
    deny from 191.96.150.51
    deny from 178.34.163.148
    deny from 91.76.211.158
    deny from 37.19.198.51
    deny from 194.34.133.85
    deny from 185.130.184.202
    deny from 31.13.191.118
    deny from 109.248.149.11
    deny from 2.92.197.125
    deny from 110.18.0.4
    deny from 185.206.224.210
    deny from 84.17.53.26
    deny from 181.214.206.43
    deny from 5.18.165.145
    deny from 178.176.214.144
    deny from 1.55.45.89
    deny from 84.17.53.10
    deny from 178.176.213.243
    deny from 216.131.114.163
    deny from 194.156.92.143
    deny from 216.131.111.168
    deny from 216.131.111.131
    deny from 216.131.111.143
    deny from 109.70.100.28
    deny from 216.131.111.10
    deny from 216.131.114.13
    deny from 194.156.92.74
    deny from 216.131.111.138
    deny from 216.131.114.79
    deny from 216.131.114.19
    deny from 45.153.160.130
    deny from 5.183.209.217
    deny from 178.17.174.232
    deny from 5.2.70.223
    deny from 188.122.82.146
    deny from 5.183.130.125
    deny from 171.225.145.61
    deny from 104.244.79.196
    deny from 185.213.154.172
    deny from 95.153.31.85
    deny from 46.161.11.11
    deny from 216.131.114.67
    deny from 216.131.114.169
    deny from 107.189.30.86
    deny from 216.131.114.127
    deny from 216.131.114.132
    deny from 34.134.13.239
    deny from 118.166.236.84
    deny from 216.131.111.173
    deny from 216.131.114.108
    deny from 91.90.122.154
    deny from 216.131.114.6
    deny from 216.131.114.121
    deny from 122.169.39.209
    deny from 106.215.33.238
    deny from 27.57.94.8
    deny from 216.131.111.45
    deny from 84.54.53.198
    deny from 89.234.157.254
    deny from 109.70.100.29
    deny from 216.131.111.149
    deny from 216.131.114.12
    deny from 216.131.114.138
    deny from 216.131.114.49
    deny from 216.131.114.60
    deny from 216.131.114.36
    deny from 216.131.114.115
    deny from 216.131.111.22
    deny from 178.158.50.42
    deny from 216.131.111.9
    deny from 36.90.41.0
    deny from 216.131.114.43
    deny from 216.131.114.18
    deny from 185.83.214.69
    deny from 216.131.114.193
    deny from 91.219.237.21
    deny from 109.194.246.90
    deny from 196.19.207.145
    deny from 46.8.212.236
    deny from 216.131.111.16
    deny from 216.131.114.72
    deny from 178.32.184.2
    deny from 216.131.111.156
    deny from 216.131.111.167
    deny from 213.202.216.189
    deny from 46.8.222.38
    deny from 92.100.222.242
    deny from 216.131.111.3
    deny from 45.153.160.135
    deny from 95.84.18.106
    deny from 45.86.1.160
    deny from 193.56.72.151
    deny from 121.43.148.69
    deny from 211.250.161.108
    deny from 216.131.114.24
    deny from 171.247.53.119
    deny from 168.91.79.12
    deny from 194.32.122.32
    deny from 95.216.101.39
    deny from 87.247.143.229
    deny from 216.131.114.139
    deny from 196.242.46.77
    deny from 87.98.158.99
    deny from 178.168.206.141
    deny from 216.131.114.48
    deny from 216.131.114.55
    deny from 46.183.220.230
    deny from 185.195.58.225
    deny from 45.147.193.134
    deny from 216.131.114.216
    deny from 125.235.235.89
    deny from 216.131.111.4
    deny from 216.131.111.40
    deny from 216.131.114.90
    deny from 109.248.204.58
    deny from 194.135.33.152
    deny from 185.100.87.192
    deny from 5.2.69.50
    deny from 185.165.168.229
    deny from 36.134.129.39
    deny from 216.131.114.97
    deny from 62.113.112.169
    deny from 120.24.194.86
    deny from 216.131.114.211
    deny from 60.11.213.160
    deny from 109.248.54.45
    deny from 77.83.148.167
    deny from 120.35.180.224
    deny from 193.169.253.35
    deny from 216.131.111.27
    deny from 216.131.114.240
    deny from 95.128.165.89
    deny from 216.131.114.144
    deny from 81.6.43.9
    deny from 151.237.179.26
    deny from 138.199.36.239
    deny from 216.131.114.175
    deny from 216.131.111.144
    deny from 45.147.192.235
    deny from 223.151.182.100
    deny from 95.182.126.50
    deny from 45.81.252.47
    deny from 51.195.103.74
    deny from 45.153.160.132
    deny from 46.29.248.238
    deny from 45.153.160.136
    deny from 199.195.250.77
    deny from 176.10.99.200
    deny from 178.17.174.162
    deny from 81.17.18.59
    deny from 199.249.230.144
    deny from 45.151.167.10
    deny from 45.13.104.179
    deny from 185.191.127.215
    deny from 185.56.80.65
    deny from 199.249.230.112
    deny from 163.172.213.212
    deny from 192.42.116.16
    deny from 199.249.230.106
    deny from 109.70.100.22
    deny from 199.195.253.162
    deny from 45.153.160.138
    deny from 199.249.230.173
    deny from 27.71.120.87
    deny from 188.170.172.182
    deny from 193.58.168.177
    deny from 45.74.44.164
    deny from 45.129.79.154
    deny from 185.181.245.11
    deny from 116.109.26.55
    deny from 45.132.186.185
    deny from 5.140.65.238
    deny from 14.180.187.193
    deny from 195.246.120.35
    deny from 45.153.160.140
    deny from 216.131.111.21
    deny from 45.120.51.99
    deny from 216.131.114.7
    deny from 178.176.218.218
    deny from 175.171.159.72
    deny from 193.31.24.154
    deny from 45.153.160.137
    deny from 166.88.248.74
    deny from 116.252.173.103
    deny from 178.184.242.63
    deny from 216.131.114.180
    deny from 79.142.77.59
    deny from 46.161.11.8
    deny from 216.131.114.96
    deny from 91.123.28.14
    deny from 216.131.111.150
    deny from 178.168.223.236
    deny from 222.124.153.91
    deny from 216.131.114.31
    deny from 46.161.11.178
  • Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor

    Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor

    Cách chuyển PDF sang Word bằng Foxit PDF Editor

    Foxit Reader là phần mềm đọc và xử lý PDF chuyên nghiệp. Với các bản Foxit Phantom hoặc Foxit PDF Editor việc chuyển PDF sang Word rất dễ dàng và chuẩn. Dưới đây chúng tôi Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor (phiên bản mới nhất của Foxit Phantom).

    HỌC MICROSOFT WORD CHỈ 399K
    HỌC OFFICE 365
    LÀM ĐỒ ÁN -LUẬN VĂN BẰNG WORD
    SỬ DỤNG OFFICE CHO KINH DOANH ONLINE

    Nếu bạn không có phần mềm Foxit PDF Editor hoặc không muốn cài đặt phức tạp, có thể tham khảo 5 cách chuyển PDF sang Word online.

    1. Ưu điểm của chuyển PDF sang Word bằng Foxit PDF Editor

    Phần mềm Foxit PDF Editor giúp convert file PDF thành Word (và hàng loạt các các định dạng khác như Excel, Powerpoint, XPS, HTML, Rich Text hoặc hình ảnh JPG, JPEG, PNG…) một cách chuyên nghiệp. Những đặc điểm nổi bật như:

    • Không lỗi font, đặc biệt là các font chữ tiếng Việt. Chỉ cần máy tính của bạn có các font chữ đó. Nếu máy của bạn chưa có các font TCVN, VNI thì có thể tải ở đây Cách tải và cài đặt Font chữ Việt Nam (VNI, .Vn, TCVN3)
    • Giữ được các định dạng như danh sách đánh số thứ tự, in đậm, in nghiêng… hoặc các style tiêu đề, đề mục…
    • Chuyển đổi được các bảng biểu và hình ảnh…

    2. Cách chuyển PDF sang Word bằng Foxit PDF Editor

    Bước 1. Mở tệp PDF mà bạn muốn chuyển bằng phần mềm Foxit PDF Editor

    Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor 3

    Bước 2. Chọn thẻ Convert, tìm To MS Office và chọn To Word (nếu muốn chuyển sang file docx, sử dụng cho Word 2007, 2010, 2013, 2016 hoặc Word 2019); chọn To Word 97-2003 (nếu muốn chuyển thành file doc sử dụng cho Word 2003)

    Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor 4

    Hoặc chọn File > Export > To MS Office:

    Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor 5

    Bước 3. Chọn nơi để lưu file Word (sản phẩm sau khi chuyển đổi). Sau khi chuyển đổi thành công, chương trình sẽ tự động mở file Word bằng phần mềm MS Word.

    Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor 6

    Sản phẩm sau khi chuyển PDF thành Word bằng phần mềm Foxit:

    Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor 7
  • 5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết!

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết!

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết!

    File PDF được mọi người chọn lựa sử dụng vì gọn nhẹ, không lỗi font, dễ lưu trữ, chia sẻ, hỗ trợ nhiều nền tảng. Tuy nhiên, sử dụng file PDF có nhược điểm là bạn không thể thay đổi hoặc chỉnh sửa nội dung như file Word. Dưới đây là 5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết!

    HỌC MICROSOFT WORD CHỈ 399K
    HỌC OFFICE 365
    LÀM ĐỒ ÁN -LUẬN VĂN BẰNG WORD
    SỬ DỤNG OFFICE CHO KINH DOANH ONLINE

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 8

    1. Chuyển PDF sang word bằng smallpdf

    Smallpdf cho phép bạn chuyển đổi qua lại giữa file PDF và rất nhiều các định dạng khác nhau. Bạn cũng có thực hiện nối hoặc chia nhỏ các file PDF, đồng thời có hỗ trợ Tiếng Việt nên rất dễ sử dụng. Tuy nhiên một nhược điểm là để sử dụng miễn phí kích thước tệp của bạn phải nhỏ hơn 15MB.

    Bước 1: Truy cập https://smallpdf.com/vi/pdf-to-word sau đó bấm “chọn các tệp” để chọn và tải file PDF của bạn lên.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 9

    Bước 2: Sau khi tải lên xong chọn “Chuyển sang Word”. Sau đó nhấn CHỌN TÙY CHỌN để bắt đầu chuyển đổi file.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 10

    Bước 3: Đợi một chút để chương trình tiến hành convert. Sau đó nhấn “Tải về” để tải file về máy hoặc chọn hình thức lưu khác.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 11

    2. Chuyển PDF sang word bằng pdf2doc.com

    Đây là một công cụ khá đa năng, bạn có thể chuyển đổi file PDF sang nhiều định dạng khác như Doc, Docx, Text,..Bạn có thể chọn nhiều tệp một lần để tải lên (tối đa 20 tệp). Đồng thời có hỗ trợ Tiếng Việt nên rất dễ sử dụng đối với người dùng.

    Bước 1: Truy cập vào https://pdf2doc.com/vi/ và chọn chức năng phía trên thanh công cụ là chuyển đổi PDF to DOC.

    Bước 2: Nhấn “Tải tệp lên”và chọn tệp muốn chuyển đổi ( hệ thống sẽ tự động chuyển khi tệp được tải lên).

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 12

    Bước 3: Nhấn “Tải xuống” sau khi đã chuyển đổi xong.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 13

    3. Chuyển PDF sang word bằng pdfcandy

    Cũng tương tự như những ứng dụng chuyển đổi trực tuyến khác. Candy hỗ trợ người dùng có thể chuyển đổi nhanh chóng các tập tin PDF sang Word. Bên cạnh đó PDF Candy còn cho phép bạn thực hiện một số thao tác với file PDF như nối, chia nhỏ, nén, đặt bảo mật hoặc mở khóa file.

    Bước 1: Truy cập vào https://pdfcandy.com/vn/pdf-to-word.html và chọn “Thêm tập tin” để tải tệp lên (hệ thống sẽ tự động chuyển đổi khi tệp tin được tải lên).

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 14

    Bước 2: Nhấn “Tải tệp tin” để lưu về máy hoặc bạn cũng có thể tải trực tiếp lên  Google Drive hoặc Dropbox.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 15

    4. Sử dụng công cụ chuyển đổi PDF sang Word của Foxit

    Foxit ngoài cung cấp phần mềm Foxit Reader nổi tiếng để đọc PDF còn hỗ trợ thêm một công cụ chuyển đổi PDF sang Word trực tuyến. Tuy nhiên nhược điểm là ứng dụng này không hỗ trợ tiếng Việt cho người dùng.

    Nếu bạn sử dụng phần mềm Foxit Phantom thì có thể sử dụng công cụ chuyển đổi PDF sang Word offline bằng phần mềm. Xem trong bài Hướng dẫn cách chuyển PDF sang Word bằng Foxit PDF Editor

    Bước 1: Truy cập vào https://www.foxitsoftware.com/pdf-to-word-converter/ và chọn “Click to Select” để chọn và tải tệp lên.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 16

    Bước 2: Sau khi tệp đã được tải lên > Nhấn “Start conversion” để bắt đầu chuyển đổi.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 17

    Bước 3: Nhấn “here” trong bảng thông báo chuyển thành công để tải tệp về.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 18

    5. Chuyển PDF sang word bằng convertpdftoword.net

    Convert PDF to Word là công cụ giúp thực hiện chuyển đổi file PDF sang các định dạng khác khá nhanh và không bị lỗi phông. Bạn cũng có thể chuyển ảnh sang dạng văn bản với công cụ With OCR function. Nhược điểm của ứng dụng này là không hỗ trợ Tiếng Việt cho người dùng.

    Bước 1: Truy cập vào https://www.convertpdftoword.net/ và bấm vào “Choose File” để chọn và tải tập lên.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 19

    Bước 2: Nhấn “Convert and Download” để bắt đầu chuyển đổi.

    5 cách chuyển PDF sang Word online mà bạn chắc chắn chưa biết! 20

    Bước 3: Nhấn Download để tải file về.

  • Excel là phần mềm gì?

    Excel là phần mềm gì?

    Excel là phần mềm gì?

    Excel là một trong những phần mềm được dùng vào việc tính toán, xây dựng số liệu được nhiều người sử dụng hiện nay.

    Excel là phần mềm gì?

    Microsoft Excel là phần mềm xử lý bảng tính nằm trong bộ Microsoft Office của hãng phần mềm Microsoft được thiết kế để giúp ghi lại, trình bày các thông tin xử lý dưới dạng bảng, thực hiện tính toán và xây dựng các số liệu thống kê trực quan có trong bảng từ Excel.

    Các trang tính (sheet) của Excel được tạo nên từ các hàng (row) và cột (column). Điểm giao nhau giữa 2 thành phần này sẽ được gọi là ô (cell). Địa chỉ của một ô dữ liệu được xác định bởi chữ cái đại diện cho cột và số đại diện cho một hàng.

    Microsoft Excel cũng với Microsoft Word và PowerPoint là ba phần mềm văn phòng cơ bản nhất, được bao gồm trong tất cả phiên bản Microsoft Office từ trước tới nay.

    Xem thêm Tự học Microsoft Word 2019 (MS Word 2016 – 2013)

    Excel là phần mềm gì?

    Excel có tác dụng gì?

    Excel có nhiều công dụng khác nhau và một số công dụng nổi bật như: Lưu dữ liệu, tham gia vào việc tính toán, quản lý dữ liệu, tham gia và hỗ trợ các công cụ phân tích, tìm kiếm,…

    Các chương trình bảng tính điện tử ban đầu được dựa trên bảng tính giấy và thường được sử dụng cho các công việc kế toán. Như vậy, bố cục của bảng tính trong Microsoft Excel cũng có nét tương đồng với bảng tính giấy. Dữ liệu liên quan sẽ được lưu giữ trong các bảng – là một tập hợp các hộp chữ nhật nhỏ hoặc các ô được sắp xếp thành các hàng và các cột.

    Excel là phần mềm gì? 21

    Tất cả các phiên bản Excel và các chương trình bảng tính khác có thể lưu trữ một số trang bảng tính vào trong một tệp chung và lưu giữ trực tiếp trên máy tính. Tệp dữ liệu đó thường được gọi là sổ làm việc (workbook) và mỗi trang trong sổ làm việc là một bảng tính riêng biệt (worksheet).

    Nếu không thích Excel, bạn có thể sử dụng Google Sheet – phần mềm bảng tính miễn phí của Google để thay thế. Xem hướng dẫn sử dụng tại Hướng dẫn Google Sheets nhanh (Google Sheets cheat sheet)

    Những tính năng cơ bản của Excel

    Một số tính năng của Excel cơ bản như:

    • Nhập và lưu dữ liệu: Bạn có thể nhập dữ liệu vào các trang tính, sau đó lưu lại và khi dùng có thể mở ra.
    • Hỗ trợ các công thức để tham gia tính toán: Có rất nhiều công thức để tính toán như: SUM, TODAY, IF,…
    • Vẽ biểu đồ: Dựa trên số liệu được đưa ra, bạn có thể vẽ biểu đồ để dễ dàng hơn trong việc đánh giá.
    • Tạo và liên kết nhiều bảng tính: Giúp dữ liệu được liên kết chặt chẽ hơn.
    • Hỗ trợ bảo mật an toàn: Hỗ trợ người dùng cài password khi mở file.

    Xem thêm10 HÀM EXCEL THÔNG DỤNG NHẤT

    Cấu trúc của một bảng tính trong Excel

    Excel là phần mềm gì? 22

    Một bảng tính sẽ bao gồm nhiều thành phần cấu tạo nên:

    • Bảng tính – Sheet: Mỗi bảng sẽ có hơn 4 triệu ô nên người dùng có thể thoải mái nhập dữ liệu trên đây.
    • Sổ tay – Workbook: Thông thường sẽ có 1 – 255 Sheet. Workbook có tác dụng dùng để tập hợp các bảng tính, đồ thị,… mà có sự liên kết với nhau.
    • Cột – Column: Là tập hợp nhiều ô được tính theo chiều dọc và có độ rộng mặc định là 9 ký tự. Một bảng tính sẽ có 256 cột và được đánh theo ký tự A, B, C, D, E, F, G,…
    • Dòng – Rows: Là tập hợp các ô được tính theo chiều ngang và có chiều cao mặc định là 12.75 chấm điểm. Một bảng tính sẽ có ít nhất là 16384 dòng và được đánh theo ký tự số từ 1, 2, 3, 4, 5,…
    • Ô – Cell: Là điểm giao giữa dòng và cột. Mỗi ô sẽ được xác định tọa độ bằng ký tự của cột và số thứ tự của dòng. Ví dụ như A3, D7, E1,…
    • Vùng – Range: Đây là tập hợp của nhiều ô và được xác định bằng tọa độ ô đầu và tọa độ ô cuối. Ví dụ: C3:C5, D2: E6,…
  • Hướng dẫn Riverpod trong Flutter (Flutter Riverpod Tutorial)

    Hướng dẫn Riverpod trong Flutter (Flutter Riverpod Tutorial)

    Hướng dẫn Riverpod trong Flutter
    (Flutter Riverpod Tutorial)

    Trong Flutter có rất nhiều cách quản lý state như Provider, Bloc, GetX, Redux,… Mỗi cách đều có những ưu nhược điểm riêng. Trong số đó, có 3 phương pháp quản lý state phổ biến hơn cả là Provider (được team Flutter của Google đề xuất sử dụng), Boc (được rất nhiều lập trình viên chuyên nghiệp khuyên dùng) và gần đây nhất là GetX được đông đảo người mới tiếp cận Flutter lựa chọn nhờ sự đơn giản, dễ sử dụng.

    Mời bạn xem danh sách video hướng dẫn quản lý trạng thái trong flutter:

    Provider có một số hạn chết nhất định và Riverpod chính là bản nâng cấp của Provider để khắc phục những hạn chế đó.

    Có thể bạn không để ý, “Riverpod” chính là các chữ cái của “Provider” được sắp xếp lại.

    Riverpod trong Flutter có gì khác Provider?

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

    Theo thiết kế, Provider là một cải tiến của InheritedWidget và nó phụ thuộc vào các widget của Flutter. Bạn sẽ sử dụng các widget mặc định của Flutter xây dựng lên ứng dụng của mình.

    Việc kết hợp các Provider rất dài dòng, việc trộn lẫn giữa UI code và dependency injection khiến code rất khó đọc. (Để hiểu dependency injection mời bạn xem video sau https://www.youtube.com/watch?v=SVqHgRbwBLs)

    Hãy tưởng tượng bạn có MySecondClass phụ thuộc vào MyFirstClass.

    main.dart

    class MySecondClass {
     final MyFirstClass myFirstClass;
     MySecondClass(this.myFirstClass);
     }

    Khi đó, để tạo provider MySecondClass bạn sẽ phải viết code lồng nhau rất phức tạp. Tưởng tượng bạn có khoảng 10 class phụ thuộc nhau thì code sẽ như một mớ bùi nhùi 😟

    main.dart
    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Provider(
          create: (context) => MyFirstClass(),
          child: ProxyProvider<MyFirstClass, MySecondClass>(
            update: (context, firstClass, previous) => MySecondClass(firstClass),
            child: MyVisibleWidget(),
          ),
        );
      }
    }

    Thứ hai, Provider chỉ dựa vào “type” để tìm các đối tượng mà bạn cần. Nếu bạn có hai đối tượng cùng “type”, bạn chỉ có thể nhận được đối tượng gần nhất.

    main.dart

    class MyWidget extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Provider(
          create: (context) => 'A String far away.',
          child: Provider(
            create: (context) => 'A String that is close.',
            builder: (context, child) {
              // Displays 'A String that is close.'
              // There's no way to obtain 'A String far away.'
              return Text(Provider.of<String>(context));
            },
          ),
        );
      }
    }

    Cuối cùng, nếu bạn cố gắng truy cập vào một “type” không được cung cấp, bạn sẽ chỉ gặp lỗi khi chạy. Bên trong bất kỳ widget nào, bạn có thể truy cập tới các Provider của mình theo type với cú pháp sau:

    Provider.of<MyType>(context)

    Nhưng nếu bạn không cẩn thận, có thể gặp lỗi với ProviderNotFoundException khi chạy chương trình, dù lúc biên dịch chương trình hoàn toàn không báo lỗi. Điều này không phải là lý tưởng vì chúng ta phải luôn cố gắng bắt càng nhiều lỗi càng tốt tại thời điểm compile-time.

    Hướng dẫn Riverpod trong Flutter (Flutter Riverpod Tutorial) 23

    Ưu điểm của Riverpod

    • Compile safe: Không còn gặp lỗi ProviderNotFoundException hoặc quên xử lý các trạng thái loading. Sử dụng Riverpod, nếu code được biên dịch thành công, nó sẽ hoạt động theo đúng ý bạn.
    • Provider, without its limitations: Riverpod có hỗ trợ multiple provider có cùng type; kết hợp các providers không đồng bộ; thêm providers từ mọi nơi, …
    • Không phụ thuộc vào Flutter: Create/share/tests providers, with no dependency on Flutter. Điều này bao gồm việc có thể listen providers mà không cần một BuildContext.

    2. Cách sử dụng Riverpod trong Flutter

    Hướng dẫn Riverpod trong Flutter (Flutter Riverpod Tutorial) 24

    Bước 1. Thêm thư viện riverpod

    Đầu tiên ta cần thêm package riverpod vào file pubspec.yaml trong dự án Flutter của bạn. Trong bài này, ta sẽ sử dụng flutter_riverpod, ngoài ra còn có hooks_riverpodriverpod.

    pubspec.yaml

    dependencies:
      flutter:
        sdk: flutter
      flutter_riverpod: ^0.12.1

    Bước 2. Khai báo biến toàn cục

    Riverpod’s Providers không được đặt trong widget tree. Thay vào đó, chúng là các biến toàn cục nằm ở bất kỳ file nào mà bạn muốn.

    final greetingProvider = Provider((ref) => 'Hello Riverpod!');

    Provider đơn giản nhất này có thể cung cấp một giá trị read-only. Có nhiều loại Providers khác nữa để làm việc với Futures, Streams, ChangeNotifier, StateNotifier,…

    Tham số ref có kiểu ProviderReference. Bạn sẽ thấy ở phần sau, nó chủ yếu được sử dụng để giải quyết sự phụ thuộc giữa các Provider.

    Mặc dù Provider object có thể truy cập toàn cục, nhưng điều này không có nghĩa là provided object (trong trường hợp này là chuỗi “Hello Riverpod!”) là global. Giống như với một hàm toàn cục, bạn có thể gọi nó từ bất cứ đâu nhưng giá trị trả về cũng có thể trở thành phạm vi cục bộ. Hãy xem xét đoạn code sau:

    function_analogy.dart
    String globalFunction() {
      return 'some value';
    }
    
    class MyClass {
      void _classMethod() {
        final valueLocalToThisMethod = globalFunction();
      }
    }

    Bước 3. ProviderScope

    Sau khi cài đặt xong Riverpod, chúng ta cần bao widget gốc của mình bằng ProviderScope.

    Gói Riverpod chỉ đi kèm với một InheritedWidget duy nhất cần được đặt phía trên toàn bộ widget trê được gọi là ProviderScope. Nó chịu trách nhiệm giữ một thứ gọi là ProviderContainer, thứ này có trách nhiệm lưu trữ trạng thái của các đối tượng Provider riêng lẻ.

    main.dart
    void main() {
      runApp(
        ProviderScope(
          child: MyApp(),
        ),
      );
    }

    Bước 4. Theo dõi một provider

    Làm cách nào để chúng ta lấy được string từ greetingProvider để có thể hiển thị trong Text? Thực tế có hai cách để làm điều đó.

    main.dart

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Riverpod Tutorial',
          home: Scaffold(
            appBar: AppBar(
              title: Text('Riverpod Tutorial'),
            ),
            body: Center(
              child: Text('greeting goes here'),
            ),
          ),
        );
      }
    }

    Cách đầu tiên là thay đổi superclass tiện thành ConsumerWidget của package flutter_riverpod. Điều này thêm một tham số ScopedReader vào phương thức build của class đó. Widget sẽ được rebuild nếu có bất kỳ sự thay đổi nào xảy ra.

    main.dart

    class MyApp extends ConsumerWidget {
      @override
      Widget build(BuildContext context, ScopedReader watch) {
        // Gets the string from the provider and causes
        // the widget to rebuild when the value changes.
        final greeting = watch(greetingProvider);
    
        return MaterialApp(
          title: 'Riverpod Tutorial',
          home: Scaffold(
            appBar: AppBar(
              title: Text('Riverpod Tutorial'),
            ),
            body: Center(
              child: Text(greeting),
            ),
          ),
        );
      }
    }

    Cách khác để nhận được giá trị từ provider là dùng Consumer, cách này sẽ hữu ích nếu bạn muốn nhanh chóng tối ưu hóa việc xây dựng lại widget con của mình, không muốn các widget khác cũng phải rebuild lại theo. Trong trường hợp này ta chỉ cần xây dựng lại Text widget bản bị ảnh hưởng trên toàn bộ cây widget.

    main.dart

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Riverpod Tutorial',
          home: Scaffold(
            appBar: AppBar(
              title: Text('Riverpod Tutorial'),
            ),
            body: Center(
              child: Consumer(
                builder: (context, ref, child) {
                  final greeting = ref.watch(greetingProvider);
                  return Text(greeting);
                },
              ),
            ),
          ),
        );
      }
    }
    

    Đọc một provider

    Đôi khi, không thể gọi “watch” vì bạn không ở trong phương thức build. Hoặc bạn chỉ muốn lấy giá trị từ provider ra chứ không muốn widget sẽ rebuild. Ví dụ: bạn có thể muốn thực hiện một hành động khi một nút được nhấn. Đó là khi bạn có thể gọi context.read(). Dưới đây là một loại provider khác – ChangeNotifierProvider:

    main.dart
    class IncrementNotifier extends ChangeNotifier {
      int _value = 0;
      int get value => _value;
    
      void increment() {
        _value += 1;
        notifyListeners();
      }
    }
    
    final incrementProvider = ChangeNotifierProvider((ref) => IncrementNotifier());

    Ta sẽ lấy ví dụ với Counter App. Text widget sẽ theo “watch” provider và tự động được rebuilt nếu xảy ra thay đổi và FloatingActionButton sẽ chỉ đọc provider để gọi phương thức increment() trên đó.

    main.dart

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Riverpod Tutorial',
          home: Scaffold(
            body: Center(
              child: Consumer(
                builder: (context, watch, child) {
                  final incrementNotifier = watch(incrementProvider);
                  return Text(incrementNotifier.value.toString());
                },
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: () {
                context.read(incrementProvider).increment();
              },
              child: Icon(Icons.add),
            ),
          ),
        );
      }
    }

    3. Những điểm tuyệt vời của Riverpod

    Sử dụng nhiều provider cùng type

    Riverpod’s providers objects không dựa vào types để tìm kiếm các provider, nên có nhiều provider cùng type mà không gặp vấn đề gì
    example.dart
    final firstStringProvider = Provider((ref) => 'First');
    final secondStringProvider = Provider((ref) => 'Second');
    
    // Somewhere inside a ConsumerWidget
    final first = watch(firstStringProvider);
    final second = watch(secondStringProvider);

    Dependency between providers

    Bất kỳ ứng dụng nào trong thực tế đều có sự phụ thuộc giữa các lớp. Ví dụ: bạn có thể có ChangeNotifier phụ thuộc vào Repository,mà nó lại phụ thuộc vào HttpClient. Xử lý các phụ thuộc như vậy với Riverpod rất đơn giản và dễ đọc.

    Với ví dụ đơn giản sau, chỉ có một FutureProvider phụ thuộc trực tiếp vào một FakeHttpClient. Việc getting một provider khác bên trong function của provider được thực hiện bằng cách gọi read trên tham số ProviderReference – ref luôn được chuyển vào. Nếu bạn phụ thuộc vào provider có giá trị có thể thay đổi, bạn cũng có thể gọi watch.

    main.dart

    class FakeHttpClient {
      Future<String> get(String url) async {
        await Future.delayed(const Duration(seconds: 1));
        return 'Response from $url';
      }
    }
    
    final fakeHttpClientProvider = Provider((ref) => FakeHttpClient());
    final responseProvider = FutureProvider<String>((ref) async {
      final httpClient = ref.read(fakeHttpClientProvider);
      return httpClient.get('https://resocoder.com');
    });

    Sử dụng các giá trị từ FutureProvider từ UI thay cho FutureBuilders rất tuyệt vời. Riverpod giúp việc xây dựng các widgets dựa trên Future một cách dễ dàng.

    main.dart

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Riverpod Tutorial',
          home: Scaffold(
            body: Center(
              child: Consumer(
                builder: (context, watch, child) {
                  final responseAsyncValue = watch(responseProvider);
                  return responseAsyncValue.map(
                    data: (_) => Text(_.value),
                    loading: (_) => CircularProgressIndicator(),
                    error: (_) => Text(
                      _.error.toString(),
                      style: TextStyle(color: Colors.red),
                    ),
                  );
                },
              ),
            ),
          ),
        );
      }
    }

    Passing arguments to providers

    Nếu bạn muốn chuyển một URL do người dùng xác định đến responseProvider? Hãy dùng family, thay đổi responseProvider thành như sau…

    main.dart

    final responseProvider =
        FutureProvider.family<String, String>((ref, url) async {
      final httpClient = ref.read(fakeHttpClientProvider);
      return httpClient.get(url);
    });

    Bạn có thể thử thay đổi chuỗi URL được mã hóa cứng và bạn sẽ thấy rằng hàm này sẽ FutureProvider chạy lại hàm tạo của nó mỗi khi bạn thay đổi chuỗi được truyền vào.

    main.dart

    final responseAsyncValue = watch(responseProvider('https://resocoder.com'));

    Automatically disposing of state

    Bộ nhớ đệm cho provider’s state là rất tuyệt nhưng đôi khi bạn muốn hủy trạng thái của một provider khi nó không còn được sử dụng nữa vì nhiều lý do như:

    • Khi sử dụng Firebase, bạn muốn đóng connect để tránh các phí phát sinh
    • Để thiết lập lại trạng thái khi người dùng rời khỏi màn hình và vào lại.
    main.dart
    final responseProvider =
        FutureProvider.autoDispose.family<String, String>((ref, url) async {
      final httpClient = ref.read(fakeHttpClientProvider);
      return httpClient.get(url);
    });

    autoDispose sẽ loại bỏ provider’s state ngay khi provider không được sử dụng. Trong ví dụ trên, điều này xảy ra ta thay đổi đối số được truyền vào provider family. Tuy nhiên, autoDispose hữu ích ngay cả khi bạn không sử dụng family modifier. Trong trường hợp đó, việc xóa bỏ được bắt đầu khi ConsumerWidget một provider bị disposed.

    Bài viết được biên tập từ https://resocoder.com/2020/11/27/flutter-riverpod-tutorial-the-better-provider/

  • How to Learn any Programming Language

    How to Learn any Programming Language

    1. Learn language basics

    • Variable Types
    • Operators
    • Basic input and output
    • Print something on STDOUT
    • Basic program structure

    2. Learning out basic data structures / containers

    • Dictionary
    • Set
    • List/Array

    3. Learn basic file I/O

    • How to read a file in
    • How to write a file out
    • Crazy mileage ( simple ­> complicated )
    • This goes from simple reading of a text file to… DATABASE. Postgres, or mongodb (extremely complicated)

    4. Learn networking basics

    • Making HTTP requests with your language

      • Learn how to GET, POST, DELETE, etc. requests.
      • How to set your requests properly, how to handle responses and status codes
    • Learn some basic socket programming your language.
    • Overall, there are LIBRARIES out there to help you to do this.

    5. How to build your project and language

    • E.g. C++ you’ll have to learn how to build static libraries, shared libraries, how to link your applications properly.
    • E.g. Python developer. You’ll have to figure out how to separate out your modules well.
      • Execution vs import style
      • How does this is all fit into your project?

    6. Learn OO / functional programming paradigm tools

    • E.g. for OO you need to learn how to use classes, how to use inheritance, how to use polymorphism, etc.
    • E.g. functional. You’ll have to learn how your language uses blocks or lambdas, how function pointers or callbacks work.

    7. EXTRA Goodies in any language

    • Bag of trickies
    • You can come back to here and learn the subtleties and nice stuff of any language
    • E.g. Ruby has a lot of cool methods on enumerable types.
  • Font chữ tiếng việt trên Canva

    Font chữ tiếng việt trên Canva

    Mặc dù Canva hỗ trợ rất nhiều font chữ, nhưng trong số đó khá nhiều font không hỗ trợ tiếng Việt. Do đó, chúng tôi đã tổng hợp các font chữ tiếng việt trên Canva thành một file để bạn đọc tiện sử dụng.

    Mời bạn tham khảo:

    Cách sử dụng Font chữ tiếng Việt trên Canva

    B1: Bấm vào link sau font Canva tiếng Việt

    Cách sử dụng Font chữ tiếng việt trên Canva

    B2: Chọn vào “Use Template” để sử dụng bộ font Việt hóa Canva

    B3: Chọn vào text bạn muốn sử dụng và chọn copy text đó sau đó dán sang thiết kế của bạn. Hoặc nhìn vào ô tên font để tự chọn tên font trong thiết kế của bạn.

    Font chữ tiếng việt trên Canva 26

    Kinh Nghiệm Tìm Kiếm Font Việt Hoá Trên Canva

    Mặc định bộ font của Canva sẽ có rất nhiều font chữ chưa được Việt hoá, vì thế khi chúng ta sử dụng sẽ rất xấu nếu không biết cách tìm kiếm.

    Theo kinh nghiệm của mình trong nhiều năm săn các font chữ đẹp, các bạn có thể tìm kiếm font chữ được Việt Hoá thông qua 2 từ khoá tìm kiếm: Sans Serif & Slab Serif

    • Serif nghĩa là một đường thẳng hoặc một nét nhỏ ở trên thành phần của chữ, thường là những đường định hướng và ổn định cấu tạo chữ. Serif thường được biết đến với tên gọi “chữ có chân”.
    • Sans serif sinh ra như một phiên bản nâng cấp và trẻ trung hơn, dùng cho thiết kế sáng tạo, vui tươi hoặc văn bản thiết kế cho trẻ em
    Font chữ tiếng việt trên Canva 27

    Sau khi gõ từ khoá Sans Serif, bạn chỉ cần chọn các loại font có trong kết quả gợi ý từ Canva để sử dụng.