DISCUSSIONS

Bài viết công phu quá, chỉ tiếc là đọc chỉ để chơi thôi chứ chưa đủ trình để luyện ... híc híc ..

0
Mar 21st, 2018 2:01 a.m.

Mình thử làm theo mà không được nhỉ. Bài viết cẩu thả quá.

0

tks bạn đã chia sẻ

0
Mar 20th, 2018 1:45 p.m.

tks bạn, bài viết rất hữu ích

+1
Mar 20th, 2018 1:43 p.m.

Bác viết vui mà dễ hiểu quá , chắc luyện Kim Dung truyện nát sách rồi 😃)

0
Avatar
commented to answer in the question
Mar 20th, 2018 12:16 p.m.

Lỗi đây ạ FAILURE: Build failed with an exception.

  • What went wrong: Could not determine java version from '9.0.4'.

  • Try: Run with --info or --debug option to get more log output.

  • Exception is: java.lang.IllegalArgumentException: Could not determine java version from '9.0.4'. at org.gradle.api.JavaVersion.toVersion(JavaVersion.java:72) at org.gradle.api.JavaVersion.current(JavaVersion.java:82) at org.gradle.internal.jvm.UnsupportedJavaRuntimeException.assertUsingVersion(UnsupportedJavaRuntimeException.java:29) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:32) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:253) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:182) at org.gradle.launcher.Main.doAction(Main.java:33) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37) at org.gradle.launcher.GradleMain.main(GradleMain.java:23) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)

  • Get more help at https://help.gradle.org

0

thank 4 share

0
Mar 20th, 2018 9:06 a.m.

thank 4 share

0

Nếu sử dụng label thì có áp dụng được cách này k anh nhỉ ✌️ https://viblo.asia/p/nsmutableattributedstring-attribute-string-trong-ios-va-nhung-dieu-thu-vi-co-the-ban-da-biet-aWj5386oK6m

Bài của em thì làm theo cách khác thủ công hơn tý nhưng áp dụng cho label :v 1.jpg

0
Mar 20th, 2018 8:57 a.m.

Anh/bạn có thể nói rõ trong trường hợp nào thì thích hợp dùng lệnh này không ạ.

Em thì hiểu cách dùng rồi nhưng trong dự án thì nó sẽ thường sử dụng trong trường hợp nào ạ.

0
Mar 20th, 2018 8:38 a.m.

Trông khá hay. Cảm ơn bác ^^

+1
Mar 20th, 2018 8:10 a.m.

🤒

0
Mar 20th, 2018 2:27 a.m.

anh có thể cho em hỏi, trong file js, đoạn sự kiện khi mình tích vào ô checkbox ấy, có câu lệnh kiểm tra thế này:

if(that.is(":checked")){ 
			if(!(filters[specName] && filters[specName].length)){
				filters[specName] = [];
			}
			filters[specName].push(that.val());
			createQueryHash(filters);
}

cho em hỏi câu filters[specName] && filters[specName].length mục đích là để kiểm tra cái gì ? Tại sao điều kiện không phải chỉ là :filters[specName].length mà lại còn thêm cả filters[specName] vào nữa ạ.

0
Mar 19th, 2018 2:40 p.m.

Bạn xem thử trang này: http://5minuteshack.blogspot.com/2018/03/reactjs-tutorial.html Cách viết bên này mới hơn.

0

cám ơn anh vì bài viết ạ

0
Mar 19th, 2018 10:10 a.m.

(thankyou)

0

Bài viết rất hữu ích!

0

Tất cả các câu hỏi của bạn nảy sinh vì bạn vẫn đang tư duy hệ thống theo kiểu client-server và chưa hình dung ra cách hoạt động của mạng ngang hàng P2P. Mô hình mạng ngang hàng không chỉ khác về giao thức sử dụng udp thay vì tcp, mà còn bởi cách nó vận hành. Đó là không hề có server trung gian lưu trữ dữ liệu. Hãy lấy ví dụ đơn giản về mạng BitTorrent chia sẻ phim lậu. Một đĩa Bluray tầm 120GB sẽ được 1 người ra cửa hàng mua về, người A đó đưa vào máy tính và bật BitTorrent lên. BitTorrent là 1 Phần Mềm chứ k phải 1 Server, sẽ bắt đầu chia sẻ đường link trực tiếp từ thư mục của người A. và người A đưa link cho người B, file sẽ được copy sang ổ của người B. Nhưng để copy đc từ A sang B, người B cũng phải cài phần mềm BitTorrent (hoặc phần mềm Torrent tương tự). Phần mềm BitTorrent sẽ có tính năng kết nốitheo dõi. Giờ thì người C tham gia BitTorrent. Thấy link phim 120GB, người đó sẽ kích tải về. Lúc này phần mềm BitTorrent sẽ nhìn thấy trong mạng đang có 2 thư mục có thể down về. Và nó sẽ down từ cả 2 thư mục, cắt đoạn đầu down từ máy A, đoạn đuôi down từ máy B. Như thế thì như kiểu sẽ download song song và giảm đc thời gian tải, tiết kiệm được băng thông. Nếu có 1000 người cùng lưu trữ một file và cùng online, thì lúc này mạng Torrent đó sẽ rất nhanh. Nhưng nếu chỉ 2 người, mà người A tắt máy đi ngủ, thì đường truyền lúc này chỉ còn mỗi từ thư mục của B. Nếu B cũng tắt máy nốt, thì đường link đó mới chính thức chết. Do đó mạng ngang hàng, thì càng đông càng mạnh, gần như không bao giờ chết.

Bây giờ mình sẽ lần lượt trả lời các câu hỏi của bạn:

sau 1 thời gian mảng đó sẽ rất rất lớn, như thế có ổn ko?

Chính xác thì bây giờ mảng Blockchain của BitCoin là bao nhiêu GB bạn có biết không? đến thời điểm hiện tại là 161GB. https://blockchain.info/charts/blocks-size Điều này nghĩa là máy bạn muốn bắt đầu đào BitCoin thì bạn phải có 161GB trống trở lên. Đấy là máy đào, còn máy người dùng muốn giao dịch, thì bạn chả cần gì cả. Bạn chỉ cần đặt lệnh giao dịch và đưa vào mảng Giao dịch đang đợi Hash là xong, người khác sẽ đào Hash cho bạn, bạn không tự lôi 161GB về rồi tính toán Hash nên k cần.

...lưu địa chỉ của mỗi block thì có vẻ hợp lý hơn

Không có server trung gian để lưu trữ Blockchain đâu bạn, lúc nào ở máy thợ mỏ trong mạng cũng có sẵn 161GB data copy toàn bộ Blockchain. Nhưng không phải toàn bộ 161GB data này được gửi đi gửi lại trong mạng, mà chỉ có các Block cuối được thêm vào mới được gửi đi. Do đó data gửi rất nhanh. Cái bạn cần là một đường truyền mạng cực kỳ ổn định, vì nếu bạn Hash xong 1 block và mạng chập chờn k gửi được thì xin chia buồn với bạn. Tốc độ mạng cũng không cần quá nhanh, vì data chỉ là text. Gửi nhận chỉ vài MB.

Do đó theo tôi sự ổn định của mạng internet mới là cái bạn nên quan tâm thay vì lo đến dung lượng hoặc tốc độ.

1 thời điểm có cả triệu người check thông tin thì hệ thống sẽ giải quyết bài toán performance như thế nào?

Vẫn câu hỏi cũ. Không hề có server trung gian để đọc ghi DB, mà máy bạn lúc nào cũng có sẵn 161GB data để bạn thích query thế nào thì query. Toàn bộ data của toàn bộ người dùng đã nằm sẵn trong cục 161GB đó rồi. Nếu bạn chỉ là người kiểm tra ví tiền qua web server (ví dụ trang e-wallet, trang trading nào đó) thì rõ ràng trang web đó sẽ là nơi chứa 161GB data và query cho bạn. Họ cũng chỉ query trong 1 cục Data của họ, 1 tỉ request cũng chỉ như facebook là cùng. Cái này không có gì quá khó khăn cho một web service, vì chỉ cần máy chủ đủ mạnh sẽ đáp ứng được lượt request/giây tương ứng.

Chúng ta cần tự xây dựng một trung tâm xử lý cùng với các API, nền tảng cho phép mining?

Lại một lần nữa bạn hỏi sai. Không hề có trung tâm API, vì bạn vẫn tư duy theo kiểu server api. Nền tảng cho phép mining của bạn sẽ phải Open Source toàn bộ. Nghĩa là file Example.html của tôi phải đưa về máy người dùng. Phần mềm BitTorrent cũng là 1 phần mềm chạy trên máy người dùng và không hề có server trung gian.

sau một thời gian thì ông A thay đổi địa chỉ về Bắc Ninh chẳng hạn thì việc update thông tin này như thế nào?

Blockchain không thể chỉnh sửa, vì nó đã nối lại với nhau bằng Hash, Bắt buộc phải thêm mới block vào để SỬA thông tin của ông A. Và đã thêm vào tức là các máy khác bắt buộc phải download Block mới về. Và việc sửa bất kỳ cái gì đều làm cho mọi người biết. Cái hay của cơ sở dữ liệu Blockchain ở chỗ nó chỉ cho thêm, k cho xóa và sửa, dẫn đến nó có tính Minh Bạch. Và lịch sử của 1 con người, 1 món hàng hoặc 1 thành phần gì đó đã tham gia vào Blockchain là không thể bị mất đi, vì có rất nhiều bản ghi đã được copy sang các máy khác.

Hi vọng đã giải đáp được các thắc mắc của bạn.

+1
Viblo
Let's register a Viblo Account to get more interesting posts.