bolerio / seco Goto Github PK
View Code? Open in Web Editor NEWAdvanced Scripting IDE for JVM based languages.
Advanced Scripting IDE for JVM based languages.
There is a nice JVM Lua compiler that is active and apparently super performant:
http://sourceforge.net/projects/luaj/
It deserves to go in Seco.
With the standalone frame, none of the dialogs under Format->Visual Properties open.
Trying to rebuild docs/rse.pdf from scratch, I have problem:
docs/rse.tex: ./sigplanconf.cls
./sigplanconf.cls:
wget -O $@ http://www.sigplan.org/sites/default/files/sigplanconf.cls
pdflatex -interaction=nonstopmode -output-directory=/home/ponyatov/seco/tmp docs/rse.tex && touch tmp/rse.pdf
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./docs/rse.tex
LaTeX2e <2014/05/01>
...
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
(/home/ponyatov/seco/tmp/rse.aux
! Package natbib Error: Bibliography not compatible with author-year citations.
(natbib) Press <return> to continue in numerical citation style.
Seco should a framework where it is possible to define how to import any type of software artifact around the internet within a niche. An html page could be imported and that should be defined somehow, an image could be imported, or a video, anything really. And the imported will translate it appropriately to something that the niche can deal with.
This used to work up until recently....
It should very helpful to use Seco as an API documentation or a programming blog authoring tool because code can be written and tested on the spot. So being able to export a notebook into a github wiki or a blog, or directly publish as a blog would be very useful.
This could be useful for any larger scale application build on OSGi that wants to integrate a scripting tool into the application for interacting with its internals. A great example of this is Protege with all its other plugins. Instead of trying to integrate protege into Seco to work with ontology, it should be possible to have a Seco canvas available in Protege and all of Protege's internals exposed,access to the currently loaded ontology via OWLAPI etc., with any scripting language.
Some exception stack traces are exceptionally long. Upon evaluation of something that leads to such an exception, the notebook scroll horizontally too far right and it then keep auto-positioning itself there sometimes when other cells are evaluated (simply because there's an exception output cell with a very long line in it).
We should auto-wrap such long exceptions...
It would be good if all font elements can be scaled manually (font sizes too small sometimes)
This is about the attribute in CellGroupMember.
Add Ergo/Flora and XSB Prolog via InterProlog bridge: http://interprolog.com/java-bridge/
http://flora.sourceforge.net/ looks as powerful reasoning engine,
it will be good to embed it into seco script list
It would be nice if visual objects on the screen (e.g. the output console, or individual cells or any other components) have in their context menu acessible with the alt+click combination, means to show how to refer them in a script. For example, for a cell it could be something like:
notebook.findCell(bla)
or simply with the UUID:
niche.get(tohandle(uuid))
When an import of a notebook fails with some exception (E.g. malformed XML), the file remains open and one can't correct the mistake in a text editor and save again.
It would be nice if any Java process could be attached to a Seco instance remotely. So, say I have a Java sever-side process somewhere, even on a production server, and I'd like the ability to execute some code on an language embedded in that server process. It should be easy to to package a library with the desired language and start it up on the remote process with XMPP network configuration to talk to Seco.
Security consideration are super important here, but it would be super cool to administer any Java process from a local Seco console, across firewalls etc. via XMPP!
Alt-up should go to cell above and alt-down to cell below, exactly the same logic as when the handles on the right are in focus in we navigate with up and down keys.
The Window menu is about creating new top-level container and it should be hidden in Standalone mode.
It's convenient sometimes, inside a cell, to select a piece of text and evaluate it. Or easily inspect the value of a variable with a roll over like in IDEs in debug mode.
The temp directory for Swing HGDB type generation is under SECO_HOME. On Unix-like systems, SECO_HOME will normally be some application path and data should be in the user directory, just like niche and all other data...
In fact, there should be probably a single top-level ~/.seco folder with the .secoNiches, .secoRepository etc. under it. It's cleaner to take up only a single entry in a user's file system.
This is an old compatiblity objectasm for JAva 4 and it conflicts with newer versions of java. not needed anymore.
When cell atoms use hard references, the side effect during update deletes
their value. When they use symbolic references, one needs to do manual
bookkeeping when to delete the underlying atom and when not.
This is actually more of a HGDB issue that we need to resolve pretty soon.
It would be useful to easily embed/attach seco to any Java program. For example, one should be able to attach it to a Swing application by including it in the path and invoking a notebook to interact with the runtime. A context would be created by default out of the JVM system/boot classpath, or it should be possible to provide a class loader or a Seco context object.
Many of the dialog boxes that open in the various menus don't react to the ESC key. Some do...this behavior should be centralized somewhere ideally.
At least one problem found is that it will convert a Java class whose static method are being used into some other representation that the interpreter uses. So if you have a class foo.Bar and then:
importPackage(foo.*)
and then you do
Bar.someStaticMethod()
the symbol Bar in the global cross-engine evaluation context doesn't refer to a Java class anymore but to some JavaScript Rhino thingy. Actually, Rhino shouldn't be putting this in the global namespace to begin with!
Perhaps an easy and flexible way would be to have a text representation of that context information and let the user edit it in text form - for programmers this is frequently much quicker and much more convenient.
Seems like the Piccolo framework is in a very low maintenance mode (sort of like this project at the moment), but it has found a new home and there is some small maintenance going on. Given how much code we have invested in it, we should probably upgrade to that latest version (lots of package changes etc.) and maybe contribute to it as well, to make it better...
Add support for automatically augmenting runtime context classpath from an Eclipse project directory, by reading the .classpath file of Eclipse. This should be re-read on startup every time and a synchronization function should be available.
Tried to use multiple runtime contexts in different notebooks and got the following:
java.lang.ClassCastException: seco.rtenv.ContextLink cannot be cast to seco.rtenv.RuntimeContext
at seco.rtenv.EvaluationContext.(EvaluationContext.java:154)
at seco.ThisNiche.getEvaluationContext(ThisNiche.java:136)
at seco.notebook.DocUtil.calc_eval_ctx(DocUtil.java:294)
at seco.notebook.DocUtil.calc_eval_ctx(DocUtil.java:296)
at seco.notebook.DocUtil.access$0(DocUtil.java:282)
at seco.notebook.DocUtil$1.run(DocUtil.java:275)
at seco.util.RequestProcessor$Task.run(RequestProcessor.java:511)
at seco.util.RequestProcessor$Processor.run(RequestProcessor.java:945)
It is impossible to start two JVMs by the same user because the .secoRepository database gets locked by each process. HyperGraphDB doesn't support multiple processes managing the same directory. That would only be possible to with a shared native library that would effectively be the single point of access. It could be too much work to allow sharing a DB directory form pure Java, it will have to be some demon running and Java IPC going on, which won't be easy. So we need a separate solution where either (1) each niche has its own .secoRepository with class information or (2) Seco automatically creates new copies of .secoRepository and reuses the first available one
Another reason to switch to JavaFX soon:
What approaches can I use for making SECO localization ?
But maybe localization is drawback taking in mind low userbase and waste of efforts ?
Runtime contexts should be capable of taking a Maven pom file and using the dependencies to augment the classpath. Those dependencies should be refreshed automatically on startup. A synchronization option should also be available that would ideally be smart enough not to loose runtime objects if possible.
seco
lacks of very usable and powerful tool -- syntax parser. With parser you able to input and process any data presented in plain text formats: scripts in any programming languages, JSON, XML,.. any text data formats.
A parser generator is a tool that reads a grammar specification and converts it to a program, library module or executable object that can recognize matches to the grammar. In addition to the parser matcher itself, any parser generator provides other standard capabilities related to parser generation such as AST tree building, actions on matched elements, debugging, etc.
So the most impressive way is expand seco by full set of interpreter design tools: ANTLR parser toolchain, cell editor able to use ANTLRed grammars for syntax highlight (and completion?), grammar set for most used programming and data languages, DLR (Dynamic Language Runtime) for interpreter realization, and vizulatization tools for displaying interpreter internals (for learning for example).
Implement a top-level menu/command to easily switch between a zoomable and plain tabbed interface when within a niche. The non-zoomable interface has the advantage of speedier display and better looking fonts which for coding is quite important.
Make find dialog disappear on ESC key...and other dialogs for that matter.
The output console is useful to direct only traces output from scripts. It is accessible currently only from the Piccolo interface, but not from the simple UI where the notebooks are in tabs. It could be just added as another tab.
Instead of prebundling all languages, it should be 1 click to download and immediately activate a new language.
Looks like Java 9 comes with a REPL for Java itself, the perfect replacement for BeanShell! So we need to support it of course.
The default text wrapping of the Swing text framework does a good job of breaking at whitespaces to fit the text into the available view width. However, some outputs, particularly exceptions with complicated stack traces and error messages printing out some data without whitespaces end up not being broken and the width of the view becomes ginormous because of a single rogue output cell, one has to scroll a lot to get to the visual cell handles and it's awkward.
We need a solution to this: a configurable, default true, option to force wrap all cells, scripts can usually be broken following the language lexical structure while output cells should be broken arbitrarily with some special indicator character at the end of line like emacs does.
Split into GUI/core separate components: GUI must be replaceble for mobile/portable port or specially designed GUI components (Seco extending/embedding into other applications like complex SCADA interface).
PS: Android does not support dynamic bytecode creation but SL4A gives way to make some GHDB/Seco port
Only the ctrl key works in macbook for copy&paste, and for DEL one has to press fn+delete, and other similar issues. We need a special mapping for the macboocs
It should be possible to load a specific notebook by choosing to willfully ignore all initialization within it, so that all cells and groups marked as initialization won't be evaluated.
First off, the button doesn't provide a feedback dialog so the user doesn't know if something happened.
Also, rebooting may be broken at the moment since sometimes a restart is needed to really start afresh.
This seems to do a good job at indexing metadata about a Java runtime context (all classes in a loader/JVM).
Sometimes at startup I get the following exception. I've observed other similar case where TokenMarker.context seems to be null. I have multiple notebooks opened in a "simple UI mode", and it seems like a race condition of some sort because if I just kill Seco and start again, it works.
java.lang.NullPointerException
at seco.notebook.syntax.TokenMarker.markKeyword(TokenMarker.java:664)
at seco.notebook.syntax.TokenMarker.markTokens(TokenMarker.java:198)
at seco.notebook.syntax.ChunkCache.markTokens(ChunkCache.java:373)
at seco.notebook.syntax.ChunkCache.lineToChunkList(ChunkCache.java:337)
at seco.notebook.syntax.ChunkCache.updateChunksUpTo(ChunkCache.java:262)
at seco.notebook.syntax.ChunkCache.getLineInfo(ChunkCache.java:116)
at seco.notebook.view.GlyphPainter0.getWidth(GlyphPainter0.java:64)
at seco.notebook.view.GlyphPainter0.getSpan(GlyphPainter0.java:51)
at javax.swing.text.GlyphView.getPreferredSpan(GlyphView.java:592)
at javax.swing.text.FlowView$LogicalView.getPreferredSpan(FlowView.java:732)
at javax.swing.text.FlowView.calculateMinorAxisRequirements(FlowView.java:233)
at javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:717)
at seco.notebook.view.CellParagraphView.calculateMinorAxisRequirements(CellParagraphView.java:70)
at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
at seco.notebook.view.CellParagraphView.getMinimumSpan(CellParagraphView.java:128)
at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
at seco.notebook.view.InputCellView.calculateMinorAxisRequirements(InputCellView.java:58)
at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
at seco.notebook.view.HidableBoxView.getMinimumSpan(HidableBoxView.java:54)
at javax.swing.text.BoxView.calculateMajorAxisRequirements(BoxView.java:871)
at javax.swing.text.BoxView.checkRequests(BoxView.java:930)
at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
at seco.notebook.view.HidableBoxView.getMinimumSpan(HidableBoxView.java:54)
at seco.notebook.view.CellBoxView.getMinimumSpan(CellBoxView.java:112)
at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
at seco.notebook.view.HidableBoxView.getMinimumSpan(HidableBoxView.java:54)
at seco.notebook.view.WholeCellView.getMinimumSpan(WholeCellView.java:118)
at javax.swing.text.BoxView.calculateMajorAxisRequirements(BoxView.java:871)
at javax.swing.text.BoxView.checkRequests(BoxView.java:930)
at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
at seco.notebook.view.HidableBoxView.getMinimumSpan(HidableBoxView.java:54)
at seco.notebook.view.CellBoxView.getMinimumSpan(CellBoxView.java:112)
at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:343)
at javax.swing.text.BoxView.layout(BoxView.java:708)
at javax.swing.text.BoxView.setSize(BoxView.java:397)
at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1722)
at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:917)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
at javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1332)
at seco.notebook.NotebookUI.getPreferredSize(NotebookUI.java:796)
at javax.swing.JViewport.getViewSize(JViewport.java:999)
at javax.swing.plaf.basic.BasicScrollPaneUI.syncScrollPaneWithViewport(BasicScrollPaneUI.java:278)
at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(BasicScrollPaneUI.java:1033)
at javax.swing.JViewport.fireStateChanged(JViewport.java:1369)
at javax.swing.JViewport.setView(JViewport.java:969)
at javax.swing.JScrollPane.setViewportView(JScrollPane.java:1007)
at seco.gui.visual.NBUIVisual.bind(NBUIVisual.java:73)
at seco.gui.visual.TabbedPaneVisual.addChild(TabbedPaneVisual.java:71)
at seco.gui.visual.TabbedPaneVisual.bind(TabbedPaneVisual.java:44)
at seco.gui.StandaloneFrame.getJTabbedPane(StandaloneFrame.java:82)
at seco.gui.StandaloneFrame.initFrame(StandaloneFrame.java:65)
at seco.ThisNiche.initGUIController(ThisNiche.java:85)
at seco.boot.NicheBootListener.handle(NicheBootListener.java:34)
at org.hypergraphdb.event.HGDefaultEventManager.dispatch(HGDefaultEventManager.java:75)
at org.hypergraphdb.HyperGraph.open(HyperGraph.java:378)
at org.hypergraphdb.HyperGraph.open(HyperGraph.java:211)
at org.hypergraphdb.HGEnvironment.get(HGEnvironment.java:112)
at org.hypergraphdb.HGEnvironment.get(HGEnvironment.java:130)
at seco.boot.Main.go(Main.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at seco.boot.StartMeUp.main(StartMeUp.java:91)
When a notebook is imported using a scripting language not installed in a given seco environment, there are NPEs in the console, but otherwise the UI doesn't say anything interesting, it simply doesn't work. User should be notified about the scripting language and possibly they should be given the option to go fetch it online somehow.
Steps:
the old input cell format comes back, it seems like some "global" state gets restored after not being updated on the first save
The Mathematica style cell handle brackets are ok, but maybe something more web-like and intuitive for people would be better, for example line the outline authoring tool here:
This is not strictly necessary, but it will make the whole thing more
transparent and more easily modifiable. In addition, it's a good test case
for the API - how easy it is to script with it.
Connect via debugger to a running JVM, upload a scripting engine there and drive it through scripting in Seco...do that with an arbitrary JVM and offer ability to connect to different "runtime contexts" at that JVM, whatever that may be.
This seems to be broken. Tried to create a new context, different from top. Added a class path to it and even when evaluating the simplest BeanShell import statement, I get the following:
java.lang.ClassCastException: seco.rtenv.ContextLink cannot be cast to seco.rtenv.RuntimeContext
at seco.rtenv.EvaluationContext.(EvaluationContext.java:154)
at seco.ThisNiche.getEvaluationContext(ThisNiche.java:136)
at seco.notebook.DocUtil.calc_eval_ctx(DocUtil.java:293)
at seco.notebook.DocUtil.calc_eval_ctx(DocUtil.java:295)
at seco.notebook.DocUtil.access$000(DocUtil.java:47)
at seco.notebook.DocUtil$1.run(DocUtil.java:274)
at seco.util.RequestProcessor$Task.run(RequestProcessor.java:511)
at seco.util.RequestProcessor$Processor.run(RequestProcessor.java:945)
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.