scratchfoundation / scratch-gui

Graphical User Interface for creating and running Scratch 3.0 projects.
https://scratchfoundation.github.io/scratch-gui/develop/
BSD 3-Clause "New" or "Revised" License
4.43k stars 3.51k forks source link

Palette - implement new "top" category #603

Closed thisandagain closed 6 years ago

thisandagain commented 7 years ago

Implement new category as per discussions with the resources team. Pulling from our research with microworlds and our new vertical category menu, the idea is to pull a small number (<= 12) of commonly used blocks into a new block category at the top of the block palette list. These blocks would be duplicates (they would exist in the this category and their existing "home" category.

Strawcat Process

bates64 commented 7 years ago

Perhaps this should rather be a "favourites" category for blocks used commonly by each user? I have a feeling different kinds of users use different areas of blocks..

thisandagain commented 7 years ago

We considered that but decided against it given that it could make documentation and many classroom use cases difficult (having every student with a different menu would be difficult / untenable).

griffpatch commented 7 years ago

I guess you'd have to not feature variables in the top category of used blocks as these would bloat the category? I assume many first projects would not use variables / lists anyhow.

On 10 August 2017 at 13:15, Andrew Sliwinski notifications@github.com wrote:

We considered that but decided against it given that it could make documentation and many classroom use cases difficult (having every student with a different menu would be difficult / untenable).

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/LLK/scratch-gui/issues/603#issuecomment-321534391, or mute the thread https://github.com/notifications/unsubscribe-auth/AGbNvl1zqBn-CnDjfDB9jtPpLPjcweTpks5sWvRrgaJpZM4Oy0Sz .

mrjacobbloom commented 7 years ago

The backpack can be used to store favorite blocks (once it's implemented), so a star/pin option in the palette seems redundant

thisandagain commented 7 years ago

@ericrosenbaum @ntlrsk Here are the top 50 block usage counts for all shared projects from the past 30 days. Many thanks to @mewtaylor for building the infrastructure that makes running a report like this so easy. 😄

Block Count
whengreenflag 342147
doforever 242981
wait:elapsed:from 222323
gotox:y 190220
show 162577
hide 159287
looklike 155420
dorepeat 145242
doif 145030
setvar:to 128654
doplaysoundandwait 125457
whenireceive 123825
broadcast 121938
playsound 116842
nextcostume 114698
forward 110551
changevar:by 110111
say:duration:elapsed:from 109368
readvariable 105614
whenkeypressed 104759
startscene 102427
touching 100076
heading 94968
randomfrom:to 85943
changegraphiceffect:by 83638
changeyposby 82147
stopscripts 82008
setsizeto 79945
turnright 78759
glidesecs:tox:y:elapsed:from 77041
keypressed 72083
changexposby 68175
doifelse 67499
cometofront 65954
dountil 62767
whenclicked 62692
gotospriteormouse 54632
setgraphiceffect:to 54536
createcloneof 53965
whencloned 51415
xpos 45048
ypos 44180
touchingcolor 43258
procdef 43153
deleteclone 42956
turnleft 41141
not 39661
call 39045
changesizeby 38952
ntlrsk commented 7 years ago

This is so interesting and helpful to see, @thisandagain and thanks to @mewtaylor ! As a follow-up question, I wonder about usage counts for projects that aren't remixes (to be more certain that the blocks were dragged out from the palette). Do you think that would differ (e.g., use of setvar to)?

thisandagain commented 7 years ago

Good question. It does shift, but in some unexpected ways (setvar:to actually moves up). Here is the same query but with all remixes removed:

Block Count
whengreenflag 230764
doforever 156745
wait:elapsed:from 143345
gotox:y 115339
show 97243
doif 96586
hide 95688
looklike 85183
setvar:to 82357
dorepeat 82312
forward 81529
say:duration:elapsed:from 79101
playsound 74043
whenkeypressed 70449
changevar:by 69965
whenireceive 68861
broadcast 67952
touching 67922
readvariable 62627
doplaysoundandwait 62448
nextcostume 61676
startscene 61359
heading 55431
randomfrom:to 49279
stopscripts 48694
changeyposby 47978
turnright 47597
changegraphiceffect:by 45572
keypressed 44206
whenclicked 42630
glidesecs:tox:y:elapsed:from 42162
changexposby 39958
setsizeto 39688
gotospriteormouse 35968
doifelse 34335
dountil 31445
bounceoffedge 30075
touchingcolor 27763
cometofront 27749
createcloneof 25773
whencloned 23703
xpos 22272
ypos 22111
setgraphiceffect:to 21182
turnleft 21178
doask 20895
say 20529
deleteclone 19014
procdef 18407
paulkaplan commented 7 years ago

I spent a few minutes playing with this and noticed that some blocks seem to be related to others in a way that quickly unravels (thread-sweater-wise). For example, to include "if" you need to include some way of creating booleans (and vice-versa). Here is an example of self-contained grouping, but note it is missing all booleans.

image

ericrosenbaum commented 7 years ago

I did a quick look through the blocks used in the activity cards, and I thought a bit about keeping things simple, and came up with this list:

When green flag clicked When sprite clicked When key pressed Say Play sound until done Change color effect Repeat

These blocks all work for all sprites: sprites will be guaranteed to have at least one sound, and there's no need to have multiple costumes. They're conceptually simple: no reporters, no booleans, no x/y coordinates, etc. And they do not change the state of the sprite, since there are no moves, turns, or size changes (graphics effect are cleared by the stop button), so you don't have the perennial challenge of "re-initializing" (getting things to go back to where they were at the start). But maybe this should include "move" and "turn" :D.

thisandagain commented 7 years ago

@paulkaplan @ericrosenbaum I'm really liking these lists! Here is a bit of a hybrid proposal between the two as I really think move and turn are essential. Start with @paulkaplan 's list and make the following modifications:

thisandagain commented 7 years ago

/cc @ntlrsk @morantsur

ericrosenbaum commented 7 years ago

The set resulting from @thisandagain's suggestion looks like this:

V1

top-blocks-v1

This feels a bit long to me. Here's a slightly reduced version (without "when this sprite clicked" and "wait"):

V2

top-blocks-v2

And a more minimal version:

V3

top-blocks-v3

Thoughts @thisandagain @carljbowman @ntlrsk @morantsur et al?

bates64 commented 7 years ago

Honestly, I think v1 is the best here - the wait secs block is going to be used a lot regardless of project type, and v3 doesn't provide any motion blocks at all.

towerofnix commented 7 years ago

"Repeat" also isn't as useful/interesting without "wait"; for example "repeat (10): change color effect by (10), wait (1) secs". Wait is also helpful in showing blocks run in a specific order (for example, "change color effect by 10"; "change fisheye effect by 10"; and "change swirl effect by 10", all in a stack, with "wait" blocks between them).

maxiostro commented 7 years ago

Replace it for a Favourite Blocks category

thisandagain commented 7 years ago

Let's proceed with v1 for now.

ntlrsk commented 7 years ago

I think that seems good. I think if on edge bounce may be hard to understand with unless shown how to use it in a forever loop (or large number of repeats), so will be good to keep an eye out for that.

ericrosenbaum commented 6 years ago

I'm closing this because we have now added it, tried it out with kids, and decided to remove it. :)