Cảm ơn bạn đã góp ý nhưng mình chưa rõ ý của bạn lắm. Bạn có thể giúp đỡ mình chỉ ra chỗ sai để mình update bài viết không?.
Những gì mình nghiên cứu được là một coroutine được phóng trong GlobalScope, nó sử dụng Dispatchers.Default tức là sử dụng shared background pool of threads nên mình viết là // chạy một coroutine trên background thread. Có thể mình bị miss ở đâu đó. Mong bạn chỉ dẫn thêm.
The default dispatcher that is used when coroutines are launched in GlobalScope is represented by Dispatchers.Default and uses a shared background pool of threads, so launch(Dispatchers.Default) { ... } uses the same dispatcher as GlobalScope.launch { ... }.
Khi chạy CICD, Gitlab Runner sẽ tự động clone code về folder hiện tại mà nó làm việc, ta không cần biết chính xác folder đó tên là gì, vì mount volume ta dùng đường dẫn tương đối trỏ về folder hiện tại.
Ở docker-compose.yml khi mount volume, thì chỉ đường dẫn ở trong container (phía bên phải) phải là đường dẫn tuyệt đối, còn đường dẫn phía môi trường ngoài thì có thể là tương đối hoặc tuyệt đối:
volumes:
- /home/docker/tmp/.docker/data/db:/data/db # tuyệt đối
- .docker/data/db:/data/db # tương đối
Mình làm về lĩnh vực này lâu rồi nên thấy cái gọi là chặn tải file thực ra là chống chia sẻ public file tĩnh, chỉ có ai thanh toán mới dùng được. Để thực hiện nó thì link phải có chữ ký và có thời gian sống, mỗi phiên người dùng sẽ được tạo mới và hết hạn sau một thời gian đặt trước.
Còn chống người dùng download video thì chịu, mỗi khi họ thanh toán và xem được video thì có thể bắt được luồng video, trình duyệt nào cũng có hàng tá plugin cho phép lưu video đang xem, ai không tin đưa link và tài khoản trang bất kỳ mình download về cho.
@tranuybao1991 HLS - HTTP Live Streaming, thường người ta dùng ở các dịch vụ streaming video. bạn có thể vào các trang như phimmoi hay motphim, facebook video hay youtube họ cũng đều dùng cơ chế này cả. Ý tưởng là chia file ra thành nhiều mảnh nhỏ với các độ phân giải khác nhau và lúc xem thì chỉ load từng mảnh tương ứng. Bạn có thể dùng cách này nếu web của bạn có nội dung Video. Nhưng không phải HLS là người ta không download được đâu nhé, nểu bạn không encrypt HLS thì khi người ngoài lấy được master playlist thì họ vẫn download được tất cả các mảnh khá dễ dàng (bằng ffmpeg chẳng hạn)
Còn với file tài liệu bình thường, như bạn bên trên đã comment thì vẫn nên đặt ở 1 nơi nào đó private (AWS S3) và phải authenticate trước khi download
@longvt1912
Bác chưa hiểu câu hòi thì phải.
Bạn ấy nói là nó đã chạy ổn định ở local.
Nhưng trên server nó ko show modal khi catch error.
Câu hỏi của bạn ấy là ở bước 4, khi gọi modal('show') mà nó chưa show, tại sao? (dưới local thì show mà trên server thì ko show đc.)
Cách dùng Watermark trong deep learning cũng không dễ dàng với tất cả mọi người. Cách dùng watermark mình đã trình bày ý tưởng của paper "Embedding Watermarks into Deep Neural Networks (2017)" rồi đó bạn. Xin lỗi nếu nó hơi khó hiểu. Source của paper này đây https://github.com/yu4u/dnn-watermark . Nó chính là code hiện thực hóa để xuất của nhóm tác giả để sử dụng watermark. Ngoài ra các paper của reference cũng rất hay.
@Nobita1234 sử dụng Driver sẽ không giúp tiết kiệm lines of code được bao nhiêu đâu, quan trọng là nó an toàn và phù hợp để làm việc với UI hơn thôi. Việc bạn sử dụng Observable hay Subject để bind lên UI không có gì là sai cả, nhưng lúc đó bạn sẽ phải care nhiều thứ hơn như là:
Liệu rằng mình đã observe trên MainScheduler chưa?
Liệu observable emit ra lỗi thì sẽ xử lý như thế nào?
Liệu kết quả của observable của bạn có bị bind ở nhiều chỗ không vì nếu bind nhiều lần trên 1 observable thì nó chạy nhiều lần (với case là một observable của api thì sẽ không tốt về performance chút nào), ...
Và khi bạn dùng Driver thì bạn sẽ không phải care đến những thứ này nữa, tất nhiên để convert từ observable sang driver sẽ mất thêm thao tác, nhưng tựu chung lại bạn sẽ giải quyết được vấn đề mà trên.
@cknguyen Đúng rồi bạn. Do mình ít khi nào dùng Driver vì nhiều thứ bất tiện. Thường chỉ dùng Observable và Subject.
Cái bind(to:) sẽ bị fatalError/error chỉ bị trong RxRelay, trong Subject ko thấy nói tới (https://github.com/ReactiveX/RxSwift/blob/main/RxCocoa/Common/Observable+Bind.swift).
Đúng là tiết kiệm được dòng .subscribeOn(Main) nhưng phải thêm asObservable() cho Trait thì cũng như không.
THẢO LUẬN
Cảm ơn bạn đã góp ý nhưng mình chưa rõ ý của bạn lắm. Bạn có thể giúp đỡ mình chỉ ra chỗ sai để mình update bài viết không?.
Những gì mình nghiên cứu được là một coroutine được phóng trong GlobalScope, nó sử dụng Dispatchers.Default tức là sử dụng shared background pool of threads nên mình viết là
// chạy một coroutine trên background thread. Có thể mình bị miss ở đâu đó. Mong bạn chỉ dẫn thêm.Nguồn: https://kotlinlang.org/docs/reference/coroutines/coroutine-context-and-dispatchers.html
@thungrac43
Sao bạn phải phức tạp hoá vấn đề lên vậy
Khi chạy CICD, Gitlab Runner sẽ tự động clone code về folder hiện tại mà nó làm việc, ta không cần biết chính xác folder đó tên là gì, vì mount volume ta dùng đường dẫn tương đối trỏ về folder hiện tại.
Ở
docker-compose.ymlkhi mount volume, thì chỉ đường dẫn ở trong container (phía bên phải) phải là đường dẫn tuyệt đối, còn đường dẫn phía môi trường ngoài thì có thể là tương đối hoặc tuyệt đối:Cả 2 cách đều được.
GlobalScope.launch { // chạy một coroutine trên background thread
Mục 2 "Hai cách để xóa bỏ tất cả các phần tử của mảng (đưa mảng về rỗng)" có thể dùng thêm phương thức splice(0,arr.length) nữa ạ.
restart mysql la dc do ban
Mình làm về lĩnh vực này lâu rồi nên thấy cái gọi là chặn tải file thực ra là chống chia sẻ public file tĩnh, chỉ có ai thanh toán mới dùng được. Để thực hiện nó thì link phải có chữ ký và có thời gian sống, mỗi phiên người dùng sẽ được tạo mới và hết hạn sau một thời gian đặt trước. Còn chống người dùng download video thì chịu, mỗi khi họ thanh toán và xem được video thì có thể bắt được luồng video, trình duyệt nào cũng có hàng tá plugin cho phép lưu video đang xem, ai không tin đưa link và tài khoản trang bất kỳ mình download về cho.
@Nobita1234 không có gì, nếu có thắc mắc gì bạn có thể tạo questions trên viblo để mọi người cùng discuss
@maitrungduc1410 Đang nói về bài này. Bạn không hiểu chỗ nào trong comment của mình vậy.
Message Format và Monitor Queue là điều kiện cần thêm để ổn định mà, đâu phải nhược điểm
@thanhnguyen mình thấy đoạn đó rất ổn nên nghĩ lỗi phát sinh từ phía trên những đoạn code này và ảnh hưởng đến
this.busy,commonở finally.@tranuybao1991 HLS - HTTP Live Streaming, thường người ta dùng ở các dịch vụ streaming video. bạn có thể vào các trang như
phimmoihaymotphim, facebook video hay youtube họ cũng đều dùng cơ chế này cả. Ý tưởng là chia file ra thành nhiều mảnh nhỏ với các độ phân giải khác nhau và lúc xem thì chỉ load từng mảnh tương ứng. Bạn có thể dùng cách này nếu web của bạn có nội dung Video. Nhưng không phải HLS là người ta không download được đâu nhé, nểu bạn không encrypt HLS thì khi người ngoài lấy đượcmaster playlistthì họ vẫn download được tất cả các mảnh khá dễ dàng (bằngffmpegchẳng hạn)Còn với file tài liệu bình thường, như bạn bên trên đã comment thì vẫn nên đặt ở 1 nơi nào đó private (AWS S3) và phải authenticate trước khi download
@longvt1912 Bác chưa hiểu câu hòi thì phải.
Bạn ấy nói là nó đã chạy ổn định ở local.
Nhưng trên server nó ko show modal khi catch error.
Câu hỏi của bạn ấy là ở bước 4, khi gọi modal('show') mà nó chưa show, tại sao? (dưới local thì show mà trên server thì ko show đc.)
Phần code này thiếu bước 1: Click và hiển thị form như bạn mô tả ấy.
Ý bạn là chặn tải nội dung video ?
@cknguyen cám ơn bạn nhé, để mình đọc thêm về Trait và thử convert app sang Driver xem.
minh thấy có cơ chế HLS là sao bạn ha
Đây là bài viết của anh kwkt https://viblo.asia/s/bao-khoa-hoc-trong-vong-5-phut-rLZDX4YnZk0 Có 1 số bài về watermark, 1 số bài về attack.
Cách dùng Watermark trong deep learning cũng không dễ dàng với tất cả mọi người. Cách dùng watermark mình đã trình bày ý tưởng của paper "Embedding Watermarks into Deep Neural Networks (2017)" rồi đó bạn. Xin lỗi nếu nó hơi khó hiểu. Source của paper này đây https://github.com/yu4u/dnn-watermark . Nó chính là code hiện thực hóa để xuất của nhóm tác giả để sử dụng watermark. Ngoài ra các paper của reference cũng rất hay.
@Nobita1234 sử dụng Driver sẽ không giúp tiết kiệm
lines of codeđược bao nhiêu đâu, quan trọng là nó an toàn và phù hợp để làm việc với UI hơn thôi. Việc bạn sử dụng Observable hay Subject đểbindlên UI không có gì là sai cả, nhưng lúc đó bạn sẽ phải care nhiều thứ hơn như là:bindở nhiều chỗ không vì nếubindnhiều lần trên 1 observable thì nó chạy nhiều lần (với case là một observable của api thì sẽ không tốt về performance chút nào), ...Và khi bạn dùng Driver thì bạn sẽ không phải care đến những thứ này nữa, tất nhiên để convert từ observable sang driver sẽ mất thêm thao tác, nhưng tựu chung lại bạn sẽ giải quyết được vấn đề mà trên.
Cụ thể bạn có thể tham khảo READ ME này https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Traits.md, phần Driver có phân tích vấn đề khi sử dụng observable bind, và convert nó sang Driver.
@cknguyen Đúng rồi bạn. Do mình ít khi nào dùng Driver vì nhiều thứ bất tiện. Thường chỉ dùng Observable và Subject. Cái bind(to:) sẽ bị fatalError/error chỉ bị trong RxRelay, trong Subject ko thấy nói tới (https://github.com/ReactiveX/RxSwift/blob/main/RxCocoa/Common/Observable+Bind.swift). Đúng là tiết kiệm được dòng .subscribeOn(Main) nhưng phải thêm asObservable() cho Trait thì cũng như không.