Sounds good! :-) If we communicate well to each other explaining different use cases, then we can improve it together in this community. I believe everybody here is open to any new improvements for the community even if some features are not relevant to themselves. That's why we join the ASF. ;-)
Cheers, Woonsan On Thu, Dec 19, 2019 at 6:38 AM Siegfried Goeschl <[email protected]> wrote: > > Hi folks, > > I’m okay with the things :-) > > Thanks in advance, > > Siegfried Goeschl > > > > On 18 Dec 2019, at 20:38, Daniel Dekany <[email protected]> wrote: > > > > Yes, these can done after V1 or whatever. But it's still important if > > Siegfried will be OK with such things, or will lose motivation because it's > > not how he likes his own kid. More code without more developers probably > > won't work out well, given how little developer time even FM core gets. > > > > As of nested output files, I agree (and BTW, FMPP also have a nested output > > directive, not just starting a new). I also understand that it breaks the > > clean mental model, but if (if...) this is what's reasonably often needed > > in reality, then certainly the mental model should bend. > > > > On Wed, Dec 18, 2019 at 8:01 PM Woonsan Ko <[email protected]> wrote: > > > >> On Wed, Dec 18, 2019 at 11:23 AM Siegfried Goeschl > >> <[email protected]> wrote: > >>> > >>> Hi Daniel, > >>> > >>> please see my comments below … > >>> > >>> Thanks in advance, > >>> > >>> Siegfried Goeschl > >>> > >>> > >>>> On 18 Dec 2019, at 16:58, Daniel Dekany <[email protected]> > >> wrote: > >>>> > >>>> Multiple output files: How open are you to the idea if someone else > >> wants > >>>> to add that though? The use-case is when it's input data that drives > >> what > >>>> output files you will have (as in my example with the employees), and > >>>> working that around with multiple invocations is not very nice. > >>>> > >>> > >>> Suggestive question - it is an Open Source project after all :-) > >>> > >>> * As long as it is hosted on my GitHub repo I can ultimately reject PRs > >> if I’m really unhappy about them but repos can be forked > >>> * If it becomes part of Apache FreeMarker project than there are more > >> qualified developers out there to make a decision > >>> > >>> Regarding the implementation > >>> > >>> * Multiple output files violates my my mental model since you can’t use > >> stdout any longer > >>> * It could break the CommonsCSV integration since I’m using CSVPrinter > >> sitting on FreeMarker’s output stream (which changes when using multiple > >> output files) > >>> * Last but not least I have not enough experience / requirements to come > >> up with a useful implementation from the scratch > >> > >> In my head, we may introduce a new directive to specify a different > >> output for the nested things, instead of the _default_ STDOUT, in the > >> future. For example, > >> > >> hello, > >> <#output file="another.csv"> > >> something else... > >> </#output> > >> world! > >> > >> So, by default "hello,\nworld!" to STDOUT, "something else..." to the > >> extra file. > >> This seems better to me than "changing output and closing the current > >> output" approach in FMPP. > >> > >> But this improvement can be done together once Siegfried _donates_ his > >> project to Apache FreeMarker. ;-) > >> > >>> > >>>> Default locale: > >>>> And also default charset to UTF-8, if that wasn't done. > >>> > >>> UTF-8 is the default > >>> > >>>> > >>>> JDBC drivers: There was some discussion of how to add user defined > >> classes > >>>> to the tool earlier. Well, I guess it's about the same as you add your > >> own > >>>> jar-s to the classpath too, so, it shouldn't be a big deal. That could > >>>> solve this side of the JDBC problem as well. As of storing credentials, > >>>> that has to be solved when using external tools as well... but my > >> practical > >>>> experience is that people just put them in to a config file as plain > >> text > >>>> (maybe on a drive that has to be mounted with password first), or bind > >> it > >>>> to the OS user. > >>> > >>> The problem is more subtle - I want to provide a well-behaved command > >> line tool > >>> > >>> * What happens if you update the freemarker-cli installation on your box? > >>> * How do you easily distinguish between your custom JARs and the > >> initially installed ones? > >>> * How does it look like if you install freemarker-cli with package > >> managers, e.g. brew? > >> > >> I guess it should be fine as an initial version even if there's no > >> separation between system libs and custom libs (such as JDBC drivers). > >> If there's a tool for easy JDBC access, it would be nice in practices. > >> I don't think it should be perfect from V1. > >> > >> Regards, > >> > >> Woonsan > >> > >>> > >>> Current state > >>> > >>> * Custom tools can be instantiated using the freemarker-cli-properties > >>> * For the templates I use ~/.freemarker-cli directory to have a clean > >> separation > >>> * There is no really nice solution for JARs - I might tweak the Maven > >> plugin creating the Unix & Windows wrappers - you can already create an > >> “endorsed” directory there to place custom JARs > >>> > >>>> > >>>> Yes, Spring support is definitely important, given the omnipresence of > >>>> Spring. It's not just web pages there, but e-mail templates > >> (especially as > >>>> there modern the UI technologies that has taken over at most places, > >> aren't > >>>> applicable). Would be good if someone can take ownership of that > >> aspect for > >>>> FreeMarker 2, probably using what was done in FM3. (Or maybe the same > >>>> resources are better redirected to pushing FM3... who knows. There are > >>>> really no resources to push two branches in parallel.) > >>>> > >>>> On Wed, Dec 18, 2019 at 2:02 PM Siegfried Goeschl < > >>>> [email protected] <mailto:[email protected]>> > >> wrote: > >>>> > >>>>> Hi Daniel, > >>>>> > >>>>> try to write a top-level post to keep the discussion readable > >>>>> > >>>>> > >>>>> Ad Multi-file Output > >>>>> =============================================================== > >>>>> > >>>>> Currently no plans to implement it - I personally don’t have a need > >> for it > >>>>> and it is a hypothetical requirement for now > >>>>> > >>>>> > >>>>> Ad POI Integration > >>>>> =============================================================== > >>>>> > >>>>> No problem in exposing the non-String data - it is a good idea and > >> will be > >>>>> implemented > >>>>> > >>>>> > >>>>> Ad Default Locale > >>>>> =============================================================== > >>>>> > >>>>> * I need to define a locale for the unit tests > >>>>> * I guess it is a good idea to pin it to “en_US” to avoid suprises > >>>>> > >>>>> > >>>>> Ad JDBC Access > >>>>> =============================================================== > >>>>> > >>>>> It is part of a wider problem - when leaving the document-centric > >> approach > >>>>> into scripting there is a lot of useful functionality, e.g. JDBC and > >> HTTP > >>>>> clients. > >>>>> > >>>>> The problems > >>>>> > >>>>> * JDBC: You need to add JDBC drivers, where to store the credentials, > >>>>> database schema, ... > >>>>> * HTTP: More libraries, certificates, proxy support,... > >>>>> > >>>>> It is possible to implement something but it will never work properly > >> so I > >>>>> decided to tackle the problem differently b using commons-exec > >>>>> > >>>>> * REST calls can be easily made by invoking cURL > >>>>> * Database command line clients can export the result of a SELECT > >> query to > >>>>> a CSV file > >>>>> > >>>>> > >>>>> Ad Templates aren't used much for Web UI-s anymore > >>>>> =============================================================== > >>>>> > >>>>> Yes and no - IMHO it is quite useful to embed a UI into certain "micro > >>>>> services”. Therefore I think that a ready-to-use Spring Boot (& > >> Micronaut, > >>>>> etc..) integration is important and should not be an afterthought. > >>>>> > >>>>> > >>>>> Thanks in advance, > >>>>> > >>>>> Siegfried Goeschl > >>>>> > >>>>> > >>>>>> On 18 Dec 2019, at 01:32, Daniel Dekany <[email protected]> > >> wrote: > >>>>>> > >>>>>> Hi, > >>>>>> > >>>>>> Find my comments inline below. > >>>>>> > >>>>>> On Tue, Dec 17, 2019 at 10:46 PM Siegfried Goeschl < > >>>>>> [email protected] <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>>> > >> wrote: > >>>>>> > >>>>>>> Hi Daniel, > >>>>>>> > >>>>>>> Thanks for spending your time - feed back is always appreciated when > >>>>> doing > >>>>>>> things in isolation .... > >>>>>>> > >>>>>>> Please see my comments below > >>>>>>> > >>>>>>> Thanks in advance, > >>>>>>> > >>>>>>> Siegfried Goeschl > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>> On 17.12.2019, at 19:19, Daniel Dekany <[email protected] > >> <mailto:[email protected]>> > >>>>> wrote: > >>>>>>>> > >>>>>>>> Hi Siegfried, > >>>>>>>> > >>>>>>>> Looks good! > >>>>>>>> > >>>>>>>> Some random things I happened to notice: > >>>>>>>> > >>>>>>>> - The ability generating multiple output files from the same > >> template > >>>>>>>> would be worthy addition. Like you load a CSV file that has > >> employees > >>>>>>> in > >>>>>>>> it, and based on that you generate one output file per department. > >> Or > >>>>>>> even > >>>>>>>> one per employee. (There could directives for that, like > >>>>>>> changeOutputFile, > >>>>>>>> nestOutputFile, etc. on > >>>>> http://fmpp.sourceforge.net/pphash.html#sect17 < > >> http://fmpp.sourceforge.net/pphash.html#sect17> > >>>>>>> <http://fmpp.sourceforge.net/pphash.html#sect17 < > >> http://fmpp.sourceforge.net/pphash.html#sect17> < > >>>>> http://fmpp.sourceforge.net/pphash.html#sect17 < > >> http://fmpp.sourceforge.net/pphash.html#sect17>>>) > >>>>>>> > >>>>>>> Well, I simply don't need it and it complicates things - in simple > >> cases > >>>>>>> one could just re-run the freemarker-cli with a different template > >>>>> and/or > >>>>>>> parameters > >>>>>>> > >>>>>> > >>>>>> My feeling is that if there's a tool that's about transforming some > >> files > >>>>>> to other files, but the idea that a single invocation can yield > >> multiple > >>>>>> output files is not part of it, one way or another (i.e., not > >> necessarily > >>>>>> in the way it was in FMPP), it might turns out to be a limiting > >> design > >>>>>> decision later as feature request start to pour in. And then it can > >> be > >>>>> hard > >>>>>> to add as an afterthought. Well, maybe I'm wrong, as I have no > >> statics > >>>>>> about how often it's needed. FMPP users did use it (myself included), > >>>>> some > >>>>>> of them at least. > >>>>>> > >>>>>> > >>>>>>>> - When I load an XLSX, I get back values as string, not as > >> numbers, or > >>>>>>>> dates. I'm not sure how hard it is to solve though (I don't > >> remember > >>>>>>> POI > >>>>>>>> much). > >>>>>>> > >>>>>>> That should not be too hard - I actually use > >>>>>>> org.apache.poi.ss.usermodel.DataFormatter to create the strings > >>>>>> > >>>>>> > >>>>>> If templates get numbers etc., or have a such choice at least, then > >> they > >>>>>> can compare numbers, filter based on their values, control the > >>>>> formatting, > >>>>>> etc. My idea here is that an Excel file, CSV file, whatever, is just > >> a > >>>>> pure > >>>>>> data, and rendering/formatting is the duty of the templates. > >>>>>> > >>>>>> > >>>>>>>> BTW, the strings I get back are formatted with the locale of the > >> OS, > >>>>>>> > >>>>>>> which is a problem. I guess there should be an config option to set > >> the > >>>>>>> JVM > >>>>>>>> locale. (The ExcelToolTest fails on my computer with locale hu_HU > >> for > >>>>>>>> somewhat similar reason, as it gets "100,00" instead of "100.00".) > >>>>>>> > >>>>>>> On the command line you can use > >>>>>>> > >>>>>>> -l, --locale=<locale> Locale being used for output file, e.g. > >>>>> 'en_US' > >>>>>>> > >>>>>>> but I guess I should provide a fixed locale for the unit tests > >>>>>>> > >>>>>> > >>>>>> The problem is not how FreeMarker renders the numbers. It already > >> gets > >>>>>> strings like that from POI, and --locale doesn't influence POI. > >>>>>> > >>>>>> As of the default locale, for these kind of tools, I believe that > >> using > >>>>>> system defaults is usually evil. So having a fixed default is maybe > >> not > >>>>>> just for unit tests. The locale of my computer, or wherever I run a > >> job > >>>>> on > >>>>>> (often some backend linux box) should be usually irrelevant, and not > >>>>>> influence the output. Not to mention when team mates share the > >> project, > >>>>> in > >>>>>> an international team. > >>>>>> > >>>>>>> - Querying from relation databases (JDBC) would be probably an > >> useful > >>>>>>>> addition (it doesn't fit the Document paradigm though). > >>>>>>> > >>>>>>> I integrated commons-exec and triggered AWS CLI - basically you > >> capture > >>>>>>> the output of any command-line invocation and process it. Just need > >> to > >>>>> make > >>>>>>> sure that every tool supports processing raw strings ... > >>>>>>> > >>>>>> > >>>>>> I'm note sure what do you mean. The result of a query is a structured > >>>>> data, > >>>>>> with column names and non-string types, so I guess command-line > >>>>> invocation > >>>>>> can't solve that too well. > >>>>>> > >>>>>> > >>>>>>>> It would be good if there's some de-facto tool for these kind of > >> things > >>>>>>>> than what freemarker-cli does. I guess there's a few such tools in > >>>>>>> company > >>>>>>>> repos, but of course those have no potential to become more > >> generic and > >>>>>>>> being published. (freemarker-generator was a such toll though, but > >> it > >>>>>>>> didn't go anywhere after donation. Actually, FMPP was a such tool > >> too, > >>>>>>> that > >>>>>>>> I used for some sysadmin/webadmin tasks some 15+ years ago.) But of > >>>>>>> course, > >>>>>>>> long term care is the tricky issue with any project that has no > >> company > >>>>>>>> truly behind it (i.e., no payed developers). Do you have you have > >> any > >>>>>>>> thoughts/plans regarding the longer term life of freemarker-cli? > >>>>>>> > >>>>>>> I worked on a couple of not soo successful Open Source projects - > >> yes, > >>>>> it > >>>>>>> might become another Open Source GitHub project nobody knows / > >> cares :-) > >>>>>>> > >>>>>>> Having said that > >>>>>>> > >>>>>>> * I'm maintaining it already for a few of years and I will always > >> find > >>>>>>> some things I can do with it > >>>>>>> * It is useful for some common tasks when you have a Java background > >>>>>>> * I think it is a great way to re-use or build up FreeMarker > >> knowledge > >>>>>>> > >>>>>> > >>>>>> And, I would add, templates aren't used much for Web UI-s anymore, so > >>>>> these > >>>>>> alternate use cases become the main ones. > >>>>>> > >>>>>> > >>>>>>> * And it should become part of the Apache Freemarker project - much > >>>>> better > >>>>>>> visibility & broader user base > >>>>>>> > >>>>>> > >>>>>> Yeah, the last point is what I'm going for really. But that's also > >> why I > >>>>>> hope that you feel like making it more general. Or at least has no > >>>>> negative > >>>>>> feelings about it. > >>>>>> > >>>>>>> > >>>>>>>> Also, some things that you miss for FreeMarker itself for it to be > >> more > >>>>>>>> fitting for the task? > >>>>>>> > >>>>>>> Support for Java 8 Date/Time API - last time I looked at it it was > >> not > >>>>>>> supported by FreeMarker and it's a bummer since nobody is using > >> Date any > >>>>>>> longer ... > >>>>>>> > >>>>>> > >>>>>> Yeah... it still isn't. It's probably among the new few things to > >> add at > >>>>>> this point, as it's long due. > >>>>>> > >>>>>>> > >>>>>>>> > >>>>>>>> On Sun, Nov 17, 2019 at 7:02 PM Siegfried Goeschl < > >>>>>>>> [email protected] <mailto:[email protected]> > >> <mailto:[email protected] <mailto:[email protected]>> > >>>>> <mailto:[email protected] <mailto: > >> [email protected]> <mailto:[email protected] <mailto: > >> [email protected]>>>> > >>>>> wrote: > >>>>>>>> > >>>>>>>>> Hi folks, > >>>>>>>>> > >>>>>>>>> since I'm currently mostly busy with non-coding tasks I spent some > >>>>> time > >>>>>>>>> honing my coding skills - probably to no avail as my colleagues > >> would > >>>>>>> say > >>>>>>>>> ;-) > >>>>>>>>> > >>>>>>>>> 1) I migrated my pet project "freemarker-cli" from Groovy to JDK 8 > >>>>> (see > >>>>>>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli> < > >>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli>> < > >>>>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli> < > >>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli>>> < > >>>>>>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli> < > >>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli>> < > >>>>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli> < > >>>>> https://github.com/sgoeschl/freemarker-cli < > >> https://github.com/sgoeschl/freemarker-cli>>>>) > >>>>>>>>> > >>>>>>>>> 2) At > >>>>>>>>> > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >> < > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>> > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >> < > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>> > >>>>>> > >>>>>>> < > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >> < > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>> > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >> < > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>> > >>>>>> > >>>>>>>> > >>>>>>>>> < > >>>>>>>>> > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>>>>> > >>>>>>> < > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/blob/master/javameetup/freemarker/slides/src/docs/asciidoc/index.adoc > >>>>>> > >>>>>>>>> > >>>>>>>>> you find a presentation I gave some while ago > >>>>>>>>> > >>>>>>>>> 3) I also wrote a Spring Boot FreeMarker sample project as part > >> of the > >>>>>>>>> presentation (see > >>>>>>>>> > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >> < > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>> > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >> < > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>> > >>>>>> > >>>>>>> < > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >> < > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>> > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >> < > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>> > >>>>>> > >>>>>>>> > >>>>>>>>> < > >>>>>>>>> > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>>>>> > >>>>>>> < > >>>>>>> > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>>>> < > >>>>> > >> https://github.com/sgoeschl/presentations/tree/master/javameetup/freemarker/demo > >>>>>> > >>>>>>>> > >>>>>>>>>> ) > >>>>>>>>> > >>>>>>>>> My plans / questions > >>>>>>>>> > >>>>>>>>> I would be awesome if I could get some feedback about > >> "freemarker-cli" > >>>>>>> in > >>>>>>>>> its current JDK incarnation :-) Later on I will release 2.0.0 and > >> push > >>>>>>> it > >>>>>>>>> to Maven Central. > >>>>>>>>> > >>>>>>>>> In the mean time I wrote three applications (micro services in new > >>>>>>> speak) > >>>>>>>>> using Apache FreeMarker and found it hard to find a starting point > >>>>> for a > >>>>>>>>> Spring Boot applications - therefore I wrote the sample project > >> (see > >>>>>>>>> above). One way or the other a Spring Boot (and Micronaut) blue > >> print > >>>>>>>>> should find its way into Apache FreeMarker officially. I think > >> Apache > >>>>>>>>> FreeMarker is awesome for adding a developer UI to some micro > >> service > >>>>>>> but > >>>>>>>>> developers don't care about the template engine but only about a > >> quick > >>>>>>> and > >>>>>>>>> painless way to get the job done ... > >>>>>>>>> > >>>>>>>>> Anyone volunteering to give a presentation about Apache > >> Freemarker at > >>>>>>>>> ApacheCon? I could do but I'm not really qualified :-) > >>>>>>>>> > >>>>>>>>> Thanks in advance, > >>>>>>>>> > >>>>>>>>> Siegfried Goeschl > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> -- > >>>>>>>> Best regards, > >>>>>>>> Daniel Dekany > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> Best regards, > >>>>>> Daniel Dekany > >>>>> > >>>>> > >>>> > >>>> -- > >>>> Best regards, > >>>> Daniel Dekany > >>> > >> > > > > > > -- > > Best regards, > > Daniel Dekany >
