StackOverflowException when generating reference documentation

This is really strange - it's happening on our build server but not when we build locally:

Process is terminated due to StackOverflowException.
Running build failed.
Error:
System.Exception: generating reference documentation failed
at FSI_0001.Build.clo@194-19.Invoke(Unit _arg3) in C:\Builds\14\FSharp.ToolBelt\FSharp.ToolBelt  Nuget Release\src\build.fsx:line 196
at Fake.TargetHelper.runTarget@329(String targetName) in  C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 343
Status:        Failure

Can you share what is in build.fsx on line 196?
If this is invoking F# Formatting to generate XML documentation, then I think we might have seen this error before (cc @matthid). But the best choice would be to update to the latest F# Formatting, where a lot of things have been significantly improved (thanks to @matthid's great work :-))

Sure, 196 is the second line of:
Target "GenerateReferenceDocs" (fun _ ->
    if not <| executeFSIWithArgs "docs/tools" "generate.fsx" ["--define:RELEASE"; "--define:REFERENCE"] [] then
      failwith "generating reference documentation failed"
)

What's the best way to update? Just pull the latest docs/tools from the scaffold git?

It's hard to tell without the stack trace of the overflow, however most of the time when this happens it is related to FSharp.Compiler.Service getting an invalid FSharp.Core.dll and FSharp.Core.(optdata/sigdata) combination.
To further track this down:
Is your build setup to emit a FSharp.Core.dll in the output directory? Can you try emitting FSharp.Core.sigdata and FSharp.Core.optdata as well or try removing any FSharp.Core related files?
Is FSharp actually installed on the build server?
What OS is your build server using?
FSharp.Formatting version? Mono version? F# version?
Can you try to get the underlying stack trace. For example by running the fsi directly with
cd docs/tools && mono --debug fsi.exe generate.fsx --define:RELEASE --define:REFERENCE

Further information: http://fsharp.github.io/FSharp.Compiler.Service/corelib.html
and http://fsharp.github.io/2015/04/18/fsharp-core-notes.html

I am experiencing the same behavior. What is strange is, that running fsi.exe generate.fsx --define:RELEASE --define:REFERENCE works

but running build GenerateReferenceDocs not

To answer the other questions:
Is your build setup to emit a FSharp.Core.dll in the output directory? YES, 4.3.1 Can you try emitting FSharp.Core.sigdata and FSharp.Core.optdata as well or try removing any FSharp.Core related files?
Is FSharp actually installed on the build server? YES, this is from my dev machine
What OS is your build server using? Windows 8.1
FSharp.Formatting version? FSharp.Formatting.2.9.6.nupkg (upgrading to the latest version from github did not help)
Mono version? No Mono, .NET
F# version? 4.3.1

I had this same problem. What solved it for me was to remove references to FSharp.Core from the offending projects and re add it. Works like a dream now!

I'm experiencing the same problem; @troykershaw by removing and re-adding FSharp.Core; did you manually edit the .fsproj files? AFAIK it is not possible to remove the FSharp.Core reference from the References folder in the project  (in Visual Studio).

This was fixed way back


Create build pipelines for Rafter

Description
Create build pipelines for Rafter
Changes proposed in this pull request:

Makefiles are adjusted to the new repository structure
Unit tests and formatters are executed and checked

Related issue(s)
See also: https://github.com/kyma-project/rafter/issues/3

Also I found error in tests on running docker-build target

Do you have kubebuilder installed?

Quick review.  Maybe better would be separate run for license in dockerfiles, and add for then guard with true statement if build fail? What do you thinking about that?

RUN go build -a -o main cmd/manager/main.go \
    && mkdir /app \
    && mv ./main /app/main \
    && if [ -f ${BASE_APP_DIR}/licenses ]; then mv ${BASE_APP_DIR}/licenses /app/licenses; fi

would work; I think it's a good idea

/test all

/test pre-rafter

/meow

/test all

/test all

/test all


setExpirationHops() bug

The bug can recur very easily.
<?php
use Zend\Captcha\Figlet;

require 'vendor/autoload.php';

$captcha = new Figlet();

if (empty($_GET['input'])) {
    $captcha->getSession()->setExpirationHops(1);
    echo $id = $captcha->generate() . '<br>';
    echo $word = $captcha->getWord();
} else {
    var_dump(
        $captcha->isValid(
            [
                'id' => $_GET['id'],
                'input' => $_GET['input']
            ]));
}

In generate stage I set expirationHops to 1. Validation stage can be executed many times and will always output bool(true).
I dive into the code and find the cause.
In class Zend\Captcha\AbstractWord (line 253)
    /**
     * Get session object
     *
     * @throws Exception\InvalidArgumentException
     * @return Container
     */
    public function getSession()
    {
        if (! isset($this->session) || (null === $this->session)) {
            $id = $this->getId();
            if (! class_exists($this->sessionClass)) {
                throw new Exception\InvalidArgumentException("Session class $this->sessionClass not found");
            }
            $this->session = new $this->sessionClass('Zend_Form_Captcha_' . $id);
            $this->session->setExpirationHops(1, null);
            $this->session->setExpirationSeconds($this->getTimeout());
        }
        return $this->session;
    }

In validation stage "$this->session->setExpirationHops(1, null);" will reset expirationHops. But expirationHops will not take effect in the same request. So after isValid() hops will always be 1.

This repository has been closed and moved to laminas/laminas-captcha; a new issue has been opened at https://github.com/laminas/laminas-captcha/issues/1.


Update tessolarcharge.py

fix errors in previous commit that stopped script from functioning correctly:
-import requests (was causing error when trying to get solar/consumption data from pypowerwall),
-fix UpdateSense() (error was unable to get car charging voltage),
-fix error that would cause "stop charging" command to send again a second time an hour after night-time stop charging,
-run main only if executing script.

Thanks @venturanc !


Update translations for 3.2.7

Version 3.2.7 is finally ready, so now it has come the time to update our translations for this release.
This is a call to all our translators to update their respective translations. Please create separate pull requests for each language:

French

@goanpeca
@Prikers

Japanese

@sohnishi

Portuguese (Brazilian)

@manipuladordedados

Russian

@burrbull
@Qlogin

Spanish

@ccordoba12

Important notes:

We can only wait for you until Wednesday February 28 at 00:00 am UTC for your pull requests. There are 17 strings to be updated or translated.
Don't forget to do your PRs against the 3.x branch.

I'd like to join the Russian translation team. How do I do it? How do I know what strings have been changed since last release?

В преддверии релиза обновляются po-файлы в ветке 3.x. Открывать с помощью Poedit.
Редактируешь (синие и коричневые - новые строки), сохраняешь, генерируешь mo. И оба (po и mo) возвращаешь в ту же ветку.
Создаешь PR.

This is ready. Thanks to all for your help!


add new section 'What to use Josh for and when to use it'

To make josh.js more approachable to a larger number of users—from informed developers to curious passersby and new and interested visitors—I have added a new section to the josh.js README. The section is entitled What to Use Josh.js for and When to Use It. As the name suggests, the new section, a brief paragraph, explains in plain and straightforward language what josh.js is used for and when one should use it.
Other repositories may begin to use this new informative and catchy section soon, as my colleagues contact open-source technologies in an effort to make them more accessible to the tens of thousands of new users learning to code and thousands joining GitHub every day.

Nice job !


explorer: integrate test coverage bars

This adds coverage bars in the explorer view. These are only shown when test coverage is open, and I took some care to avoid any performance hit when it's not. The idle case involves no DOM manipulation and just an observable listener on the test coverage service.
In the explorer, coverage is shown in its 'compact' view which will only render a single bar representing the user's chosen overall test coverage calculation (defaults to a weighted sum of all types of coverage available).
Works with rename, decorations, and ellipses overflow. Screenshot:

Detailed coverage information is shown when the user hovers on the coverage bar. We could optionally drop the displayed % number and just let users hover for more detail; a complete overview is available in a dedicated Test Coverage view. Open to suggestions 🙂
I opted to implement this in the explorer files renderer versus in the decoration service, because coverage bars should not be shown anywhere the filename is renderer except for the explorer, unlike other decoration types. Most of this diff is just moving the computed tree creation into the test results service; you can see the existing TestCoverageBars.ts for implementation. (The tree is used to generate combined coverage numbers on e.g. directories where only individual files will generally report coverage)
For #123713

This looks fantastic! But I have some concerns with dependencies, can we make this a contributable feature like decorations?

Done in the most recent commit! Let me know what you think.


how to integrate the standalone viewer with orthanic

i have set up the stand alone viewer to be served by a nodejs server running hapijs
when i visit the url i can view the sample dicoms. Now i want to integrate it with orthanc that when a user clicks a link it will open a new tab with the viewer.
i assume that for the viewer to display dicoms it needs to be given a json with a format similer to the sampleDicom.json is the assumption correct or is their another way.
is their an easy way get a json file of the series that follows the sampleDicom.json format from orthanc rest api.
or is it possible to construct it manually from orthanc rest api
using something like https://www.npmjs.com/package/orthanc-client
i hope what i wrote makes sense english is not my first launguage

were you able to solve this issue? do you know how to open new files in the Stand Alone Viewer? I'm particularily have my DICOM files in their original folder which is hosted in AWS S3.
Any comment from your side would be really appreciated
Thanks

Yes i was able to, for it to work you have to construct a JSON object similar to the sampleDICOM.json
and pass the url of the JSON object to the url query parameter of the standalone viewer.
you can construct the json object by querying the orthanc  server api

thanks! yes I figure it out. The problem is that I cannot generate the JSON file correctly... not sure if the  StandaloneViewer supports every DICOM file... or just some of them .... For some reason the standalone viewer is displaying to me the following error:
Error: loadImageFromImageLoader: no image loader for imageId
at loadImageFromImageLoader (ohif_cornerstone.js?hash=b2d4f3d201840adb2975e3fbc1f00e4786b64831:6133)
at Module.loadAndCacheImage (ohif_cornerstone.js?hash=b2d4f3d201840adb2975e3fbc1f00e4786b64831:6199)
and this is my JSON file:
{
"transactionId": "study",
"studies": [
{
"studyInstanceUid": "1.2.8<IP_ADDRESS>80043.2.1208.154494870514920191158835635",
"studyDate": "20180817",
"studyTime": "080835.000000",
"patientName": "SANCHEZ MARIA DELIA",
"patientBirthDate": "20050226",
"patientId": "NO ID",
"patientSex": "F",
"seriesList": [
{
"seriesInstanceUid": "1.2.8<IP_ADDRESS>80043.2.1208.254494870514920191158835642",
"seriesBodyPart": "SPINE LUMBAR",
"seriesNumber": "0001",
"seriesDate": "20180817",
"seriesTime": "080835.000000",
"seriesModality": "OT",
"instances": [
{
"columns": 3610,
"rows": 4400,
"instanceNumber": "0001",
"photometricInterpretation": "MONOCHROME2",
"bitAllocated": 16,
"bitsStored": 12,
"pixelRepresentation": 0,
"samplesPerPixel": 1,
"highBit": 11,
"rescaleSlope": "1.00",
"rescaleIntercept": "0.00",
"imageType": "ORIGINAL\PRIMARY\OTHER",
"sopInstanceUid": "1.2.8<IP_ADDRESS>80043.2.1208.354494870514920191158835644",
"url": "file://Users/johannamussolini/code/Viewers/StandaloneViewer/StandaloneViewer/private/testData/examples/1.2.8<IP_ADDRESS>80043.2.1208.154494870514920191158835635/1.2.8<IP_ADDRESS>80043.2.1208.254494870514920191158835642/1.2.8<IP_ADDRESS>80043.2.1208.354494870514920191158835644.dcm"
}
]
}
]
}
]
}
Not sure what is wrong...

i read some where that it only supports dicom p10 files but not sure where,
can you try putting the url of your dicom file in the sampleDICOM.json url field and see it it displays

yes, that was the problem, I cannot read the files locally (reference for the solution: https://github.com/OHIF/Viewers/issues/177#issuecomment-465627101). Thanks so much for replying back!

We're getting ready to formally announce version 2 of the OHIF Viewer. After the announcement, version 1 issues will receive lower priority support. As this issue is a bit stale, I'm going to close it for now.
For what it's worth, the easiest way to get Version 2 of the OHIF Viewer to work with Orthanc is to use it's DicomWeb plugin. Then, you can either:
recommended for production:

Host the OHIF Viewer separately (at a different domain)

Setup orthanc behind a reverse proxy
Set appropriate CORS headers
Configure the OHIF Viewer to connect to Orthanc

okay for development/local:

Build the app and use Orthanc's ServerFolder plugin to host the app

Configure the OHIF Viewer to connect to Orthanc

See here for more info: https://book.orthanc-server.com/faq/same-origin.html
Most of our example recipes use Orthanc, so they are also worth checking out:

https://docs.ohif.org/essentials/data-source.html#set-up-a-local-dicom-server
https://docs.ohif.org/deployment/recipes/nginx--image-archive.html
https://docs.ohif.org/deployment/recipes/user-account-control.html


Compile and display examples in documentation

This auto-compiles documentation, extending the existing approach to test examples.
It's over-engineered (I've been on a run of these the past week...). And the formatting for wide PRQL statements isn't good. But it does give us nice & always correct documentation, and snapshots it in our repo:

Tests will likely fail since we need to configure the pre-processor

Damn, this looks real nice. I also like how in .md files there is no compiled SQL, so it's less cluttered.
Do you think that live editor is still needed here if it is gonna be on the main page?

Do you think that live editor is still needed here if it is gonna be on the main page?

I'm not sure. It's fairly related to the language docs — i.e. it's for exploring the language as well as just a quick intro. When we get the site up & running we can remove it if it seems redundant though.
I was almost thinking we could make every example use it (rather than the table that this PR adds), but we'd probably need to do some work to simplify the monaco interface in that environment. (And possibly there are enough people who can't load the editor that it would be restrictive? not sure)


Can't grant location permissions on MacOs 14 (Sonoma)

I just upgraded to MacOs Sonoma 14.0 Beta (23A5286i).  I've been running corelocationCli for many years, and usually when I upgrade OSs I have to reinstall it using Brew.  However this time was different.
At first it actually worked just fine for a day.  Then it stopped working, and I was getting "The operation couldn’t be completed. (kCLErrorDomain error 0.)" despite wifi being on.
In an attempt to fix the issue, I did my usual of running 'brew reinstall --cask corelocationcli' (so I have the latest version as of 7/18/2023)
Now I'm getting "Location services are disabled or location access denied. Please visit System Preferences > Security & Privacy > Privacy > Location Services"
However, Location services are on.  But also, CoreLocationCLI is no longer in the list of things I can enable.
Thanks!

I see the same issue on 13.5.1.
2023 MacBook Pro, M2Max

Same issue on 13.5.2.
2023 M2 Max.

This issue persists on 14.1.1 unfortunately  - cannot get location.

same issue on macOS Sonoma 14.2.1

Trying to compile source code doesn't change anything.
I will try to follow this workaround and see if it does anything.

Could you please provide me with the AppleScript?

Sorry for the delayed response,
Here`s the apple script that I found.
you need to export it with the App format, then launch it a first time as an app and allow it to access your location.
From here you can use the embedded script through your terminal (/yourapp.app/Contents/MacOS/applet)
Note that it outputs your coordinates through an error that you can filter using regex.
`use framework "CoreLocation"
use framework "Foundation"
use scripting additions
property this : a reference to the current application
property nil : a reference to missing value
property _1 : a reference to reference
property CLLocationManager : a reference to CLLocationManager of this
property kCLLocationAccuracyBest : a reference to 3000.0
property running : false
property result : missing value -- Lat./long. or error description
property number : 0 -- Error code
property seconds : 10 -- Maximum time to allow script to run
IMPLEMENTATION:
my performSelectorOnMainThread:"getLocation" withObject:nil waitUntilDone:true
return my result
HANDLERS & SCRIPT OBJECTS:
to getLocation()
set locationManager to CLLocationManager's new()
locationManager's setDelegate:me
locationManager's setDesiredAccuracy:kCLLocationAccuracyBest

set my running to true
set started to current date

locationManager's startUpdatingLocation()

repeat while my running
	delay 0.5
	if (current date) - started > my seconds then exit repeat
end repeat

end getLocation
on locationManager:locationManager didUpdateLocations:locations
local locationManager, locations
locationManager's stopUpdatingLocation()

set my running to false
set my result to (locations's valueForKey:"coordinate") as record
set coordinateText to "{" & quoted form of ("latitude:" & (my result's latitude) & ", longitude:" & (my result's longitude)) & "}"
do shell script "echo " & coordinateText

end locationManager:didUpdateLocations:
on locationManager:locationManager didFailWithError:err
local locationManager, err
tell err's code()
	set my number to it
	set my result to item (it + 1) in my enum's kCLError
	set my running to false
end tell

end locationManager:didFailWithError:
script enum
property kCLError : {¬
"Location Unknown", ¬
"Denied", ¬
"Network", ¬
"Heading Failure", ¬
"Region Monitoring Denied", ¬
"Region Monitoring Failure", ¬
"Region Monitoring Setup Delayed", ¬
"Region Monitoring Response Delayed", ¬
"Geocode Found No Result", ¬
"Geocode Found Partial Result", ¬
"Geocode Canceled", ¬
"Deferred Failed", ¬
"Deferred Not Updating Location", ¬
"Deferred Accuracy Too Low", ¬
"Deferred Distance Filtered", ¬
"Deferred Canceled", ¬
"Ranging Unavailable", ¬
"Ranging Failure"}
property CLAuthorizationStatus : {¬
"Not Determined", ¬
"Restricted", ¬
"Denied", ¬
"Authorized (Always)", ¬
"Authorized When In Use"}
end script
---------------------------------------------------------------------------❮END❯
`

I tried your script approach, and the best I can get after reviewing all your instructions is "Denied"
This seems like a major issue for Apple developers... is it even possible to get the Location from a CLI? Does there need to be a application server setup to accept and run in the background the only way to access the Location API now?

I tried your script approach, and the best I can get after reviewing all your instructions is "Denied"
This seems like a major issue for Apple developers... is it even possible to get the Location from a CLI? Does there need to be a application server setup to accept and run in the background the only way to access the Location API now?

Make sure you set keys Authorized, Whitelisted  for /usr/local/Caskroom/corelocationcli/4.0.2/CoreLocationCLI record. With this danger in mind I finally made it work on my Sonoma 14.3.1, service isn't listed in location services though 🤔

Instead of hacking, I am suggesting that my users install this command-line accessible tool:
https://github.com/RhetTbull/locationator

Instead of hacking, I am suggesting that my users install this command-line accessible tool:
https://github.com/RhetTbull/locationator

Hi. And how do you set up location with your tool? My understanding it is just for quering various types of info from location API, but not for setting location.

You need to export it with the App format, then launch it a first time as an app, and allow it to access your location.
From here, you can use the embedded script through your terminal (.../yourapp.app/Contents/MacOS/applet)

@PTac-h This script works great and taught me some things about AppleScript but I'm stuck on actually getting the location output in a useful format.
When I run that in the Script Editor I get the coordinates, and when I run the .app directly from Finder I can authorize the app and see that it works. I can run getLocation.app/Contents/MacOS/applet without a permission error... but the trouble is that running it in that way produces no output!  I can't get any log "..." lines to appear in stdout/stderr when running the .app.
My current janky workaround is to just write the lat/lng to a file and read that..but that's non-ideal.  How are you able to read the output directly from the packaged .app?

Seems like you could also workaround with something like
diff --git a/Package.swift b/Package.swift
index 84485ed..d9698c0 100644
--- a/Package.swift
+++ b/Package.swift
@@ -12,6 +12,11 @@ let package = Package(
         .executable(name: "CoreLocationCLI", targets: ["CoreLocationCLI"])
     ],
     targets: [
-        .executableTarget(name: "CoreLocationCLI")
+        // Targets are the basic building blocks of a package, defining a module or a test suite.
+        // Targets can depend on other targets in this package and products from dependencies.
+        .executableTarget(
+            name: "CoreLocationCLI",
+            linkerSettings: [ .unsafeFlags( ["-Xlinker", "-sectcreate", "-Xlinker", "__TEXT", "-Xlinker", "__info_plist", "-Xlinker", "Resources/Info.plist"] ) ]
+       )
     ]
 )
diff --git a/Resources/Info.plist b/Resources/Info.plist
new file mode 100644
index 0000000..76cc2e2
--- /dev/null
+++ b/Resources/Info.plist
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+        <key>CFBundleIdentifier</key>
+        <string>com.barf.CoreLocationCLI</string>
+        <key>CFBundleName</key>
+        <string>CoreLocationCLI</string>
+        <key>NSLocationUsageDescription</key>
+        <string>gimme cookie!</string>
+        <key>NSLocationWhenInUseUsageDescription</key>
+        <string>gimme cookie!</string>
+        <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+        <string>gimme cookie!</string>
+</dict>
+</plist>
diff --git a/Resources/entitlements.plist b/Resources/entitlements.plist
new file mode 100644
index 0000000..7e13092
--- /dev/null
+++ b/Resources/entitlements.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+    <dict>
+        <key>com.apple.security.personal-information.location</key>
+        <true/>
+    </dict>
+</plist>
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..87a3e6b
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env sh
+
+rm -rf build
+mkdir build
+
+swift build --disable-sandbox
+
+mkdir -p build/CoreLocationCLI.app/Contents/MacOS
+
+cp Resources/Info.plist build/CoreLocationCLI.app/Contents
+cp .build/arm64-apple-macosx/debug/CoreLocationCLI build/CoreLocationCLI.app/Contents/MacOS
+
+codesign --deep --force --verify --verbose --sign REPLACEME --options=runtime --entitlements Resources/entitlements.plist build/CoreLocationCLI.app

Using your own keys for signing. Then running ./build/CoreLocationCLI.app/Contents/MacOS/CoreLocationCLI should populate the settings.app.

Also experiencing this issue

Resigned and reuploaded https://github.com/Homebrew/homebrew-cask/pull/192209/files

Resigned and reuploaded https://github.com/Homebrew/homebrew-cask/pull/192209/files

Thanks for this @fulldecent. Unfortunately updating to 4.0.3 via Homebrew didn't fix the issue. There still isn't a way to enable location services for CoreLocationCLI because it doesn't appear on the list.

Workaround (Ventura): as before, I've used Platypus to create an app bundle from CoreLocationCLI, named the app CoreLocationCLI, deep-codesigned the bundle with an Apple Development certificate, which you can get through Xcode—but maybe an ad-hoc signature also works—, launched the app once, and it shows up in System Settings > Privacy & Security > Privacy > Location Services, where I can enable it, if it isn't already. (In my case, it was already enabled, because I had used the trick before.) Then I just ran ln -s /usr/local/Caskroom/corelocationcli/app/CoreLocationCLI.app/Contents/Resources/script /usr/local/bin/CoreLocationCLI and replaced Homebrew's symlink of CoreLocationCLI, and it's available in Terminal and shell scripts.

It's basically what locatinator seems to do: you need an app around the command line tool to use the latter, with the app being either signed & notarized, if you want to distribute it, or at least signed locally with a dev or ad-hoc signature.

Maybe there is there a way to get this into Homebrew too, while linking so the command line is still in the right spot

Thank you, super helpful. @JayBrown  did you see this documented elsewhere (upstream?)


Fix PIP installation in webports

Work around the issue with PIP installation during "webports" "gclient
sync" command, which manifests itself as import failures when running
PIP despite it being installed just before this command.
The hack is to unset the "PYTHONNOUSERSITE" environment variable which
is set by gclient/vpython: for some reason, having this variable set
makes PIP being not found.
This is a quick hack solution, in order to unblock developers - an ideal
solution would be to find out what's wrong in the way how we install
PIP.
This fixes #115.

Thanks for the quick review.


Typo in ansi_art_download function

There is a typo at:
https://github.com/yuhonas/zsh-ansimotd/blob/273c250b8473cac00e000af35bed477fe7337454/zsh-ansimotd.plugin.zsh#L17
Between level= and 1  shouldn't be a blank character or the wget command doesn't work.
Otherwise, great stuff!

Cheers, nice catch!