Hỏi về tối ưu messenger chat trong vuejs

Cần gì phải phức tạp thế, bạn copy thẳng cái script embed của facebook rồi chèn vào cuối trang ấy. Xong thêm attribute này cho phần embed chatbox để nó hiện mỗi icon message, hộp chat chỉ hiện khi người dùng click vào icon.
greeting_dialog_display = icon
<!-- Messenger Chat Plugin Code -->
<div id="fb-root"></div>
<div id="fb-customer-chat" class="fb-customerchat"></div>
<script>
var chatbox = document.getElementById('fb-customer-chat');
chatbox.setAttribute("page_id", "PAGE-ID");
chatbox.setAttribute("greeting_dialog_display", "icon");
</script>
<script>
window.fbAsyncInit = function() {
FB.init({
xfbml : true,
version : 'API-VERSION'
});
};
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
ai giúp em lỗi terminal ảo ma này ở vscode

Bạn thử đổi shell sang dùng cmd/powershell xem có bị tình trạng tương tự nữa không?
Cách tạo deeplink để nhảy đến màn hình trên app?

Bạn có thể dùng Firebase Dynamic Links nhé. https://firebase.google.com/docs/dynamic-links
Kinh nghiệm xin duyệt project trên Google Console

Project trên Google Console thì có phải đợi Google review gì đó thì mới dùng được đâu nhỉ? Bạn cứ tạo project, tạo credentials rồi enable những bộ API bạn cần dùng là sử dụng được ngay mà.
viblo SEO for a blog

- Website của bạn cần có một trang sitemap trả về dạng XML chứa danh sách các trang trong website của bạn mà bạn muốn Google quét, cũng như là tần suất quét.
- Bạn gửi link trang sitemap cho Google Search Console, sau đó thì Google Bot sẽ đều đặn scan các trang trên website của bạn để tạo index cho các thông tin tìm kiếm. m.
- Trang sitemap có thể là một file sitemap.xml tĩnh, hoặc cũng có thể là nội dung XML được tự động tạo mới mỗi khi bạn đăng thêm bài viết mới.
Nội dung XML được follow theo hướng dẫn tại đây: https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap
Làm cách nào để remove token của user trong localStorage nếu token hết hạn?

- Khi browser request lên server, server check thấy token hết hạn thì trả về response báo hết phiên đăng nhập. VD: Response 440 - Session Expired
- Dưới client, nếu nhận response về với status code là 440 sẽ hiểu là hết phiên đăng nhập thì tự xóa local storage.
Nginx không thể connect được TCP server trên AWS ECS

Bạn dùng short name của service thì phải public DNS name cho VPC thì các service mới tìm được nhau. Còn không thì phải dùng kiểu FQN (Fully Qualified Name): <service>.<compose_project_name>.local
Maximum execution time of 60 seconds exceeded

Lỗi này anh em hay nói vui với nhau là "code thối", dẫn tới hiệu năng kém và chạy quá thời gian cho phép của server. Để làm nó chạy lại được thì rất dễ - đó là config PHP bằng mấy tham số như dưới đây:
- max_execution_time
- memory_limit
Việc sửa đổi các cấu hình thì sẽ gây ra các vấn đề kéo theo như một request được server xử lý quá lâu sẽ dẫn tới chiếm hết các tài nguyên server - nó sẽ thành điểm tuyệt vời để hacker nhắm vào giúp DOS server của bạn dễ hơn. Nếu config một con số chưa đủ cao (theo thời gian số lượng dữ liệu tăng lên) thì lỗi sẽ lại tái diễn.
Các trên không giải quyết triệt để vấn đề. Vấn đề cốt lõi ở đây là chất lượng code. Bạn nên refactor lại code, áp dụng thêm các giải pháp khác nhau như: Paginate, cache, lazy-loading... để code xử lý trả ra kết quả thật nhanh. Từ đó dù dữ liệu nhiều hay ít thì server vẫn hoạt động ổn định.
Giúp em về Cron job Task Scheduler trong laravel với các anh :(((

Bạn sử dụng Task Scheduler của Laravel là đúng rồi nhé. Kết hợp dùng Task Scheduler + Artisan Command sẽ là sự lựa chọn tuyệt vời. Cách thức thực hiện thì sẽ làm như sau:
- Tạo một Artisan Command theo hướng dẫn: https://laravel.com/docs/9.x/artisan VD: SendDailyReport
- Viết code logic của bạn vào trong method
handle
trong command - Cấu hình Task Scheduler để Laravel tự động chạy command trên theo hướng dẫn: https://laravel.com/docs/9.x/scheduling#scheduling-artisan-commands
- Cấu hình Crontab trên server để server tự động chạy Task Scheduler của Laravel
Bạn làm theo các hướng dẫn của mình bên trên là được.
Làm thế nào biết record được tạo ra khi nào?

Nếu bạn không có cột date nào để tự lưu thì không có cách nào để biết record đó tạo khi nào đâu nhé. Giờ chỉ có nước là tìm qua các bảng liên quan xem có chỗ nào lưu date mà phù hợp để lấy ra dùng thay thế thôi.
Kiểu như bảng user không có cột created_at (thời gian tạo) nhưng lại có một bảng activation_email_logs có cột sent_at (thời gian mail xác thực tạo tài khoản được gửi) thì có thể bê cái sent_at về làm cho created_at để chống cháy.
Hỏi về xây dựng website

Dùng luôn wordpress nha bạn.
Filter theo Quý( 3 tháng bằng 1 quý) trong react js

- Về giao diện thì em dùng mấy thư viện datepicker để build phần giao diện chọn ngày, thường thì trong các UI Library như Ant design, material ui... đều có sẵn.
- Hoặc nếu chỉ muốn xem theo quý thì em có thể để UI dạng Select > Option, một mục cho chọn năm và một mục cho chọn quý. VD: year=2022 ; quarter=Q2
- Sau đó thì gửi kèm những tham số này theo API thôi.
Về phần backend:
- Nếu gửi payload là quarter=Q2 -> quý 2 thì thêm bước chuyển đổi giá trị Q2 thành thời gian bắt đầu và thời gian kết thúc quý. Q2 thì lúc nào cũng cố định là tháng 4, 5, 6.
- Sử dụng các hàm
startOfQuarter
vàendOfQuarter
trong các thư viện xử lý ngày tháng cho tiện - Nếu muốn lấy ra tổng số KH và tổng số giao dịch thì hãy viết một cái API mới. Dùng hàm
COUNT
trong sql để đếm và dùng where để lọc đúng quý.
Hỏi về hàm dispatch Job trong laravel

Bạn thử đặt lại tên Job xem nhé:
use App\Jobs\CreateSqlJob;
dispatch(new CreateSqlJob($databaseName, $data['company_name']));
[Rails] Tạo và quản lý jobs với dynamic thời gian chạy job và Timezone

Mình thấy cách này cũng ổn mà.
- Tạo một cái cronjob để cứ 1p / lần sẽ chạy cái một cái command của app.
- Cái command này của app sẽ check xem schedule nào thoả mãn để xử lý.
- Chỗ này bạn nên có cột
status
cho bảngschedule
và tạo index phù hợp để tối ưu cho truy vấn sql - Trong cái command, phần logic chạy cho mỗi chiến dịch quảng cáo phù hợp bạn đưa vào hệ thống queue-job. Mình sẽ scale bằng cách có nhiều queue và nhiều queue-workers.
- Nếu chưa đáp ứng được mà muốn scale hơn nữa thì bạn có thể chuyển hẳn phần chạy chíến dịch quảng cáo thành service riêng, viết bằng go hoặc rust chẳng hạn.
Bạn có thể chia sẻ thêm về vấn đề performance mà bạn đang gặp phải được không?
😭😭😭😭MỌI NGƯỜI ƠI CỨU EM, em lỡ tay bấm nhầm Undo changes:((

-
Nếu bạn chưa tạo commit cho các file đó thì không có cách nào khác để lấy lại các file đã xóa bằng git đâu. TH này chắc chỉ có nước dùng các phần mềm khôi phục file giống như trong bài này: https://www.thegioididong.com/hoi-dap/top-20-phan-mem-khoi-phuc-du-lieu-da-xoa-tren-o-cung-usb-1301314.
-
Nếu bạn đã từng tạo commit cho các file đó thì có thể khôi phục lại được về các commit đó. Bạn dùng lệnh:
git reflog -20
Nó sẽ hiện lịch sử 20 bước các sửa đổi của source code trong git. (Bỏ cái -20 cũng được). Sau đó dùng lệnh checkout
để quay về phiên bản mong muốn.
Mình ví dụ như này:
> git reflog
d2a2f9a (HEAD -> fix, master) HEAD@{0}: checkout: moving from master to fix
d2a2f9a (HEAD -> fix, master) HEAD@{1}: rebase -i (finish): returning to refs/heads/master
d2a2f9a (HEAD -> fix, master) HEAD@{2}: rebase -i (squash): refactor!: remove port binding to localhost for database services
a5968d7 HEAD@{3}: rebase -i (start): checkout HEAD~2
19aa40a (origin/master, origin/HEAD) HEAD@{4}: commit (amend): feat!: traefik has been compatible with multi-projects
d90af3a HEAD@{5}: commit: feat: traefik has been compatible with multi-projects
514f3d4 (upstream/master) HEAD@{6}: clone: from git@github.com:kimyvgy-forks/docker-php-development.git
> git checkout HEAD@{5}
Làm sao để tảo một editor cho markdown giống viblo bằng nextjs?

Viblo thì sử dụng thư viện Simple MDE, ngày trước mình cũng từng trả lời một bạn câu hỏi này trên Viblo. Bạn có thể đọc lại câu trả lời của mình tại: https://viblo.asia/a/J3ZgM9xL5mB
Rất lâu về trước cũng có một bác viết bài: Làm trình soạn thảo giống Viblo. Bạn thử đọc nhé.
Ngoài ra, có nhiều editor khác cũng dùng markdown như Editor.js, Marktext. Mình khá là thích editor của Marktext, khi dùng nó rất tiện và trực quan hơi Editor hiện tại của Viblo. Đối với Marktext thì họ public editor đó tại đây: https://github.com/marktext/muya
hỏi sữa lỗi php trên byethost

Cái này là code của bạn bị lỗi. Bạn gửi code của bạn lên đây mọi người còn có thể hỗ trợ được chứ đăng cái ảnh như này thì chẳng ai có thời gian đoán mò để giúp bạn đâu.
Check điều kiện bằng route params trong vue 3?

Cái điều kiện hiển thị Navigation dựa theo path của route thì bạn dùng computed
sẽ là hợp lý. Tham khảo code:
<script setup lang="ts">
import { ref, computed} from "vue";
import { useRoute } from 'vue-router';
// ...
const route = useRoute();
const checkLogin = computed(() => route.name === 'login');
</script>
Auth request với request body trong nginx

Không thêm được vào request body đâu bạn ạ vì nó chỉ dùng GET như bạn nói thôi. Thêm vào cái module đó nó cũng xóa bỏ.
Nhưng mà vẫn có thể truyền dữ liệu bằng cách chèn dữ liệu vào header. Bạn thử dùng header xem.
Cách tự động backup db sang một server khác

Cách 1
Một cách khá đơn giản đó là public cái port 3306 + whitelist IP cho con server chạy backup để có truy cập vào SQL server của môi trường test. Trong cái script backup thì sau khi backup thành công, bạn chạy lệnh CLI import file vào thẳng con SQL server test luôn.
Cách 2
Bạn có thể setup NFS - Network File System, giúp có thể chia sẻ file giữa các server với nhau. Khi đó thì ở server test bạn sẽ đọc được file backup.sql ở server web.
Lúc này thì bạn đặt crontab để tự động import file SQL cho môi trường test theo lịch. VD: Back up DB lúc 1h, import database vào môi trường test sẽ là 2h. Bạn áng chừng thời gian rồi để cách nhau ra như vậy là OK. Tên file SQL bạn để theo ngày tháng để khi import còn check được là có tồn tại file của ngày đó hay không nha.