Page 1 of 13

Brassica SCA [v1.0.0]

Posted: Tue Jul 06, 2021 11:12 am
by bradrn
EDIT: Brassica is now online! Try it out at http://bradrn.com/brassica/. Or you can download the desktop version for Windows from https://github.com/bradrn/brassica/releases.

I am pleased to announce Brassica v0.0.1, the first release of my new SCA! Features include:
  • Can be used in both interactive (GUI) and batch mode, as well as a Haskell library
  • Intuitive syntax based on zompist’s SCA²
  • First-class support for multigraphs
  • Live preview and control over output highlighting allow fast iteration through rules
  • Tabular ‘rules applied’ output helps with debugging
  • Comes with built-in paradigm builder
  • Rich syntax for specifying phonetic rules: includes wildcards, optional elements and more
  • Category operations allow phonetic rules to be written featurally
  • Support for ‘features’ lets rules easily manipulate stress, tone and other suprasegmentals
  • Easy control over rule application: apply rules right-to-left and left-to-right, one time or multiple times
Warning: this is a pre-1.0 release! There may be bugs. (Actually, there certainly are bugs. I’ve already found some myself.) I would be grateful if you could report any bugs you find to this thread or the GitHub issue tracker. Also, some of my favourite features in this SCA have been suggested by ZBB members (thanks Nortaneous and Vilike), so feel free to ask for feature requests! Even breaking changes would be fine, since again this is pre-1.0.

And here’s an image:

Image

Re: Brassica SCA [v0.0.1]

Posted: Tue Jul 06, 2021 1:08 pm
by fusijui
I'd love to check this out! But, erm, a link...?

Re: Brassica SCA [v0.0.1]

Posted: Tue Jul 06, 2021 1:16 pm
by dɮ the phoneme
Yes, it seems you forgot to include a link!

But I have to say, I've been waiting for this for quite a while, and the list of features looks very exciting! I had been holding off on SCAs in general due to many of my conlangs making heavy use of stress and SCAs generally not handling that well. I'd recently decided to bite the bullet and try to handle stress in a fairly hacky way in zompist's SCA, but thanks to this it looks like I might not have to!

Re: Brassica SCA [v0.0.1]

Posted: Tue Jul 06, 2021 1:24 pm
by Travis B.
I too have held off on SCA's largely because the language I would want to use an SCA for the most, Laqar, uses stress and reduction very heavily, which SCA's tend to be not very good at.

Re: Brassica SCA [v0.0.1]

Posted: Tue Jul 06, 2021 8:46 pm
by bradrn
fusijui wrote: Tue Jul 06, 2021 1:08 pm I'd love to check this out! But, erm, a link...?
dɮ the phoneme wrote: Tue Jul 06, 2021 1:16 pm Yes, it seems you forgot to include a link!
Oh, whoops! Here: https://github.com/bradrn/brassica. (This is what happens when you write something at 2am.)

Re: Brassica SCA [v0.0.1]

Posted: Wed Jul 07, 2021 6:19 pm
by fusijui
It may be a little bit before I get into it and get back to you, but thanks in advance! I'm looking forward to playing working, working! with this :)

Re: Brassica SCA [v0.0.2]

Posted: Mon Jul 12, 2021 10:04 am
by bradrn
Brassica 0.0.2 is now out; get it from the usual place. Nothing particularly exciting in this release, but there is now a proper Windows installer, plus a couple of bugfixes.

Re: Brassica SCA [v0.0.2]

Posted: Mon Jul 26, 2021 5:13 pm
by dɮ the phoneme
Sorry for the dumb question, but I am reasonably bad at computers; is there a way to run this on mac? Do I have to compile it from the source?

Re: Brassica SCA [v0.0.2]

Posted: Mon Jul 26, 2021 7:57 pm
by bradrn
dɮ the phoneme wrote: Mon Jul 26, 2021 5:13 pm Sorry for the dumb question, but I am reasonably bad at computers; is there a way to run this on mac? Do I have to compile it from the source?
Unfortunately, you will have to compile it yourself. Unless I can somehow get access to a Mac, there is no way for me to make prebuilt Mac binaries.

That being said, I would like to make a web version at some point; however that will depend on whether I can get GHCJS working or not.

Re: Brassica SCA [v0.0.2]

Posted: Mon Aug 02, 2021 2:00 am
by Hallow XIII
Couldn’t you use the github actions Mac runner to do it?

Re: Brassica SCA [v0.0.2]

Posted: Mon Aug 02, 2021 2:25 am
by bradrn
Hallow XIII wrote: Mon Aug 02, 2021 2:00 am Couldn’t you use the github actions Mac runner to do it?
I didn’t know it was possible to use Mac with GitHub Actions. That being said, I don’t know how to build Brassica on Mac in the first place, and even if I do get it working I wouldn’t have any way to test the resulting executable, so I think I’ll wait until I get some reliable instructions for building.

Re: Brassica SCA [v0.0.2]

Posted: Sun Aug 08, 2021 12:33 pm
by aliensdrinktea
Hey, awesome! But I've got a couple questions:

1. Can this handle phonemes with multiple features, e.g., targeting voiced stops?
2. How do I write rules that affect only stressed or only unstressed syllables?

Re: Brassica SCA [v0.0.2]

Posted: Mon Aug 09, 2021 12:07 am
by bradrn
aliensdrinktea wrote: Sun Aug 08, 2021 12:33 pm Can this handle phonemes with multiple features, e.g., targeting voiced stops?
Of course! Just use category intersections:

Code: Select all

categories
Stop = p b t d k g
Voiced = b d g
V = a e i o u
end

; changes e.g. tapaketke to tabagetke
[Stop -Voiced] / [Stop +Voiced] / V _ V
Though do note that this requires keeping phoneme order consistent across all categories.

(I should also note that there is another part of Brassica which I called ‘features’. I have since realised that this was horribly misnamed, and should have been named ‘suprasegmentals’ or something. Maybe for the next release.)
How do I write rules that affect only stressed or only unstressed syllables?
You can use features (yes, the misnamed thing):

Code: Select all

categories
C = m n p t k s h y

feature a e i o u / Str = á é í ó ú

V = a e i o u
end

; delete unstressed vowels
[V -Str] / / _

; resolve stress clash
-ltr [V +Str] / [V -Str] / Str (C) (C) _

; geminate coda of stressed syllable
C / C > / Str _ [C #]

; NB. features don’t interfere with regular sound change:
a / e / t _

; e.g. kápanéma → káppnem, táyaéke → téyek, yékamá → yékkma
For more detail see the manual.

Re: Brassica SCA [v0.0.2]

Posted: Mon Aug 09, 2021 9:10 am
by aliensdrinktea
Thank you! One more question... where's the manual? (unless you mean the tutorial image)

Re: Brassica SCA [v0.0.2]

Posted: Mon Aug 09, 2021 9:52 am
by bradrn
aliensdrinktea wrote: Mon Aug 09, 2021 9:10 am Thank you! One more question... where's the manual? (unless you mean the tutorial image)
Here: https://github.com/bradrn/brassica/blob ... ntation.md. (The image wasn’t meant as a tutorial, though if the shoe fits…)

Re: Brassica SCA [v0.0.2]

Posted: Mon Aug 09, 2021 10:18 am
by aliensdrinktea
bradrn wrote: Mon Aug 09, 2021 9:52 am Here: https://github.com/bradrn/brassica/blob ... ntation.md. (The image wasn’t meant as a tutorial, though if the shoe fits…)
No wonder the "tutorial" wasn't very clear! And here I thought that was just a side effect of it being an early version :lol: Thanks again!

Re: Brassica SCA [v0.0.2]

Posted: Thu Oct 21, 2021 9:18 am
by Hallow XIII
So I have good news and bad news. The good news is that I've managed to compile and run the brassica GUI on Linux. The bad news is that it was extremely involved to do so, largely because (til) Windows doesn't have a distinction between position-independent and position-dependent code, which lets you get away with more creative linking than on Unixen. The easiest way for me to get it running was to compile everything with -fPIC -fPIE and then dynamically link all the Haskell dependencies, which is also the preferred distribution format for my distribution's package management system.

For a prebuilt binary that you can download from github, it would be necessary to locally build Qt to be statically linked. Supposedly doing that might cause licensing issues... I can probably make a script that will take care of the linux build, at least.

Re: Brassica SCA [v0.0.2]

Posted: Thu Oct 21, 2021 10:18 am
by Hallow XIII
While I'm at it, I also have a bug report/feature request: Brassica doesn't apply sound changes multiple times when the direction of application is LTR.

Re: Brassica SCA [v0.0.2]

Posted: Thu Oct 21, 2021 5:23 pm
by bradrn
Hallow XIII wrote: Thu Oct 21, 2021 9:18 am So I have good news and bad news. The good news is that I've managed to compile and run the brassica GUI on Linux. The bad news is that it was extremely involved to do so, largely because (til) Windows doesn't have a distinction between position-independent and position-dependent code, which lets you get away with more creative linking than on Unixen. The easiest way for me to get it running was to compile everything with -fPIC -fPIE and then dynamically link all the Haskell dependencies, which is also the preferred distribution format for my distribution's package management system.
I’m seriously impressed that you managed to do this — without proper documentation! (I’ve been meaning to write some, but alas, haven’t gotten around to it just yet…) I find it extremely surprising that this was easier to build on Windows than Linux; in my experience, it’s usually the other way around. On the other hand, I was originally intending to link the Haskell dynamically, but gave up when I discovered this is impossible on Windows.
For a prebuilt binary that you can download from github, it would be necessary to locally build Qt to be statically linked. Supposedly doing that might cause licensing issues... I can probably make a script that will take care of the linux build, at least.
Can’t Qt be dynamically linked? I know this is the default on Windows, and I’m sure I’ve built a dynamically linked executable with Qt on Linux also.
Hallow XIII wrote: Thu Oct 21, 2021 10:18 am While I'm at it, I also have a bug report/feature request: Brassica doesn't apply sound changes multiple times when the direction of application is LTR.
I’m aware. It’s worth noting that this is a problem with other SCAs too (not that this excuses it). I’ll try figure this out once my exams are done.

Re: Brassica SCA [v0.0.2]

Posted: Fri Oct 22, 2021 8:32 am
by Hallow XIII
bradrn wrote: Thu Oct 21, 2021 5:23 pm
Hallow XIII wrote: Thu Oct 21, 2021 9:18 am So I have good news and bad news. The good news is that I've managed to compile and run the brassica GUI on Linux. The bad news is that it was extremely involved to do so, largely because (til) Windows doesn't have a distinction between position-independent and position-dependent code, which lets you get away with more creative linking than on Unixen. The easiest way for me to get it running was to compile everything with -fPIC -fPIE and then dynamically link all the Haskell dependencies, which is also the preferred distribution format for my distribution's package management system.
I’m seriously impressed that you managed to do this — without proper documentation! (I’ve been meaning to write some, but alas, haven’t gotten around to it just yet…) I find it extremely surprising that this was easier to build on Windows than Linux; in my experience, it’s usually the other way around. On the other hand, I was originally intending to link the Haskell dynamically, but gave up when I discovered this is impossible on Windows.
In many ways, it's still easier to build on Linux. I basically didn't have to do any of the steps involving passing the locations of Qt tools. It's just that the way you link the GUI on Windows is impossible on Linux, since statically linked Haskell libraries aren't position-independent and so can't be linked into a Qt program that uses dynamically linked Qt, which is the default everywhere. So my workaround was to dynamically link the Haskell, but if you do that and your main linker pass isn't controlled by GHC then you have to manually pass the location of all the Haskell dependencies to the linker. Thankfully I found a perl script that can mostly automate this...
bradrn wrote: Thu Oct 21, 2021 5:23 pm
For a prebuilt binary that you can download from github, it would be necessary to locally build Qt to be statically linked. Supposedly doing that might cause licensing issues... I can probably make a script that will take care of the linux build, at least.
Can’t Qt be dynamically linked? I know this is the default on Windows, and I’m sure I’ve built a dynamically linked executable with Qt on Linux also.
Yeah, it can. That's what I did. The issue is really that the GHC libraries aren't compiled as position-independent, so statically linking Brassica and then depending on the Qt dynamic libraries being present on the user's machine, which would imo be ideal, requires manually compiling the GHC libraries to support it. This nonsense is why Arch Linux has a pacman package for basically every common library on Hackage, because given the choice they opted for linking everything dynamically.