Anyone may join in live for discussion, but there’s a limit to how many folks can be joined at once, so only come if you actually want to talk. Otherwise you can simply watch live, or watch later when it gets posted on YouTube.
Watch the recorded conversation here:
Hi to David Ray, Matt and all other contributors to the Java HTM.
I am Joe Perez, watching this great interview from Germany. I want to thank Dave and Matt for the great, open format of this interview. I really enjoyed all the ideas and fascinating anectdotes you shared with us. Your introduction was also very nice, giving us insight into the very humanistic and altruistic motivations that you communicated very emotionally. I just want to mention this, because I want to you to know that someone (probably and hopefully one more of many) is out there watching and highly appreciates your kindness. I also share that kind of motivation. It is a wonderful thing, that people across continents can meet and collaborate on such great projects for the sake of progress and humanity. I really share these sentiments with you and could feel how our souls meet and touched while listening to your intro.
Having said this, I would like to ask whether Dave, Matt or anyone else has ever heard of a great open source platform which is a workflow workbench called KNIME. You can and should check it out under Knime.org if you have not. KNIME is a wonderful platform that is built upon the IDE called Eclipse (which is also open source) and KNIME allows you to use a library of so called, nodes (which do processing) and connect them in any workflow sequence that one would like in order to apply multiple steps of processing and combine them with data analysis nodes. There are also splitter nodes that separate data streams and meta nodes for metadata. The KNIME platform is one of the most powerful tools (workbench) for data science and machine learning and even for biomedical simulations and chemical process analysis. I would love to create some new nodes for KNIME which do the HTM encoding and then more nodes for the HTM core processes like spatial pooling and temporal pooling, etc. This would allow for a very flexible set of nodes that could be combined with the more than 1000 other already existing nodes in KNIME for data analysis, conversion etc. I have just learned, that in order to create a new customized KNIME node, one needs the algorithm in Java. This is the reason I am turning to this community to ask whether any one has already tried any implementation for KNIME and if not, whether you would look into KNIME (just taking a short tour of the website and watching a youtube tutorial on KNIME, would give you a quiick in-depth impression of its power) and let me know whether you could recommend that I pursue this project? Thank you very much in advance for your views on this issue.
Wow. What a wonderful communication and acknowledgment! I’m pretty sure I can speak for Matt and all the other developers who have dedicated their personal time and effort to contributing to HTM.java - also when I say, “Thank you, so much!” Matt has done a wonderful job nurturing and building the HTM community and it has not only been a privilege to be a part of that, but also very life-changing as well. So again, thank you Joe.
To answer your question, I actually have worked quite extensively in KNIME (through my job with Cortical.io). I’m not exactly free to say what Cortical.io’s involvement is with it since it is an internal project, but there has been a lot of attention focused on that technology. I agree that it is a wonderful technology with a lot of utility for machine intelligence/learning and streaming-data driven applications.
Unfortunately, the work was at least put on hold because they have a heavy investment in the older “Swing” technology (JavaFX is the current UI Toolkit moving forward), and it kind of “shackled” KNIME development to Java 7 and below… I can’t really speak of the current status of it though because their slow or stunted adoption of Java 8 caused us to put it on the back burner so to speak. To be fair, migrating to Java 8 is a particular challenge for KNIME because of the extent of Eclipse integration within that platform. This means the necessity for bridging technology between SWT (their native UI Toolkit) to the newer JavaFX - which Eclipse isn’t natively poised for doing makes it a bit difficult to extend (at least that’s my take on why it has been slow to arrive). I think it has been several months since I “dropped in” to see what the current status is with Java 8 adoption, but as you may or may not know, Java 8 is the minimum Java version for HTM.java.
Java 8 brought with it such radical and beneficial enhancements to the Java language that I decided not to maintain two different versions of HTM.java and make full use of the newest API (i.e. Streams within the Network API). As such, there are many places where the use of lambdas and other Java 8 specific constructs are used, and to use it with KNIME would mean to basically maintain two versions of the same codebase - something I just don’t have enough time (nor any interest at all) in doing.
That being said, I believe it would be technically possible to “downgrade” the individual algorithms to Java 7 - mostly because this is something I did for Cortical.io, but the Network API is a total non-starter for Java 7. I believe it would be possible for an extraordinarily committed individual with lots of free time to do - but I really wouldn’t recommend it. This I say mainly because HTM.java is likely to change very much in the upcoming weeks and months (to keep pace with algorithm improvements etc.); making maintenance of a Java 7 version a total nightmare going forward.
Are you aware of any change in the status of their Java 8 support? It would definitely be worth while to keep an eye on the possibility of Java 8 adoption - and if and when it becomes available, this would become a much encouraged avenue for HTM.java expansion!
Anyway thanks again for your kind words and for your interest in HTM.java.
Thank you very much for your very thorough response and all the good arguments on the Java version incompatabilities and your advice not to pursue a downgrade to Java 7 with double code maintenance, considering your expected high volumn of changes in the Java.htm. I was not aware of any of this, but will certainly follow your advice. I will check out the status of the KNIME support for Java 8 (or their plans) if that information is available and return with that information.
I only have one other thought, regarding the use of Java.htm within KNIME. If I am not mistaken, KNIME also supports the creation of so called, Wrapper Nodes. This type of node, if I am not mistaken, does not try to implement the entire algorithm within the node, but just uses a wrapper, to call an external program and run it, using the input and output ports of the wrapper node. I am not very experienced with KNIME yet, but I did bump into a KNIME wizard which is designed to help create such nodes. I will do a little more research and let you know whatever I learn about this. I am currently working full-time and doing this only on my spare time, so my progress may take a while.
Thank you for all of what you have shared with this community. I certainly understand that you cannot reveal certain details of your, or Cortical.io’s involvement with KNIME under such circumstances. Please do not feel obliged in the least to share anything compromising. I am very glad that you also know that tool and value its potential. Since KNIME is a swiss / german tool, in its origins and I am working in Germany, this is a tool which several of my colleagues already know and use. I will see what I can learn about these issues and let you know, before I put any serious effort into such a project.