How to behave on the forum:

Do we really have to explain this? If you’re a serious bad guy spammer, you’re not reading this in the first place. If you’re a Snap! user, you want this forum to be useful, and that means the staff can’t find that moderating the forum is taking all our time.

We expect that the vast majority of our users will be at least 12 years old. That’s not quite 13, which is the conventional age in the US at which kids are allowed to hear occasional four-letter words at the movies, but we hope that any 12-year-olds here are mature. So our intention is to moderate the forum at about the PG-13 level. That means we’re not going to delete posts because of one questionable word. We’re much more worried about bullying. Don’t bully. Don’t call people names. Assume good faith, as they say at Wikipedia.

Scratch has three or four people whose job it is to moderate their site. We’re poor; we have zero paid moderators. We therefore rely on users to flag inappropriate content, bearing in mind the PG-13 standard.

In order to maintain our community, moderators reserve the right to remove any content and any user account for any reason at any time. Moderators do not preview new posts in any way; the moderators and site operators take no responsibility for any content posted by the community.

You may not use this forum to advertise a commercial product or service.

We have a more formal Terms of Service and Privacy Policy.

Questions about Snap! itself:

Q: Why is everything so slow?

A: Here are a couple of things you can try.

(1) If your project is compute-intensive (cracking a cypher, finding the millionth prime number), go to the settings menu and check the box “turbo mode.” As an alternative to turbo mode, which speeds up all scripts at the expense of updating the display, you can speed up a particular script by enclosing it in the WARP block, a grey block found in the Control palette.

(2) Do you have a lot of scripts in your project? Do you really need them all?

(3) Are you using the “generic WHEN” block? Remember that that script is always running. Maybe a different hat block followed by FOREVER IF… would work better.

Q: Why is collision detection so slow?

A: If you’re using one of the TOUCHING blocks that refer to a particular color, see if you can rework your project to use the TOUCHING block that takes a sprite as input.
(If it really has to be a particular color, perhaps you can split its costume into two parts, one for that color and one for everything else, give the costumes to two different sprites, and use the sprite nesting feature to make the two travel together. (See “How do I use sprite nesting?”))

Q: How can I use a picture from the Web as a costume or background?

A: Save the picture on your desktop. (Right-click on it, and choose “save image.” The exact name will depend on which browser you’re using.) In Snap!, in the sprite corral (the collection of sprite thumbnails in the bottom right corner of the window), select the sprite you want to have the new costume, or select the stage (the leftmost thing in the sprite corral) to set the background, or click the arrow button above the corral to make a new sprite. Then you can just drag the picture from your desktop onto the Snap! window. Alternatively, in the File menu, choose “Import…” and find the file in the system file browser that appears.

Q: How can I take a picture of the stage?

A: Right-click on the stage. One of the choices is “pic…” Depending on your browser, this will either open the picture in a new browser tab, which you can then save, or directly save the picture to your downloads folder.

Q: Can I export a costume?

A: Yes. Select (in the sprite corral) the sprite that owns the costume, then go to the Costumes tab (above the scripting area), then right-click on the picture of the costume you want and choose “Export.”

Q: How do I change the rotation center of a sprite?

A: The rotation center actually belongs to the costume, not to the sprite. So, go to the Costumes tab. Right-click on the costume whose center you want to change, and choose “Edit.” In the paint editor, find the two rows of five buttons that determine what tool you’re using. You want the one at the right of the top row, that looks like a plus sign with a circle in it. Then click where you want the new center to be, or you can click and drag if that’s easier. Don’t forget to click OK when you’re done.

Q: Why can’t I make a vector-based costume?

A: Depending on what browser you’re using, you can probably import a vector picture file (.svg) as a costume or background. Your browser may rasterize it when you import it, or may keep it in vector form. This is beyond our control.

What you can’t (yet) do is edit an imported vector-based costume in the Snap! PaintEditor. Do your editing in your favorite vector graphics program before you load the picture into Snap!.

Q: How do I export a sprite?

A: Right-click (control-click) on the sprite’s icon in the sprite corral. One of the menu options will be “export.”

Q: How do I export a custom block?

A: From the File menu, choose “Export blocks…” This will present a list of custom blocks with a checkbox next to each. Check the ones you want to export. (Make sure that if you select a block, you also select any other custom blocks that that one calls.) Initially, all of the boxes are checked. If you right-click on the list of blocks, you can check or uncheck all the boxes. When you’re happy with your selection, say OK. An XML file containing those block definitions will, depending on your browser, either be saved to your downloads folder or appear in a new browser tab, which you can then save with your browser’s Save command.

Q: Why doesn’t the URL block work?

A: Probably you are trying to use a site that isn’t configured to allow Cross Origin Resource Sharing (CORS) – letting a web page (such as Snap!) read their site. You can probably fix this using something called a “CORS Proxy,” which is a site that helps you get around this problem by forwarding the information from the site you want back to you. Let’s say you’ve found a CORS proxy site called cors.org. You would then say

URL [cors.org/http://the.site.I.really.want]

How do you find a CORS proxy? Use a search engine. They come and go; that’s why we’re not recommending a particular one here.

If you are at a school, it’s possible that the school’s firewall software disables CORS proxying, but some of the sites are able to get around that problem, too.

Q: Why don’t you add […] feature?

A: The design philosophy of Snap! is to provide a small set of really versatile programming capabilities that make it possible for users to develop the features they want. We don’t want a gazillion primitive blocks in Snap!. So, we give you the ability to create your own procedures (blocks); the ability to use blocks, scripts, lists, sprites, etc., as data in your project – put them in a list, for example; and the ability to include Javascript code in your custom blocks, so anything your browser can do, you can add as a feature in Snap!.

If you have a useful collection of blocks that you think we should include as a library, email us.

Q: How come Scratch can […] but Snap! can’t?

A: Although Snap! was deeply inspired by Scratch, and the earlier version BYOB was an extension to the Scratch 1.4 source code, it is not our goal to be exactly like Scratch.

Some Scratch features are super useful in building a large category of projects; cloud variables are an example. Sooner or later, Snap! will have something equivalent in power, although not necessarily using the same design. Other Scratch features are fun for a smaller category of projects; motion detection using your computer’s camera is an example. We might get around to that someday, but it’s not high on our priority list.

In some cases, you can build missing Scratch features as Snap! custom blocks.

Q: Isn’t it against the Scratch Terms of Service to modify Gobo as the basis for the Alonzo mascot?

A: We are friends of the Scratch Team. We have their permission. Don’t worry.

Q: Why is Alonzo called that?

A: He’s named after Alonzo Church, one of the two founders of computer science, along with Alan Turing. He invented the idea of using functions as data, which is one of the central features of Snap!.

Q: Why does Alonzo have that weird thing on his head?

A: He uses a lot of hair gel to shape his hair that way. :slight_smile: It’s the Greek letter lambda (λ), which is the symbol for a function in Alonzo Church’s lambda calculus, the starting point for functional programming.

Q: I have this great idea for a disruptive crowdsourcing app that will make a billion dollars. May I use Snap! to implement it?

A: It depends. Snap! is licensed under the GNU Affero General Public License (AGPL). This license is designed to keep the software free, not just in the sense of not costing money, but in the sense of letting you do what you want with it. But, to make sure you can’t stop other people from doing things with it, the AGPL requires that if you build a program that includes Snap!, you have to make your program available under the terms of the AGPL. In particular, you have to let anyone have access to your source code.

The above is not a complete lawyerly description of the AGPL’s terms. If what you want to do is create great software and give it to the world, you can certainly do that. If you want to do something else and can’t figure out whether it’s okay, ask us.

Q: Why does Snap! let me drop a round reporter block into a hexagonal slot? Isn’t that a bug?

A: We have two answers to this. The most specific answer is that once users are able to create their own blocks, we no longer know for sure what values your blocks might report. Maybe your round block actually reports only True and False, or maybe with a certain set of input values it reports only True and False. So we can’t prevent all domain errors in advance.

The second answer is that we treat type indications (including round vs. hexagonal blocks, but also things like number vs. text vs. list inputs) as documentation: as hints to the user of how a block is expected to behave. They are not straitjackets. We don’t believe any language can prevent errors. We just try to make them less likely through hints.