ajstarks / deck Goto Github PK
View Code? Open in Web Editor NEWA Go Package for generation of slide decks and information displays
License: Other
A Go Package for generation of slide decks and information displays
License: Other
Could you include a license file?
We can increase perf by using partial rendering
At the moment a change to decksh produces all of the xml and then the GIO Rendering system renders with that xml.
What we can look at is doing on partials updates. Because there is a one to one mapping of a decksh line to xml its possible and not boiling the ocean. The GIO rendering engine would then update the screen of just the changed xml.
Are you still using it ?
I was thinking of extending it so users can have a web gui for interacting with deck.
I noticed the html code is not used …
A simple htmx pattern ( you can google it ) to make a html driven gui to talk to der kd basically , so that users can interact with the system .
Hey
i could not work out how to configure / deckd
any chance you can add a readme for newbies ?
Hello, I was experimenting this library, found useful, are you planning for any table support like list you provided, and whats the future roadmap on this library ? Is there any active development happening?
Lots a graphics people have a situation where they need to produce graphics with the text in different languages.
.dsp already supports text substitution, so the fundamentals are there.
I just wanted to write down my own thoughts on this:
I like to have a data file where i have the translation field, and the translation-override field. The translation is the machine translation, and the translation-override is the human checker overriding it. I actually model this in google sheets and set it up to do the translation, and then wrote a golang package to extract it as a csv from the google sheet. Its one way to approach this area.
https://github.com/cameronkinsella/manga-translator is pretty cool GIO proejct that does OCR on images, extracts the text, and translates it, and puts the text back into the image. I mention this because it's got some good code to help with talking to the google trans api and also setting up configs. I also reference this because its another way to do it as opposed to the google sheet approach i have used. I can dig out this code if needed ...
caching can really be useful here, because you get a translation memory, and so dont have to hit a Google sheet or the google trans api if you already have a translation for that "key" in your files.
i expect we might need a first class element in the .dsp DSL for trans, but not sure. Pluralisation i think will be the thing that forces the need for a first class element, as well the Data Format, etc.
Date Format, Currency Format are very often needed. There are a few light and simple golang packages out there that do this. It should be presumed that Time is always UTC when coming from any DB, and then converted to the User timezone format. Because Deck needs to output PDF, etc in many languages the "user timezone, locale" would be a config, not a runtime lookup. However for presentations with deckd, It would need to check the user runtime to determine the "user timezone, locale"
GIO is getting there with RTL and LTR support. So eventually that would also be an aspect.
pdfdeck gives me an error. It seems that some font files missing, do I have to specify the fonts somewhere? Anyway .. sometimes helvetica is missing and sometimes courier ..
maigl@dreggnbox:~/devel/deck_test$ pdfdeck countdown.xml
pdfdeck: open courier.json: no such file or directory
maigl@dreggnbox:~/devel/deck_test$ pdfdeck countdown.xml
pdfdeck: open helvetica.json: no such file or directory
I pulled from master (commit e8d9980) and used your countdown example .. and with svgdeck I get the expected results ..
Eventhough pdfdeck fails, there is an empty result-file 'countdown.pdf' in my folder.
https://github.com/ajstarks/deck/blob/master/cmd/gcdeck/gcdeck.go#L593
Is making my wasm build fail.
Does not like sigup :)
Any many reason this being there ? I guess to a dämm killing it ?
If you let me know it will help me decide what to do as I run this as a gui on the web as wasm.
sex
seems like a poor choice for a command line tool name. May I suggest something less suggestive? Maybe deck-srv
or deckapi
or decks
?
Hey
I was wondering if we can extend gcdeck with more gui to help designers work on their designed without having to know too much Deck markdown or .dsh
This is just an idea to help make it easier for graphics people to not have to edit .dsh directly.
The biomimicry people using this are non technical and i am trying to make it easier for them to use the gcdeck tool.
Here is one of your examples: https://speakerdeck.com/ajstarks/decksh-a-little-language-for-decks?slide=5
Its has a variable called "gy=10" that affects the elements placement.
How is the Layout --
Left Pane: Preview area of Deck
Right Upper Pane: Elements List
Right Lower Pane. Properties List
How is the description of each and how they interact.
The Elements list shows a representation of the elements in the .dsh file. It could be a tree or a list.
The Properties list shows properties.
If no element is selected it shows the global variables of the .dsh
If an element is selected it shows the elements properties in the Property List.
When they click on an element in that list , highlight it in the Preview pane with some sort of border. We can do that by just injecting into the rendering stream using a "HighlightFocus" context variable, so that it looks for the element passing through the buffer and injects the deck markup to put a border around it.
At the same time, show the properties of that element on a Property List . Just like the "HighlightFocus" this is just a global context listening for a variable called "PropertyFocus", so it knows what Element to show the properties for.
When they change the global .dsh variable like "gy=10", , the file updates and so then does the Preview Deck, and and hence the properties affected by it in the Properties List.
The idea with the HighlightFocus and PropertyFocus variables is so that GCDeck can be told what to render in its Panes. These variables are set globally. Once it knows the element its looking for it can look it up in the Deck Markup and pass the string along the context allows the Properties List to update.
Hope you get the gist of my explanation above. I imagine you have also thought about how to make things easier for designers who find it hard to deal with markup / dsl files too, so if you have some thought on this let me know.
If you want to have a video chat to discuss
https://github.com/clbanning/mxj
this will also make it faster and remove any reflection.
it will also allow use to run the deck libs in a browser using wasm.
The current Generate command can then use this and all he golang structs will not have tags, ut instead use this lib to bind the xml to the structs and visa versa.
Let me know if you interested.
Just tried to run vgdeck on a Mac but it has c dependencies
vgdeck % go run .
# github.com/ajstarks/openvg
/Users/apple/go/pkg/mod/github.com/ajstarks/[email protected]/openvg.go:7:10: fatal error: 'VG/openvg.h' file not found
#include "VG/openvg.h"
^~~~~~~~~~~~~
1 error generated.
Do we even want to both because gcdeck is its replacement in a way ?
gcdeck test.xml # from the the decksh repo
after several pages. the rendering loops through the file at rapid speed with no user intervention.
Hey
I am needing to allow someone to be able to tell Deck multiply places to look for fonts, as well as guess where they typically are.
https://github.com/flopp/go-findfont works for me, and finds all fonts on the users system by searching in the standard paths per OS. It can also search for a particular font.
I am not sure of the best approach in terms of usability. I think that Deck could look into the standard system folders using go-findfont, and then allow the DECK_FONTS env variable to be an array, so that the user can hint for other non system folders
what do you think ?
Been talking to the science users and one thing that is coming up is the ability to have basic poly line style maps at the global , country , city level .
The use case is that often they have csv data that relates to locations. For example Covid by geography.
Often they combine it with dcharts so that the end user can see the data via a bar chart ( or other ) and a map.
In the map there are a few ways they display the data representation:
Country poly line is filled with a colour that relates back to a legend.
Circle ( filled in ) in the centre of the country or state or city. The size ( and perhaps colour ) of the circle represents the quantity that relates back to a legend ( if also using colour ).
I was doing a little bit of research and it seems geojson is popular as a data format to describe maps so that might be a good data source.
I don’t know if this should be part of dcharts but I suspect it’s the right area.
Decksh could then compose a map chart and other charts ? I am presuming that decksh can make calls to the dcharts package to output deck markup, but have not checked.
There is another related requirement with this that I might as well bring up here. They are finding that sonetines they need to have the chart zoomable.
For example in a map you might want to zoom and pan. Or to click on a country and to then see the map chart for that country should the map chart of the states of that country. Then in a state the cities etc. Presume that the user can go back out also.
in addition when composing using decksh they would want to be able to layout slides with each country map on each slide. So to me the zoom feature is perhaps u der the hood in actual fact just navigating to different slides !! It would mean adding the ability to navigate decks via sone sort of data driven meta.
In a heat map chart ( do we even have these ) they want to click an area and god to the next level , and also go back out.
I know there are many different things to what I described above. I wanted to show a reasonable expansive use case to show all the aspects so that the technical aspects can be dissected out of the epic use case.
there may be a need in general for routing for example not just for maps but in general.
It seems like, years ago, the license in the root was updated meanwhile the license in the subcomponent generate was left as is. Is this intentional?
Hi, I'm super excited to have found this excellent project!
A couple of quick things:
deck
and generate
packages had go module definitions.decksh
, dchart
and the export tools e.g. svgdeck
) are excellent. I just wish they each had exported golang package APIs (with module definitions) so that it was possible to build on top of all of this great work you've done in a platform independent way without relying on external command line dependencies.Specifically, I'd love to be able to go from data to writing (or serving) an SVG slide/chart in a self-contained statically-linked go program, without resorting to piping together exec.Command("dchart",...)
type code (with the attendant brittleness of depending on those execs being correctly installed, in the path, etc.)
Item 1 above is easy. Item 2 is obviously more work, but doing it would also make it much easier to maintain those command line tools over time by abstracting the core functionality of each away from the command line processing parts.
Anyway, I'm sure you know all of this, but I can imagine so many uses for all of the hard work you've done here, if only it was a little easier to access from golang itself!
I am having working on extending the code.
One reason is the fact that we are not using the go work functionality for golang 1.8.
It allows module overrides that are private. It also ensures that the go.mod does not need any replace directives.
here is a simple example : https://github.com/xmlking/go-workspace
Also 2nd thing is that deck/generate has its own go.mod. Having go.mods inside go.mods recursively like this screws up the gopls for vscode for me. vscode Workspaces does not help either.
This issue follows on from the Maps Issue .
One aspect that I keep needing with Science decks is the ability for users to add interactions to a deck slide.
Typically this can be two types of higher level interaction.
1 Routing , where a slide has a wider ( like a button ) that navigates the user from the current slide to another slide in the same deck.
2 layers, where a slide has the ability to replace part of he slide with something else.
The overriding use case driving all this is that they want to be able to make decks where the end use is able to interact with the the finished deck in very simple ways so that the users can explore the visualisations.
So maybe we could add this concept to the Decksh ? Is it something others are I retested in ?
I have sone more in depth notes on my laptop about more precise aspects of this but I am away from it for another week.
Greeting! I am trying out this package and having trouble figuring out how to install makefont
I tried installing gofpdf
but that doesn't seem to help.
go version go1.13.5 darwin/amd64
Thank you!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.