jrusbatch / compilify Goto Github PK
View Code? Open in Web Editor NEWA web-based compiler for C# and VB.NET, powered by the Roslyn Project.
License: MIT License
A web-based compiler for C# and VB.NET, powered by the Roslyn Project.
License: MIT License
RavenDB offers a cleaner API and indexing features that can be implemented with little additional work. Due to the significance of the changes being made to the data model in order to accomodate other new features, this is a good time to switch.
When I wrote the worker console app I used ServiceStack.Redis instead of Booksleeve because Booksleeve didn't implement the BLPOP command. Marc Gravell has since implemented the command.
The error list currently expands to fit all errors, but the number of errors be excessive for something as simple as a typo.
Users should be able to share links to the content they post on the site with various social networks.
The current "Tweet this!" link should be replaced as part of this.
Users should be able to edit code simultaneous and see each other's updates (and the effects of their changes) in real time (or as close as possible).
This exception began occurring on one of the web server instances. Deploying 51ea03c stopped the exceptions, but it's hard to tell if they stopped because of the deployment or because of the fix. Unfortunately, I did not subscribe to the UnhandledTaskException
event on the TaskScheduler, so I have no further information.
Exceptions
[InvalidOperationException: The queue is closed]
at BookSleeve.MessageQueue.Enqueue(RedisMessage item, Boolean highPri) in C:\Dev\BookSleeve\BookSleeve\MessageQueue.cs:line 71
at BookSleeve.RedisConnectionBase.EnqueueMessage(RedisMessage message, Boolean queueJump) in C:\Dev\BookSleeve\BookSleeve\RedisConnectionBase.cs:line 872
at BookSleeve.RedisConnectionBase.ExecuteInt64(RedisMessage message, Boolean queueJump) in C:\Dev\BookSleeve\BookSleeve\RedisConnectionBase.cs:line 788
at BookSleeve.RedisConnection.BookSleeve.IListCommands.AddLast(Int32 db, String key, Byte[] value, Boolean createIfMissing, Boolean queueJump) in C:\Dev\BookSleeve\BookSleeve\IListCommands.cs:line 453
at Compilify.Web.EndPoints.ExecuteEndPoint.OnReceivedAsync(String connectionId, String data) in d:\temp\nekv5d4u.co4\input\Web\EndPoints\ExecuteEndPoint.cs:line 30
at SignalR.PersistentConnection.<>c__DisplayClass4.b__2(String data)
at SignalR.Transports.ForeverTransport.ProcessSendRequest()
at SignalR.Transports.ForeverTransport.ProcessRequest(IReceivingConnection connection)
at SignalR.PersistentConnection.ProcessRequestAsync(HostContext context)
at SignalR.Hosting.AspNet.AspNetHost.ProcessRequestAsync(HttpContextBase context)
at SignalR.Hosting.AspNet.HttpTaskAsyncHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
It's handy in JSFiddle
Include a title, description, and tags (searchable) for the post. The model already has these fields, they just need to be displayed to the user.
In addition, users should also be able to mark a post as private. Private posts won't be searchable.
Ajax requests should not be sent for code changes that can't possibly result in a change of build result (whitespace additions/deletions, etc). Ajax requests should also not be sent until there is a pause in the user's typing.
The Fibonacci sequence, FizzBuzz example, etc. Provide an examples page/section.
If an error occurs during the SignalR request to execute the code, an error message should be displayed to the user letting them know that code execution services are having temporary problems.
This message should be friendly and unobtrusive.
Maybe web sockets? Socket.io? SignalR?
Currently the save button will not work if it is clicked repeatedly without changing the content. The button to save should be hidden to make it clear that the content is already saved.
Move to Roslyn CTP3 to support C# 3.0 features.
The user should get as much detail as possible about any errors in their code. It would be great if this information could be presented in the editor itself, as unobtrusively as possible. For example, some possible ways to handle this include:
Allow users to search for snippets. Potential search keywords could include:
There should also be a flag to allow users to let users prevent their posts from being included in search results. Posts that were submitted before the search functionality is implemented should be excluded from the results by default.
If you go to about then just press the back button, the fields are emptied and you need to press either "create" or refresh the page.
Users should be able to define their own classes and methods against which they can execute code. So far I've had two ideas about how to implement this:
Aside from the API changes, it also appears as though the structure of the code generated in a compilation has changed.
This project blows my mind. I would love to see it evolved, and would like to help you out by donating/buying you a beer.
Perhaps make the save button disappear until changes are made.
There are no custom error pages in the project yet.
Users should not be able to cause any disruption to the experiences of other users of Compilify, or perform any malicious actions targeting either Compilify or other web sites and services.
Also, a disclaimer should be added that absolves Compilify of any damages caused by code written by the user.
The site needs good example snippets to demonstrate its capabilities to new users. If you wrote a cool snippet, post a link to it here! Bonus points if it's documented!
Since code must be changed before it can be saved again, and each save is a new slug/version combination, all code should only ever be executed once.
Issuing statements like `new string[1000000];' and printing all of the numbers between 1 and 1000000 cause a huge delay while Json.NET serializes the results to JSON.
If the resulting object is too large to be published to the Redis channel, a friendly "resulting object is too large" message should be sent instead.
Returns "Format specifier was invalid." instead of "123.46".
Probably via Chrome/ Firefox/ Safari extension or just with a javascript bookmarket. An example of this implementation: http://bl.ocks.org/
This would allow users to run many of the already written C# gists.
Every time the SignalR connection is re-opened, all messages sent via previous connections to the server are sent again with the new connection ID.
Like jsfiddle and every other similar site on the internet. Each revision should also be retrievable through a URL.
Describe how to use the application and its limitations/restrictions.
something like http://jsfiddle.net/ which includes list of well known libraries like jquery, mootools.
You can then add libraries like Facebook C# SDK. https://github.com/facebook-csharp-sdk/facebook-csharp-sdk and then we can use classes from Facebook library.
There are lots of time when I need to test the fb request and test on the browser without creating a new console app.
A prototype of the new design:
Benefits of the new design that will be realized immediately include a tabbed interface with the ability to add, remove, and rename "documents", and a sidebar that includes an area to manage the project's references.
Some things that have changed or will change from the screenshot include:
There are none. maybe there should be some - especially around the code executor.
It would be nice to be able to use Console in the execute window.
Console.WriteLine("debugging")
The site experienced an extremely large number of requests from individual users. Logs indicated that some clients were hitting the SignalR endpoint up to 30 times per second. This resulted in intermittent 503 errors throughout the day as we overloaded AppHarbor's load balancer.
Uploading dll that the code will use might cause a major security issue.
But it will be nice if we can select popular library to compile with our code.
For example
I think you Base32Encoder is actually a Base36Encoder. Because you have the 26 characters of the alphabet plus the 10 numbers.
Base2 = 0 ... 1
Base8 = 0 ... 7
Base16 = 0 ... 9 A ... F
Base64 = 0 ... 9 A ... Z a ... z and equal (=) and slash (/)
Yours only goes
0 ... 9 a ... z
I know it doesn't really matter, just though I would point this out.
Add intuitive key binds to the editor. Ctrl+S should save, Ctrl+B or F5 should build. Stuff any average .NET developer would know, regardless of their tooling.
Booksleeve's API exposes a SetKeepAlive
method that, once called, pings the Redis server at a set interval. Calling this would, at minimum, alleviate the slight delay that occurs when a user attempts to execute code after a period of inactivity on the site, and potentially improve the reliability of the connections.
By storing the ID of the project that user is currently working on in a cookie, they will be able to work on the project from multiple tabs or come back to the project after closing it for a brief period.
The project uses the default favicon that is used for new MVC4 projects in Visual Studio. We need something fresh!
A call to RuntimeHelpers.EnsureSufficientExecutionStack
could be inserted before each method call in the user's code to trigger an InsufficientExecutionStackException
if the call could cause a stack overflow. Unlike a StackOverflowException
, the InsufficientExecutionStackException
can be handled gracefully.
Users should be redirected to use the HTTPS protocol if they attempt to access any resource without it.
define: List<string> myList = new List<string>();
execute: return "test";
result: YSOD, and the tears of developers everywhere.
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.