Founder - New York City J Users Group
Email: <<MailTo(devon AT SPAMFREE acm DOT org)>>
J Wiki Pages
Following are largely ones I've written but also includes those related to areas in which I'm interested.
o Array-thinking: an explanation of the fundamental difference between array-thinking and scalar-thinking and how the former helps us think about algorithms.
o An attempt at a minimal subset of J to ease the shock of learning all that there is.
o An example of using J for beginning financial data analysis.
o OLEExcel - manipulate Excel worksheets using OLE interface: Scripts/OLEExcel
o WS - save J variables to file and retrieve them: Scripts/File J Variables
o An early (unsuccessful) attempt to use the J database "JDB" on the "Netflix Challenge" data. It appears to have been unsuccessful because this dataset was too large for JDB to handle.
o Start of an attempt to detail J equivalents of basic operations in Microsoft Excel.
o An essay contrasting visual understanding with symbolic understanding.
o BigFiles - work with files larger than 2 GB: Scripts/Working with Big Files. This is now largely obsolete with the advent of 64-bit versions of J that have extended the scope of the file primitives to handle larger files.
o Some general limitations to consider when parallelizing code.
o Simple example of writing parallel code in J.
o Detailed example of how to simply parallelize code in J. This assumes the (common) sort of problem where coordination of the various parallel processes can be handled at the point where a "master" process spins them off and that the problem domain lends itself to "coarse" parallelism. I currently run two multi-core J routines almost every day using this technique and it's worked well for years now with substantial speed-ups and little difficulty.
o Complete examples of parallel J code presented at the APL2010 conference in Berlin, Germany, in September, 2010. These are the two examples of parallel code tasks, mentioned above, as well as an implementation of mutex (mutual exclusion), all written in J (version 6.02).
o Ideas on constructing arbitrarily-large datasets for comparing the effectiveness of different parallel implementations.
o "Red or Black" game simulation -> parallelization example NYCJUG/2011-04-12/RedOrBlackGameSimulation
Presentations About J
Feel free to take anything from these for your own presentation.
o "J: the Hard Parts" - a fairly lengthy talk explaining some of the parts of J that most people find the most difficult to comprehend, given to the N-Languages Meetup group on January 21, 2014.
o Presentation of J to a "Functional Programmers" Meetup group on September 20, 2011.
o "Short is Sweet" - An exposition on the importance of succinct expression (from a talk for the Kdb User Group on 12/9/2009).
This page gives a complete list of all J foreign conjunctions.
These are the steps J follows upon start up.
Here are command-line parameters for starting J with various options.
Solving Problem Reading Images in JConsole
I've had a recurring issue with many J upgrades: they break the code I use the most often. What breaks is the call to underlying verb wdreadimg, like this:
herbs=. read_image 'Herbs1.jpg' |domain error: cd | m=. wdreadimg(utf8,y);wh=.2$2-2
The immediate cause of the problem is in the definition of wdreadimg:
wdreadimg '"jqt.dll" wdreadimg >+ x *c *i'&cd
In the 8.04 version of J where this code still worked, that verb was defined this way:
wdreadimg '"E:/Users/DevonMcC/j64-804/bin/jqt.dll" wdreadimg >+ x *c *i'&cd
However, the exact sequence by which this gets defined differently is obscure, and doing the equivalent assignment in J 8.07 revealed the absence of the jqt.dll file in the 8.07 bin sub-folder. Copying this there did not help.
The break-through came from looking at an older email chain where I'd written to the J Forum about my problems. In this chain, Ric Sherlock discovered that the underlying image reader from the jqt package, readimg_jqtide_, worked for .png files but not for .jpg files. He eventually came up with this fix:
from: bill lam <email@example.com> via forums.jsoftware.com to: Programming forum <firstname.lastname@example.org> date: Jun 15, 2017, 12:49 AM subject: Re: [Jprogramming] Location of "readimg" I had tried again and might had found a solution. Apparently just loading qtlib under jconsole failed to locate the qt plugin folder. It needs to set env QT_PLUGIN_PATH to the path of J bin directory where contains the Qt dll files. This can be automated by adding a line into jconsole.cmd @rem load J console @rem run from the J install directory @cd /d %~dp0 @set QT_PLUGIN_PATH=%~dp0bin @bin\jconsole.exe then click on jconsole.cmd to launch 2!:5'QT_PLUGIN_PATH' D:\j805\bin load'ide/qt/qtlib' $readimg_jqtide_ jpath '~temp/toucan.png' 144 200 $readimg_jqtide_ jpath '~temp/toucan.jpg' 144 200
With this insight, I modified my J-launcher utility J64-807.bat to look like this:
Rem J64-807.bat: start 64-bit jconsole v8.07 of J (under emacs). %BASEDSK% Rem cd "%BASEDSK%\Users\devon_mccormick\j64-807\bin" cd "%BASEDSK%\Users\DevonMcC\j64-807\bin" Rem "-interactive" signals not a batch run ..\jconsole.cmd %BASEDSK%\amisc\JSys\J8\DHMConfig.ijs -interactive -js "1!:44 '\amisc\work\neuralNets\'"
(The bit at the end following "-js" is something I change as my default working area changes)
To make this work properly by making jconsole.cmd process the command-line arguments I typically provide, I had to modify that file in the 8.07 installation directory to be like this:
@rem load J console @rem run from the J install directory @cd /d %~dp0 @set QT_PLUGIN_PATH=%~dp0bin @bin\jconsole.exe %1 %2 %3 %4 %5 %6 %87 %8 %9
So, it looks like I now have a 8.07 installation that does not break my most-used code.
Feedback -- leave me /Comments