circuitverse / circuitverse Goto Github PK
View Code? Open in Web Editor NEWCircuitVerse Primary Code Base
Home Page: https://circuitverse.org
License: MIT License
CircuitVerse Primary Code Base
Home Page: https://circuitverse.org
License: MIT License
Normally, having multiple inputs into one wire causes some bizarre results. I'll be honest, I don't like the current behavior, and how multiple inputs are handled (or rather, not). I believe that multiple inputs should then OR compare all of the inputs, and treat it as such. Essentially, wires should act as OR gates if more than one input occurs. This makes more sense to me, and would also make wiring a bit less finicky. If this is done due to a technical limitation, that would make sense. If this can be solved otherwise, please do so.
These are just few ideas or bugs I know right now. I will keep updating the list. Before starting anything, create an issue and await instructions. Feel free to suggest any features or bug fixes
Simulator
bug fixes
Ambitious Features
Website - rails + normal front end
Others
Documentation
This involves a full documentation of all circuit elements. It shouldn't take more than a days work. It is important to someone who comes to our website and has little knowledge of the various components.
Things to document.
Should CircuitVerse provide a way for multiple people to edit the same circuit?
If yes, how should we implement it. Real time editing like google docs is not feasible. One way is to allow users to independently open the circuits and independently save. That is the responsibility of saving correctly and avoiding clashes is on the users.
Currently zoom in embed mode is with just buttons. Add mouse listeners to the zoom
The 7-segment and hex displays are lacking a color setting, which would be great to have. The variable LED is also lacking a color setting.
Decoders, encoders, multiplexers, de-multiplexers.
They always have a 2-square gap between the pins. It would be really useful to be able to set the gap between the pins as to avoid additional wiring. #
A handy feature would be the ability to fork individual subcurcuits into your own projects, and use them in your projects. This would mean you could take a bunch of individual parts from other projects to use in another project.
CircuitVerse crashes a lot, (requiring the page to be closed and re-opened) usually because of pins/nodes not behaving correctly. (somehow a pin has been moved from it's intended spot, or a pin hasn't generated when making new wire) Whether this issue gets fixed or not, there should be an optional autosave feature as well.
Currently backend and front end code is tightly coupled. Developers who want to work on the simulator will not want to install and setup the backend code and dependencies. Therefore it is desirable to separate the two.
It happened again @satu0king
I am surprised, it had not happened in quite a while now.
However, it only happened once.
Originally posted by @HypheX in #40 (comment)
This should be fairly easy. Basically, a user's comment should have a link to their profile page. Also, on user profiles should be a link to their groups and favorite circuits. You can access these already via the good ol' URL bar but there isn't a link directly on their profile page.
If bloggers/teachers embed circuits from CircuitVerse in external places like powerpoint/blogs. A watermarks or banner such as "Made with CircuitVerse" or "View on CircuitVerse" needs to be displayed.
It would be nice if as a logged in user you could "clone" or duplicate your own project. You can currently do this with another user's project, but not your own. simulator.io has this feature.
A use case for this would be keeping a base version of a circuit, such as an ALU, then cloning it before adding features.
Since there's already support for forking another user's project, perhaps it wouldn't be hard to reuse that code.
An alternative solution could be having version control for projects and having a branching model
User Model to store country and educational institution information. This is necessary for analysis.
Should they be a foreign key to another table or just stored as string?
Foreign key - Probably more difficult to implement
Jquery Autocomplete might help.
When customizing the layout of a SubCircuit, any LED's that have been placed should appear on the SubCircuit similar to inputs or outputs, but on the surface. A similar idea I just had is to do the same with buttons, allowing for a SubCircuit button panel.
Here's a graphical representation of what I mean about the surface LED's:
Dockerize the code to be run in development so developers can quickly get started.
The organisation needs a way to send bulk mail to all users. Ideally we should be able to use transactional email service like mailchimp. Alternatively we can maintain our own subscription system (not recommended).
I think it will be difficult to maintain both Desktop and mobile in one HTML file, so one approach is to use a separate html file for mobiles.
There should be a "Most Viewed" section to the home page, or maybe a proper circuit browser with a few options for filtering and order.
Desmos
Refer to the way Desmos shows featured works for more details.
Currently featured circuits is hardcoded temporarily. Will need a nice way for admins to selectively feature circuits.
The decimal point on the 7-Segment display is too close to the rest of the number and not defined enough, it is hard to see and easy to miss. Making it more separated from the other segments should fix this.
If the user has created a new project but has not saved it yet. Prompt the user to save after 5 minutes.
Currently we are using google custom search which doesn't do a very good job. The search should search over project names and descriptions.
This has probably (definitely) been suggested before, but I have some ideas for some extra improvements to sub curcuits, and a way of distributing them to other people, or at least between projects. The idea is that you can save subcircuits to a tab in the "circuit elements" tab, which will allow you to utilise that subcircuit elsewhere. This will link the subcircuit to the original project whence it came from, so changes to the subcircuit in that project will be reflected elsewhere. This will also make using subcircuits far easier to use, since they can be dragged from the "circuit elements" tab, instead of using the popup which is rather annoying.
Another feature would be to add custom textures to subcircuits, by uploading your own image to be used on your subcircuit. This would make subcircuits incredibly customisable, and a great addition to projects. The downside to this is that subcircuits would have to be managed much more thouroughly, as they would also have image data stored too. It's also possible to see people "trolling" via the use of these customizable images on their subcircuits. It's an idea all the same, even for a future date.
Referencing #36.
Until recently subcircuits had very strict dimensions and positions and little could be done to move the node positions. As of now, subcircuits have flexible dimensions and node positions can be changed.
Moving forward, the design pattern has to be considered to ensure extensibility and ease for both development and the users.
Some of the features are to be considered to be implemented on the subcircuit layout.
This would open a whole range of exciting possibilities. If the initial design is good, implementing these features will be easy. However, it is tricky as all LEDs and other output elements need not be part of the subcircuit. Providing a feature for the user to easily pick and chose his features will be difficult. Storing and manipulating the data from the development point of view is tricky too.
@blane1257 @HypheX and thoughts? comments?
The project was initially named logix but was later renamed to CircuitVerse. The name has been changed in most places but there are still some places where it hasn't been changed.
I have a couple of tiffs with the current control scheme for CircuitVerse, which I think could be easy fixes and make the simulation much easier to use.
Firstly, unbind the "backspace" key from delete. Countless times I have edited values in a part then accidentally deleted it when I made a minor edit via the backspace key. This is incredibly frustrating, and should be fixed.
Secondly, bind the "WASD" keys to perform the same job as the arrow keys. This meaning W = Up, A = Left, S = Down, D = Right. As a gamer, I'm used to using the "WASD" keys in conjunction to the mouse. This means I can use both hands at the same time to control various things. For example, my right hand on the mouse and my left hand on the WASD keys. This opens up the ability to select parts and rotate them without having to change hands. One can also imagine the Q and E keys (which are close to the WASD keys, and easy to access from a casual WASD position) for whatever other binds could be necessary.
Thirdly, separate the "Move" and "Select" mouse buttons. Currently a small problem with the interface is that all the mouse button do the same thing, that being either select a component or pan the camera. However, especially in large or tight circuits, this can be problematic, and the mouse may select a component when it was supposed to pan the camera, or visa-versa. The solution would be to change the mouse's behavior, to have exclusively one button to select, and one button to pan. My suggestion would be "Mouse 1" (Left Click) to select and "Mouse 3" (Scroll Wheel) to pan, or similar. I'm avoiding suggesting "Mouse 2" (Right Click) as this brings up a popup menu on some browsers (like mine), which can be annoying. There is possibly a workaround, but it's probably not worth the effort.
Finally, there should be some way to differentiate the selection behavior when multiple hot zones overlap. A great example of where this would be necessary would be deleting odd wires which get stuck under a component after moving it. In this situation, it's necessary to move the component again to gain access to the wires to remove them. In the worst case scenario, wires can end up overlapping inputs/outputs on the same component, in which case it's nearly impossible to remove without removing the component. My suggestion is to add some ability to cycle through components under the cursor. An example would be that pressing the "Tab" key cycles the selection through all objects under the cursor, allowing the user to select the necessary component that they need too.
I hope that my suggestions don't sound too repetitive to ones before, I just hope their implementation can make the CircuitVerse interface easier to use by other users, simple or advanced.
It doesn't seem that there's a way to see more recent circuits past the main page's "recent circuits". I want to see a way to see more circuits by people to look at. If this isn't the right place to ask about it (since I'm assuming this is to raise issues about the engine, not the website), then I'll take note of that. If this can be achieved however, please do!
When the deadline is reached, the assignment is correctly closing, however the submissions are not being recorded correctly, that is a copy of the projects are not being made and not being marked as a submission.
Check file at CircuitVerse/app/jobs/assignment_deadline_submission_job.rb
Steps to reproduce
Save Online
and name the project/users/sign_in
The site redirects to the home, then to the simulator and you see the message You have to login to save the project, you will be redirected to the login page.
that redirects again to /users/sign_in
Sometimes I use the copy/paste functions heavily. Occasionally, it stops working randomly. No idea what causes this, but the only fix is to save and refresh the page.
Would it possible to let users decide what version of the engine they want to use? It would be really useful in case an update rolls in, and breaks some circuits. It would be nice to have a drop-down menu on the corner that lets you choose a version of the engine. This would help preserve old circuits in working state, while still letting users update their circuits to work with newer versions if they feel like it.
Feature requested by @HypheX
Upon revising some of the code: https://github.com/CircuitVerse/CircuitVerse/blob/master/public/js/listeners.js
I found a compatibility issue with Firefox, in line 68 and 75.
The keycodes for the + and - keys differ in firefox.
I tested this, ctrl + +/- does nothing in firefox, but it does in chrome.
I use firefox.
Basically not gates that don't not. Don't ask me why. This just needs to be a thing.
Just add button and add listener to Undo
So I was putting together a group of 16 bit full adders to make a 64 bit full adders. This was forked from another project of course. I was testing it out, and then the simulation began to act strangely. Somehow, it believed that the binary values were negatives (and appended a negative sign onto the inputs). I also wasn't able to change any further values past a certain point. My guess as to the source of this issue is that the simulation literally had overflow errors (my real computer, not the simulated one), and so believed the numbers I was inputting were negative. I assume this is also due to bit's being grouped together as a single number, instead of their individual boolean values. This isn't exactly a problem, and I don't expect it to be solved immediately (unless you're aware of an easy solution). This situation is already completely out of proportion and likely to never occur in any legitimate circumstance, but it does show a limitation in the CurcuitVerse simulation.
You can see for yourselves in this project: https://circuitverse.org/users/1577/projects/4038
Should be an easy way to embed CircuitVerse circuits in powerpoint - see lucidchart plug in for reference
I suggest the following changes:
It would be great to see those changes!
Seed the database with an admin user
email id: "[email protected]"
password:"password"
Don't forget to set admin attribute in user to true.
One way is to write it in seeds.rb
and run rake db:seed
There should be an option for teachers to forbid combinational analysis for assignments, as it seems many students use it.
Add images with type svg in the images folder.
Missing images. You can send the icons in separate PRs
Ignore this, sorry.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.