Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unclear fixture usage #74

Open
BlackYps opened this issue Feb 13, 2022 · 4 comments
Open

Unclear fixture usage #74

BlackYps opened this issue Feb 13, 2022 · 4 comments

Comments

@BlackYps
Copy link

From how I understand the documentation I am supposed to load the a fixture file as well as the show file like this:
java -jar afterglow.jar src/musiclight/my_show.clj src/afterglow/fixtures/cameo.clj
However, when I do this it can't actually find the file as indicated in the log:

2022-Feb-13 21:51:05 manjaro ERROR [afterglow.core:284] - Problem loading init-file src/musiclight/my_show.clj
                       �[37mafterglow.core.main�[m  �[32m                 �[m
                                       �[37m...�[m  �[32m                 �[m
                      �[33mafterglow.core/�[1;33m-main�[m  �[32m   core.clj:  260�[m
                      �[33mafterglow.core/�[1;33m-main�[m  �[32m   core.clj:  279�[m
                   �[33mafterglow.core/-main/�[1;33mfn�[m  �[32m   core.clj:  282�[m
                                       �[37m...�[m  �[32m                 �[m
                �[33mmusiclight.my-show/�[1;33meval152�[m  �[32mmy_show.clj:    1�[m
�[33mmusiclight.my-show/eval152/�[1;33mloading--auto--�[m  �[32mmy_show.clj:    1�[m
                                       �[37m...�[m  �[32m                 �[m
                      �[33mclojure.core/�[1;33mrequire�[m  �[32m   core.clj: 5996 (repeats 2 times)�[m
                        �[33mclojure.core/�[1;33mapply�[m  �[32m   core.clj:  669�[m
                                       �[37m...�[m  �[32m                 �[m
                    �[33mclojure.core/�[1;33mload-libs�[m  �[32m   core.clj: 5958�[m
                    �[33mclojure.core/�[1;33mload-libs�[m  �[32m   core.clj: 5974�[m
                        �[33mclojure.core/�[1;33mapply�[m  �[32m   core.clj:  669�[m
                                       �[37m...�[m  �[32m                 �[m
                     �[33mclojure.core/�[1;33mload-lib�[m  �[32m   core.clj: 5917�[m
                     �[33mclojure.core/�[1;33mload-lib�[m  �[32m   core.clj: 5936�[m
                  �[33mclojure.core/load-lib/�[1;33mfn�[m  �[32m   core.clj: 5937�[m
                     �[33mclojure.core/�[1;33mload-one�[m  �[32m   core.clj: 5897�[m
                                       �[37m...�[m  �[32m                 �[m
                         �[33mclojure.core/�[1;33mload�[m  �[32m   core.clj: 6098�[m
                         �[33mclojure.core/�[1;33mload�[m  �[32m   core.clj: 6114�[m
                      �[33mclojure.core/load/�[1;33mfn�[m  �[32m   core.clj: 6115�[m
                                       �[37m...�[m  �[32m                 �[m
          �[1;31mjava.io.FileNotFoundException�[m: �[3mCould not locate afterglow/fixtures/cameo__init.class, afterglow/fixtures/cameo.clj or afterglow/fixtures/cameo.cljc on classpath.�[m
�[1;31mclojure.lang.Compiler$CompilerException�[m: �[3mSyntax error compiling at (/media/Daten/Dateien/Repositories/musiclight/src/musiclight/my_show.clj:1:1).�[m
    �[1mdata�[m: {:clojure.error/phase :compile-syntax-check,
           :clojure.error/line 1,
           :clojure.error/column 1,
           :clojure.error/source
           "/media/Daten/Dateien/Repositories/musiclight/src/musiclight/my_show.clj"}

Here is the start of my show file where I try to load the fixture definition:

(ns musiclight.my-show
  "Set up the fixtures, effects, and cues I actually want to use."
  (:require [afterglow.core :as core]
            [afterglow.transform :as tf]
            [afterglow.effects.color :refer [color-effect]]
            [afterglow.effects.cues :as cues]
            [afterglow.effects.dimmer :refer [dimmer-effect]]
            [afterglow.effects.fun :as fun]
            [afterglow.effects.movement :as move]
            [afterglow.effects.oscillators :as oscillators]
            [afterglow.effects.params :as params]
            [afterglow.fixtures.cameo :as cameo]
            [afterglow.rhythm :as rhythm]
            [afterglow.show :as show]
            [afterglow.show-context :refer :all]
            [com.evocomputing.colors :refer [create-color hue adjust-hue]]
            [taoensso.timbre :as timbre]))

By the way, would you rather have me message you directly per email instead of spamming your repo with issues? In this case I had a lot of logs to attach anyway, but for a quick question it seems unnecessarily complicated lol.

@brunchboy
Copy link
Member

For help with learning and figuring things out, I’d suggest asking on the Afterglow Gitter chat rather than emailing me directly, because that way there is a chance that someone other than me might be able to help faster, and there is a searchable public historical record, like there is here on GitHub, that can help others in the future. If the traffic on that channel picks up I will move it to Zulip like I have my other open source projects. But I have not done that yet with Afterglow.

@brunchboy
Copy link
Member

But I still plan to take a look at and answer your question here, I just need to remind myself of what the code I wrote to support initialization files does. I would also suggest that if you are going to be doing serious amounts of development like this (creating new fixture definitions and your own show setup) you would be much happier in a REPL-oriented workflow, using Leiningen to start Clojure and manage your class paths, and an editor with good Clojure integration like Emacs + CIDER or IntelliJ IDEA + Cursive, rather than launching Afterglow from the command line using java -jar. I’d suggest setting up your own Clojure project that pulls in Afterglow as a library, then you can create and use whatever namespaces you want.

@brunchboy
Copy link
Member

So I think I may understand the problem here. Assuming you defined the cameo fiixture in the afterglow.fixtures.cameo namespace (so that it begins with (ns afterglow.fixtures.cameo …) then it might be enough to simply reverse the order of your initialization files. Right now it is trying to load my-show first, and loading it involves compiling it, which involves finding the afterglow.fixtures.cameo namespace. Since you have not put that file on the class path, it can’t be found, and compilation fails. Swapping the files’ order in your command line will load the fixture definition first, so it will be available when my-show loads, which should work.

But that will get quickly tedious, if you start having a lot of fixture definitions to load. It would be better to just put all the fixture definitions (and any other auxiliary helper namespaces you want to create) on the class path, so the compiler can find them when it needs them, rather than forcing you to list them all as init-files. It looks like you might have organized your src/ folder correctly for it to be used as a class path element, so you might find that java -cp afterglow.jar:src afterglow.core src/musiclight/my_show.clj works. (Sadly you can’t combine the -jar shortcut with -cp to add other things to your classpath… trying to manually wrangle classpaths for Clojure projects gets tedious quickly, so setting up your own project in Leiningen and/or a Clojure aware IDE as I suggested above will probably be a lot more pleasant.)

@BlackYps
Copy link
Author

BlackYps commented Apr 3, 2022

Swapping the file order indeed solved the problem. I set up Clojure with IntelliJ IDEA and used Leiningen, but I didn't really figure out how to use the Clojure REPL to start my project from there. It's not too bad though, because I run my finished project on a Raspberry Pi and I use the afterglow.jar there anyway, so I might as well use that exact approach when developing.

I think the easiest thing for now is just to point out in the readme that the order of the file arguments matters.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants