From Test-Scratch-Wiki

SandCastleIcon.png 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.
Scratch 3.0'da bir bulut değişkeni oluşturma süreci, normal bir değişken oluşturmakla hemen hemen aynıdır; tek fark "bulut değişkeni" kutusunun işaretlenmesidir.
Bir projede ilk bulut değişkenini oluşturduktan sonra görünen not.

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.

Bulut simgesi.png

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. Bulut verisi günlüğü.png

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 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

Archive.png 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

  1. ar-post:1127806
  2. https://scratch.mit.edu/info/faq/#clouddata
  3. https://scratch.mit.edu/discuss/topic/331439/
  4. 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!"
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.