Git Product home page Git Product logo

community's Introduction


Scrimba logo

Documentation    FAQ    Community    Terms of Sevice


The easiest way to teach and learn code.
Watch hundreds of interactive screencasts.



Follow us on: Twitter - Say hi to us at: [email protected]

Welcome to the community page for Scrimba! This is where you can give us feedback, find answers to questions and keep yourself updated on how we plan to build out the site. Here's a list of the contents of this repository.

Callout for instructors - Apply here!

We're looking for people we can pay to create full-length Scrimba courses. If you're interested, please fill out this form.

You can also create content on Scrimba on your own initiative. Check out this guide for more information.

"What does this button do?" - Documentation

Check our well-explained documentation if you need explanations of how Scrimba works. In it you'll learn how to record and edit screencasts and how include external JavaScript libraries. So take a quick look on the documentation and you will know all Scrimba's functionality from head to tail.

Frequently Asked Questions - FAQ

There's no reason to scratch your head, if you can't find the answer you're looking for in the Frequently Asked Questions section, please ask us in our support channel on our Discord server.

Issues - Issues Page

Do you want to have a say in which feature we build next? To follow and affect our product development, simply head over to the issues of this repository, as we're using these to organize our product development process. Feel free to raise issues if you find bugs or have feature requests.

Feature Request - Feature Requests

Feature requests are organised as issues, and listed after the number of votes here. To vote for a feature, give it a 👍. Have a nice idea for Scrimba? Create a new feature request. The Scrimba team will give your request a feature-request label as soon as possible.

Splat! - Bug Report

To submit a bug report, create an issue. The Scrimba team will give it the label bug as soon as possible. Please check the bug reports before submitting one, in case it's already been submitted.

We try to keep our terms as simple as possible. If you have any questions about them, please send us an email ([email protected]) or ask in the Discord Chat

Contact us

If you want to contact us, please write in our support channel on our Discord server Alternatively, send us an email ([email protected]).

This document describes how we handle personal data at Scrimba.com. It also contains contact information in case you want us to delete your data. It’s written with clarity in mind, so it should be easy to follow.

community's People

Contributors

aalemayhu avatar bobziroll avatar bookercodes avatar brunodevel avatar cabralski avatar gitter-badger avatar maelingmurphy avatar moreati avatar perborgen avatar pistus avatar rokublac avatar sdevore avatar shantdashjian avatar somebee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

community's Issues

Improve UI/UX of 'Forked Video' dialog

Just a couple of minor points:

  • Dialog is closed by clicking outside of it. This is different than the settings dialog which requires clicking a close button. You'll drive your users' crazy if you don't standardize this throughout the application.

  • I thought I was being recorded on first load because of the red recording symbol which is usually an indicator that recording is currently occurring.

image

Create your own template

it would be great to be able to create a template. Or maybe more simply, if it was possible to fork a cast from another, is it even possible? just so you don't always have to re-configure all the scripts

Subtitles on screencasts

It would be great if subtitle support is included for people who find videos a bit fast to follow or those who may have hearing problems. It could be in English for starters, multi language support can be added later. I know there are people who can even translate for free.

Back and forth between run and focus on code editor

When frequently playing a cast, but also putting the cursor in the editor, we loose the focus. That's logic but there's a tendency to try typing to change a few more bits and you then realize you have to click back in the console to give it back the focus so you can actually start typing again.
It'd be great to give the console the focus straight after clicking "Run" so you could potentially resume typing whenever you want.

Videos are broken in Edge.

Hey, great work! This is something that I'll definitely be using in the near future. Unfortunately it's broken in Edge, videos immediately get stuck on "loading" and nothing ever happens.

Errors in script prevents from using Scrimba

Hi,

While creating a cast, I ran a script which contained errors which led the app not be unable to react afterwards. I had to delete the cast and start over.
The cast reference is 132.

Let me know if you need anything else.

Thanks!

Discover more videos/users

Create a way to discover more videos/users. From the homepage, there are a limited number of videos. Most recent has videos 2/3 days old, surely there are newer ones.

One request.

I need NativeScript and Socket.IO lessons. Will you think about adding?

Deleting cast while viewing it leaves the deleted cast onscreen

Clicking the "edit" icon next to the Cast title below the code editor presents a dialog which provides for deleting the Cast. Clicking delete works, but UX is confusing because it doesn't appear to work until we navigate out.

Suggest kicking the user out to the dashboard.

Rename 'Build Project' and 'Save'

I think 'Build Project' should be renamed to 'Save' and the keyboard shortcut for it updated to Ctrl+S (or similar). The current 'Save' button should be renamed to 'Fork'.

My gut reaction on first use was to hit Ctrl+S when I wanted to see my changes take effect. The rest of the suggested changes stem from this desire.

setSelectionRange bug for number inputs

If you render a number input and select the value, the embedded web view will become unresponsive. I believe there's some code accessing setSelectionRange on the input, but that method can't be used on a number input.

Uncaught DOMException: Failed to execute 'setSelectionRange' on 'HTMLInputElement': The input element's type ('number') does not support selection.

Improve UI/UX of settings dialog

The settings dialog currently looks like this on first load:
image

A few things stand out as issues:

  • The overall UI feels cramped & overly busy.

  • The <select> is initially blank, but also offers a 'None' option in the dropdown.

  • The 'Add' button gets darker when hovering. Usually things grow in visual priority, rather than lessen, when hovered.

  • Dialog does not have usual methods of closing dialog (click outside of it, X in top corner).

  • Bug: Positioned incorrectly in scrolled pages #22

Also...

Audio lost

After recording a video, I recorded a second time for an additional couple seconds to clarify on some things. This apparently deleted the entire audio for the first ~4 mins of the video and only kept the last bit of audio. All visuals are intact

Rerunning a project after making changes is not intuitive.

The rerun project button is not visually prominent. I wanted to rerun the project after making some changes. I felt encouraged to save (fork) or resume playback, overwriting my edits. Make it more intuitive to rerun the project after making an edit.

Settings modal position is off

On pages where you can scroll and open a video in a modal, the associated settings modal seems to be positioned relative to the initial 'unscrolled' viewport. On longer pages, this can cause the modal to be completely hidden to the user.

Tested on Chromium 56 on Ubuntu 16.04. No JS errors are spotted in console while the bug happens.

screenshot_20170308_152313

Adding libraries to a cast?

Would be super nice to be able to add some libraries to a given Javascript cast (like an SDK, an npm package or so), to demo some advanced use case.

Resizing Window Breaks Editor?

Not a priority. Just noticed this and thought I'd report it. I'm not sure what happened but it was something like this:

Resized the editor, ran the code, resized again. Couldn't click on file tabs. Refreshed, editor won't display anything. Here is my chrome console logs if it helps at all (usually not, lol).

initing space
microphone.imba:24 microphone initialize!
SpaceView.imba:267 SpaceView.mount!
player.imba:232 Uncaught (in promise) TypeError: y.insertAdjacentHTML is not a function
    at h.applyMutations (player.imba:232)
    at h.apply (player.imba:385)
    at Object.t.apply (SimulatorView.imba:321)
    at c.apply (SimulatorWidget.imba:245)
    at B.onstreamstep (space.imba:391)
    at s.step (stream.imba:82)
    at s.syncToEnd (stream.imba:106)
    at B.syncToEnd (space.imba:310)
    at space.imba:245
Store.imba:201 put
loader.js:1024 Duplicate definition of module 'vscode-languageserver-types/main'
ModuleManager.defineModule @ loader.js:1024
loader.js:1024 Duplicate definition of module 'vscode-languageserver-types'
ModuleManager.defineModule @ loader.js:1024
pointer-rec-off.png Failed to load resource: the server responded with a status of 404 (Not Found)
SpacePlayer.imba:24 dispose previous space!!
socket.imba:64 socket not ready to send
u.send @ socket.imba:64
/amark:1 WebSocket connection to 'wss://scrimba.com/socket/cast-1666?did=f49e5738-fdb2-420e-a55d-e62f0ad78eb5…jgwNDgsImV4cCI6MTU3ODUyODA0OH0.5VSjPZbIaYywXsQYTqsey4F7L3U0n_5FMQND41hHyMo' failed: WebSocket is closed before the connection is established.
/assets/cached-client-3df79f2e792086d0d497.js:43 Uncaught (in promise) TypeError: Cannot read property 'dispose' of undefined
    at Object.t.dispose (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at B.dispose (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.t.dataDidSet (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at Object.t.setData (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at Object.t.unmount (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.listener (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at r (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.emit (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught (in promise) TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.listener (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at r (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.emit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at i.decr (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at i.decr (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at /assets/cached-client-3df79f2e792086d0d497.js:43
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:43 initing space
/assets/cached-client-3df79f2e792086d0d497.js:29 preregistered!!! space cast-1666
/assets/cached-client-3df79f2e792086d0d497.js:43 SpaceView.mount!
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught (in promise) TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.listener (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at r (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.emit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at i.decr (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at i.decr (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at /assets/cached-client-3df79f2e792086d0d497.js:43
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:43 Uncaught (in promise) TypeError: y.insertAdjacentHTML is not a function
    at h.applyMutations (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at h.apply (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at Object.t.apply (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at c.apply (/assets/cached-client-3df79f2e792086d0d497.js:43)
    at B.onstreamstep (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at s.step (/assets/cached-client-3df79f2e792086d0d497.js:1)
    at s.syncToEnd (/assets/cached-client-3df79f2e792086d0d497.js:1)
    at B.syncToEnd (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at /assets/cached-client-3df79f2e792086d0d497.js:29
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:29 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t.Imba.TagManagerClass.refresh (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at Object.Imba.commit (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.after (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at n.tick (/assets/cached-client-3df79f2e792086d0d497.js:29)
    at t._ticker (/assets/cached-client-3df79f2e792086d0d497.js:29)
/assets/cached-client-3df79f2e792086d0d497.js:43 window resized
2site.imba:86 window resized
manager.imba?eb3a:67 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (manager.imba?eb3a:67)
    at t.Imba.TagManagerClass.refresh (manager.imba?eb3a:38)
    at Object.Imba.commit (scheduler.imba?cc62:71)
    at n.after (scheduler.imba?cc62:65)
    at n.tick (scheduler.imba?cc62:51)
    at t._ticker (scheduler.imba?cc62:27)
Imba.TagManagerClass.tryUnmount @ manager.imba?eb3a:67
Imba.TagManagerClass.refresh @ manager.imba?eb3a:38
Imba.commit @ scheduler.imba?cc62:71
n.after @ scheduler.imba?cc62:65
n.tick @ scheduler.imba?cc62:51
t._ticker @ scheduler.imba?cc62:27
opbeat.min.js:2 XHR finished loading: POST "https://intake.opbeat.com/api/v1/organizations/3b189480b4804f9fad3e859de5061e42/apps/8f96656864/client-side/errors/".
(anonymous) @ opbeat.min.js:2
I @ opbeat.min.js:1
$ @ opbeat.min.js:1
i @ opbeat.min.js:2
r @ opbeat.min.js:2
sendError @ opbeat.min.js:2
r.sendError @ opbeat.min.js:1
(anonymous) @ opbeat.min.js:1
j @ opbeat.min.js:1
L @ opbeat.min.js:1
F @ opbeat.min.js:1
d @ opbeat.min.js:1
manager.imba?eb3a:67 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (manager.imba?eb3a:67)
    at t.Imba.TagManagerClass.refresh (manager.imba?eb3a:38)
    at Object.Imba.commit (scheduler.imba?cc62:71)
    at n.after (scheduler.imba?cc62:65)
    at n.tick (scheduler.imba?cc62:51)
    at t._ticker (scheduler.imba?cc62:27)
Imba.TagManagerClass.tryUnmount @ manager.imba?eb3a:67
Imba.TagManagerClass.refresh @ manager.imba?eb3a:38
Imba.commit @ scheduler.imba?cc62:71
n.after @ scheduler.imba?cc62:65
n.tick @ scheduler.imba?cc62:51
t._ticker @ scheduler.imba?cc62:27
opbeat.min.js:2 XHR finished loading: POST "https://intake.opbeat.com/api/v1/organizations/3b189480b4804f9fad3e859de5061e42/apps/8f96656864/client-side/errors/".
(anonymous) @ opbeat.min.js:2
I @ opbeat.min.js:1
$ @ opbeat.min.js:1
i @ opbeat.min.js:2
r @ opbeat.min.js:2
sendError @ opbeat.min.js:2
r.sendError @ opbeat.min.js:1
(anonymous) @ opbeat.min.js:1
j @ opbeat.min.js:1
L @ opbeat.min.js:1
F @ opbeat.min.js:1
d @ opbeat.min.js:1
manager.imba?eb3a:67 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (manager.imba?eb3a:67)
    at t.Imba.TagManagerClass.refresh (manager.imba?eb3a:38)
    at Object.Imba.commit (scheduler.imba?cc62:71)
    at n.after (scheduler.imba?cc62:65)
    at n.tick (scheduler.imba?cc62:51)
    at t._ticker (scheduler.imba?cc62:27)
Imba.TagManagerClass.tryUnmount @ manager.imba?eb3a:67
Imba.TagManagerClass.refresh @ manager.imba?eb3a:38
Imba.commit @ scheduler.imba?cc62:71
n.after @ scheduler.imba?cc62:65
n.tick @ scheduler.imba?cc62:51
t._ticker @ scheduler.imba?cc62:27
SimulatorView.imba:112 Uncaught (in promise) TypeError: Cannot read property 'location' of null
    at Object.t.reload (SimulatorView.imba:112)
    at Object.t.run (SimulatorView.imba:229)
    at SimulatorWidget.imba:141
    at SimulatorWidget.imba:113
t.reload @ SimulatorView.imba:112
t.run @ SimulatorView.imba:229
(anonymous) @ SimulatorWidget.imba:141
(anonymous) @ SimulatorWidget.imba:113
opbeat.min.js:2 XHR finished loading: POST "https://intake.opbeat.com/api/v1/organizations/3b189480b4804f9fad3e859de5061e42/apps/8f96656864/client-side/errors/".
(anonymous) @ opbeat.min.js:2
I @ opbeat.min.js:1
$ @ opbeat.min.js:1
i @ opbeat.min.js:2
r @ opbeat.min.js:2
sendError @ opbeat.min.js:2
r.sendError @ opbeat.min.js:1
(anonymous) @ opbeat.min.js:1
j @ opbeat.min.js:1
L @ opbeat.min.js:1
F @ opbeat.min.js:1
d @ opbeat.min.js:1
manager.imba?eb3a:67 Uncaught TypeError: Cannot read property '_dom' of null
    at t.Imba.TagManagerClass.tryUnmount (manager.imba?eb3a:67)
    at t.Imba.TagManagerClass.refresh (manager.imba?eb3a:38)
    at Object.Imba.commit (scheduler.imba?cc62:71)
    at n.after (scheduler.imba?cc62:65)
    at n.tick (scheduler.imba?cc62:51)
    at t._ticker (scheduler.imba?cc62:27)
Imba.TagManagerClass.tryUnmount @ manager.imba?eb3a:67
Imba.TagManagerClass.refresh @ manager.imba?eb3a:38
Imba.commit @ scheduler.imba?cc62:71
n.after @ scheduler.imba?cc62:65
n.tick @ scheduler.imba?cc62:51
t._ticker @ scheduler.imba?cc62:27
opbeat.min.js:2 XHR finished loading: POST "https://intake.opbeat.com/api/v1/organizations/3b189480b4804f9fad3e859de5061e42/apps/8f96656864/client-side/errors/".

Videos plays without audio

When I first tried scrimba the visuals played but the audio did not. Retrying in an Incognito window (hence with all extensions disabled) allowed the audio to play.

Briefly experimenting, I believe the culprit was Disable HTML5 Autoplay. FTR the other active extensions were uBlock Origin, Push Bullet, d3Coder, HTTPS Everywhere. Browser was Chromium 56.0.2924.76 on Ubuntu 16.10. It's probably unrelated, but the following was spamming the developer console at a high rate while the video was open

Blocked script execution in 'https://scrimba.com/cast/cast-6.preview' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.

Please feel free to e.g. mark this WONTFIX, this is (probably) an extremely rare edge case and I am fine with that. I'm just documenting it here for completeness and any future fellow weirdos searching for the symptoms.

module.exports behaviour unclear

I've found only the exports.x = syntax seems to work, but not the module.exports = { x } syntax.

It'd be great to get a fix / explanation of this behaviour.

Associate modified with point-in-time of video

I think it would make a lot of sense to be able to make some changes to code, save the code, tag the saved code to a point-in-time on the video timeline, and be able to skip between your code snippets. I want to be able to hack on something for a bit, save, watch more video, and then build my previous work into something more without losing it.

Previous and next buttons (if screencast is in a playlist)

We should reduce the user friction for navigating between the screencasts in any given playlist by offering simple navigation rather than having to look through the whole list.

Probably not the worst idea to actually have the whole list visible as well, with the currently active screencast visually delineated.

Private video metadata accessible

If I set a video to private and direct-link to it, the video itself doesn't load but all of the metadata is visible (title, description, etc). This is potentially sensitive and should probably be hidden if set to private

Full filesystem CRUD functionality

piggybacking on #33

Should be able to add and delete folders as well as files. I want to use Scrimba for a full set of tutorials that use real-world architectures, so the lack of folders is a dealbreaker.

Support for <Canvas/>

I'm the author of gl-react and I want to use this awesome service to do some tutorial for the library users. Basically to do another format of the gl-react cookbook https://gl-react-cookbook.surge.sh/ – more interactive & with audio explanation.

The library uses WebGL, rendered in a <canvas/>, however it does not seem to work. When I record something, I can see that my canvas is working, but after a replay, it does not work, it stays blank. Only a CMD+B make it run.

I was imagining maybe the "build" event would get replayed on the viewer but apparently it's not working like that. Not sure if you guys have a solution for this, it's probably going to need tradeoffs..
The hard thing is if you can't snapshot at any time the canvas state, there is no way you can restitute that when user changes the player time... and i'm not even sure how things like recording this https://gl-react-cookbook.surge.sh/paint would be possible (like you would have to listen to mouse events and retrigger them? mmh)

Embed Support

It would be great (and good marketing for Scrimba) to be able to embed a scrimba "video" into other sites. That way when people blog, etc., they could embed scrimba which readers would find as delightful but also let readers click-through to see/discover the rest of scrimba and its awesomeness.

I got a simple <iframe> working, but there is no visual indicator to a reader that they need to "click play" or anything (and the buttons seemed to display wrong?), plus it kept on scrolling which was caused the scrimba player to get clipped.

Great work, you all.

Blocked script execution b/c 'allow-scripts' permission is not set.

The console button isn't working for me on some of the casts (scrimbacasts? scrimbas?). I'm using macOS Chrome Version 56.0.2924.87 (64-bit). Not sure if this is because I have set an unusual Content Security Policy for chrome. Here's what I see in my browser's console when watching https://scrimba.com/cast/cast-327

Blocked script execution in 'https://scrimba.com/cast/cast-327.preview' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.

docs on Content Security Policy headers here https://developer.chrome.com/extensions/contentSecurityPolicy

Transcriptions

Just thinking up ideas here, nothing urgent/necessary.

Here is an idea on how a transcription feature might work:

  1. For uses who cannot have audio playing or who are deaf, they can click a mute/transcript button/icon in the bottom right corner.

  2. Transcriptions must manually be added by the author of the video, by clicking on a transcription button in the upper right of their editor.

  3. This opens up hidden files/tabs (like how index.js, index.html, index.css are tabs/files, except these files/tabs are named 0:00, 0:30, 1:00) that they can add plain text to.

  4. They way transcriptions work for the watcher, is the video plays as regular but then PAUSES at a keyframe (based on the name of the tab/file from above), which automatically switches (or overlays?) the text from it. Then when a user is done reading, they just click resume/play.

Since the tabs/files are scrollable to the watcher anyways, this lets the author be as verbose as they want in very few or infrequent transcription keyframes, or have many frequent transcription keyframes that are quick and focused.

BONUS:

A) A transcription tab/file also specify a "resume" keyframe. This might be useful for authors who cannot multitask (talking while coding), so if the author winds up chatting for 15 seconds without typing any code this will just be dead time for a deaf person or muted video. Therefore, being able to specify a resume/skip-to time might be useful.

B) If you code the transcription feature to be modular, you could easily extend this to have a bunch of other features! For instance, using the exact same logic, you guys could add a "survey/poll" extension - which pauses the video at a certain keyframe, but rather than displaying transcript text, it asks a question and has a multi-choice survey ("does this tutorial suck? yes, no, kinda"). Extending this even further, you can have different resume times based on the answer (example: "Do you already know how the CSS float property works? Yes, skip forward. No.) or perhaps to other scrimba casts or links.

Just some ideas! You guys are great.

Fixing SEO for the home page

When pasting the link to Scrimba in Slack, it looks like this:

screen shot 2017-03-08 at 11 19 56

Same when googling Scrimba, the description isn't very good.

screen shot 2017-03-08 at 11 26 28

Not a critical issue!

Creation flow problems

I tried to create my first Scrimba-cast yesterday. While successful, it could've been a lot smoother. Two comments:

Naming cast: I am not sure what the cast should be named before I have created it. My suggestion: remove this as a step before creating cast.

Record button: The record button is very small, and you're not really communicating (visually) that it's the most important button. My suggestion: make it a lot bigger, maybe let it take up half the screen. But inform me that it's a good idea to sometimes add some code before I start recording.

"cancel" button sometimes acts like "finish"

Difficult to reliably repro, since I haven't seen much of a pattern of when it happens, but several times I've tried to kill my current recording by hitting cancel and instead it gets committed.

It does seem to happen more often on longer recordings, but that may or may not be related.

Search Videos

would be nice to be able to search through the videos available

thanks!

just want to say a thanks to your service. the idea is brillant, the fact you can pause a "video" and start editing code from there is mindblowing. I might consider doing it to showcase some gl-react (I think there is no reason WebGL wouldn't work right? – I can just add the relevant lib as external scripts)

Add support for Ember.js with ember-cli

The title says it all!

The general Ember.js community uses ember-cli, a CLI tool for creating Ember applications. So there would need to be some sort of integration.

Also for reference, there's a jsfiddle/codepen like tool that for prototyping/testing/sharing Ember code that might be inspiring/helpful. https://ember-twiddle.com/

Removing the "Resuming will erase your local changes. Are you sure?"

The popup window gets a bit annoying after a while. Would be better if the message was different. Maybe the play button has the "resume?" status once you press play after having played around with the code. I accidentally end up pressing the play instead of resume more often than not.

A key combination to resume would be great, like CMD + Space.

Want to use Scrimba to create private recordings for internal team training

Feature request:

Would be really cool if we could contribute to public lessons, but also have a space for private ones too. I see this being an incredibly useful tool for training my team.

We want to do specific developer workflow tutorials that are unique to our environment, therefore not useful for the general public.

An alternative would be an open-source version of Scrimba so we could implement it ourselves. However, I feel this would not support the broader Scrimba community as well as the initial feature request.

Thoughts?

Large preview window

A large preview window similar to Codepen style would make Scrimba much more useful, so please consider adding it.

Preview on CSS autocomplete popup

what
would be nice (and faster) to have a preview when scrolling a CSS autocomplete popup

why
saves some keystrokes (delete, invoke autocomplete, move to select next item, ...)

example:
font changes when scrolling the weight

screen shot 2017-03-07 at 22 50 59

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.