Re: Component working in Console not as Service

2019-08-01 Thread tomcat

On 01.08.2019 13:02, Potgieter, Carlo wrote:

On 31.07.2019 20:26, Potgieter, Carlo wrote:

On 31.07.2019 14:49, Mark Thomas wrote:

On 31/07/2019 13:03, Potgieter, Carlo wrote:



On 31/07/2019 12:48, Potgieter, Carlo wrote:

I was hoping to obtain some assistance. We have used a library to convert MS 
Office documents (docx and pptx) to PDF.

This works perfectly in the development environment and also when running 
Tomcat in a console window.

The moment we run Tomcat as a service this specific component gives and error. 
Unfortunately the error is non-specific so we cannot troubleshoot the origin.

My question is, what would be the difference in running Tomcat as a Service as 
oppose to running it in Console that might cause this problem?


Tomcat runs as a different user with different access permissions, particularly 
to network shares.

You probably want to set up a Tomcat specific user with the appropriate 
permissions.

Mark

Thank you Mark for the quick response.

My first thought was permissions also, however I have attempted to run it with 
local, domain and system user, however the same result.

Both local and domain user was part of the local admin group. Is there anything 
else I can check?


Are you sure the DDL is being loaded? That normally needs explicit
configuration to point the JVM at the right path.

Look at the docs for for
org.apache.catalina.startup.VersionLoggerListener and configure it to
dump everything. Then compare the console start with the service start.



What is also different when Tomcat runs as a Service or in a console, is where 
the JVM that runs tomcat, picks up its environment and command-line switches.
If you are not familiar with this matter, this may help :
verbose explanation :
https://secure-web.cisco.com/16LxnNI0vUhSt5WCJq8xkkulFgI8kkE6jU6nNTTWH
8Edc36MeIASjeU6nUbSA_zE1ivz6c5TGLRI5-1Pf6_zuQkUOEaw8utUuFpuUnCrCLIeiS7
dhXxvll2giIW3fHOBe1_gpGzPiGufx1vE50Dzs9UUSm5Rc1iB9G9UILBUZ6dhLaGa3vAEU
t8bmVvfaGcwlM8tmxid6q8PydRkxPkVHu_02IIO1w4c2yyYp4O9vhwKqUq1OeApnpAj1c0
e2G-t0fT-lxYS5ofL92-i2ZpXEQk9bpTnCXLs0bT0wnFZYQsrFJZ8GQQckDdY-8eBWc946
XK9enjcTwIMehHfk013zuw/https%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fd
isplay%2FTOMCAT%2FWindows#Windows-Q11
Official page :
https://secure-web.cisco.com/1BYhcwXb2ofGRuNXu8K-JZBV4sFyWUkMe0XaNSYXc
ey93JyiAhWVVK1zM0iJzrwal62xEQvv7bWZTbZIMuGTP_S_2qZdoXT4tLt78CPHzpOJND9
6h28X7R95_fnapxZO1zDvqNUPkrh23BUmyvnfKvqfef2panME2Z0l8GOvPAP4lZdyaSwgc
D0L2TM7oClsAQ4TPAeM8hVEtWCsJsoeQjwh7m4IHyvpPDfPDJ28gRGkBoLQWETM9alb7RH
jMtvclQ7-lMp3IYS9kOzQBDVHACmGkdIqgx-XAWNBjM6Wce6IoYmAeiwIgYmPZ0oClxsov
Fcb1-dH06wAs3t938YQVvw/https%3A%2F%2Ftomcat.apache.org%2Ftomcat-8.5-do
c%2Fwindows-service-howto.html

(Perhaps the application expects some value to be set somewhere..)

Also, above you mention "Unfortunately the error is non-specific..", but maybe 
you want to copy the error message here, so that someone else can have a look at it ?
Maybe it triggers some recognition by another user having had the same issue 
with that library.


Quickly answering both posts from Mark and Andrei:

Mark: Yes, the DLL is being loaded. There is error handling in place should it 
be unsuccessful in accessing any of the components.
I also compared the output of the VersionLoggerListners:
When running as a service and executing the Tomcat8.exe from cmd the 
information is the same, however the functionality only works when the .exe is 
run from cmd.
When using the Startup.bat script to start the server there are three less 
entries and one extra:

Entries not included:
31-Jul-2019 19:34:37.398 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log Command line
argument: exit
31-Jul-2019 19:34:37.399 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log Command line
argument: -Xms128m
31-Jul-2019 19:34:37.399 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log Command line
argument: -Xmx256m

Entry included but not in the other two:
31-Jul-2019 19:37:11.434 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log Command line
argument: -Djdk.tls.ephemeralDHKeySize=2048

Again using this method to run the server allows the functionality to work.

Andre: From what I could see, everything is loaded the same as all of them uses 
the sae JVM. Unless I missed something...which is entirely possible.
The zeonpadpdf we are using consists of 3 components, 2 .jar's and 1
.dll. zeonpadpdf.jar, jacob-1.18.jar, jacob-1.18-x64.dll The error we are receiving 
states: "Conversion error" and is generated from the zeonpadpdf.jar which 
handles the conversion from .docx to pdf.
This is also the error in the stack trace which doesn't provide much more 
information.
Based on what I could find in the zeonpadpdf.jar this is generic error message.

Hope that gives some more context.




1) I remember (from some time ago) that in the Services control panel, there was an 
option when defining a Service, like "Allow this service to interact with the 
desktop".
If you 

Re: Component working in Console not as Service

2019-07-31 Thread tomcat

On 31.07.2019 20:26, Potgieter, Carlo wrote:

On 31.07.2019 14:49, Mark Thomas wrote:

On 31/07/2019 13:03, Potgieter, Carlo wrote:



On 31/07/2019 12:48, Potgieter, Carlo wrote:

I was hoping to obtain some assistance. We have used a library to convert MS 
Office documents (docx and pptx) to PDF.

This works perfectly in the development environment and also when running 
Tomcat in a console window.

The moment we run Tomcat as a service this specific component gives and error. 
Unfortunately the error is non-specific so we cannot troubleshoot the origin.

My question is, what would be the difference in running Tomcat as a Service as 
oppose to running it in Console that might cause this problem?


Tomcat runs as a different user with different access permissions, particularly 
to network shares.

You probably want to set up a Tomcat specific user with the appropriate 
permissions.

Mark

Thank you Mark for the quick response.

My first thought was permissions also, however I have attempted to run it with 
local, domain and system user, however the same result.

Both local and domain user was part of the local admin group. Is there anything 
else I can check?


Are you sure the DDL is being loaded? That normally needs explicit
configuration to point the JVM at the right path.

Look at the docs for for
org.apache.catalina.startup.VersionLoggerListener and configure it to
dump everything. Then compare the console start with the service start.



What is also different when Tomcat runs as a Service or in a console, is where 
the JVM that runs tomcat, picks up its environment and command-line switches.
If you are not familiar with this matter, this may help :
verbose explanation : 
https://secure-web.cisco.com/16LxnNI0vUhSt5WCJq8xkkulFgI8kkE6jU6nNTTWH8Edc36MeIASjeU6nUbSA_zE1ivz6c5TGLRI5-1Pf6_zuQkUOEaw8utUuFpuUnCrCLIeiS7dhXxvll2giIW3fHOBe1_gpGzPiGufx1vE50Dzs9UUSm5Rc1iB9G9UILBUZ6dhLaGa3vAEUt8bmVvfaGcwlM8tmxid6q8PydRkxPkVHu_02IIO1w4c2yyYp4O9vhwKqUq1OeApnpAj1c0e2G-t0fT-lxYS5ofL92-i2ZpXEQk9bpTnCXLs0bT0wnFZYQsrFJZ8GQQckDdY-8eBWc946XK9enjcTwIMehHfk013zuw/https%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FTOMCAT%2FWindows#Windows-Q11
Official page : 
https://secure-web.cisco.com/1BYhcwXb2ofGRuNXu8K-JZBV4sFyWUkMe0XaNSYXcey93JyiAhWVVK1zM0iJzrwal62xEQvv7bWZTbZIMuGTP_S_2qZdoXT4tLt78CPHzpOJND96h28X7R95_fnapxZO1zDvqNUPkrh23BUmyvnfKvqfef2panME2Z0l8GOvPAP4lZdyaSwgcD0L2TM7oClsAQ4TPAeM8hVEtWCsJsoeQjwh7m4IHyvpPDfPDJ28gRGkBoLQWETM9alb7RHjMtvclQ7-lMp3IYS9kOzQBDVHACmGkdIqgx-XAWNBjM6Wce6IoYmAeiwIgYmPZ0oClxsovFcb1-dH06wAs3t938YQVvw/https%3A%2F%2Ftomcat.apache.org%2Ftomcat-8.5-doc%2Fwindows-service-howto.html

(Perhaps the application expects some value to be set somewhere..)

Also, above you mention "Unfortunately the error is non-specific..", but maybe 
you want to copy the error message here, so that someone else can have a look at it ?
Maybe it triggers some recognition by another user having had the same issue 
with that library.


Quickly answering both posts from Mark and Andrei:

Mark: Yes, the DLL is being loaded. There is error handling in place should it 
be unsuccessful in accessing any of the components.
I also compared the output of the VersionLoggerListners:
When running as a service and executing the Tomcat8.exe from cmd the 
information is the same, however the functionality only works when the .exe is 
run from cmd.
When using the Startup.bat script to start the server there are three less 
entries and one extra:

Entries not included:
31-Jul-2019 19:34:37.398 INFO [main] 
org.apache.catalina.startup.VersionLoggerListener.log Command line argument: 
exit
31-Jul-2019 19:34:37.399 INFO [main] 
org.apache.catalina.startup.VersionLoggerListener.log Command line argument: 
-Xms128m
31-Jul-2019 19:34:37.399 INFO [main] 
org.apache.catalina.startup.VersionLoggerListener.log Command line argument: 
-Xmx256m

Entry included but not in the other two:
31-Jul-2019 19:37:11.434 INFO [main] 
org.apache.catalina.startup.VersionLoggerListener.log Command line argument: 
-Djdk.tls.ephemeralDHKeySize=2048

Again using this method to run the server allows the functionality to work.

Andre: From what I could see, everything is loaded the same as all of them uses 
the sae JVM. Unless I missed something...which is entirely possible.
The zeonpadpdf we are using consists of 3 components, 2 .jar's and 1 .dll. 
zeonpadpdf.jar, jacob-1.18.jar, jacob-1.18-x64.dll
The error we are receiving states: "Conversion error" and is generated from the 
zeonpadpdf.jar which handles the conversion from .docx to pdf.
This is also the error in the stack trace which doesn't provide much more 
information.
Based on what I could find in the zeonpadpdf.jar this is generic error message.

Hope that gives some more context.




1) I remember (from some time ago) that in the Services control panel, there was an option 
when defining a Service, like "Allow this service to interact with the desktop".

If you find it, you may want to set it, and then just redo 

Re: Component working in Console not as Service

2019-07-31 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Carlo,

On 7/31/19 07:48, Potgieter, Carlo wrote:
> I was hoping to obtain some assistance. We have used a library to 
> convert MS Office documents (docx and pptx) to PDF.
> 
> This works perfectly in the development environment and also when 
> running Tomcat in a console window.
> 
> The moment we run Tomcat as a service this specific component
> gives and error. Unfortunately the error is non-specific so we
> cannot troubleshoot the origin.
What DO you have?

> My question is, what would be the difference in running Tomcat as a
>  Service as oppose to running it in Console that might cause this 
> problem?
> 
> Any assistance would be greatly appreciated!

Since you are generating PDFs which often have to interact with
graphical components, this could be a "headless" issue. I could have
sworn that modern JVMs always ran "headless", but I guess maybe not.

https://www.oracle.com/technetwork/articles/javase/headless-136834.html

- -chris
-BEGIN PGP SIGNATURE-
Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/

iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl1B7XMACgkQHPApP6U8
pFgFdBAAqPk3hzrOBgN80k7LP/BfBQPFqRsqS/GVKcqaVNaxfoRbHk0k2LgJNhI6
5nVOyEwMOmPgs3A6H46OEWLCOPE7nVn/JL5gnYGAnTNWjkahVpldoprKeZHQ239o
IksdZsu4Qi4TQXhvuTKZasUkDZyaRQL7BEL2bXPkivjoqAsCsOaNifWneoDzuR+A
YgBBFs1bWhwx3Kd9T0CxwKICfYs+VkspqhcZAjn/0FDGszUYrWVW4oSWiOKzDLiT
Ghrqf76wXUKQFUApdu8zYmgOiDFagDXPP6anBGIkwuzbxTg9jTnjBw2ercQ3oWpv
Por8Cb0KIb35ZV5huUmb7c7J1AY0QTFYqwdJjF7nKpLxgvVHVDk/JoY1gAVsesS+
FvAXYai64xuR9e1wbAbSzSzvX2/w6PL0jsfbZqqhNfDlZzMpEu6sh0UUDExq7qLW
Q5pwuMPC2WRCyN4b4HPelH87vNWD8SVno5qHRhyCzU91IMdXKP+HgJUE8XCnIcq3
e4H8ZeSfmc3eeR3eB6YFWgAp9+8KexvOl3KsKdNdJDcPdGKihAMZWIMd5VIweNgM
08CFD7stIUWL5WEQY0BVM/kJ4ubT1QEtlgnysSabZdfK0fkNIXjynqoKY+I3OX0u
40ef7IjzGU19nO9IIq1SiUEz0mryU7YoJabovj4fgGYVqujAyu0=
=0dji
-END PGP SIGNATURE-

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Component working in Console not as Service

2019-07-31 Thread logo

All,

sorry for top posting. Nothing down there to relate to.

Could it be that it is something similar like headless on linux? I 
remember something similar when using pdflib back in the days.
As a service there may be something missing (login shell, DISPLAY, 
Terminal)? "Word to PDF" could be well something that requires screen 
information. Worth a check on the requirements of the library.


My 2cts.

Peter


Am 2019-07-31 15:54, schrieb André Warnier:

On 31.07.2019 14:49, Mark Thomas wrote:

On 31/07/2019 13:03, Potgieter, Carlo wrote:



On 31/07/2019 12:48, Potgieter, Carlo wrote:
I was hoping to obtain some assistance. We have used a library to 
convert MS Office documents (docx and pptx) to PDF.


This works perfectly in the development environment and also when 
running Tomcat in a console window.


The moment we run Tomcat as a service this specific component gives 
and error. Unfortunately the error is non-specific so we cannot 
troubleshoot the origin.


My question is, what would be the difference in running Tomcat as a 
Service as oppose to running it in Console that might cause this 
problem?


Tomcat runs as a different user with different access permissions, 
particularly to network shares.


You probably want to set up a Tomcat specific user with the 
appropriate permissions.


Mark

Thank you Mark for the quick response.

My first thought was permissions also, however I have attempted to 
run it with local, domain and system user, however the same result.


Both local and domain user was part of the local admin group. Is 
there anything else I can check?


Are you sure the DDL is being loaded? That normally needs explicit
configuration to point the JVM at the right path.

Look at the docs for for
org.apache.catalina.startup.VersionLoggerListener and configure it to
dump everything. Then compare the console start with the service 
start.




What is also different when Tomcat runs as a Service or in a console,
is where the JVM that runs tomcat, picks up its environment and
command-line switches.
If you are not familiar with this matter, this may help :
verbose explanation :
https://cwiki.apache.org/confluence/display/TOMCAT/Windows#Windows-Q11
Official page :
https://tomcat.apache.org/tomcat-8.5-doc/windows-service-howto.html

(Perhaps the application expects some value to be set somewhere..)

Also, above you mention "Unfortunately the error is non-specific..",
but maybe you want to copy the error message here, so that someone
else can have a look at it ?
Maybe it triggers some recognition by another user having had the same
issue with that library.


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Component working in Console not as Service

2019-07-31 Thread tomcat

On 31.07.2019 14:49, Mark Thomas wrote:

On 31/07/2019 13:03, Potgieter, Carlo wrote:



On 31/07/2019 12:48, Potgieter, Carlo wrote:

I was hoping to obtain some assistance. We have used a library to convert MS 
Office documents (docx and pptx) to PDF.

This works perfectly in the development environment and also when running 
Tomcat in a console window.

The moment we run Tomcat as a service this specific component gives and error. 
Unfortunately the error is non-specific so we cannot troubleshoot the origin.

My question is, what would be the difference in running Tomcat as a Service as 
oppose to running it in Console that might cause this problem?


Tomcat runs as a different user with different access permissions, particularly 
to network shares.

You probably want to set up a Tomcat specific user with the appropriate 
permissions.

Mark

Thank you Mark for the quick response.

My first thought was permissions also, however I have attempted to run it with 
local, domain and system user, however the same result.

Both local and domain user was part of the local admin group. Is there anything 
else I can check?


Are you sure the DDL is being loaded? That normally needs explicit
configuration to point the JVM at the right path.

Look at the docs for for
org.apache.catalina.startup.VersionLoggerListener and configure it to
dump everything. Then compare the console start with the service start.



What is also different when Tomcat runs as a Service or in a console, is where the JVM 
that runs tomcat, picks up its environment and command-line switches.

If you are not familiar with this matter, this may help :
verbose explanation : 
https://cwiki.apache.org/confluence/display/TOMCAT/Windows#Windows-Q11
Official page : 
https://tomcat.apache.org/tomcat-8.5-doc/windows-service-howto.html

(Perhaps the application expects some value to be set somewhere..)

Also, above you mention "Unfortunately the error is non-specific..", but maybe you want to 
copy the error message here, so that someone else can have a look at it ?
Maybe it triggers some recognition by another user having had the same issue with that 
library.



-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Component working in Console not as Service

2019-07-31 Thread Mark Thomas
On 31/07/2019 13:03, Potgieter, Carlo wrote:
> 
> 
> On 31/07/2019 12:48, Potgieter, Carlo wrote:
>> I was hoping to obtain some assistance. We have used a library to convert MS 
>> Office documents (docx and pptx) to PDF.
>>
>> This works perfectly in the development environment and also when running 
>> Tomcat in a console window.
>>
>> The moment we run Tomcat as a service this specific component gives and 
>> error. Unfortunately the error is non-specific so we cannot troubleshoot the 
>> origin.
>>
>> My question is, what would be the difference in running Tomcat as a Service 
>> as oppose to running it in Console that might cause this problem?
> 
> Tomcat runs as a different user with different access permissions, 
> particularly to network shares.
> 
> You probably want to set up a Tomcat specific user with the appropriate 
> permissions.
> 
> Mark
> 
> Thank you Mark for the quick response.
> 
> My first thought was permissions also, however I have attempted to run it 
> with local, domain and system user, however the same result.
> 
> Both local and domain user was part of the local admin group. Is there 
> anything else I can check?

Are you sure the DDL is being loaded? That normally needs explicit
configuration to point the JVM at the right path.

Look at the docs for for
org.apache.catalina.startup.VersionLoggerListener and configure it to
dump everything. Then compare the console start with the service start.

Mark


> 
> Carlo
> 
> *Disclaimer:* This email is subject to important restrictions, qualifications 
> and disclaimers ("the Disclaimer") that must be accessed and read by visiting 
> our website and viewing the webpage at the following address: 
> http://www.deloitte.com/za/disclaimer. The Disclaimer forms part of the 
> content of this email. If you cannot access the Disclaimer, please obtain a 
> copy thereof from us by sending an email to zaitserviced...@deloitte.co.za. 
> Deloitte refers to a Deloitte member firm, one of its related entities, or 
> Deloitte Touche Tohmatsu Limited (“DTTL”). Each Deloitte member firm is a 
> separate legal entity and a member of DTTL. DTTL does not provide services to 
> clients. Please see www.deloitte.com/about to learn more.
> 
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Component working in Console not as Service

2019-07-31 Thread Mark Thomas
On 31/07/2019 12:48, Potgieter, Carlo wrote:
> I was hoping to obtain some assistance. We have used a library to convert MS 
> Office documents (docx and pptx) to PDF.
> 
> This works perfectly in the development environment and also when running 
> Tomcat in a console window.
> 
> The moment we run Tomcat as a service this specific component gives and 
> error. Unfortunately the error is non-specific so we cannot troubleshoot the 
> origin.
> 
> My question is, what would be the difference in running Tomcat as a Service 
> as oppose to running it in Console that might cause this problem?

Tomcat runs as a different user with different access permissions,
particularly to network shares.

You probably want to set up a Tomcat specific user with the appropriate
permissions.

Mark

> 
> Any assistance would be greatly appreciated!
> 
> Carlo
> 
> Additional information:
> 
> Tomcat 8.0.36
> PDF Library used: zeonpadpdf (Utilises jacob-1.18.jar and jacob-1.18-x64.dll)
> OS  - Windows 10 and Windows Server 2012 R2
> As a standard we run Tomcat as a service.
> JVM 1.8.0_221-b11
> 
> *Disclaimer:* This email is subject to important restrictions, qualifications 
> and disclaimers ("the Disclaimer") that must be accessed and read by visiting 
> our website and viewing the webpage at the following address: 
> http://www.deloitte.com/za/disclaimer. The Disclaimer forms part of the 
> content of this email. If you cannot access the Disclaimer, please obtain a 
> copy thereof from us by sending an email to zaitserviced...@deloitte.co.za. 
> Deloitte refers to a Deloitte member firm, one of its related entities, or 
> Deloitte Touche Tohmatsu Limited (“DTTL”). Each Deloitte member firm is a 
> separate legal entity and a member of DTTL. DTTL does not provide services to 
> clients. Please see www.deloitte.com/about to learn more.
> 
> -
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Component working in Console not as Service

2019-07-31 Thread Potgieter, Carlo
I was hoping to obtain some assistance. We have used a library to convert MS 
Office documents (docx and pptx) to PDF.

This works perfectly in the development environment and also when running 
Tomcat in a console window.

The moment we run Tomcat as a service this specific component gives and error. 
Unfortunately the error is non-specific so we cannot troubleshoot the origin.

My question is, what would be the difference in running Tomcat as a Service as 
oppose to running it in Console that might cause this problem?

Any assistance would be greatly appreciated!

Carlo

Additional information:

Tomcat 8.0.36
PDF Library used: zeonpadpdf (Utilises jacob-1.18.jar and jacob-1.18-x64.dll)
OS  - Windows 10 and Windows Server 2012 R2
As a standard we run Tomcat as a service.
JVM 1.8.0_221-b11

*Disclaimer:* This email is subject to important restrictions, qualifications 
and disclaimers ("the Disclaimer") that must be accessed and read by visiting 
our website and viewing the webpage at the following address: 
http://www.deloitte.com/za/disclaimer. The Disclaimer forms part of the content 
of this email. If you cannot access the Disclaimer, please obtain a copy 
thereof from us by sending an email to zaitserviced...@deloitte.co.za. Deloitte 
refers to a Deloitte member firm, one of its related entities, or Deloitte 
Touche Tohmatsu Limited (“DTTL”). Each Deloitte member firm is a separate legal 
entity and a member of DTTL. DTTL does not provide services to clients. Please 
see www.deloitte.com/about to learn more.