From Test-Scratch-Wiki
![]() |
This page has links to outside of the Scratch website or Wikipedia. Remember to stay safe when using the internet as we can't guarantee the safety of other sites. |
Dữ liệu đám mây là một tính năng cho phép Scratcher lưu trữ biến "trên đám mây" hoặc trên máy chủ. Biến đám mây có ký tự "☁" (biểu tượng đám mây trong phông chữ Scratch sử dụng) ở phía trước để phân biệt với các biến thông thường.[1] Nó có thể sử dụng một phông chữ khác nếu máy tính của người dùng không hỗ trợ. Nhật ký dữ liệu đám mây có thể được xóa bởi người tạo dự án. Ví dụ: nếu có một bài kiểm tra và ai đó không muốn hiển thị điểm của mình, nhưng điểm đó vẫn được lưu vào nhật ký, người tạo có thể xóa nhật ký. Có giới hạn mười biến đám mây cho mỗi dự án.
Chúng tự động cập nhật, trái ngược với việc yêu cầu làm mới trước khi cập nhật. Mặc dù bản cập nhật không diễn ra ngay lập tức, nhưng thường tương đối nhanh.
“ | Nếu cả hai Scratcher đều có kết nối Internet khá nhanh (DSL/Cáp) và không có tường lửa hạn chế trên máy tính/mạng, các bản cập nhật sẽ được truyền đi trong mili giây. Tuy nhiên, rất nhiều máy tính có phần mềm tường lửa đang chạy trong đó và nếu phần mềm tường lửa chặn các kết nối đi đến cổng TCP 531 và cổng TCP 843, độ trễ thời gian sẽ là một giây. | ” |
– Trang Câu Hỏi Thường Gặp[2] |
Dữ liệu đám mây không được sử dụng bởi Trạng Thái Scratcher Mới. Nhóm Scratch không muốn những người mới sử dụng Scratch sử dụng sai biến đám mây vì điều này có thể gây quá tải cho hệ thống mà hệ thống không thể xử lý (xem phần "Sự cố với Đám mây").
Biến đám mây sử dụng khối thông thường liên kết với các biến. Sự khác biệt duy nhất là giá trị thực sự là toàn cục và được phản ánh trên tất cả các bản sao của chương trình đang được xem trên Trang web Scratch.
Dữ liệu đám mây được gọi là "bền vững" trong mã và một số phiên bản phát triển ban đầu.
Vì Dữ liệu đám mây được lưu trữ trên máy chủ nên các biến đám mây không thể được sử dụng trong Trình chỉnh sửa ngoại tuyến 2.0.
Chức Năng
Các biến đám mây được duy trì thông qua kết nối Websockets an toàn.
Để tránh quá tải cơ sở hạ tầng dữ liệu đám mây, các bản cập nhật dữ liệu đám mây bị giới hạn ở một số lượng nhất định mỗi giây khi một dự án đang được chạy. Người ta luôn nên tránh cố gắng cập nhật một biến đám mây trong một vòng lặp nhanh không chờ giữa các lần cập nhật. Nhìn chung, người ta nên cân nhắc cẩn thận tần suất cập nhật một biến đám mây và cố gắng giới hạn bất kỳ bản cập nhật nào chỉ vào những thời điểm cần thiết, chẳng hạn như khi giá trị thực sự thay đổi và để giới hạn tần suất cập nhật biến.
Nếu biến được cập nhật quá thường xuyên, máy chủ dữ liệu đám mây sẽ tạm thời ngắt kết nối và các bản cập nhật sẽ không được gửi đến máy chủ dữ liệu đám mây cho đến khi kết nối được tự động mở lại sau thời gian chờ biến.
Dữ liệu đám mây có giới hạn tối đa mười (10) biến đám mây cho mỗi dự án. Nó đã vô tình bị giới hạn ở tám biến ngay sau khi phát hành phiên bản 3.0.[3] Biến đám mây chỉ có thể chứa số (không giống như biến thông thường, chúng không thể chứa chữ cái). Giới hạn ký tự là 256 chữ sốTemplate:Cite post mỗi biến cũng đã được triển khai (trước đây là 128 chữ số). Số thập lục phân không còn được hỗ trợ nữa.Template:Cite post
Công Cụ Danh Sách Đám Mây
Cloud list engine (tạm dịch: Công Cụ Danh Sách Đám Mây) là các dự án hoặc tập lệnh lưu trữ danh sách trong các biến đám mây. Để thực hiện điều này, chúng mã hóa danh sách dưới dạng số và đặt biến đám mây thành số đó. Sau đó, cùng một mã có thể biến biến đám mây trở lại thành danh sách. Điều này được phát triển dựa trên ý tưởng rằng bất cứ thứ gì trên thế giới đều có thể được biểu diễn bằng số. Ví dụ, tất cả các chữ cái trong bảng chữ cái có thể được lưu trữ dưới dạng số bằng cách gán cho mỗi chữ cái một số từ 1 đến 26. Một vài ví dụ về cloud list engine là tại đây vàtại đây nữa. Bạn có thể sử dụng cơ số 11 chỉ cho số và chuyển đổi nó sang cơ số 10. Sau đó, để giải mã nó, trước tiên bạn phải chuyển đổi sang cơ số 11.
Ví Dụ Cách Sử Dụng
- Điểm cao nhất của toàn bộ người sử dụng dự án:
nếu <(điểm cục bộ) > (☁ Biến điểm cao nhất)> thì đặt [☁ Biến điểm cao nhất v] thành (điểm cục bộ) nếu không thì nói [Bạn không đạt được điểm cao!]
- Chiến thắng/Thua (miễn là điểm số không kết thúc bằng số không)
nếu <(Điểm của người chơi) > (Điểm của AI chơi)> thì đặt [☁ Biến chiến thắng v] thành (kết hợp (kết hợp (Điểm của người chơi) [.]) (Điểm của AI chơi)) nếu không thì đặt [☁ Biến thua cuộc v] thành (kết hợp (kết hợp (Điểm của người chơi) [.]) (Điểm của AI chơi))
- Khảo sát:
Hỏi [Hãy bình chọn cho Pepsi hay Coke! Bạn thích loại nào hơn?] và đợi nếu <(trả lời) = [Pepsi]> thì thay đổi [☁ pepsi votes v] một lượng (1) nếu không thì nếu <(trả lời) = [Coke]> thì thay đổi [☁ coke votes v] một lượng (1) nếu không thì nói [Xin lỗi! Câu trả lời đó không được công nhận.] end
- Ví dụ hàm để mã hóa văn bản cơ số 10
định nghĩa Mã hóa: (đầu vào) đặt [Danh sách ký tự v] thành [abcdefghijklmnopqrstuvwxyz234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1.-!@#$%^&*()_+|\\:";'<>?/,`= ] đặt [inputL# v] thành [1] đặt [Được mã hóa v] thành [] xóa hết tất cả trong liệt kê [Return v] xóa hết tất cả trong liệt kê [eFull v] lặp lại (độ dài của (đầu vào)) nếu <không phải <(ký tự thứ (inputL#) của chuỗi (đầu vào)) = [ ]>> thì Kiểm tra trường hợp (ký tự thứ (inputL#) của chuỗi (đầu vào)) :: custom nếu <(chữ hoa) = [in thường]> thì đặt [IList# v] thành [10] lặp lại cho đến khi <<(ký tự thứ (inputL#) của chuỗi (đầu vào)) = (ký tự thứ (lList#) của chuỗi (Danh sách ký tự))> hoặc <(lList#) > [44]>> thay đổi [lList# v] một lượng (1) end nếu <không phải <(lList#) > [44]>> thì thêm phần tử [0] vào trong [eFull v] thêm phần tử (ký tự thứ (1) của chuỗi (lList#)) vào trong [eFull v] thêm phần tử (ký tự thứ (2) của chuỗi (lList#)) vào trong [eFull v] end thay đổi [inputL# v] một lượng (1) nếu không thì nếu <(chữ hoa) = [in hoa]> thì đặt [lList# v] thành [45] lặp lại cho đến khi <<(ký tự thứ (inputL#) của chuỗi (Input)) = (ký tự thứ (lList#) của chuỗi (Danh sách ký tự))> hoặc <(lList#) > [73]>> thay đổi [lList# v] một lượng (1) end nếu <không phải <(lList#) > [73]>> thì thêm phần tử [0] vào trong [eFull v] thêm phần tử (ký tự thứ (1) của chuỗi (lList#)) vào trong [eFull v] thêm phần tử (ký tự thứ (2) của chuỗi (lList#)) vào trong [eFull v] end thay đổi [inputL# v] một lượng (1) else nếu <(chữ hoa) = [khác]> thì đặt [lList# v] thành [74] lặp lại cho đến khi <<(ký tự thứ (inputL#) của chuỗi (đầu vào)) = (ký tự thứ (lList#) của chuỗi (charList))> hoặc <(lList#) > (độ dài của (Danh sách ký tự))>> thay đổi [lList# v] một lượng (1) end nếu <không phải <(lList#) > (độ dài của (Danh sách ký tự))>> thì thêm phần tử [0] vào trong [eFull v] thêm phần tử (ký tự thứ (1) của chuỗi (lList#)) vào trong [eFull v] thêm phần tử (ký tự thứ (2) của chuỗi (lList#)) vào trong [eFull v] end thay đổi [inputL# v] một lượng (1) end end end nếu không thì thêm phần tử [0] vào trong [eFull v] thêm phần tử [9] vào trong [eFull v] thêm phần tử [8] vào trong [eFull v] thay đổi [inputL# v] một lượng (1) end end đặt [Được mã hóa v] thành (eFull :: list) thêm phần tử (Được mã hóa) vào trong [Return v]
Lịch Sử Của Dữ Liệu Đám Mây
Khi Nhóm Scratch phát hành phiên bản beta của dữ liệu đám mây, họ thiết lập nhật ký công khai cho các dự án có dữ liệu đám mây trong đó hiển thị thời gian dữ liệu đám mây được sửa đổi, ai đã sửa đổi dữ liệu, giá trị hiện tại của dữ liệu và loại hành động sửa đổi dữ liệu (chẳng hạn như del_var, đổi tên_var và set_var). Để vào nhật ký, chỉ cần nhấp vào nút dữ liệu đám mây ở cuối trang dự án. Sau đó, bạn sẽ thấy những người dùng đã thay đổi dữ liệu đám mây và thời điểm thay đổi. Nếu người dùng thay đổi các khối dữ liệu đám mây không nằm trong dự án của họ, dữ liệu đám mây sẽ không được lưu.
Khi phát hành Scratch 3.0, Nhóm Scratch đã vô tình đặt giới hạn thành tám biến đám mây cho mỗi dự án thay vì mười.[4] Vào ngày 9 tháng 1, sự cố này đã được khắc phục.
Chia sẻ phát sóng
Dữ liệu đám mây tương tự như Mesh. Cả hai tính năng đều cho phép chia sẻ các biến trên nhiều lần sử dụng đồng thời cùng một dự án. Bằng cách sử dụng các biến, dữ liệu đám mây cũng có thể mô phỏng phát sóng trên các dự án, như được hiển thị trong script bên dưới:
Khi bấm vào @greenFlag đặt [tin nhắn cũ v] thành (☁ tin nhắn) liên tục nếu <not <(tin nhắn cũ) = (☁ tin nhắn)>> thì phát tin (tin nhắn liên dự án v) đặt [tin nhắn cũ v] thành (☁ tin nhắn) khi nhận [tin nhắn liên dự án v] . . .
khi bấm phím [phím trắng v]::hat events //Tập lệnh này sẽ "phát tin" đặt [☁ tin nhắn v] thành [1]
Một phiên bản được tối ưu hóa sẽ thay thế
phát tin (tin nhắn liên dự án v)
cho
phát tin (☁ tin nhắn)
với khi nhận khối cho mỗi lần phát sóng có thể xảy ra.
Do hạn chế về dữ liệu đám mây, một dự án sử dụng phương pháp phát sóng này chỉ có thể sử dụng các chương trình phát sóng có số để làm tin nhắn.
Sử dụng hệ thập lục phân
![]() |
This article or section documents a feature not included in the current version of Scratch (3.0). It is only useful from a historical perspective. |
Các số thường gặp hàng ngày được gọi là số "cơ số 10" hoặc số "thập phân". Lý do là vì sử dụng 10 chữ số khác nhau (từ 0 đến 9). Tuy nhiên, hệ thập lục phân (thường được viết tắt là "hex") là một cách khác để biểu diễn số. Hệ này sử dụng 16 chữ số khác nhau. Vì không có 16 chữ số khi làm việc với hệ cơ số 10, nên "chữ số" a-f được sử dụng để biểu diễn các chữ số từ 10 đến 15. Điều này có nghĩa là "14" trong hệ cơ số 10 là "e" trong hệ cơ số 16. Cloud Data hỗ trợ hệ cơ số 16, nếu giá trị bắt đầu bằng "0x". Ví dụ: để đặt Biến Cloud thành "e" (14), bạn sẽ chạy khối
đặt [☁ biến v] thành [0xe]
Vì mỗi chữ số của số thập lục phân lưu trữ nhiều thông tin hơn so với số thập phân tương ứng, nên hệ này có thể giúp lưu trữ nhiều dữ liệu hơn trước khi đạt đến giới hạn ký tự (hữu ích nếu một dự án yêu cầu nhiều dung lượng lưu trữ trong Biến Cloud). Để mã hóa một số cơ số 10 thành số cơ số 16, người ta có thể chạy đoạn mã sau (giả sử rằng một số nguyên [số nguyên] đang được chuyển đổi):
định nghĩa chuyển đổi sang cơ số 16 (số) đặt [chữ số v] thành [0123456789abcdef] đặt [đầu ra v] thành [] đặt [tạm thời v] thành (số) lặp lại cho đến khi <(tạm thời) = (0)> đặt [đầu ra v] thành (kết hợp (đầu ra)(ký tự thứ (((đầu ra) chia lấy dư (16)) + (1)) của chuỗi (đầu ra))) //Số dư khi chia cho 16 đặt [tạm thời v] thành (([làm tròn xuống v] của (tạm thời)) / (16)) end //Sử dụng (đầu ra) //để có được kết quả từ điều này.
Để chuyển đổi ngược lại, chỉ cần chạy bất kỳ khối nào sau đây và tất cả chúng sẽ trả về giá trị cơ số 10 của khối:
((☁ Biến Hex) + (0)) ((☁ Biến Hex) - (0)) ((☁ Biến Hex) * (1)) ((☁ Biến Hex) / (1))
Scratch giữ nguyên chữ hoa của các chữ số thập lục phân, do đó nó sẽ nhớ nếu một biến được lưu là "0xe" hay "0xE" trên Đám mây. Để phát hiện chữ hoa, hãy đọc bài viết này. Do đó, có thể sử dụng cơ số 22 bằng cách sử dụng chữ hoa A-F và chữ thường a-f làm các chữ số riêng biệt, để tạo ra 22 chữ số: "0123456789abcdefABCDEF". Điều này sẽ không còn cho phép chuyển đổi đơn giản trở lại cơ số 10. Để chuyển đổi từ cơ số 22 sang cơ số 10, phải sử dụng các khối tùy chỉnh sau:
định nghĩa số chữ cái của (ký tự) trong (chuỗi) đặt [bộ đếm v] thành [1] đặt [đầu ra v] thành [0] //Đây sẽ là những gì xảy ra nếu nó không được tìm thấy lặp lại (độ dài của (chuỗi)) //Đối với mỗi ký tự nếu <<(ký tự) = (ký tự thứ (bộ đếm) của chuỗi (chuỗi))> và <trường hợp cảm biến :: grey>> thì //Nếu một kết quả phù hợp được tìm thấy đặt [đầu ra v] thành (bộ đếm) dừng lại [kịch bản v] end định nghĩa theo cơ số 10 (hex) đặt [giá trị vị trí v] thành [1] //Biểu thị giá trị của mỗi chữ số hex đặt [bộ đếm v] thành (độ dài của (hex)) //Biểu thị chữ số mà nó đang giải mã đặt [kết quả v] thành [] //Nó sẽ lưu trữ kết quả cuối cùng lặp lại (độ dài của (hex)) //Nó bắt đầu từ cuối và quay trở lại số chữ cái của (ký tự thứ (bộ đếm) của chuỗi (hex)) trong [0123456789abcdefABCDEF] đặt [kết quả v] thành (join (kết quả) ((đầu ra) * (giá trị vị trí))) thay đổi [bộ đếm v] một lượng (-1) //Do nó hoạt động ngược lại đặt [giá trị vị trí v] thành ((giá trị vị trí) * (16)) end //Đầu ra cơ số 10 được lưu trữ trong biến "kết quả"
Các vấn đề với Đám mây
Vào tháng 10 năm 2016, cơ sở hạ tầng đám mây bắt đầu thỉnh thoảng bị lỗi. [5] Do đó, nhiều chương trình tập trung vào chế độ nhiều người chơi đã không hoạt động chính xác. Điều này được cho là do số lượng người dùng đang sử dụng biến đám mây ngày càng tăng, với một số dự án gửi tới 30 yêu cầu cho mỗi biến đám mây mỗi giây. [6] Điều này thực sự "gây thư rác" cho máy chủ đám mây với tải mà cơ sở hạ tầng hiện tại không thể xử lý và tắt máy chủ.[7]
Tình trạng hiện tại
Để khắc phục tạm thời, các biến đám mây đã chuyển sang sử dụng phương pháp thăm dò khác, đáng tin cậy hơn nhưng chậm hơn đáng kể. Hơn nữa, thời gian khoảng thời gian thăm dò đã được tăng lên để ngăn chặn thư rác. Phương pháp mới này có hiệu quả, nhưng có thể khiến các biến đám mây "co lại" và đặt lại về giá trị trước đó sau khi đã thay đổi, cũng như khiến nhiều dự án nhiều người chơi ít "thời gian thực" hơn hoặc nói chung là phá vỡ hoàn toàn chúng.
Dài hạn
Tính đến tháng 8 năm 2017, một hệ thống dữ liệu đám mây mới đã ở giai đoạn beta.[8] Nó sử dụng websockets an toàn làm kênh giao tiếp. Để sử dụng hệ thống mới, người ta có thể thêm ?newcloud
vào cuối địa chỉ URL của một dự án. Hệ thống hiện là mặc định.[9]
Xem thêm
Tài nguyên tham khảo
- ↑ ar-post:1127806
- ↑ https://scratch.mit.edu/info/faq/#clouddata
- ↑ https://scratch.mit.edu/discuss/topic/331439/
- ↑ https://scratch.mit.edu/discuss/topic/331439/ "Số lượng biến đám mây tối đa được phép trong một dự án đã vô tình bị giới hạn thành tám thay vì mười. Giới hạn này hiện lại là 10 biến!"
- ↑ TheLogFather. (10/7/2016). "Đám mây hiện đang ngừng hoạt động...[title]" https://github.com/LLK/scratch-flash/issues/1211
- ↑ TheLogFather. (11/2/2016). "Điểm tôi muốn nói là về việc thay đổi cloudvar(s) ở mỗi lần chạy qua một vòng lặp, tức là khoảng 10-20 lần mỗi giây. Điều này thực sự 'gây thư rác' cho máy chủ đám mây." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-257654646
- ↑ điều này và một lần nữa.(27/10/2016). "Xin chào @TheLogFather, cơ sở hạ tầng Cloud Variables của chúng tôi không thể theo kịp lượng tải mà chúng tôi thường gặp phải từ trưa đến 6 giờ chiều theo giờ miền Đông Hoa Kỳ." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-256414214
- ↑ jwzimmer. (23/8/2017). "Công việc dữ liệu đám mây mới đã được triển khai dưới dạng khởi chạy mềm (có thể truy cập bằng các URL cụ thể) trên Production." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-324073462
- ↑ colbygk. (11/9/2017). "Clouddata hiện đã được di chuyển sang nền tảng dựa trên websockets mới và
?newcloud
không còn bắt buộc phải có một dự án sử dụng nó nữa." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-328386028