Giter Site home page Giter Site logo

seco's People

Contributors

bolerio avatar kkoovvaa avatar ponyatov avatar secouser 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

seco's Issues

Need script set for docs/ rse.tex -> rse.pdf

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.

Framework to import anything

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.

export notebook into various wiki/blog formats

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.

Make a Seco Bundle pluggable into OSGi systems

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.

force wrapping of exception cells

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...

quickly find scripting references to visual objects

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))

import locks file

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.

Seco remote agent

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!

Evaluate selections

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.

temp directories shouldn't be relative to Seco installation directory

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.

Remove js-14.jar

This is an old compatiblity objectasm for JAva 4 and it conflicts with newer versions of java. not needed anymore.

Atom references as cell values are problematic.

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.

make seco embaddable

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.

Rhino doesn't place nice in global namespace

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!

Improve context classpath dialog

  1. Should be possible to edit individual paths.
  2. Or event edit them globally, with a search and replace.

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.

Piccolo Upgrade

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...

https://github.com/piccolo2d/piccolo2d.java

Add Eclipse .classpath support

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.

multiple simultaneous contexts

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)

Shared .secoRepository

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

Multilanguage & localization

What approaches can I use for making SECO localization ?

  • Interface
  • manuals in GitHub markdown and Wiki

But maybe localization is drawback taking in mind low userbase and waste of efforts ?

Add Maven support

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.

Integrate generic script engine: parser generator, AST builder, interpreter core

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).

switch from zoomable to non-zoomable interface

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.

ESC on find dialog

Make find dialog disappear on ESC key...and other dialogs for that matter.

Add output console as a tab in the simple UI

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.

Add support to JShell

Looks like Java 9 comes with a REPL for Java itself, the perfect replacement for BeanShell! So we need to support it of course.

Forced cell wrapping

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 (Android port in mind)

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

key mappings in macbook

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

Ignore init cells and groups

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.

reboot seems not to work

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.

NPE on syntax handling during startup

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)

Unknown scripting language in notebook error

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.

saving cell formatting broken

Steps:

  1. Change input cell format and click save in the dialog
  2. change output cell format and click save

the old input cell format comes back, it seems like some "global" state gets restored after not being updated on the first save

Rewrite menubar / toolbar actions with scripting

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.

On demand remote scripting

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.

Evaluating in a different from 'top' context

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)

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.