Git Product home page Git Product logo

tutorials's Introduction

If you want to learn how to use ImageJ and/or ImageJ2 (as opposed to write programs with ImageJ2), then visit ImageJ Tutorials.

This project contains example code for working with ImageJ2 and SciJava.

OVERVIEW

This repository is broken down into two main functional parts: Notebooks and Java.

Notebooks

The purpose of the notebooks is to give a "guided tour" for teaching ImageJ2.

Java

The purpose of the java section of this repository is to give a collection of examples and howtos for different use cases.

LICENSING

To the extent possible under law, the ImageJ developers have waived all copyright and related or neighboring rights to this tutorial code.

See unlicense.org for details.

SEE ALSO

tutorials's People

Contributors

apal4 avatar awalter17 avatar bdezonia avatar bnorthan avatar brossetti avatar ctrueden avatar dscho avatar ecmagnuson avatar elevans avatar etadobson avatar frauzufall avatar gselzer avatar hadim avatar hinerm avatar imagejan avatar kephale avatar kkangle avatar kmader avatar laulauthom avatar momoson avatar panovr avatar sonjoonho avatar stelfrich avatar tibuch avatar zjpetersen 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

tutorials's Issues

Neural Networks Branch

I had an idea for trying to bring convolutional neural networks to ImageJ. However, I see that there is a Neural Networks branch already here in the tutorials section. Is this already in active development? I tried to do some searching and didn't find much for plugins for ImageJ, but maybe I missed something?

Detection area

Hello,
I would like to apply a region detection on pictures of greenery tiles. I tried with a plugin growing region method and also the thresholding but the obtained results were bad. Please could you give me some other solutions allowing me to detect these areas of greenness.

This is an example picture:

img-320

Thank you.

ImageJ ij = new ImageJ() fails

Hi,

I've installed ImageJ as a library for my project using the gradle line

compile 'net.imagej:imagej:2.0.0-rc-9-SNAPSHOT'

which seemed to download every ImageJ package known to man. I'm now trying to get the simplest example working, i.e.

import net.imagej.ImageJ;
...
ImageJ ij = new ImageJ();

but I get a long stack trace of errors which ends with 'error in opening zip file' (see below). Any idea of what's going on?

thanks!
Ryan

Full stack trace
java.lang.IllegalArgumentException: Cannot handle replace call to list in ij.Menus's public static synchronized java.lang.String[] getPlugins()
    at net.imagej.patcher.CodeHacker.replaceCallInMethod(CodeHacker.java:724)
    at net.imagej.patcher.CodeHacker.replaceCallInMethod(CodeHacker.java:649)
    at net.imagej.patcher.LegacyExtensions.addExtraPlugins(LegacyExtensions.java:475)
    at net.imagej.patcher.LegacyExtensions.injectHooks(LegacyExtensions.java:175)
    at net.imagej.patcher.LegacyInjector.inject(LegacyInjector.java:286)
    at net.imagej.patcher.LegacyInjector.injectHooks(LegacyInjector.java:87)
    at net.imagej.patcher.LegacyEnvironment.initialize(LegacyEnvironment.java:101)
    at net.imagej.patcher.LegacyEnvironment.applyPatches(LegacyEnvironment.java:496)
    at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:365)
    at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:344)
    at net.imagej.legacy.DefaultLegacyService.<clinit>(DefaultLegacyService.java:113)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scijava.service.ServiceHelper.createServiceRecursively(ServiceHelper.java:301)
    at org.scijava.service.ServiceHelper.createExactService(ServiceHelper.java:268)
    at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:230)
    at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:193)
    at org.scijava.service.ServiceHelper.loadServices(ServiceHelper.java:165)
    at org.scijava.Context.<init>(Context.java:234)
    at org.scijava.Context.<init>(Context.java:195)
    at org.scijava.Context.<init>(Context.java:138)
    at org.scijava.Context.<init>(Context.java:98)
    at org.scijava.Context.<init>(Context.java:86)
    at net.imagej.ImageJ.<init>(ImageJ.java:82)
    at apps.RatMatlab.main(RatMatlab.java:106)
Caused by: java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 at 168
    at javassist.CtClassType.getClassFile2(CtClassType.java:204)
    at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:98)
    at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:84)
    at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:711)
    at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:688)
    at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:157)
    at javassist.compiler.ast.CallExpr.accept(CallExpr.java:46)
    at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:242)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:330)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
    at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:391)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:355)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
    at javassist.compiler.Javac.compileStmnt(Javac.java:569)
    at javassist.expr.MethodCall.replace(MethodCall.java:235)
    at net.imagej.patcher.CodeHacker$7.edit(CodeHacker.java:685)
    at javassist.expr.ExprEditor.loopBody(ExprEditor.java:192)
    at javassist.expr.ExprEditor.doit(ExprEditor.java:91)
    at javassist.CtBehavior.instrument(CtBehavior.java:679)
    at net.imagej.patcher.CodeHacker$EagerExprEditor.instrument(CodeHacker.java:1278)
    at net.imagej.patcher.CodeHacker.replaceCallInMethod(CodeHacker.java:669)
    ... 27 more
Caused by: java.io.IOException: invalid constant type: 18 at 168
    at javassist.bytecode.ConstPool.readOne(ConstPool.java:1044)
    at javassist.bytecode.ConstPool.read(ConstPool.java:984)
    at javassist.bytecode.ConstPool.<init>(ConstPool.java:125)
    at javassist.bytecode.ClassFile.read(ClassFile.java:770)
    at javassist.bytecode.ClassFile.<init>(ClassFile.java:114)
    at javassist.CtClassType.getClassFile2(CtClassType.java:191)
    ... 47 more
java.lang.IllegalArgumentException: Cannot handle app name in ij.ImageJ's public <init>(java.applet.Applet applet, int mode)
    at net.imagej.patcher.CodeHacker.replaceAppNameInCall(CodeHacker.java:445)
    at net.imagej.patcher.LegacyExtensions.insertAppNameHooks(LegacyExtensions.java:404)
    at net.imagej.patcher.LegacyExtensions.injectHooks(LegacyExtensions.java:290)
    at net.imagej.patcher.LegacyInjector.inject(LegacyInjector.java:286)
    at net.imagej.patcher.LegacyInjector.injectHooks(LegacyInjector.java:87)
    at net.imagej.patcher.LegacyEnvironment.initialize(LegacyEnvironment.java:101)
    at net.imagej.patcher.LegacyEnvironment.applyPatches(LegacyEnvironment.java:496)
    at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:365)
    at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:344)
    at net.imagej.legacy.DefaultLegacyService.<clinit>(DefaultLegacyService.java:113)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at java.lang.Class.newInstance(Class.java:442)
    at org.scijava.service.ServiceHelper.createServiceRecursively(ServiceHelper.java:301)
    at org.scijava.service.ServiceHelper.createExactService(ServiceHelper.java:268)
    at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:230)
    at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:193)
    at org.scijava.service.ServiceHelper.loadServices(ServiceHelper.java:165)
    at org.scijava.Context.<init>(Context.java:234)
    at org.scijava.Context.<init>(Context.java:195)
    at org.scijava.Context.<init>(Context.java:138)
    at org.scijava.Context.<init>(Context.java:98)
    at org.scijava.Context.<init>(Context.java:86)
    at net.imagej.ImageJ.<init>(ImageJ.java:82)
    at apps.RatMatlab.main(RatMatlab.java:106)
Caused by: java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 at 1
    at javassist.CtClassType.getClassFile2(CtClassType.java:204)
    at javassist.CtClassType.subtypeOf(CtClassType.java:304)
    at javassist.CtClassType.subtypeOf(CtClassType.java:319)
    at javassist.compiler.MemberResolver.compareSignature(MemberResolver.java:235)
    at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:107)
    at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:84)
    at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:711)
    at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:688)
    at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:157)
    at javassist.compiler.ast.CallExpr.accept(CallExpr.java:46)
    at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:242)
    at javassist.compiler.CodeGen.atStmnt(CodeGen.java:330)
    at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
    at javassist.compiler.Javac.compileStmnt(Javac.java:569)
    at javassist.expr.MethodCall.replace(MethodCall.java:235)
    at net.imagej.patcher.CodeHacker$4.edit(CodeHacker.java:426)
    at net.imagej.patcher.CodeHacker$4.edit(CodeHacker.java:440)
    at javassist.expr.ExprEditor.loopBody(ExprEditor.java:220)
    at javassist.expr.ExprEditor.doit(ExprEditor.java:91)
    at javassist.CtBehavior.instrument(CtBehavior.java:679)
    at net.imagej.patcher.CodeHacker$EagerExprEditor.instrument(CodeHacker.java:1278)
    at net.imagej.patcher.CodeHacker.replaceAppNameInCall(CodeHacker.java:401)
    ... 26 more
Caused by: java.io.IOException: invalid constant type: 18 at 1
    at javassist.bytecode.ConstPool.readOne(ConstPool.java:1044)
    at javassist.bytecode.ConstPool.read(ConstPool.java:984)
    at javassist.bytecode.ConstPool.<init>(ConstPool.java:125)
    at javassist.bytecode.ClassFile.read(ClassFile.java:770)
    at javassist.bytecode.ClassFile.<init>(ClassFile.java:114)
    at javassist.CtClassType.getClassFile2(CtClassType.java:191)
    ... 47 more
/Users/ryan/.gradle/caches/modules-2/files-2.1/com.github.fommil.netlib/all/1.1.1/725430bbcafc5384699fcc73c106502870b24d3e/all-1.1.1.pom: java.util.zip.ZipException: error in opening zip file
/Users/ryan/.gradle/caches/modules-2/files-2.1/com.github.fommil.netlib/all/1.1.1/725430bbcafc5384699fcc73c106502870b24d3e/all-1.1.1.pom: java.util.zip.ZipException: error in opening zip file

Create tutorials for the ImageJ API

To aid developers in learning ImageJ2's API, we should add more tutorials:

  • intro-to-services
  • intro-to-plugins
  • intro-to-displays
  • intro-to-menus
  • intro-to-platforms
  • intro-to-uis
  • override-a-service
  • add-a-new-service
  • add-a-new-widget
  • add-a-new-display
  • add-a-new-platform
  • a-simple-plugin

Migrated-From: http://trac.imagej.net/ticket/1455

Properly dispose of contexts

Currently none of the tutorials dispose the Contexts they create. I'm worried that this will lead to "ImageJ tutorials won't quit" issues. For example: run the LoadAndDisplayDataset tutorial - after closing the opened image and log, imagej will still be running.

Not-to examples (imglib2)

Add a couple of examples how things can go wrong:

  • coordinate overflow - clamping
  • iterators used wrong (array image vs. cell image) - a bit like the "wrong copy" example

Useful Writing Plugin Setup Video

The ImageJ wiki doesn't go into enough detail how to set everything up in Eclipse + Maven (and an excessive amount of time re-reading), but this Youtube video is incredibly insightful how to get everything setup albeit a tad long to watch. This would make a great reference to point to for newcomers!

https://www.youtube.com/watch?v=YIWpoBnnLio

Problems with %classpath

After installation of pyimagej according to the Link,
image

I tried run attached notebook as instructed, however, it fails on the %classpath command.
Is there anything I might have missed, please?
image

The following libraries are installed on my conda environment.

# packages in environment at C:\Users\sec\Anaconda3\envs\scijava:
#
# Name                    Version                   Build  Channel
attrs                     19.1.0                     py_0    conda-forge
backcall                  0.1.0                      py_0    conda-forge
blas                      1.0                         mkl  
bleach                    3.1.0                      py_0    conda-forge
ca-certificates           2019.9.11            hecc5488_0    conda-forge
certifi                   2019.6.16                py37_1    conda-forge
cloudpickle               1.2.2                      py_0    conda-forge
colorama                  0.4.1                      py_0    conda-forge
cycler                    0.10.0                     py_1    conda-forge
cytoolz                   0.10.0           py37hfa6e2cd_0    conda-forge
dask-core                 2.4.0                      py_0    conda-forge
decorator                 4.4.0                      py_0    conda-forge
defusedxml                0.5.0                      py_1    conda-forge
entrypoints               0.3                   py37_1000    conda-forge
freetype                  2.10.0               h563cfd7_1    conda-forge
icc_rt                    2019.0.0             h0cc432a_1  
icu                       64.2                 he025d50_1    conda-forge
imageio                   2.5.0                    py37_0    conda-forge
imglyb                    0.3.5            py37h5ca1d4c_0    conda-forge
intel-openmp              2019.4                      245  
ipykernel                 5.1.2            py37h5ca1d4c_0    conda-forge
ipython                   7.8.0            py37h5ca1d4c_0    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
ipywidgets                7.5.1                      py_0    conda-forge
jedi                      0.15.1                   py37_0    conda-forge
jgo                       0.4.0                    py37_0    conda-forge
jinja2                    2.10.1                     py_0    conda-forge
jpeg                      9c                hfa6e2cd_1001    conda-forge
jsonschema                3.0.2                    py37_0    conda-forge
jupyter                   1.0.0                      py_2    conda-forge
jupyter_client            5.3.3                    py37_1    conda-forge
jupyter_console           6.0.0                      py_0    conda-forge
jupyter_contrib_core      0.3.3                      py_2    conda-forge
jupyter_contrib_nbextensions 0.5.1                    py37_0    conda-forge
jupyter_core              4.4.0                      py_0    conda-forge
jupyter_highlight_selected_word 0.2.0                 py37_1000    conda-forge
jupyter_latex_envs        1.4.4                 py37_1000    conda-forge
jupyter_nbextensions_configurator 0.4.1                    py37_0    conda-forge
kiwisolver                1.1.0            py37he980bc4_0    conda-forge
libblas                   3.8.0                    12_mkl    conda-forge
libcblas                  3.8.0                    12_mkl    conda-forge
libiconv                  1.15              hfa6e2cd_1005    conda-forge
liblapack                 3.8.0                    12_mkl    conda-forge
libpng                    1.6.37               h7602738_0    conda-forge
libsodium                 1.0.17               h2fa13f4_0    conda-forge
libtiff                   4.0.10            h6512ee2_1003    conda-forge
libxml2                   2.9.9                h9ce36c8_5    conda-forge
libxslt                   1.1.33               heafd4d3_0    conda-forge
lxml                      4.4.1            py37heafd4d3_0    conda-forge
lz4-c                     1.8.3             he025d50_1001    conda-forge
m2w64-gcc-libgfortran     5.3.0                         6  
m2w64-gcc-libs            5.3.0                         7  
m2w64-gcc-libs-core       5.3.0                         7  
m2w64-gmp                 6.1.0                         2  
m2w64-libwinpthread-git   5.0.0.4634.697f757               2  
markupsafe                1.1.1            py37hfa6e2cd_0    conda-forge
matplotlib                3.1.1                    py37_1    conda-forge
matplotlib-base           3.1.1            py37h2852a4a_1    conda-forge
maven                     3.6.0                         0    conda-forge
mistune                   0.8.4           py37hfa6e2cd_1000    conda-forge
mkl                       2019.4                      245  
mkl-service               2.3.0            py37hfa6e2cd_0    conda-forge
msys2-conda-epoch         20160418                      1  
nbconvert                 5.6.0                    py37_1    conda-forge
nbformat                  4.4.0                      py_1    conda-forge
networkx                  2.3                        py_0    conda-forge
notebook                  6.0.1                    py37_0    conda-forge
numpy                     1.17.1           py37hc71023c_0    conda-forge
olefile                   0.46                       py_0    conda-forge
openjdk                   8.0.192                    1003    conda-forge
openssl                   1.1.1c               hfa6e2cd_0    conda-forge
pandoc                    2.7.3                         0    conda-forge
pandocfilters             1.4.2                      py_1    conda-forge
parso                     0.5.1                      py_0    conda-forge
pickleshare               0.7.5                 py37_1000    conda-forge
pillow                    6.1.0            py37h643dfcc_1    conda-forge
pip                       19.2.3                   py37_0    conda-forge
prometheus_client         0.7.1                      py_0    conda-forge
prompt_toolkit            2.0.9                      py_0    conda-forge
psutil                    5.6.3            py37hfa6e2cd_0    conda-forge
pygments                  2.4.2                      py_0    conda-forge
pyimagej                  0.4.0                 py37_1001    conda-forge
pyjnius                   1.2.0            py37hf78f419_0    conda-forge
pyparsing                 2.4.2                      py_0    conda-forge
pyqt                      5.9.2            py37h6538335_4    conda-forge
pyrsistent                0.15.4           py37hfa6e2cd_0    conda-forge
python                    3.7.3                h510b542_1    conda-forge
python-dateutil           2.8.0                      py_0    conda-forge
pywavelets                1.0.3            py37h452e1ab_1    conda-forge
pywin32                   224             py37hfa6e2cd_1000    conda-forge
pywinpty                  0.5.5                 py37_1000    conda-forge
pyyaml                    5.1.2            py37hfa6e2cd_0    conda-forge
pyzmq                     18.1.0           py37h16f9016_0    conda-forge
qt                        5.9.7                h506e8af_3    conda-forge
qtconsole                 4.5.5                      py_0    conda-forge
rise                      5.5.1                    py37_0    conda-forge
scikit-image              0.15.0           py37he350917_2    conda-forge
scipy                     1.3.1            py37h29ff71c_0  
scyjava                   0.2.3                    py37_0    conda-forge
send2trash                1.5.0                      py_0    conda-forge
setuptools                41.2.0                   py37_0    conda-forge
sip                       4.19.8          py37h6538335_1000    conda-forge
six                       1.12.0                py37_1000    conda-forge
sqlite                    3.29.0               hfa6e2cd_1    conda-forge
terminado                 0.8.2                    py37_0    conda-forge
testpath                  0.4.2                   py_1001    conda-forge
tk                        8.6.9             hfa6e2cd_1003    conda-forge
toolz                     0.10.0                     py_0    conda-forge
tornado                   6.0.3            py37hfa6e2cd_0    conda-forge
traitlets                 4.3.2                 py37_1000    conda-forge
vc                        14.1                 h0510ff6_4  
vs2015_runtime            14.16.27012          hf0eaf9b_0  
wcwidth                   0.1.7                      py_1    conda-forge
webencodings              0.5.1                      py_1    conda-forge
wheel                     0.33.6                   py37_0    conda-forge
widgetsnbextension        3.5.1                    py37_0    conda-forge
wincertstore              0.2                   py37_1002    conda-forge
winpty                    0.4.3                         4    conda-forge
xz                        5.2.4             h2fa13f4_1001    conda-forge
yaml                      0.1.7             hfa6e2cd_1001    conda-forge
zeromq                    4.3.2                h6538335_2    conda-forge
zlib                      1.2.11            h2fa13f4_1006    conda-forge
zstd                      1.4.0                hd8a0e53_0    conda-forge

NoSuchServiceException in tutorial code about services

Hey guys,

I was just trying the "Create a new Plugin Type" example, because I'm really curious on how to use this plugin mechanism. The code is located here:

https://github.com/imagej/imagej-tutorials/tree/master/create-a-new-plugin-type

When I run it (main function in CreateANewPluginType), I get this error meassage:

Exception in thread "main" org.scijava.NoSuchServiceException: Service AnimalService not found.
    at org.scijava.Context.service(Context.java:309)
    at org.scijava.AbstractGateway.get(AbstractGateway.java:116)
    at CreateANewPluginType.main(CreateANewPluginType.java:93)
    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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

And this is the line, where the error happens:

final AnimalService animals = ij.get(AnimalService.class);

I'm running on Java 1.8.0_66_jdk on MacOS 10.10.5 (inside IntelliJ 2016.1)

Thanks!
Robert

A connection to the notebook server could not be established.

Jupyter keeps reporting the problem about being unable to connect to kernel:

A connection to the notebook server could not be established. The notebook will continue trying to reconnect. Check your network connection or notebook server configuration.

I have followed the steps from the readme file, tried to downgrade tornado as per this stackoverflow response and I am running on Debian testing:

$ python --version
Python 3.7.3
$ jupyter --version
jupyter core     : 4.5.0
jupyter-notebook : 5.7.4
qtconsole        : 4.4.3
ipython          : 7.3.0
ipykernel        : 5.1.0
jupyter client   : 5.3.3
jupyter lab      : not installed
nbconvert        : 5.4.1
ipywidgets       : 7.4.2
nbformat         : 4.4.0
traitlets        : 4.3.2
$ conda list
# packages in environment at /home/<my-username>/.conda/envs/scijava:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main
asn1crypto                1.2.0                    py37_0    conda-forge
atomicwrites              1.3.0                      py_0    conda-forge
attrs                     19.3.0                     py_0    conda-forge
backcall                  0.1.0                      py_0    conda-forge
beakerx                   1.4.0                    py37_0    conda-forge
bleach                    3.1.0                      py_0    conda-forge
bzip2                     1.0.8                h516909a_1    conda-forge
ca-certificates           2019.10.16                    0
certifi                   2019.9.11                py37_0
cffi                      1.13.1           py37h8022711_0    conda-forge
chardet                   3.0.4                 py37_1003    conda-forge
cloudpickle               1.2.2                      py_0    conda-forge
cryptography              2.7              py37h72c5cf5_0    conda-forge
cycler                    0.10.0                     py_2    conda-forge
cytoolz                   0.10.0           py37h516909a_0    conda-forge
dask-core                 2.6.0                      py_0    conda-forge
dbus                      1.13.6               he372182_0    conda-forge
decorator                 4.4.0                      py_0    conda-forge
defusedxml                0.6.0                      py_0    conda-forge
entrypoints               0.3                   py37_1000    conda-forge
expat                     2.2.5             he1b5a44_1004    conda-forge
fontconfig                2.13.1            h86ecdb6_1001    conda-forge
freetype                  2.10.0               he983fc9_1    conda-forge
gettext                   0.19.8.1          hc5be6a0_1002    conda-forge
glib                      2.58.3            h6f030ca_1002    conda-forge
gst-plugins-base          1.14.5               h0935bb2_0    conda-forge
gstreamer                 1.14.5               h36ae1b5_0    conda-forge
icu                       64.2                 he1b5a44_1    conda-forge
idna                      2.8                   py37_1000    conda-forge
imageio                   2.6.1                    py37_0    conda-forge
imglyb                    0.3.5            py37h5ca1d4c_0    conda-forge
importlib_metadata        0.23                     py37_0    conda-forge
ipykernel                 5.1.3            py37h5ca1d4c_0    conda-forge
ipython                   7.8.0            py37h5ca1d4c_0    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
ipywidgets                7.5.1                      py_0    conda-forge
jedi                      0.15.1                   py37_0    conda-forge
jgo                       0.4.0                    py37_0    conda-forge
jinja2                    2.10.3                     py_0    conda-forge
jpeg                      9c                h14c3975_1001    conda-forge
jsonschema                3.1.1                    py37_0    conda-forge
jupyter                   1.0.0                    py37_7
jupyter_client            5.3.3                    py37_1    conda-forge
jupyter_console           6.0.0                      py_0    conda-forge
jupyter_contrib_core      0.3.3                      py_2    conda-forge
jupyter_contrib_nbextensions 0.5.1                    py37_0    conda-forge
jupyter_core              4.5.0                      py_0    conda-forge
jupyter_highlight_selected_word 0.2.0                 py37_1000    conda-forge
jupyter_latex_envs        1.4.4                 py37_1000    conda-forge
jupyter_nbextensions_configurator 0.4.1                    py37_0    conda-forge
kiwisolver                1.1.0            py37hc9558a2_0    conda-forge
libblas                   3.8.0               14_openblas    conda-forge
libcblas                  3.8.0               14_openblas    conda-forge
libclang                  9.0.0                hc9558a2_1    conda-forge
libffi                    3.2.1             he1b5a44_1006    conda-forge
libgcc-ng                 9.1.0                hdf63c60_0
libgfortran-ng            7.3.0                hdf63c60_2    conda-forge
libiconv                  1.15              h516909a_1005    conda-forge
liblapack                 3.8.0               14_openblas    conda-forge
libllvm9                  9.0.0                hc9558a2_2    conda-forge
libopenblas               0.3.7                h6e990d7_2    conda-forge
libpng                    1.6.37               hed695b0_0    conda-forge
libsodium                 1.0.17               h516909a_0    conda-forge
libstdcxx-ng              9.1.0                hdf63c60_0
libtiff                   4.0.10            hfc65ed5_1004    conda-forge
libuuid                   2.32.1            h14c3975_1000    conda-forge
libxcb                    1.13              h14c3975_1002    conda-forge
libxkbcommon              0.9.1                hebb1f50_0    conda-forge
libxml2                   2.9.9                hee79883_5    conda-forge
libxslt                   1.1.33               h31b3aaa_0    conda-forge
lxml                      4.4.1            py37h7ec2d77_0    conda-forge
lz4-c                     1.8.3             he1b5a44_1001    conda-forge
markupsafe                1.1.1            py37h14c3975_0    conda-forge
matplotlib                3.1.1                    py37_1    conda-forge
matplotlib-base           3.1.1            py37he7580a8_1    conda-forge
maven                     3.6.0                         0    conda-forge
mistune                   0.8.4           py37h14c3975_1000    conda-forge
more-itertools            7.2.0                      py_0    conda-forge
nbconvert                 5.6.1                    py37_0    conda-forge
nbformat                  4.4.0                      py_1    conda-forge
ncurses                   6.1               hf484d3e_1002    conda-forge
networkx                  2.4                        py_0    conda-forge
notebook                  5.7.8                    py37_0
nspr                      4.23                 he1b5a44_0    conda-forge
nss                       3.47                 he751ad9_0    conda-forge
numpy                     1.17.3           py37h95a1406_0    conda-forge
olefile                   0.46                       py_0    conda-forge
openjdk                   8.0.192           h14c3975_1003    conda-forge
openssl                   1.1.1d               h7b6447c_3
packaging                 19.2                       py_0    conda-forge
pandas                    0.25.2           py37hb3f55d8_0    conda-forge
pandoc                    2.7.3                         0    conda-forge
pandocfilters             1.4.2                      py_1    conda-forge
parso                     0.5.1                      py_0    conda-forge
pcre                      8.43                 he1b5a44_0    conda-forge
pexpect                   4.7.0                    py37_0    conda-forge
pickleshare               0.7.5                 py37_1000    conda-forge
pillow                    6.2.1            py37h6b7be26_0    conda-forge
pip                       19.3.1                   py37_0    conda-forge
pluggy                    0.13.0                   py37_0    conda-forge
prometheus_client         0.7.1                      py_0    conda-forge
prompt_toolkit            2.0.10                     py_0    conda-forge
psutil                    5.6.3            py37h516909a_0    conda-forge
pthread-stubs             0.4               h14c3975_1001    conda-forge
ptyprocess                0.6.0                   py_1001    conda-forge
py                        1.8.0                      py_0    conda-forge
py4j                      0.10.8.1                   py_0    conda-forge
pycparser                 2.19                     py37_1    conda-forge
pygments                  2.4.2                      py_0    conda-forge
pyimagej                  0.4.0                 py37_1001    conda-forge
pyjnius                   1.2.0            py37h93af967_0    conda-forge
pyopenssl                 19.0.0                   py37_0    conda-forge
pyparsing                 2.4.2                      py_0    conda-forge
pyqt                      5.12.3           py37hcca6a23_0    conda-forge
pyqt5-sip                 4.19.18                  pypi_0    pypi
pyqtwebengine             5.12.1                   pypi_0    pypi
pyrsistent                0.15.4           py37h516909a_0    conda-forge
pysocks                   1.7.1                    py37_0    conda-forge
pytest                    5.2.2                    py37_0    conda-forge
python                    3.7.3                h33d41f4_1    conda-forge
python-dateutil           2.8.0                      py_0    conda-forge
pytz                      2019.3                     py_0    conda-forge
pywavelets                1.1.1            py37hc1659b7_0    conda-forge
pyyaml                    5.1.2            py37h516909a_0    conda-forge
pyzmq                     18.1.0           py37h1768529_0    conda-forge
qt                        5.12.5               h0c104cb_0    conda-forge
qtconsole                 4.5.5                      py_0    conda-forge
readline                  8.0                  hf8c457e_0    conda-forge
requests                  2.22.0                   py37_1    conda-forge
rise                      5.5.1                    py37_0    conda-forge
scikit-image              0.16.2           py37hb3f55d8_0    conda-forge
scipy                     1.3.1            py37h921218d_2    conda-forge
scyjava                   0.2.3                    py37_0    conda-forge
send2trash                1.5.0                      py_0    conda-forge
setuptools                41.4.0                   py37_0    conda-forge
six                       1.12.0                py37_1000    conda-forge
sqlite                    3.30.1               hcee41ef_0    conda-forge
terminado                 0.8.2                    py37_0    conda-forge
testpath                  0.4.2                   py_1001    conda-forge
tk                        8.6.9             hed695b0_1003    conda-forge
toolz                     0.10.0                     py_0    conda-forge
tornado                   4.5.3                    py37_0
traitlets                 4.3.3                    py37_0    conda-forge
urllib3                   1.25.6                   py37_0    conda-forge
wcwidth                   0.1.7                      py_1    conda-forge
webencodings              0.5.1                      py_1    conda-forge
wheel                     0.33.6                   py37_0    conda-forge
widgetsnbextension        3.5.1                    py37_0    conda-forge
xorg-libxau               1.0.9                h14c3975_0    conda-forge
xorg-libxdmcp             1.1.3                h516909a_0    conda-forge
xz                        5.2.4             h14c3975_1001    conda-forge
yaml                      0.1.7             h14c3975_1001    conda-forge
zeromq                    4.3.2                he1b5a44_2    conda-forge
zipp                      0.6.0                      py_0    conda-forge
zlib                      1.2.11            h516909a_1006    conda-forge
zstd                      1.4.3                h3b9ef0a_0    conda-forge

Am I doing something wrong?

initialization error

I tried to run the Beaker demo, but for me it says: "Initialization failed".
If I then anyway try to run the first cell, where ImageJ is loaded, I get these error messages:

General error during conversion: Error grabbing Grapes -- [download failed: org.ow2.asm#asm;5.0.4!asm.jar, download failed: org.ow2.asm#asm-util;5.0.4!asm-util.jar, download failed: org.ow2.asm#asm-tree;5.0.4!asm-tree.jar, download failed: org.ow2.asm#asm-commons;5.0.4!asm-commons.jar]

I am using a Mac in case that could be part of the problem?!

Address dependency skew in BeakerX notebooks

Unfortunately, Maven has a serious bug in dependency resolution that is unlikely to ever be fixed.

The gist is: projects extending pom-scijava will not notice the bug. But projects which do not, yet depend on e.g. net.imagej:imagej:2.1.0, will inherit the wrong dependency versions.

While we could consider some workaround (such as embedding all version property values directly into every POM at release time 🥴), in the meantime, BeakerX in particular doesn't work as expected because it doesn't support importing versions from BOMs (twosigma/beakerx#7911).

Make a tutorial: how to port my plugin

We should make a tutorial that shows how to port a simple IJ1 plugin. For instance one could create an IJ2 plugin that relies on the legacy service. It would have a Display output. The run() method would be cut and paste from the IJ1 plugin. At the end the created ImagePlus would use legacy service to create associated display. (even calling registerImagePlus if you want to keep bidirectional translation in place)

Test that this approach would work and fix issues until it does.

Migrated-From: http://trac.imagej.net/ticket/1375

"ImageJ with Python Kernel" section 6.2 doesn't work

I'm not convinced section 6.2 (Example: Run a plugin: ij.py.run_plugin) of the "ImageJ with Python Kernel" is actually working.

If you look at the two plots of 'blobs' and 'results' [in the binder version], they appear to be identical. Definitely not blurred.

In fact, I'm running an almost identical version of this code locally and no matter what I try I don't seem to be able to get the result from Mean back into Python.

Python kernel error (in Binder): PYJNIUS_JAR environment variable not defined.

When running the ImageJ-with-Python kernel in Binder, executing the first cell results in:

ERROR 2019-01-02 23:03:02,049: Unable to import scyjava: PYJNIUS_JAR environment variable not defined.

Is this a problem with my environment, the environment on the Binder server, or something else entirely?

What do I need to do to run this kernel on my local machine?

GradientImage example has style issues

In the tutorial code we have a simple command example. It creates a GradientImage. However the code example uses bad style in that it is somewhat dependent upon the expectation that the created Img is backed by PlanarAccess. It uses setPlane(). This is to show users that they can ignore our generic types. But for the June 2013 beta release (beta 7) we are thinking that the Img creating/opening code will work in CellImgs depending upon the size of the Img. So we shouldn't encourage users to rely on setPlane(). Or we need to change its contract.

Migrated-From: http://trac.imagej.net/ticket/1850

Ensure creating services tutorial covers Service paradigms

Rarely when implementing a service do we directly extend 'AbstractService'.. instead we usually write a 'Handler' or 'Singleton' etc..

Since we have interfaces and abstract classes for common service patterns, we should advertise them!

How does one get started?

Forgive my ignorance. I am really interested in trying this out, but it is unclear to me how to get started. It seems that the purpose of the project is to provide Jupyter Notebooks through which people can familiarize themselves with the ImageJ ecosystem (and do cool things like use Python within ImageJ), and interact with it. However, how do you start? Following the first link (to ImageJ Jupyter Notebooks) leads to a page that tells me to scroll down. Doing so shows a couple of links. When clicking on those I see lines of code and comments, but nothing that I can interact with, change and no way to make this run myself (I discovered a button on the top right that says "Execute on Binder", but that leads to a long wait and then lots of errors).

Clearly, I am missing something very fundamental that is probably so simple that it is not worth mentioning. I tried cloning the project and follow the instructions to use maven, but that leads to starting up an ImageJ instance and a prompt to open an image, but nothing that I can interact with. Moreover, there are instructions to run one notebook, but how does one figure out how to run others?

LoadAndDisplay tutorial is broken

As originally reported in scijava/scijava-common#134, and at the least, the LoadAndDisplayDataset tutorial is currently broken.

  1. it relies on a broken version of the DefaultDatasetService. This can be resolved by updating to a version after this commit: imagej/imagej-common@e11b772

  2. It depends on the imagej-legacy component. We really don't want to be using imagej-legacy to open stuff because the whole point of these tutorials is to showcase IJ2 API and functionality. But we also can't exclude imagej-legacy as a dep because it is needed at runtime by ImageJ. The below exception is thrown when trying to open any dataset via LoadAndDisplayDataset. This may be a true bug in imagej-legacy but, as stated above, we don't want to use imagej-leagcy anyway..

Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
    at net.imglib2.util.IntervalIndexer.indexToPosition(IntervalIndexer.java:149)
    at net.imagej.legacy.translate.ColorPixelHarmonizer.updatePosition(ColorPixelHarmonizer.java:226)
    at net.imagej.legacy.translate.ColorPixelHarmonizer.updateLegacyImage(ColorPixelHarmonizer.java:172)
    at net.imagej.legacy.translate.ColorImagePlusCreator.createLegacyImage(ColorImagePlusCreator.java:117)
    at net.imagej.legacy.translate.DefaultImageTranslator.createLegacyImage(DefaultImageTranslator.java:125)
    at net.imagej.legacy.translate.DefaultImageTranslator.createLegacyImage(DefaultImageTranslator.java:110)
    at net.imagej.legacy.LegacyImageMap.registerDisplay(LegacyImageMap.java:249)
    at net.imagej.legacy.LegacyImageMap.registerDisplay(LegacyImageMap.java:236)
    at net.imagej.legacy.display.LegacyImageDisplayViewer.view(LegacyImageDisplayViewer.java:111)
    at net.imagej.legacy.ui.LegacyUI$1.run(LegacyUI.java:172)
    at org.scijava.thread.DefaultThreadService$1.run(DefaultThreadService.java:147)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
    at java.awt.EventQueue.access$400(EventQueue.java:82)
    at java.awt.EventQueue$2.run(EventQueue.java:676)
    at java.awt.EventQueue$2.run(EventQueue.java:674)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Unify tutorials as scientific notebooks

We have tutorials in several places throughout the SciJava GitHub organizations and on the ImageJ wiki. Our goal is to create a coherent, ordered set of tutorials, through which new people can proceed in order to understand how to use the various APIs of the SciJava software stack.

Existing tutorials to unify

The following places have tutorials which we want to unify:

  • imagej/imagej-tutorials (this repository). These are currently structured as individual Maven projects, written in Java.
  • imglib/imglib2-tutorials. These are structured as a single Maven project, written in Java. They have a corresponding wiki page here. We probably want the contents of the wiki page to become the contents of the Beaker notebook. I.e.: we do not want to need a wiki page corresponding to each Beaker notebook.
  • scifio/scifio-tutorials. Structured as one Maven project for the core tutorials, and another one for the OME-based ones. We can likely eliminate that distinction—just migrate the OME-XML tutorial into the sequence somewhere.
  • imagej/imagej-scripting. These tutorials are written for the Script Editor. They use script parameters. We will need to carefully consider whether and how to convert them to Beaker notebooks. Perhaps we should have a separate set of tutorials for the Script Editor, centered here. It is for a potentially different audience.

How to unify?

We have initially settled on migrating everything to Beaker notebooks, with code written as Groovy nodes. We hope this will be more approachable for less experienced programmers, because we can then ignore many typing issues—especially ImgLib2's difficult recursive generics (e.g., T extends RealType<T>).

However, there are tradeoffs with this approach. Other possible unifications strategies we have considered, and which we may need to address separately somehow in some cases, include:

  • Make examples available inside ImageJ's Script Editor. This would have two big advantages: 1) tutorials shipped with ImageJ itself; 2) tutorials can use script parameters for convenience and succinctness.
  • Proper Maven projects with pom.xml and standard directory structure. The advantage of doing this is that some programmers really want to develop a Maven project, and want to know how to use ImageJ from that project. So the existing Maven examples actually illustrate that need very well.

Switching to Groovy will stop covering the above use cases. So we may need to continue to provide examples in the above two paradigms as well somehow.

The nice thing about the Groovy approach is that it works "standalone"—you create your ImageJ application context, and use it to do things, and that logic can be embedded in external software which is otherwise unrelated to ImageJ. Many programmers want to know how to do this. However, most scientific script writers do not need this, and instead want to write scripts that run from inside ImageJ.

In a perfect world, we would somehow autogenerate all three of these paradigms (Beaker, Script Editor, Maven project) from some common source. However, I currently believe doing that is infeasible. You can make a Maven project which builds Groovy code. However, that is of limited use for the people who want a Java-based Maven project. In general, converting code between languages has many pitfalls and edge cases.

So for now: we put everything into Beaker. Our goals are:

  1. One Beaker notebook per tutorial.
  2. Impose an order on the whole set of tutorials—i.e., number everything. Currently, some of the above are already ordered, and others have no stated order. There are many reasons that an ordered set of tutorials is more approachable.
  3. Use the advantages of the notebook where possible to effectively teach. In other words: these are not just big "bags of code"—we have text nodes as well. Use the notebooks as notebooks. E.g., they support Markdown syntax.
  4. Use the advantages of Groovy. It has many nice "syntactic sugar" etc. above and beyond what Java provides. We want the tutorials to focus on teaching the SciJava and ImageJ concepts, without lots of distracting boilerplate. While we are at it, they can have little "gems" which show off how convenient scripting languages are.
  5. Put all information in a single place, linked from the wiki centrally, so that everyone finds all these tutorials, instead of needing to hunt around in different places.

Open questions

  • Right now, the ImageJ tutorials do not emphasize that ImageJ is built on SciJava Common. E.g., there is a tutorial called intro-to-imagej-api which actually demonstrates core SciJava services—i.e., it does nothing imagej-specific whatsoever. Is this distinction important for our target audience(s)?
  • How to divide up the effort of migrating these tutorials between @panovr and @etarena?
  • How to cater to all target audiences as simply as possible? I.e.: which paradigm(s) are worth targeting?
    • Programmers need to see: A) how to make a Maven project; B) how to make a Gradle project; C) how to call from Java instead of Groovy; D) how to use the generics where applicable; E) how to create a new SciJava application context and propagate it.
    • Scripters need to see: A) how to write scripts which run from inside ImageJ/SciJava; B) how to write scripts which run from inside scientific notebooks like Beaker; C) how to write scripts which run standalone, on a cluster, etc.; D) how to use existing services and plugins from the current context, available as input parameters.
  • Is it worth targeting Jupyter notebooks as well? GitHub renders them, which is awesome, but they do not support Groovy out of the box (it might be possible via the JSR-223 Jupyter plugin, but that plugin is immature). We could use the Scala Jupyter kernel (see these tutorials by @kmader, which do so for a couple of ImageJ tutorials), but language translating between Groovy and Scala is very likely untenable, or at least extremely ugly. (Scala's type system is very sophisticated and complex—any automated translation from Groovy would probably use lots of raw types, which is highly un-Scala-esque.)
  • What content should live on the wiki? People look there for information. We can certainly link to the Beaker notebooks from the wiki, of course. But maybe we could be slicker: e.g., embed the Beaker notebook in the wiki page somehow...?
  • What tutorials are still missing from this whole bag of stuff? Surely there are a few/many which we never wrote, but need. That is really a separate issue from this one, but is worth thinking about at the same time this work is being done.

Where to start

The work is being done on the dev-manual branch of this repository.

To complete this work, that branch needs a Beaker notebook for each of the above linked tutorials, in a coherent order. So one approach is:

  1. Convert all tutorials to Beaker. Copy/paste, fix syntax errors, get them working.
  2. Decide on the order. Number everything. I.e.: make a table of contents.
  3. Clean up the notebooks to use more features of Groovy, and features of Beaker.
  4. Identify and isolate common repeated code, and split out that code into common helper methods of appropriate components. For example, all notebooks will need to display images which show the results of operations. Beaker can display Java BufferedImage objects inline seamlessly. But we need a helper method which takes an ImgLib2 data structure + plane position as input and produces a BufferedImage as return value, so that Beaker will show it. The first attempt at this code exists on the branch now, inside several notebooks. It needs to be factored out into an external method.

Resolve BeakerX component version skew (kotlin, okio, maybe more)

One reason we switched away from the SciJava Jupyter Kernel in favor of plain BeakerX Groovy is to avoid hardcoded dependency overlap between the notebook technology itself and the SciJava-component dependencies needed to use ImageJ et al. Unfortunately, there is now some overlap again causing conflicts, notably the Kotlin standard library, and the okio library. You can see this in the ImageJ-Tutorials-and-Demo notebook by changing the initialization blurb to:

%classpath config resolver scijava.public https://maven.scijava.org/content/groups/public
%%classpath add mvn
net.imagej imagej 2.1.0

And you'll get an error opening images via remote URLs.

But if you add:

com.squareup.okio okio 2.2.2

To the initialization, then the problem will disappear...

Maven IOException while reading renjin-core-0.8.1906.jar

I have not been able to build any of the tutorial projects. If I right-click on a pom.xml file (e.g. from add-rois) and select "Maven build", "Maven install", "Maven generate sources", etc, the action fails with the following error messages in the Console:

[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-rules) @ add-rois ---
[WARNING] Rule 5: org.apache.maven.plugins.enforcer.EnforceBytecodeVersion failed with message:
IOException while reading /Users/dgauntt/.m2/repository/org/renjin/renjin-core/0.8.1906/renjin-core-0.8.1906.jar
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (enforce-rules) on project add-rois: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]

I have set permissions as "Read/Write for Everyone" along the full path from .m2 down to renjin-core-0.8.1906.jar, but that did not work. The file renjin-core-0.8.1906.jar is at the path specified.

I am running Eclipse Oxygen 1 with Maven m2e installed on a Mac running El Capitan 10.11.6. I am new to Maven

Everything is out there... people just don't find it before they stop looking...

And yes... they should just look longer and be more persistent... but let me tell you... they aren't and this is how it is.

If you still want these people develop for you (or only just use things you did), I suggest the following (which we just discussed in the ImageJ hackathon dungeon on Sept. 6th).

Come up with some typical user profiles and assemble pages tailored to suit the needs of exactly these people and their level of knowledge. The most important thing here is not adding new information to the wiki etc., but making this content easily digestible and available in a linear sequence of things to go through -- a thing that is VERY hard for people entering this infinite world of stuff you should know to not feel the pain of starting.

In some sense such a page is like a thing a person would want... say... How can I write an ImageJ2 Plugin? And lets say we now discuss this not in terms of a user that is a geek already but a computer affine biologist. Obviously this will take a while to learn then because you also need to learn about eclipse, maven, ImgLib2, etc., so maybe the page starts with a TOC that shows a good sequence to learn about this things + an time one would expect for this. The person finding such a page is then prepared to have to learn shitloads of things and most likely have to spend like 5 complete days. This is how it is, but hey... now at least the hard facts are clear from moment one and not only visible after several hours of painful random search for a solution the searching person has NO CLUE ABOUT.

Note that the kind of pages I speak about are at the end only link to other existing pages, the problem of creating them is therefore not of any technical difficulty but really 'only' about being smart about how to guide people through the 'land of pain' without making them falter and stop the journey before reaching their goal.

Every time we see a person that start on an endeavor to 'the land of pain' we might help this person to easily assemble a wiki page where he simultaneously types in his experience... in this way we at least get a trace of his trip -- most likely a good starting point to then make a page of the kind I have in mind.

Hope my thoughts make any sense in the way I describe them,
Florian

PS: any page of this kind in even the rawest of shapes I would be happy read through and help improving... let me know!

DynamicCommand: combobox in the example never gets updated

I just pulled the latest changes of this repository and tried to get DynamicCallbacks
running. Now the KindOfThing does not seem to trigger the update of the Thing. I put a breakpoint here and indeed the callback gets triggered.

The question being; am I doing something wrong, or does the MutableModuleItem need a nudge to update the content of its components?

HowTo wishlist

Who has more questions?

Can others edit this post? If not, just answer and I update the list. We could also add the user handle next to a question if someone volunteers to solve a specific one-

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.