Hacker News new | past | comments | ask | show | jobs | submit login
Jsc: My New Best Friend (furbo.org)
105 points by ingve on Aug 25, 2021 | hide | past | favorite | 43 comments



Javascript is more fun away from the web

The most fun I've ever had programming was in max/msp

https://cycling74.com/

things that are difficult to do in code, processing multiple simultaneous signals is done visually, running lines between object, but when you do want to write code, you open a code window and write javascript, and can then run visual patch cables to your javascript code representing the inputs and outputs.


For (guitar) effects processing, there's also JSFX, which uses a scripting language similar to C/Javascript: https://www.cockos.com/EEL2/


Can you do this with PureData too?


You'd need an external for that, and apparently there is one: https://github.com/mganss/pdjs


Also on windows,

C:\Windows\System32\cscript.exe (https://en.wikipedia.org/wiki/Windows_Script_Host)

Which run a less modern version of ECMA script, but does have access to COM objects


True story: Some years ago, a consulting assignment involved analyzing a bunch of data saved on a slow as molasses NAS using SAS's data format. The work was CPU intensive but IO throughput was the bottleneck. The analysis was close to being embarrassingly parallelizable[1] given an appropriate partitioning of the data.

The only thing installed on the remote system I was given access to via RDP was SAS whose macro facility tends to be cumbersome. Since the original CSV files were also stored on the same NAS, I asked if could have any programming language installed in my home directory (there was absolutely no way for me to upload anything, the system had no internet access other than to allow RDP, and I wasn't going to violate any rules.

The sysadmin head read BOFH for career development in the 90s, so, the answer was a solid no. I had to only use what was available on the system. The problem was simple: Each run took about two days: Start the thing at 7 am one day so you can hope to have the results before 4 pm two days later kind of thing. That's when I remembered `cscript`.

Using that, built a "thing" that orchestrated the copying of data in 100 GB chunks to `%TEMP%` which was still on the precious 256 GB SSD :-), launching multiple jobs etc. Task manager screenshots: https://www.nu42.com/2013/12/happiness-is-making-most-out-of...

In less than a week, jobs were running in four hours. sysadmin remained happily oblivious. Had to explain what I had done to the rest of the group.

[1]: https://en.wikipedia.org/wiki/Embarrassingly_parallel


I'm not sure if your post was meant to imply this was against the rules but you can upload files via RDP file sharing.


Both file sharing and copy & paste can be disabled.

Yes, this is not as useful as people think it is. In real life, it ends up kneecapping productivity while enabling checkbox driven security.

Regardless, it was also part of the contract that one was not allowed to upload/download or use copy&paste.

I did point out they had forgotten to explicitly prohibit setting up a camera pointed at the screen, but the humor was not appreciated.


C# and VB compilers are also available somewhere under system32 for the default .NET version shipped with the OS.


There's also the "jsc.exe" JScript.Net compiler included in .NET framework installs. You can access .Net assemblies and APIs. It's handy to have it out-of-the-box on modern Windows machines.


a reminiscence of the pre powershell days I guess


Tangentially related: jsvu seems to be the easiest way to install most JS engines on most platforms. This can be useful comparing performance or compatibility across JS runtimes without firing up emulators.

https://github.com/GoogleChromeLabs/jsvu


Not in front of a keyboard, but does tr not work?

    echo "something in turkish" | LC_ALL=tr_TR tr "[:lower:]" "[:upper:]"


It failed to convert the diacritics for me with LC_ALL="tr_TR.UTF-8" matching my /etc/locale.gen.

Kapı açık -> KAPı AçıK

However this worked: gawk '{ print toupper($0) }'


Drat, apparently tr (GNU tr anyway) only supports single-byte characters.

https://unix.stackexchange.com/questions/554901/how-to-chang...


You had a lot of patient to type that on a mobile device


I was on an iPad w/keyboard, so technically I had a keyboard but not a macOS shell.


s/patient/patience/


Sounds a lot like NodeJS.


Yeah, there isn't really any reason to use it over something like nodejs, especially since it doesn't look like the code is portable (e.g. print instead of console.log, etc.).

It's not like it's the only scripting language available either, OSX comes with ruby, python2, python3 and perl by default.


The big difference is that it comes preinstalled. If you had a whole company on MacBooks but not all of them had Node installed, and you wanted to distribute a script written in JavaScript, this could be handy

Fairly niche, but not useless

I could also imagine some sort of Electron-alternative using the builtin JS interpreter for system stuff alongside the builtin webview for the UI


> The big difference is that it comes preinstalled. If you had a whole company on MacBooks but not all of them had Node installed, and you wanted to distribute a script written in JavaScript, this could be handy

Except when Apple decides to remove it from the default setup.


My understanding is that macOS doesn't ship those runtimes anymore.


They're all still in the current Monterey beta (21A5294g) but python2 says (paraphrasing) "this is only for compatibility; it might not be here in future"


It wasn't in the above list, but Apple did completely remove PHP in Monterey.


On a current MBA/M1, which came with Big Sur:

  % which perl
  /usr/bin/perl
  % which python2
  /usr/bin/python2
  % which python3
  /usr/bin/python3
  % which ruby
  /usr/bin/ruby


I like that jsc has global readline() function whereas in Node it's uhhh not so simple to get an input


Yeah. This is a cool factoid, but for this kind of thing I usually just hop over to whatever browser tab is open and hit F12. If it really needs to be in the terminal, I'd reach for Node, or Deno, or JQ if it's anything to do with manipulating or interrogating JSON.


You can use javascriptcore in iOS though.


There's a similar tool in GNOME, using Mozilla's runtime

    gjs -c "(() => print('hello'))()"


Fun fact: until the most recent versions (0.64 and 0.65), React Native has used JSC as its JS runtime. You can now opt into Hermes (a mobile optimized JS runtime from FB open source) for both Android and iOS (although better supported on Android for now).


Neat. Also if you've got java installed, there's

  jrunscript
  jjs
Both invoke the nashorn javascript engine.


That has been dropped in Java 10 and Java 17 is getting released next month, thus only works in what I consider legacy runtimes.

https://openjdk.java.net/jeps/372


Well, then it is still on many production systems that still run on Java 8.


Yeah, Java's version of Windows XP and Python 2, time to move on.


Not quite. While Java 10 is end-of-life because it isn't an LTS version, Java 8 still is actively supported.


Kind of, depends how much one is willing to pay for support.

https://www.oracle.com/java/technologies/java-se-support-roa...

Shops that care about LTS should be on 11 instead of clinging their teeth on 8.


Cute, but, as I noted elsewhere[1], these kinds of solutions require that you know that you are dealing with text that contains Turkish.

[1]: https://news.ycombinator.com/item?id=28287136


jsc is primarily a test binary, so it isn't super functional as a general purpose utility.

It is nice to have basic JS functionality on the terminal without installing node, but it has fairly limited functionality


You could also use something like Node.js or Deno.


For embedding JS is there a reason to use Apple JavascriptCore over other libs like quickjs?


QuickJs is quite slow compared to JIT engines when you’ll have a long running workload. The major advantage of QuickJS is simplicity - its trivial to compile with Emscripten [for example](https://jake.tl/projects/quickjs-emscripten), but if performance is a concern then I’d stick to the JIT engines.


Sounds like the equivalent of the `d8` tool in V8 Javascript engine. Not sure if `d8` shipped with Chromium/Chrome though.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: