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. |
Bulut verisi, kullanıcıların değişkenleri "bulutta," ya da sunucuda saklayabilmelerini sağlayan bir özelliktir. Bulut değişkenlerinin önünde, normal değişkenlerden ayırt edilebilmeleri için "☁" (Scratch yazı tipindeki bir bulut simgesi) karakteri bulunur.[1] Bilgisayarı desteklemiyorsa farklı bir yazı tipi kullanabilir. Bulut veri günlükleri, projeyi oluşturan kişi tarafından kaldırılabilir. Örneğin, bir test varsa ve biri puanlarının gösterilmesini istemiyorsa ancak verileri günlüğe gidiyorsa, içerik oluşturucu günlüğü kaldırabilir. Her proje başına on adet bulut değişkeni sınırı vardır.
Güncellemeden önce yenileme gerektirmeden otomatik olarak güncellenirler. Güncelleme anında olmasa da, genellikle nispeten hızlıdır.
“ | Her iki Scratch'çinin de oldukça hızlı bir İnternet bağlantısı (DSL/Kablolu) varsa ve bilgisayarlarda/ağda kısıtlayıcı güvenlik duvarları yoksa, güncellemeler milisaniyeler içinde iletilmelidir. Ancak, birçok bilgisayarda güvenlik duvarı yazılımı çalışır ve güvenlik duvarı yazılımı 531 numaralı TCP bağlantı noktasına ve 843 numaralı TCP bağlantı noktasına giden bağlantıları engellerse, gecikme bir saniyeyi bulur. | ” |
– SSS Sayfası[2] |
Bulut verileri Yeni Scratch'çiler tarafından kullanılamaz. Scratch Ekibi, sisteme kaldıramayacağı kadar büyük bir yük yükleyebileceğinden, Scratch'e yeni başlayan kişilerin bulut değişkenlerini kötüye kullanmasını istemez ("Bulut ile ilgili sorunlar" bölümüne bakın).
Bulut değişkenleri, değişkenlerle ilişkili normal blokları kullanır. Tek farkı, değerin global olması ve Scratch Sitesinde görüntülenen projenin tüm kopyalarına yansıtılmasıdır. Bulut verileri, kodda ve bazı erken geliştirme sürümlerinde "persistent"(kalıcı) olarak adlandırılır.
Bulut Verileri sunucuda depolandığından, bulut değişkenleri Çevrimdışı Düzenleyici'de kullanılamaz.
İşlevsellik
Bulut değişkenleri, "güvenli" bir Websockets bağlantısı aracılığıyla korunur.
Bulut veri altyapısının aşırı yüklenmesini önlemek için, bir proje yürütülürken bulut verisinin güncellemeleri saniyede belirli bir sayı ile sınırlandırılır. Bir bulut değişkeninin güncellemeler arasında bekleme olmayan hızlı bir döngüde güncellemeye çalışmaktan her zaman kaçınılmalıdır. Genel olarak, bir bulut değişkeninin ne sıklıkta güncellendiğini dikkatlice düşünmeli ve herhangi bir güncellemeyi yalnızca ihtiyaç duyulduğu zaman, örneğin değerin gerçekten değiştiği zaman, ve değişkenin ne sıklıkta güncellendiğini sınırlamaya çalışmalıdır.
Değişken çok sık güncelleniyorsa, bulut veri sunucusu bağlantıyı geçici olarak kesecek ve değişken bir bekleme süresinden sonra bağlantı otomatik olarak yeniden açılana kadar güncellemeler bulut veri sunucularına gönderilmeyecektir.
Bulut verilerinin, proje başına en fazla on (10) bulut değişkeni sınırı vardır. 3.0'ın piyasaya sürülmesinden hemen sonra yanlışlıkla sekiz ile sınırlandırıldı.[3] Bulut değişkenleri yalnızca sayı içerebilirler (normal değişkenlerin aksine harf içeremezler). Ayrıca değişken başına 256 basamaklı bir karakter sınırı da uygulanmıştır (önceden 128 basamaktı). Onaltılık sayılar artık desteklenmemektedir.
Bulut Listesi Motorları
Bulut listesi motorları, listeleri bulut değişkenlerinde saklayan projeler veya kodlardır. Bunu yapmak için listeleri bir sayı olarak kodlarlar ve söz konusu sayıya bir bulut değişkeni ayarlarlar. Sonrasında aynı kod, bulut değişkenini tekrar bir listeye dönüştürebilir. Bu, dünyadaki her şeyin sayılarla temsil edilebileceği fikrine dayanarak geliştirilmiştir. Örneğin, alfabedeki tüm harfler, her harfe 1'den 29'ya kadar bir sayı atanarak sayı olarak saklanabilir. Bulut listesi motorlarına birkaç örnek burada ve burada bulunur. 11'lik taban yalnızca sayılar için kullanabilir ve kodu çözmek yerine 10'luk tabana dönüştürebilirsiniz, önce 11'lik tabana dönüştürmeniz gerekir.
Örnek Kullanımlar
- Yüksek skor
eğer <(yerel skor) > (☁ yüksek skor)> ise [☁ yüksek skor v] ' i (yerel skor) yap değilse [Yüksek puanı geçemedin!!] de end
- Kazanma/Kaybetme (skorlar sıfır hane ile bitmediği sürece)
eğer <(insan skoru) > (bilgisayar skoru)> ise [☁ kazandı v] ' i (((insan skoru) ' i ve [.] ile birleştir) ' i ve (bilgisayar skoru) ile birleştir) yap değilse [☁ kaybetti v] ' i (((insan skoru) ' i ve [.] ile birleştir) ' i ve (bilgisayar skoru) ile birleştir) yap end
- Araştırmalar
[Pepsi ya da Coca-Cola için oy verin! Favorin hangisi?] diye sor ve bekle eğer <(cevap) = [Pepsi]> ise [☁ pepsi oyları v] ' i (1) kadar değiştir değilse eğer <(cevap) = [Coca-Cola]> ise [☁ coca-cola oyları v] ' i (1) kadar değiştir değilse [Özür dileriz! Bu cevap tanınmadı.] de end end
- İnsan Konuşması ile ilgili olan projeler için konuşmanın diğer ucundan mesajı almak için kod çözülmesi
eğer <[kabul edilen kelimeler v] , (cevap) ' i içeriyor mu?> ise şifreleme çözme işlemi (cevap) :: custom [Oyuncu_1_sohbet v] ' i (sonuç) yap değilse [Bu kelime, kabul edilen kelimeler arasında olmadığı için gönderilemiyor!] de end
- Base-10 metnini kodlamak için örnek fonksiyon
Şifreleme (Girdi :: custom-arg) ' i tanımla [karakterListesi v] ' i [ abcdefghijklmnopqrstuvwxyz234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1.-!@#$%^&*()_+|:";'<>?/,` =] yap [girdiL# v] ' i [1] yap [Şifrelendi v] ' i [] yap [Dönüş v] ' in (all v) ' ini sil [eTam v] ' in (all v) ' ini sil ((Girdi :: custom-arg) ' in uzunluğu) defa tekrarla eğer <<((Girdi :: custom-arg) ' in (girdiL#) . harfi) = [ ]> değil> ise Durum Kontrolü (letter (girdiL#) of (Girdi :: custom-arg)) :: custom eğer <(harfDurumu) = [küçük harf]> ise [lListe# v] ' i [10] yap <<((Girdi :: custom-arg) ' in (girdiL#) . harfi) = ((karakterListesi) ' in (lListe#) . harfi)> veya <(lListe#) > [44]>> olana kadar tekrarla [lListe# v] ' i (1) kadar değiştir end eğer <<(lListe#) > [44]> değil> ise [0] ' i [eTam v] ' e ekle ((lListe#) ' in (1) . harfi) ' i [eTam v] ' e ekle ((lListe#) ' in (2) . harfi) ' i [eTam v] ' e ekle end [girdiL# v] ' i (1) kadar değiştir değilse eğer <(harfDurumu) = [büyük harf]> ise [lListe# v] ' i [45] yap <<((Girdi :: custom-arg) ' in (girdiL#) . harfi) = ((karakterListesi) ' in (lListe#) . harfi)> veya <(lListe#) > [73]>> olana kadar tekrarla [lListe# v] ' i (1) kadar değiştir end eğer <<(lListe#) > [73]> değil> ise [0] ' i [eFull v] ' e ekle ((lListe#) ' in (1) . harfi) ' i [eTam v] ' e ekle ((lListe#) ' in (2) . harfi) ' i [eTam v] ' e ekle end [girdiL# v] ' i (1) kadar değiştir değilse eğer <(harfDurumu) = [diğer]> ise [lListe# v] ' i [74] yap <<((Girdi :: custom-arg) ' in (girdiL#) . harfi) = ((karakterListesi) ' in (lListe#) . harfi)> veya <(lListe#) > ((karakterListesi) ' in uzunluğu)>> olana kadar tekrarla [lListe# v] ' i (1) kadar değiştir end eğer <<(lListe#) > ((karakterListesi) ' in uzunluğu)> değil> ise [0] ' i [eTam v] ' e ekle ((lListe#) ' in (1) . harfi) ' i [eTam v] ' e ekle ((lListe#) ' in (2) . harfi) ' i [eTam v] ' e ekle end [girdiL# v] ' i (1) kadar değiştir end end end değilse [0] ' i [eTam v] ' e ekle [9] ' i [eTam v] ' e ekle [8] ' i [eTam v] ' e ekle [girdiL# v] ' i (1) kadar değiştir end end [Şifrelendi v] ' i (eTam :: list) yap (Şifrelendi) ' i [Döndür v] ' e ekle
Bulut Veri Tarihçesi
Scratch Ekibi bulut verisinin beta sürümünü yayınladığında, bulut verilerinin değiştirildiği zamanı, verileri kimin değiştirdiğini, verilerin mevcut değerini ve veri değişikliğinin eylem türünü (del_var, rename_var ve set_var gibi) gösteren bulut verilerinin bulunduğu projeler için genel günlükler tutarlar. Günlüğe girmek için bir proje sayfasının altındaki bulut verileri düğmesine tıklamanız yeterlidir. Bu daha sonra size bulut verilerini kimlerin ne zaman değiştirdiğini gösterecektir. Kullanıcı kendi projesinde olmayan bulut veri bloklarını değiştirirse, bulut verileri kaydedilmez.
Scratch 3.0'ın piyasaya sürülmesinden sonra, Scratch Ekibi, sınırı yanlışlıkla proje başına on yerine sekiz bulut değişkeni olarak belirledi.[4] Bu, 9 Ocak'ta düzeltildi.
Haberleri Paylaşma
Bulut verileri Ağ ile benzerdir. Her iki özellik de aynı projenin birden çok eşzamanlı kullanımı arasında değişkenlerin paylaşılmasına izin verir. Değişkenleri kullanarak bulut verileri, aşağıdaki dizi'lerde gösterildiği gibi projeler arasında haberlerin simülasyonunu da yapabilir:
yeşil bayrak tıklandığında [eski haber v] ' i (☁ haber) yap sürekli tekrarla eğer <<(eski haber) = (☁ haber)> değil> ise [projeler arası mesaj v] haberini sal [eski haber v] ' i (☁ haber) yap end end [projeler arası mesaj v] haberini aldığımda . . .
[boşluk v] tuşuna basıldığında :: events // Bu komut dosyası "yayınlanacak" [☁ haber v] ' i [1] yap
Optimize edilmiş bir sürüm, olası her haber için "(☁ haber) haberini sal" yerine "[projeler arası mesaj v] haberini sal"ı Haberini Aldığımda bloğuyla değiştirecekti.
Bulut veri sınırlamaları nedeniyle, bu haber yöntemini kullanan bir proje, mesajlar için yalnızca sayı içeren haberleri kullanabilir.
Onaltılığı Kullanma
![]() |
Bu sayfa veya bölüm, Scratch'in (3.0) son sürümünde dahil edilmeyen bir özelliği belgeler. Bu sadece tarihi bir bakış açısından yararlıdır. |
Her gün karşılaşılan sayılara "10'luk sistem" veya "ondalık" sayılar denir. Bunun nedeni, 10 farklı basamak kullanılmasıdır (0'dan 9'a kadar). Bununla birlikte, onaltılık (İngilizce: hexadecimal) (genellikle "hex" olarak kısaltılır) sayıları temsil etmenin başka bir yoludur. Bu sistem 16 farklı rakam kullanır. 10'luk sistem ile çalışırken 16 rakam bulunmadığından, a-f "rakamları" 10 ila 15 arasındaki rakamları temsil etmek için kullanılır. Bu, 10'luk-sistem'deki "14"ün, 16'lık-sistem'deki "e" olduğu anlamına gelir. Değer "0x" ile başlıyorsa Bulut Verisi, 16'lık-sistem'i destekler. Örneğin, bir Bulut Değişkenini "e" (14) olarak ayarlamak için şu bloğu çalıştırırsınız:
[☁ Değişken v] ' i [0xe] yap
Onaltılık sayının her basamağı, ondalık eşdeğerinden daha fazla bilgi depoladığından, karakter sınırına ulaşmadan daha fazla verinin depolanmasına yardımcı olabilir (bir proje Bulut Değişkenlerinde çok fazla depolamaya ihtiyacı varsa kullanışlıdır). 10'luk sistem bir sayıyı 16'lık sistemdeki bir sayıya kodlamak için aşağıdaki betik çalıştırılabilir (tam sayının [integer] dönüştürüldüğü varsayılarak):
16'lık sisteme çevir (sayı :: custom-arg) ' i tanımla [rakamlar v] ' i [0123456789abcdef] yap [çıktı v] ' i [] yap [geçici v] ' i (sayı :: custom-arg) yap <(geçici) = (0)> olana kadar tekrarla [çıktı v] ' i ((çıktı) ' i ve ((rakamlar) ' in (((çıktı) mod (16)) + (1)) . harfi) ile birleştir) yap // 16 ile bölümünden kalan [geçici v] ' i (((geçici) ' in [aşağı yuvarla v] ' i) / (16)) yap end (çıktı) // sonuç almak için kullanın.
Geri dönüştürmek için, aşağıdaki bloklardan herhangi birini çalıştırmanız yeterlidir; hepsi bloğun 10'luk taban değerini döndürür:
((☁ HexDeğişkeni) + (0)) ((☁ HexDeğişkeni) - (0)) ((☁ HexDeğişkeni) * (1)) ((☁ HexDeğişkeni) / (1))
Scratch, onaltılık basamakların durumunu korur, böylece bir değişkenin bulutta "0xe" veya "0xE" olarak kaydedildiğini hatırlayacaktır. Harfin büyük mü küçük mü olduğunu tespit etmek için bu sayfayı okuyun. Bu nedenle, 22 basamağı oluşturmak için büyük A-F ve küçük a-f harfleri ayrı basamaklar olarak kullanılarak 22'lik-sistem kullanılabilir: "0123456789abcdefABCDEF". Bu artık 10'luk-sisteme basit bir dönüşüme izin vermeyecektir. 22'lik-sistem'den 10'lu sistem'e dönüştürmek için aşağıdaki özel bloklar kullanılmalıdır:
(dizi :: custom-arg) 'deki (karakter :: custom-arg) 'in harf sayısı ' i tanımla [sayaç v] ' i [1] yap [çıktı v] ' i [0] yap // Bulunamazsa böyle kalacak ((dizi :: custom-arg) ' in uzunluğu) defa tekrarla eğer <<(karakter :: custom-arg) = ((dizi :: custom-arg) ' in (sayaç) . harfi)> ve <büyük-küçük harf algılama :: grey>> ise [çıktı v] ' i (sayaç) yap durdur [bu betiği v] end // Bir eşleşme bulunursa end // Her karakter için onluk tabana (onaltılık :: custom-arg) ' i tanımla [basamak değeri v] ' i [1] yap // Her bir onaltılık basamağın ne kadar değeri olduğunu gösterir [sayaç v] ' i ((onaltılık :: custom-arg) ' in uzunluğu) yap // Deşifre ettiği basamağı temsil eder [sonuç v] ' i [] yap // Bu son çıktıyı saklayacaktır //Sondan başlar ve en başa kadar çalışır ((onaltılık) ' in uzunluğu) defa tekrarla [0123456789abcdefABCDEF] 'deki ((onaltılık) ' in (sayaç) . harfi) 'in harf sayısı :: custom [sonuç v] ' i ((sonuç) ' i ve ((çıktı) * (basamak değeri)) ile birleştir) yap [sayaç v] ' i (-1) kadar değiştir // Çünkü tersten çalışıyor [basamak değeri v] ' i ((basamak değeri) * (16)) yap end //Onluk taban çıktısı "sonuç" değişkeninde saklanır
Bulut ile ilgili sorunlar
2016'nın ekim ayında, bulut altyapısı ara sıra çökmeye başladı.[5] Sonuç olarak, çok oyunculu odaklı çoğu proje doğru bir şekilde çalışmadı. Bu durum, bulut verilerini kullanan giderek artan sayıdaki aktif kullanıcılara bağlandı; bazı projeler saniye başına her bir bulut değişkeni için 30'a kadar istek göndermekteydi.[6] Bu durum etkili bir şekilde bulut sunucusunu şu anki altyapıyla kaldırılamayacak düzeyde bir yükle "spamladı" ve bulut altyapısının kapanmasına neden oldu.[7]
Şu Anki Durum
Geçici bir çözüm olarak, bulut değişkenlerinde, daha güvenilir fakat daha yavaş, farklı bir sorgulama (polling) metoduna geçildi. Bununla birlikte, spamı önlemek için sorgulama aralığı süresi arttırıldı. Bu yeni metot çalışmaktadır, ancak bulut verilerin gecikmesine (tıpkı bir lastik bantla tutulmuş gibi) ve değiştikten sonra tekrar bir önceki değere sıfırlanmasına neden olabilir, aynı zamanda birçok çok oyunculu projenin genelde daha az "gerçek zamanlı" bir şekilde çalışmasına veya tamamiyle çalışmamasına neden olabilir.
Uzun Vadede
Ağustos 2017 itibariyle, yeni bir bulut veri sistemi beta sürümündeydi.[8] Bu sürüm, iletişim kanalı olarak güvenli websocketleri kullandı. Yeni sistemi kullanmak için, bir projenin URL adresinin sonuna ?newcloud
eklenebilirdi. Bu sistem şu anda varsayılandır.[9]
Ayrıca Bakınız
Kaynakça
- ↑ ar-post:1127806
- ↑ https://scratch.mit.edu/info/faq/#clouddata
- ↑ https://scratch.mit.edu/discuss/topic/331439/
- ↑ https://scratch.mit.edu/discuss/topic/331439/ "Bir projede izin verilen maksimum bulut değişkeni sayısı, yanlışlıkla on yerine sekiz ile sınırlandırılmıştır. Bu sınır şimdi tekrar 10 değişken!"
- ↑ TheLogFather. (7/10/2016). "Cloud currently down...[title]" ("Bulut verisi şu anda çalışmıyor... [başlık]") https://github.com/LLK/scratch-flash/issues/1211
- ↑ TheLogFather. (2/11/2016). "The point I'm trying to make is about changing the cloudvar(s) at every pass through a loop, i.e. something like 10-20x per second. This effectively 'spams' the cloud server." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-257654646
- ↑ thisandagain. (27/10/2016). "Hi @TheLogFather, our Cloud Variables infrastructure is simply unable to keep up with the load that we experience generally between noon and 6pm ET." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-256414214
- ↑ jwzimmer. (23/8/2017). "The new cloud data work has been deployed as a soft launch (accessible by specific URLs) on Production." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-324073462
- ↑ colbygk. (11/9/2017). "Clouddata has now been migrated to the new websockets based platform and
?newcloud
is no longer required to have a project use it." https://github.com/LLK/scratch-flash/issues/1211#issuecomment-328386028