Coder Social home page Coder Social logo

more-speech's Introduction

more-speech

A desktop client for the nostr protocol.

Mission

To provide a pragmatic tool for communicating over the nostr protocol.

Strategy

No Fluff. Just Stuff (To borrow a phrase). No fancy colors or glitter, no doo-dads, bells, or whistles. Just a simple way to scan, read, and compose messages.

Open Source

Help Wanted! If you feel like contributing, I'll be happy to entertain your pull requests. Make sure you write tests for the code you write, and follow the conventions I've started here.

Environment

  • Language: Clojure
  • Builder: Leiningen
  • GUI: SeeSaw
  • Tester: speclj

How to run

Sample commands for Debian:

sudo apt install clojure leiningen openjdk-17-jdk

git clone https://github.com/unclebob/more-speech
cd more-speech

lein run project.clj

For more

Read the wiki.

more-speech's People

Contributors

alemmens avatar galuszkak avatar koonopek avatar mpareja avatar ok300 avatar sathwikmatsa avatar unclebob avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

more-speech's Issues

License

Hi!

Would you consider adding a license for this repo?

Tests on Windows are failing

While preparing PR with Continous Integration on Github Actions, tests on Windows were actually failing.

More details here:
https://github.com/galuszkak/more-speech/runs/7589462808?check_suite_focus=true#step:7:105

Failures:

  1) Composing outgoing events composing metadata (kind:0) messages composes using the keys data structure
     Expected truthy but was: false
     /D:/a/more-speech/more-speech/spec/more_speech%5cnostr%5cevents_spec.clj:149

Finished in 2.32663 seconds
159 examples, 1 failures

Crash: NullPointerException: Cannot invoke "String.length()" because "this.input" is null

Version used: 2022-08-14

id-mismatch "wss://relay.damus.io" computed-id "78b5d35ab6a38bafa22c281d97d638f12677df007e4401ff32d7e5e8d0f12e10" ["EOSE" "more-speech"]
close "wss://relay.damus.io" 1006 ""
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "String.length()" because "this.input" is null
        at java.base/java.net.URI$Parser.parse(URI.java:3165)
        at java.base/java.net.URI.<init>(URI.java:623)
        at clojure.java.browse$open_url_in_browser.invokeStatic(browse.clj:50)
        at clojure.java.browse$browse_url.invokeStatic(browse.clj:74)
        at clojure.java.browse$browse_url.invoke(browse.clj:66)
        at more_speech.ui.swing.main_window$open_link.invokeStatic(main_window.clj:32)
        at more_speech.ui.swing.main_window$open_link.invoke(main_window.clj:30)
        at seesaw.event$fire.invokeStatic(event.clj:263)
        at seesaw.event$fire.invoke(event.clj:262)
        at seesaw.event$fn$reify__10728.hyperlinkUpdate(event.clj:290)
        at java.desktop/javax.swing.JEditorPane.fireHyperlinkUpdate(JEditorPane.java:401)
        at seesaw.core.proxy$javax.swing.JEditorPane$Tag$fd407141.fireHyperlinkUpdate(Unknown Source)
        at java.desktop/javax.swing.text.html.HTMLEditorKit$LinkController.activateLink(HTMLEditorKit.java:905)
        at java.desktop/javax.swing.text.html.HTMLEditorKit$LinkController.mouseClicked(HTMLEditorKit.java:701)
        at java.desktop/java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:278)
        at java.desktop/java.awt.Component.processMouseEvent(Component.java:6629)
        at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3389)
        at seesaw.core.proxy$javax.swing.JEditorPane$Tag$fd407141.processMouseEvent(Unknown Source)
        at java.desktop/java.awt.Component.processEvent(Component.java:6391)
        at java.desktop/java.awt.Container.processEvent(Container.java:2266)
        at seesaw.core.proxy$javax.swing.JEditorPane$Tag$fd407141.processEvent(Unknown Source)
        at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)
        at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
        at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
        at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4584)
        at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
        at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
        at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
        at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)
        at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Dark mode

Please add support for a dark(er) theme.

A startup flag would be good enough, nothing fancy like theme selector menu or changing it on the fly.


I'm not familiar with Clojure or Seesaw, but I am with Java and Swing. I did a bit of research to see what's possible.

A cursory search lead me to:

Hopefully one of them can be easily integrated, or maybe you already have better solutions in mind.

Cannot run program "/Users/unclebob/... during `lein run`

java.io.IOException: Cannot run program "/Users/unclebob/Library/Java/JavaVirtualMachines/openjdk-17.0.2/Contents/Home/bin/java" (in directory "C:\Users\michal.kulinski\source\nostr\more-speech"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start (ProcessBuilder.java:1143)
java.lang.ProcessBuilder.start (ProcessBuilder.java:1073)
java.lang.Runtime.exec (Runtime.java:594)
jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2)
jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke (Method.java:568)
clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167)
clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102)
leiningen.core.eval$sh.invokeStatic (eval.clj:179)
leiningen.core.eval$sh.doInvoke (eval.clj:173)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.eval$fn__7097.invokeStatic (eval.clj:263)
leiningen.core.eval/fn (eval.clj:261)
clojure.lang.MultiFn.invoke (MultiFn.java:234)
leiningen.javac$run_javac_subprocess.invokeStatic (javac.clj:128)
leiningen.javac$run_javac_subprocess.invoke (javac.clj:115)
leiningen.javac$javac.invokeStatic (javac.clj:147)
leiningen.javac$javac.doInvoke (javac.clj:136)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$partial_task$fn__7334.doInvoke (main.clj:284)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$apply_task.invokeStatic (main.clj:334)
leiningen.core.main$apply_task.invoke (main.clj:320)
leiningen.core.eval$run_prep_tasks.invokeStatic (eval.clj:51)
leiningen.core.eval$run_prep_tasks.invoke (eval.clj:43)
leiningen.core.eval$prep.invokeStatic (eval.clj:86)
leiningen.core.eval$prep.invoke (eval.clj:73)
leiningen.core.eval$eval_in_project.invokeStatic (eval.clj:364)
leiningen.core.eval$eval_in_project.invoke (eval.clj:358)
leiningen.core.eval$eval_in_project.invokeStatic (eval.clj:362)
leiningen.core.eval$eval_in_project.invoke (eval.clj:358)
leiningen.run$run_main.invokeStatic (run.clj:130)
leiningen.run$run_main.invoke (run.clj:123)
leiningen.run$run.invokeStatic (run.clj:157)
leiningen.run$run.doInvoke (run.clj:134)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$partial_task$fn__7334.doInvoke (main.clj:284)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$apply_task.invokeStatic (main.clj:334)
leiningen.core.main$apply_task.invoke (main.clj:320)
leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343)
leiningen.core.main$resolve_and_apply.invoke (main.clj:336)
leiningen.core.main$_main$fn__7423.invoke (main.clj:453)
leiningen.core.main$_main.invokeStatic (main.clj:442)
leiningen.core.main$_main.doInvoke (main.clj:439)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create (ProcessImpl.java:-2)
java.lang.ProcessImpl. (ProcessImpl.java:494)
java.lang.ProcessImpl.start (ProcessImpl.java:159)
java.lang.ProcessBuilder.start (ProcessBuilder.java:1110)
java.lang.ProcessBuilder.start (ProcessBuilder.java:1073)
java.lang.Runtime.exec (Runtime.java:594)
jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2)
jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke (Method.java:568)
clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167)
clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102)
leiningen.core.eval$sh.invokeStatic (eval.clj:179)
leiningen.core.eval$sh.doInvoke (eval.clj:173)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.eval$fn__7097.invokeStatic (eval.clj:263)
leiningen.core.eval/fn (eval.clj:261)
clojure.lang.MultiFn.invoke (MultiFn.java:234)
leiningen.javac$run_javac_subprocess.invokeStatic (javac.clj:128)
leiningen.javac$run_javac_subprocess.invoke (javac.clj:115)
leiningen.javac$javac.invokeStatic (javac.clj:147)
leiningen.javac$javac.doInvoke (javac.clj:136)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$partial_task$fn__7334.doInvoke (main.clj:284)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$apply_task.invokeStatic (main.clj:334)
leiningen.core.main$apply_task.invoke (main.clj:320)
leiningen.core.eval$run_prep_tasks.invokeStatic (eval.clj:51)
leiningen.core.eval$run_prep_tasks.invoke (eval.clj:43)
leiningen.core.eval$prep.invokeStatic (eval.clj:86)
leiningen.core.eval$prep.invoke (eval.clj:73)
leiningen.core.eval$eval_in_project.invokeStatic (eval.clj:364)
leiningen.core.eval$eval_in_project.invoke (eval.clj:358)
leiningen.core.eval$eval_in_project.invokeStatic (eval.clj:362)
leiningen.core.eval$eval_in_project.invoke (eval.clj:358)
leiningen.run$run_main.invokeStatic (run.clj:130)
leiningen.run$run_main.invoke (run.clj:123)
leiningen.run$run.invokeStatic (run.clj:157)
leiningen.run$run.doInvoke (run.clj:134)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$partial_task$fn__7334.doInvoke (main.clj:284)
clojure.lang.RestFn.invoke (RestFn.java:410)
clojure.lang.AFn.applyToHelper (AFn.java:154)
clojure.lang.RestFn.applyTo (RestFn.java:132)
clojure.lang.AFunction$1.doInvoke (AFunction.java:31)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.core$apply.invokeStatic (core.clj:669)
clojure.core$apply.invoke (core.clj:662)
leiningen.core.main$apply_task.invokeStatic (main.clj:334)
leiningen.core.main$apply_task.invoke (main.clj:320)
leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343)
leiningen.core.main$resolve_and_apply.invoke (main.clj:336)
leiningen.core.main$_main$fn__7423.invoke (main.clj:453)
leiningen.core.main$_main.invokeStatic (main.clj:442)
leiningen.core.main$_main.doInvoke (main.clj:439)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.core$apply.invokeStatic (core.clj:667)
clojure.main$main_opt.invokeStatic (main.clj:514)
clojure.main$main_opt.invoke (main.clj:510)
clojure.main$main.invokeStatic (main.clj:664)
clojure.main$main.doInvoke (main.clj:616)
clojure.lang.RestFn.applyTo (RestFn.java:137)
clojure.lang.Var.applyTo (Var.java:705)
clojure.main.main (main.java:40)

NullPointerException when "Reply" clicked right after start

When the app is started, it is possible to click "Reply" when no message is selected.

Then the console shows "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException".

This has no impact on the app behavior, but I think make-edit-window should check if an article was selected before calling format-reply.

Usage of Compose for Desktop instead of Swing

Just cloned the project, and I'm wondering what if we use Compose for Desktop for UI.
By doing that we won't need to solve Swing related problems. In my point of view, we will face less problems, and development of the UI part will be more pleasant due to better preview tooling supported by Compose, and also it is way more readable.
If that is desirable for you, I would be more than happy to work on this.

Configuring an existing account is scary

I just started more-speech for the first time and would love to give it a spin with my established nostr ID but as the file to put my keys looks suspiciously like a kind-0 event, I'm afraid it will update my kind-0 if I put my keys there. So do I have to put my exact old values there? Will it pick up on a nip5 line in the config file or will it just ignore it?

Preview window does not update when switching tabs

Given: Select an event in "follow" tab
Given: Switch to "all" tab
Given: Select an event in "all" tab
When: Switching to "follow" tab
Expect: Preview window will show the currently highlighted message in "follow"
Actual: Preview window shows the currently highlighted message from "all"

(Alternatively, since there is only one preview window, allow only one message to be selected at a time across all tabs.)

Normally, it's pretty easy to know what is going on, but I got distracted a few times and when I looked back to the app, was surprised to see very suspicious BTC advertisements from Uncle Bob.

Public relay name change

nostr.bitcoiner.social -> offchain.pub

note1zpgy9f8tlwdwhhwtzy50vpl72qkunzhmy57p4f5xaf8h57pfvwpschwe74

Before I deployed the new pay-to-relay server, I ran a public relay under a "nostr" subdomain. I've since renamed my public relay to wss://offchain.pub. Much cooler name. Better represents how nostr isn't something this domain handles on the side, it's the primary purpose. Raison d'etre.

Both offchain.pub and the "nostr" subdomain will work concurrently for awhile, pointing to the same public relay server. But I'll eventually deprecate the "nostr" subdomain and redirect requests to the new offchain.pub name.

I saw references to the old name in nostr-messages and was going to open a PR but I'm a little wary of assuming too much about what this file is for. This is probably how I'd fix it:

sed -i 's/nostr.bitcoiner.social/offchain.pub/g' nostr-messages

UI scaling

I am using a 4K monitor and at least a 125% scaling is necessary to make things readable. Is there a way to scale the UI?

(OS: Debian/Linux, just downloaded more-speech-0.1.0-SNAPSHOT-standalone.jar and run it.)

Add nostr as a topic to this repository

Hello,

This repository is listed on the Awesome Nostr list, which is a collection of useful Nostr projects. However, it seems that the 'nostr' topic is missing from this repository's topics.

Adding the 'nostr' topic will help users discover your project more easily and recognize its relevance to the Nostr ecosystem. To add the topic, please follow these steps:

  1. Navigate to the main page of the repository.
  2. Click on the gear icon next to "About" on the right side of the page.
  3. In the "Topics" section, type 'nostr' and press Enter.
  4. Click "Save changes."

Thank you for your attention and for contributing to the Nostr community!

java.lang.NumberFormatException when trying to run on Arch linux

The application does not start - the error report is the following:

 "Execution error (NumberFormatException) at java.lang.NumberFormatException/forInputString (NumberFormatException.java:67).\nFor input string: \"JTree\"\n",
 :clojure.main/triage
 {:clojure.error/class java.lang.NumberFormatException,
  :clojure.error/line 67,
  :clojure.error/cause "For input string: \"JTree\"",
  :clojure.error/symbol java.lang.NumberFormatException/forInputString,
  :clojure.error/source "NumberFormatException.java",
  :clojure.error/phase :execution},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message
    "Syntax error macroexpanding at (/tmp/form-init14744791229083861061.clj:1:74).",
    :data
    {:clojure.error/phase :execution,
     :clojure.error/line 1,
     :clojure.error/column 74,
     :clojure.error/source "/tmp/form-init14744791229083861061.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7665]}
   {:type java.lang.reflect.InvocationTargetException,
    :at [java.awt.EventQueue invokeAndWait "EventQueue.java" 1371]}
   {:type java.lang.NumberFormatException,
    :message "For input string: \"JTree\"",
    :at
    [java.lang.NumberFormatException
     forInputString
     "NumberFormatException.java"
     67]}],
  :trace
  [[java.lang.NumberFormatException
    forInputString
    "NumberFormatException.java"
    67]
   [java.lang.Integer parseInt "Integer.java" 668]
   [java.math.BigInteger <init> "BigInteger.java" 536]
   [java.math.BigInteger <init> "BigInteger.java" 674]
   [jdk.internal.reflect.DirectConstructorHandleAccessor
    newInstance
    "DirectConstructorHandleAccessor.java"
    67]
   [java.lang.reflect.Constructor
    newInstanceWithCaller
    "Constructor.java"
    499]
   [java.lang.reflect.Constructor newInstance "Constructor.java" 483]
   [clojure.lang.Reflector invokeConstructor "Reflector.java" 305]
   [clojure.core$bigint invokeStatic "core.clj" 3625]
   [clojure.core$bigint invoke "core.clj" 3620]
   [more_speech.db.xtdb$get_entity invokeStatic "xtdb.clj" 61]
   [more_speech.db.xtdb$get_entity invoke "xtdb.clj" 59]
   [more_speech.db.xtdb$eval7566$fn__7567 invoke "xtdb.clj" 87]
   [clojure.lang.MultiFn invoke "MultiFn.java" 234]
   [more_speech.ui.swing.article_tree$render_event
    invokeStatic
    "article_tree.clj"
    117]
   [more_speech.ui.swing.article_tree$render_event
    invoke
    "article_tree.clj"
    112]
   [seesaw.cells$default_tree_cell_renderer$fn__19136
    invoke
    "cells.clj"
    44]
   [seesaw.cells.proxy$javax.swing.tree.DefaultTreeCellRenderer$ff19274a
    getTreeCellRendererComponent
    nil
    -1]
   [javax.swing.plaf.basic.BasicTreeUI$NodeDimensionsHandler
    getNodeDimensions
    "BasicTreeUI.java"
    3220]
   [javax.swing.tree.AbstractLayoutCache
    getNodeDimensions
    "AbstractLayoutCache.java"
    497]
   [javax.swing.tree.VariableHeightLayoutCache$TreeStateNode
    updatePreferredSize
    "VariableHeightLayoutCache.java"
    1344]
   [javax.swing.tree.VariableHeightLayoutCache
    updateNodeSizes
    "VariableHeightLayoutCache.java"
    903]
   [javax.swing.tree.VariableHeightLayoutCache
    invalidateSizes
    "VariableHeightLayoutCache.java"
    371]
   [javax.swing.plaf.basic.BasicTreeUI
    setCellRenderer
    "BasicTreeUI.java"
    475]
   [javax.swing.plaf.basic.BasicTreeUI$Handler
    propertyChange
    "BasicTreeUI.java"
    3896]
   [java.beans.PropertyChangeSupport
    fire
    "PropertyChangeSupport.java"
    343]
   [java.beans.PropertyChangeSupport
    firePropertyChange
    "PropertyChangeSupport.java"
    335]
   [java.beans.PropertyChangeSupport
    firePropertyChange
    "PropertyChangeSupport.java"
    268]
   [java.awt.Component firePropertyChange "Component.java" 8712]
   [seesaw.core.proxy$javax.swing.JTree$Tag$fd407141
    firePropertyChange
    nil
    -1]
   [javax.swing.JTree setCellRenderer "JTree.java" 827]
   [seesaw.core.proxy$javax.swing.JTree$Tag$fd407141
    setCellRenderer
    nil
    -1]
   [seesaw.core$fn__21490 invokeStatic "core.clj" 1790]
   [seesaw.core$fn__21490 invoke "core.clj" 1789]
   [seesaw.options$apply_option invokeStatic "options.clj" 114]
   [seesaw.options$apply_option invoke "options.clj" 111]
   [seesaw.options$apply_options_STAR_ invokeStatic "options.clj" 129]
   [seesaw.options$apply_options_STAR_ invoke "options.clj" 124]
   [seesaw.options$apply_options invokeStatic "options.clj" 136]
   [seesaw.options$apply_options invoke "options.clj" 132]
   [seesaw.core$tree invokeStatic "core.clj" 1815]
   [seesaw.core$tree doInvoke "core.clj" 1805]
   [clojure.lang.RestFn invoke "RestFn.java" 619]
   [more_speech.ui.swing.article_tree$make_header_tree
    invokeStatic
    "article_tree.clj"
    125]
   [more_speech.ui.swing.article_tree$make_header_tree
    invoke
    "article_tree.clj"
    124]
   [more_speech.ui.swing.tabs$make_tabs invokeStatic "tabs.clj" 58]
   [more_speech.ui.swing.tabs$make_tabs invoke "tabs.clj" 50]
   [more_speech.ui.swing.main_window$make_main_window
    invokeStatic
    "main_window.clj"
    51]
   [more_speech.ui.swing.main_window$make_main_window
    invoke
    "main_window.clj"
    43]
   [more_speech.ui.swing.main_window$setup_main_window$fn__22696
    invoke
    "main_window.clj"
    81]
   [clojure.lang.AFn applyToHelper "AFn.java" 152]
   [clojure.lang.AFn applyTo "AFn.java" 144]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$apply invoke "core.clj" 662]
   [seesaw.invoke$invoke_now_STAR_$invoker__17422
    invoke
    "invoke.clj"
    18]
   [clojure.lang.AFn run "AFn.java" 22]
   [java.awt.event.InvocationEvent dispatch "InvocationEvent.java" 308]
   [java.awt.EventQueue dispatchEventImpl "EventQueue.java" 773]
   [java.awt.EventQueue$4 run "EventQueue.java" 720]
   [java.awt.EventQueue$4 run "EventQueue.java" 714]
   [java.security.AccessController
    doPrivileged
    "AccessController.java"
    399]
   [java.security.ProtectionDomain$JavaSecurityAccessImpl
    doIntersectionPrivilege
    "ProtectionDomain.java"
    86]
   [java.awt.EventQueue dispatchEvent "EventQueue.java" 742]
   [java.awt.EventDispatchThread
    pumpOneEventForFilters
    "EventDispatchThread.java"
    203]
   [java.awt.EventDispatchThread
    pumpEventsForFilter
    "EventDispatchThread.java"
    124]
   [java.awt.EventDispatchThread
    pumpEventsForHierarchy
    "EventDispatchThread.java"
    113]
   [java.awt.EventDispatchThread
    pumpEvents
    "EventDispatchThread.java"
    109]
   [java.awt.EventDispatchThread
    pumpEvents
    "EventDispatchThread.java"
    101]
   [java.awt.EventDispatchThread run "EventDispatchThread.java" 90]],
  :cause "For input string: \"JTree\"",
  :phase :execution}}

I've installed openjdk-17, as well as clojure and leiningen using pacman on Arch linux.
I've cloned a repository and run a command
lein run project.clj in fish shell.
The output of the command is following:

Compiling 7 source files to /home/username/Apps/more-speech/target/classes
main "project.clj" start
main loading-configuration
main setting-up-gui
make-main-window
make-main-window making-article-area
Execution error (NumberFormatException) at java.lang.NumberFormatException/forInputString (NumberFormatException.java:67).
For input string: "JTree"

I've also tried downloading a pre-built artifact and running it via java -jar but there is a different error message:

Exception in thread "main" java.lang.Exception: Attempting to migrate from level 10 to 9.
	at more_speech.migrator$get_needed_migrations.invokeStatic(migrator.clj:153)
	at more_speech.migrator$get_needed_migrations.invoke(migrator.clj:150)
	at more_speech.migrator$migrate_to.invokeStatic(migrator.clj:158)
	at more_speech.migrator$migrate_to.invoke(migrator.clj:157)
	at more_speech.core$_main.invokeStatic(core.clj:26)
	at more_speech.core$_main.doInvoke(core.clj:25)
	at clojure.lang.RestFn.invoke(RestFn.java:397)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.RestFn.applyTo(RestFn.java:132)
	at more_speech.core.main(Unknown Source)```

Compile steps

For people (like me) who don't know much about closure, can you please add some build steps in the readme? I like to try out the client. Thank you.

Clicking a http link inside an event blocks the UI thread until the browser is closed

Given: open an event with an http link
Given: click the link
When: trying to use more-speech
Expected: can continue to use more-speech in a normal way
Actual: all rendering is frozen, cannot change tabs, resizing the window does not redraw the UI, etc.

Might also block the network calls, not sure.

Edit: This is only true for browser windows opened by the app. If it just opens a new tab in an existing browser, nothing seems to block.

Since it now seems potentially relevant, the browser I saw this on was Firefox 103.0.2 (64-bit) running on ArchLinux with the Gnome 42.4.

jars/bcprov-jdk18on-171.jar (No such file or directory)

Hello,

I am following the getting started docs and I get an error when running the command
"lein deploy local bcprov 1.7.1 jars/bcprov-jdk18on-171.jar"

I get this error:

OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. Sending bcprov/bcprov/1.7.1/bcprov-1.7.1.jar (1k)to file:lib/ Could not transfer artifact bcprov:bcprov:jar:1.7.1 from/to local (file:lib): jars/bcprov-jdk18on-171.jar (No such file or directory) org.eclipse.aether.deployment.DeploymentException: Failed to deploy artifacts: Could not transfer artifact bcprov:bcprov:jar:1.7.1 from/to local (file:lib): jars/bcprov-jdk18on-171.jar (No such file or directory) at org.eclipse.aether.internal.impl.DefaultDeployer.deploy (DefaultDeployer.java:302) org.eclipse.aether.internal.impl.DefaultDeployer.deploy (DefaultDeployer.java:213) org.eclipse.aether.internal.impl.DefaultRepositorySystem.deploy (DefaultRepositorySystem.java:386) jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2) jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke (Method.java:568) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) cemerick.pomegranate.aether$deploy_artifacts.invokeStatic (aether.clj:358) cemerick.pomegranate.aether$deploy_artifacts.doInvoke (aether.clj:308) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.core$apply.invokeStatic (core.clj:665) clojure.core$apply.invoke (core.clj:660) cemerick.pomegranate.aether$deploy.invokeStatic (aether.clj:427) cemerick.pomegranate.aether$deploy.doInvoke (aether.clj:391) clojure.lang.RestFn.invoke (RestFn.java:805) leiningen.deploy$deploy.invokeStatic (deploy.clj:234) leiningen.deploy$deploy.doInvoke (deploy.clj:172) clojure.lang.RestFn.applyTo (RestFn.java:151) clojure.lang.Var.applyTo (Var.java:705) clojure.core$apply.invokeStatic (core.clj:667) clojure.core$apply.invoke (core.clj:660) leiningen.core.main$partial_task$fn__6931.doInvoke (main.clj:284) clojure.lang.RestFn.applyTo (RestFn.java:139) clojure.lang.AFunction$1.doInvoke (AFunction.java:31) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.core$apply.invokeStatic (core.clj:667) clojure.core$apply.invoke (core.clj:660) leiningen.core.main$apply_task.invokeStatic (main.clj:334) leiningen.core.main$apply_task.invoke (main.clj:320) leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343) leiningen.core.main$resolve_and_apply.invoke (main.clj:336) leiningen.core.main$_main$fn__7020.invoke (main.clj:452) leiningen.core.main$_main.invokeStatic (main.clj:442) leiningen.core.main$_main.doInvoke (main.clj:439) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.lang.Var.applyTo (Var.java:705) clojure.core$apply.invokeStatic (core.clj:665) clojure.main$main_opt.invokeStatic (main.clj:514) clojure.main$main_opt.invoke (main.clj:510) clojure.main$main.invokeStatic (main.clj:664) clojure.main$main.doInvoke (main.clj:616) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.lang.Var.applyTo (Var.java:705) clojure.main.main (main.java:40) Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact bcprov:bcprov:jar:1.7.1 from/to local (file:lib): jars/bcprov-jdk18on-171.jar (No such file or directory) at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed (ArtifactTransportListener.java:52) org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run (BasicRepositoryConnector.java:369) org.eclipse.aether.connector.basic.BasicRepositoryConnector.put (BasicRepositoryConnector.java:288) org.eclipse.aether.internal.impl.DefaultDeployer.deploy (DefaultDeployer.java:295) org.eclipse.aether.internal.impl.DefaultDeployer.deploy (DefaultDeployer.java:213) org.eclipse.aether.internal.impl.DefaultRepositorySystem.deploy (DefaultRepositorySystem.java:386) jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2) jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke (Method.java:568) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) cemerick.pomegranate.aether$deploy_artifacts.invokeStatic (aether.clj:358) cemerick.pomegranate.aether$deploy_artifacts.doInvoke (aether.clj:308) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.core$apply.invokeStatic (core.clj:665) clojure.core$apply.invoke (core.clj:660) cemerick.pomegranate.aether$deploy.invokeStatic (aether.clj:427) cemerick.pomegranate.aether$deploy.doInvoke (aether.clj:391) clojure.lang.RestFn.invoke (RestFn.java:805) leiningen.deploy$deploy.invokeStatic (deploy.clj:234) leiningen.deploy$deploy.doInvoke (deploy.clj:172) clojure.lang.RestFn.applyTo (RestFn.java:151) clojure.lang.Var.applyTo (Var.java:705) clojure.core$apply.invokeStatic (core.clj:667) clojure.core$apply.invoke (core.clj:660) leiningen.core.main$partial_task$fn__6931.doInvoke (main.clj:284) clojure.lang.RestFn.applyTo (RestFn.java:139) clojure.lang.AFunction$1.doInvoke (AFunction.java:31) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.core$apply.invokeStatic (core.clj:667) clojure.core$apply.invoke (core.clj:660) leiningen.core.main$apply_task.invokeStatic (main.clj:334) leiningen.core.main$apply_task.invoke (main.clj:320) leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343) leiningen.core.main$resolve_and_apply.invoke (main.clj:336) leiningen.core.main$_main$fn__7020.invoke (main.clj:452) leiningen.core.main$_main.invokeStatic (main.clj:442) leiningen.core.main$_main.doInvoke (main.clj:439) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.lang.Var.applyTo (Var.java:705) clojure.core$apply.invokeStatic (core.clj:665) clojure.main$main_opt.invokeStatic (main.clj:514) clojure.main$main_opt.invoke (main.clj:510) clojure.main$main.invokeStatic (main.clj:664) clojure.main$main.doInvoke (main.clj:616) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.lang.Var.applyTo (Var.java:705) clojure.main.main (main.java:40) Caused by: java.io.FileNotFoundException: jars/bcprov-jdk18on-171.jar (No such file or directory) at java.io.FileInputStream.open0 (FileInputStream.java:-2) java.io.FileInputStream.open (FileInputStream.java:216) java.io.FileInputStream.<init> (FileInputStream.java:157) org.eclipse.aether.spi.connector.transport.PutTask.newInputStream (PutTask.java:65) org.eclipse.aether.spi.connector.transport.AbstractTransporter.utilPut (AbstractTransporter.java:178) org.eclipse.aether.transport.file.FileTransporter.implPut (FileTransporter.java:94) org.eclipse.aether.spi.connector.transport.AbstractTransporter.put (AbstractTransporter.java:147) org.eclipse.aether.connector.basic.BasicRepositoryConnector$PutTaskRunner.runTask (BasicRepositoryConnector.java:556) org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run (BasicRepositoryConnector.java:364) org.eclipse.aether.connector.basic.BasicRepositoryConnector.put (BasicRepositoryConnector.java:288) org.eclipse.aether.internal.impl.DefaultDeployer.deploy (DefaultDeployer.java:295) org.eclipse.aether.internal.impl.DefaultDeployer.deploy (DefaultDeployer.java:213) org.eclipse.aether.internal.impl.DefaultRepositorySystem.deploy (DefaultRepositorySystem.java:386) jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2) jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke (Method.java:568) clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:167) clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:102) cemerick.pomegranate.aether$deploy_artifacts.invokeStatic (aether.clj:358) cemerick.pomegranate.aether$deploy_artifacts.doInvoke (aether.clj:308) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.core$apply.invokeStatic (core.clj:665) clojure.core$apply.invoke (core.clj:660) cemerick.pomegranate.aether$deploy.invokeStatic (aether.clj:427) cemerick.pomegranate.aether$deploy.doInvoke (aether.clj:391) clojure.lang.RestFn.invoke (RestFn.java:805) leiningen.deploy$deploy.invokeStatic (deploy.clj:234) leiningen.deploy$deploy.doInvoke (deploy.clj:172) clojure.lang.RestFn.applyTo (RestFn.java:151) clojure.lang.Var.applyTo (Var.java:705) clojure.core$apply.invokeStatic (core.clj:667) clojure.core$apply.invoke (core.clj:660) leiningen.core.main$partial_task$fn__6931.doInvoke (main.clj:284) clojure.lang.RestFn.applyTo (RestFn.java:139) clojure.lang.AFunction$1.doInvoke (AFunction.java:31) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.core$apply.invokeStatic (core.clj:667) clojure.core$apply.invoke (core.clj:660) leiningen.core.main$apply_task.invokeStatic (main.clj:334) leiningen.core.main$apply_task.invoke (main.clj:320) leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:343) leiningen.core.main$resolve_and_apply.invoke (main.clj:336) leiningen.core.main$_main$fn__7020.invoke (main.clj:452) leiningen.core.main$_main.invokeStatic (main.clj:442) leiningen.core.main$_main.doInvoke (main.clj:439) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.lang.Var.applyTo (Var.java:705) clojure.core$apply.invokeStatic (core.clj:665) clojure.main$main_opt.invokeStatic (main.clj:514) clojure.main$main_opt.invoke (main.clj:510) clojure.main$main.invokeStatic (main.clj:664) clojure.main$main.doInvoke (main.clj:616) clojure.lang.RestFn.applyTo (RestFn.java:137) clojure.lang.Var.applyTo (Var.java:705) clojure.main.main (main.java:40)

I think I need to add some username and password values in this line of the "project.clj" file
":repositories {"local" {:url "file:lib" :username "" :password ""}}"

I am quite new to clojure too.
Could you advise what should I do?
Many thanks

Consider participating in Hacktoberfest

@unclebob giving this under your consideration to have this one month where people gather together to help open source projects. I think more-speech fits very well with Hacktoberfest idea!

Per rules available here (https://hacktoberfest.com/participation/), those are things to be considered if project like more-speech would like to participate in Hacktoberfest:

Prepare your project for contributions by following these best practices:

  • Add the “hacktoberfest” topic to your repository to opt-in to Hacktoberfest and indicate you’re looking for contributions.
  • Apply the “hacktoberfest” label to issues you want contributors to help with in your GitHub or GitLab project.
  • Add a CONTRIBUTING.md file with contribution guidelines to your repository.
  • Choose issues that have a well-defined scope and are self-contained.
  • Adopt a code of conduct to create a greater sense of inclusion and community for contributors.
  • Be ready to review pull/merge requests, accepting those that are valid by merging them, leaving an overall approving review, or by adding the “hacktoberfest-accepted” label.
  • Reject any spammy requests you receive by labeling them as “spam,” and any other invalid contributions by closing them or labeling them as “invalid.”

Entering Existing Private Key Error

When entering an existing private key I get an error that says About: Gosh, at least say hi. This appears to be an error message, as the result is that the private key is not applied to the settings. I confirmed that both the nsec and npub derived from the key are correct, so I don't think is the result of a bad key.

Crash: InvocationTargetException / NumberFormatException: For input string: "no" under radix 16

Version used: 2022-08-21

Steps to reproduce: I just fired up the client and this happened:

Exception in thread "main" java.lang.reflect.InvocationTargetException at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1369) at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1344) at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1480) at seesaw.invoke$invoke_now_STAR_.invokeStatic(invoke.clj:21) at seesaw.invoke$invoke_now_STAR_.doInvoke(invoke.clj:16) at clojure.lang.RestFn.invoke(RestFn.java:410) at more_speech.ui.swing.main_window.seesawHandler.handle_text_event(main_window.clj:18) at more_speech.data_storage$load_events.invokeStatic(data_storage.clj:68) at more_speech.data_storage$load_events.invoke(data_storage.clj:64) at more_speech.data_storage$read_in_last_n_days.invokeStatic(data_storage.clj:146) at more_speech.data_storage$read_in_last_n_days.invoke(data_storage.clj:130) at more_speech.core$_main.invokeStatic(core.clj:34) at more_speech.core$_main.doInvoke(core.clj:25) at clojure.lang.RestFn.invoke(RestFn.java:397) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.RestFn.applyTo(RestFn.java:132) at more_speech.core.main(Unknown Source) Caused by: java.lang.NumberFormatException: For input string: "no" under radix 16 at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:668) at more_speech.nostr.util$hex_string__GT_bytes$fn__8482.invoke(util.clj:34) at clojure.core$map$fn__5884.invoke(core.clj:2759) at clojure.lang.LazySeq.sval(LazySeq.java:42) at clojure.lang.LazySeq.seq(LazySeq.java:51) at clojure.lang.RT.seq(RT.java:535) at clojure.lang.Numbers.byte_array(Numbers.java:1397) at more_speech.nostr.util$hex_string__GT_bytes.invokeStatic(util.clj:35) at more_speech.nostr.util$hex_string__GT_bytes.invoke(util.clj:29) at more_speech.nostr.util$hex_string__GT_num.invokeStatic(util.clj:41) at more_speech.nostr.util$hex_string__GT_num.invoke(util.clj:38) at more_speech.ui.formatters$lookup_reference.invokeStatic(formatters.clj:98) at more_speech.ui.formatters$lookup_reference.invoke(formatters.clj:90) at clojure.core$partial$fn__5857.invoke(core.clj:2628) at clojure.core$mapv$fn__8468.invoke(core.clj:6914) at clojure.core.protocols$fn__8181.invokeStatic(protocols.clj:168) at clojure.core.protocols$fn__8181.invoke(protocols.clj:124) at clojure.core.protocols$fn__8136$G__8131__8145.invoke(protocols.clj:19) at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31) at clojure.core.protocols$fn__8166.invokeStatic(protocols.clj:75) at clojure.core.protocols$fn__8166.invoke(protocols.clj:75) at clojure.core.protocols$fn__8110$G__8105__8123.invoke(protocols.clj:13) at clojure.core$reduce.invokeStatic(core.clj:6830) at clojure.core$mapv.invokeStatic(core.clj:6905) at clojure.core$mapv.invoke(core.clj:6905) at more_speech.ui.formatters$replace_references.invokeStatic(formatters.clj:85) at more_speech.ui.formatters$replace_references.invoke(formatters.clj:80) at more_speech.ui.formatters$format_header.invokeStatic(formatters.clj:48) at more_speech.ui.formatters$format_header.invoke(formatters.clj:45) at more_speech.ui.swing.article_tree$render_event.invokeStatic(article_tree.clj:137) at more_speech.ui.swing.article_tree$render_event.invoke(article_tree.clj:125) at seesaw.cells$default_tree_cell_renderer$fn__10929.invoke(cells.clj:44) at seesaw.cells.proxy$javax.swing.tree.DefaultTreeCellRenderer$ff19274a.getTreeCellRendererComponent(Unknown Source) at java.desktop/javax.swing.plaf.basic.BasicTreeUI$NodeDimensionsHandler.getNodeDimensions(BasicTreeUI.java:3223) at java.desktop/javax.swing.tree.AbstractLayoutCache.getNodeDimensions(AbstractLayoutCache.java:497) at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.updatePreferredSize(VariableHeightLayoutCache.java:1344) at java.desktop/javax.swing.tree.VariableHeightLayoutCache.createNodeAt(VariableHeightLayoutCache.java:767) at java.desktop/javax.swing.tree.VariableHeightLayoutCache.treeNodesInserted(VariableHeightLayoutCache.java:476) at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.treeNodesInserted(BasicTreeUI.java:4368) at java.desktop/javax.swing.tree.DefaultTreeModel.fireTreeNodesInserted(DefaultTreeModel.java:553) at java.desktop/javax.swing.tree.DefaultTreeModel.nodesWereInserted(DefaultTreeModel.java:340) at java.desktop/javax.swing.tree.DefaultTreeModel.insertNodeInto(DefaultTreeModel.java:260) at java.base/jdk.internal.reflect.GeneratedMethodAccessor11.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:167) at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:102) at more_speech.ui.swing.article_tree$add_event.invokeStatic(article_tree.clj:178) at more_speech.ui.swing.article_tree$add_event.invoke(article_tree.clj:162) at more_speech.ui.swing.main_window.seesawHandler$fn__13969.invoke(main_window.clj:18) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.AFn.applyTo(AFn.java:144) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$apply.invoke(core.clj:662) at seesaw.invoke$invoke_now_STAR_$invoker__9517.invoke(invoke.clj:18) at clojure.lang.AFn.run(AFn.java:22) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) get-references bad-tags-in-event "For input string: \" w\" under radix 16" {:id 88220076065142523105869859183324839144438054313557800230653465849242646407794N, :pubkey 57464772279253673464534112777312873181190448684396764866967649101168459806043N, :created-at 1661461518, :kind 1, :content "Sim... Ú minha foto, nome de usußrio e bio padrÒo que eu sempre uso.\n\n\\>iamcais<\n\n???", :sig 13303546906887735035786097358520626636046522287918117819870018148662559100155210279256909851823822476984618645068200457810174673017349423698417366892563782N, :tags ((:r "boltfun Story_comment 63") (:e "269bd814f828e0126ee1e7e70eaec05412230619a2f49b4ef15ccab271931ba1 wss://nostr.drss.io reply")), :relays ["wss://relay.damus.io"]}

UI window is open but it's blank

I cloned the repo, and ran

$ lein run

At fe4cde7, using Java 17.0.4

Here is the output:

main nil start
main loading-configuration
main setting-up-gui
make-main-window
make-main-window making-article-area
make-main-window making-relay-panel
make-main-window relay-panel-complete
make-main-window article-panel-complete
make-main-window messages-panel-complete
make-main-window showing-main-frame
make-main-window shown
setup-main-window creating-seesaw-handler
main main-window-setup-complete
main reading-in-last-n-days
read-in-last-n-days starting
read-in-last-n-days last-time "02/13/23 10:53:58"
reading-files-complete
main getting-events
open "wss://relay.damus.io"
relay-connection-attempts-complete
requesting-metadata
sending to: wss://relay.damus.io   ["CLOSE","more-speech-metadata"]
sending to: wss://relay.damus.io   ["REQ","more-speech-metadata",{"kinds":[0],"since":1676224327}]
subscription-date 1676299938 "02/13/2023 10:52:18 AST"
sending to: wss://relay.damus.io   ["CLOSE","more-speech"]
sending to: wss://relay.damus.io   ["REQ","more-speech",{"since":1676299938,"until":1676310727}]
sending to: wss://relay.damus.io   ["REQ","more-speech-all",{"since":1676310727}]
requesting-contact-lists
sending to: wss://relay.damus.io   ["EVENT",{"kind":0,"tags":[["nonce","11096","16"]],"content":"{\"name\":\"more-speech-60343\",\"about\":\"\",\"picture\":\"\"}","pubkey":"82043f8ab25f294ae977320fa9bfc9f2e26d71466233028d59ae55172c394e53","created_at":1676310728,"id":"00004d61197ea19af432ab7ebf2ff9758f96ad72caec0e16ffccdfd6da9cfdb6","sig":"d5d9071804d74911a893c38f265379dc0a1d47f69c4c3937d6819a06131c647c79d4c7899ad4940299de5b295f1161c83ffe8a1f8a3ab4e7e6e9d157a8da07a4"}]

The UI window is open but it's blank (no widgets, no text, nothing)

Can't start

Execution error (UnsupportedClassVersionError) at java.lang.ClassLoader/defineClass1 (ClassLoader.java:-2).
schnorr/Schnorr has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 61.0

Just FYI. from just pure clone and run

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Codename: jammy

java --version
openjdk 17.0.7 2023-04-18
OpenJDK Runtime Environment (build 17.0.7+7-Ubuntu-0ubuntu122.04.2)
OpenJDK 64-Bit Server VM (build 17.0.7+7-Ubuntu-0ubuntu122.04.2, mixed mode, sharing)


The app starts but loads nothing

Hello!

I have cloned the repo, started the app with "lein run", the GUI appears but then nothing happens.
The "all" tab is empty, and it looks like nothing is happening.

Perhaps, the "connection-time-out" is the reason, but what can I do with this?

Also, when I click with right button on the screen the NPE stacktrace is thrown in the terminal.
My OS is Ubuntu 22.04.1 LTS

lein run
connection-time-out "wss://nostr-pub.wellorder.net"
relay-connection-attempts-complete
requesting-contact-lists
subscription-date 1670351102 "12/07/2022 24:25:02 KGT"
open "wss://nostr-pub.wellorder.net"
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:426)
	at more_speech.ui.swing.article_tree$mouse_pressed.invokeStatic(article_tree.clj:75)
	at more_speech.ui.swing.article_tree$mouse_pressed.invoke(article_tree.clj:71)
	at seesaw.event$fire.invokeStatic(event.clj:263)
	at seesaw.event$fire.invoke(event.clj:262)
	at seesaw.event$eval12498$fn$reify__12500.mousePressed(event.clj:290)
	at java.desktop/java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:288)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at seesaw.core.proxy$javax.swing.JTree$Tag$fd407141.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Component.java:6400)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at seesaw.core.proxy$javax.swing.JTree$Tag$fd407141.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4544)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

NullPointerException

I've started more-speech and saw the UI, but after some seconds I got this crash:

fiatjaf@churrasco ~/c/more-speech (main)> lein run
Compiling 5 source files to /home/fiatjaf/comp/more-speech/target/classes
open "wss://nostr-pub.wellorder.net"
connect-to-relay-failed "wss://nostr.rocks" nil
open "wss://rsslay.fiatjaf.com"
open "wss://nostr-relay.wlvs.space"
open "wss://nostr.bitcoiner.social"
open "wss://nostr.semisol.dev"
open "wss://relay.damus.io"
open "wss://expensive-relay.fiatjaf.com"
subscription-date 1652918400 "05/18/2022 21:00:00 ART"
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["CLOSE","more-speech"]
sending: ["REQ","more-speech",{"since":1652918400}]
sending: ["EVENT",{"kind":0,"tags":[],"content":"{\"name\":\"fiatjaf\",\"about\":\"my more-speech test account\",\"picture\":\"http://fiatjaf.com/gotasnajanela.jpg\"}","pubkey":"1cc35f503fd4f38656999206e6bb83caf6f02a0385054309468343311b29bb15","created_at":1653830563,"id":"ce601056e0ee5746adbb71fd0feed51832cf26e99d6ad541d5f9f956cad7e9ba","sig":"0d752ec7e1532502f7c3b609cc4d60d43ddee6464d83ac92f1a388547b5a9216a90e38025c4239aa41af5113264d17e788c1b0aed905ce5c224c37559269e953"}]
sending: ["EVENT",{"kind":0,"tags":[],"content":"{\"name\":\"fiatjaf\",\"about\":\"my more-speech test account\",\"picture\":\"http://fiatjaf.com/gotasnajanela.jpg\"}","pubkey":"1cc35f503fd4f38656999206e6bb83caf6f02a0385054309468343311b29bb15","created_at":1653830563,"id":"ce601056e0ee5746adbb71fd0feed51832cf26e99d6ad541d5f9f956cad7e9ba","sig":"0d752ec7e1532502f7c3b609cc4d60d43ddee6464d83ac92f1a388547b5a9216a90e38025c4239aa41af5113264d17e788c1b0aed905ce5c224c37559269e953"}]
Syntax error (NullPointerException) compiling at (/tmp/form-init7189754490137992087.clj:1:73).
null

Full report at:
/tmp/clojure-1720617534143121655.edn

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.