nhmkdev / cardmaker Goto Github PK
View Code? Open in Web Editor NEWAn application that generates graphics via data sources.
License: MIT License
An application that generates graphics via data sources.
License: MIT License
(Added based on suggestion from virtualflesh)
Auto-Center Layouts on PDF Export of "back" pages does not work. The centering option appears to be ignored.
The existing scripting system is acceptable but has a lot of limitations that could be easily overcome by allowing users to script any custom/complex logic themselves. Projects would be configured to operate in one script mode at a time. Mixing scripting logic is not desirable for a number of reasons.
Rough Draft Spec: https://github.com/nhmkdev/cardmaker/wiki/developers-todo-javascript
Support some form of command line export that skips opening the UI completely. There are a number of things currently blocking this that rely too heavily on forms. This kind of functionality should be moved into classes so it is possible to differentiate between a command line activity and a winform activity. One example of such a section is the Deck loading that uses a Wait dialog. Deck loading should be broken into winform vs. not. This should also makesthe creation of unit tests a bit easier.
Possible Example: CardMaker -p (path to project) -images=png
This is not a high priority item.
Currently you can export layouts into a stitched image by specifying the width and height of the target image. It may be useful to let users specify the number of cards in a given row and/column.
See https://www.boardgamegeek.com/thread/1456296/feature-suggestion
There is a further request to dummy out a certain card for use with the Tabletop Simulator that requires the 70th card to be an unused one. On export use a dummy card index to space out the specified position. This will likely be saved at the CardMaker ini level as it is extremely specialized an unlikely to be needed on a per project basis.
You can accidentally adjust disabled elements way too easily and not realize it. Disable/ignore inputs on the canvas and the Element dialog if the element is disabled.
Hello!
I found this program and was very excited to use it but I can't seem to get the reference file to work in any capacity. I've tried saving the CSV from multiple programs and I just don't understand what's not working.
I even tried the test one supplied and every time it says [bad name] and I'm unclear what I'm doing wrong. Is there something I need to do before the file is put in? Do I need to change the count? I really want to use this program as its the only one that fits my needs but I just can't seem to get this to work.
I also have no programming knowledge which is why I'm using this not NanDeck.
Thank you so much!
The Templates functionality should be investigated.
Additional request: Templates should be something that is more easily shared. If they are not already in individual files they should be.
If possible it would be useful in some situations to support nested if statements.
Whenever a Google reference or project wide defines is downloaded from the server, cache it locally. Switching between layouts would load the cache, if it exists. It would feel more responsive than re-downloading the data. Likewise if you open the project it would load the cache if it exists.
Unfortunately C# bounds this to a single platform.
Do you have any intention to port this to a more portable language?
It would be nice to have panning on the canvas by holding down a key and the left mouse button.
Example: When working with Elements that will be layered (like a text element on top of a shape element that provides a background) there is nothing that easily applies the location and size settings of one Element to another (or multiple).
The only current way to do this is to multi-select and bump the given fields values (forcing all select Element values to change). This workaround is a creative hack but not as easy as it could be.
It would be nice for the application to use standard resource (?) files for string localization.
I am experiencing a crash when selecting an element from the Canvas after editing an element in the Element Control window.
To reproduce:
Select an element and edit a property such as vertical alignment.
Immediately, (without selecting anything else or activating any other windows) right click on an element in the canvas to select it.
Result:
A broken window with title 'save' and appears and the program no longer responds and must be killed.
Backtrace:
System.ArgumentOutOfRangeException: ControlCollection does not have that many controls Parameter name: index Actual value was 0. at System.Windows.Forms.Control+ControlCollection.get_Item (Int32 index) <0x40b06730 + 0x0018f> in <filename unknown>:0 at System.Windows.Forms.TabControl.GetTab (Int32 index) <0x40b9b000 + 0x00032> in <filename unknown>:0 at (wrapper remoting-invoke-with-check) System.Windows.Forms.TabControl:GetTab (int) at System.Windows.Forms.TabControl+TabPageCollection.get_Item (Int32 index) <0x40b9ae40 + 0x00023> in <filename unknown>:0 at System.Windows.Forms.TabControl.get_SelectedTab () <0x40b9ae00 + 0x00034> in <filename unknown>:0 at System.Windows.Forms.TabControl.OnLeave (System.EventArgs e) <0x40d95dd0 + 0x00017> in <filename unknown>:0 at System.Windows.Forms.Control.FireLeave () <0x40c562b0 + 0x0001e> in <filename unknown>:0 at System.Windows.Forms.ContainerControl.set_ActiveControl (System.Windows.Forms.Control value) <0x40b6e8f0 + 0x0021c> in <filename unknown>:0 at System.Windows.Forms.Control.Select (Boolean directed, Boolean forward) <0x40bb6310 + 0x000d6> in <filename unknown>:0 at System.Windows.Forms.Control.SelectNextControl (System.Windows.Forms.Control ctl, Boolean forward, Boolean tabStopOnly, Boolean nested, Boolean wrap) <0x40b6d1c0 + 0x00216> in <filename unknown>:0 at System.Windows.Forms.ContainerControl.ChildControlRemoved (System.Windows.Forms.Control control) <0x40d04ab0 + 0x001b3> in <filename unknown>:0 at (wrapper remoting-invoke-with-check) System.Windows.Forms.ContainerControl:ChildControlRemoved (System.Windows.Forms.Control) at System.Windows.Forms.Control+ControlCollection.Remove (System.Windows.Forms.Control value) <0x40bc1e70 + 0x00107> in <filename unknown>:0 at System.Windows.Forms.TabControl+ControlCollection.Remove (System.Windows.Forms.Control value) <0x40d043f0 + 0x001eb> in <filename unknown>:0 at System.Windows.Forms.Control+ControlCollection.Clear () <0x40d04280 + 0x000fa> in <filename unknown>:0 at System.Windows.Forms.TabControl+TabPageCollection.Clear () <0x40d04230 + 0x00027> in <filename unknown>:0 at CardMaker.Forms.MDIElementControl.HandleTypeEnableStates () <0x40d01920 + 0x00113> in <filename unknown>:0 at CardMaker.Forms.MDIElementControl.Element_Selected (System.Object sender, CardMaker.Events.Args.ElementEventArgs args) <0x40bd5830 + 0x00083> in <filename unknown>:0 at (wrapper delegate-invoke) <Module>:invoke_void_object_ElementEventArgs (object,CardMaker.Events.Args.ElementEventArgs) at CardMaker.Events.Managers.ElementManager.FireElementSelectedEvent (System.Collections.Generic.List
1 listElements) <0x40bd5610 + 0x000bc> in :0
at CardMaker.Forms.MDILayoutControl.listViewElements_SelectedIndexChanged (System.Object sender, System.EventArgs e) <0x40cfff10 + 0x00137> in :0
at System.Windows.Forms.ListView.OnSelectedIndexChanged (System.EventArgs e) <0x40cd1520 + 0x00065> in :0
at System.Windows.Forms.ListView.OnSelectedIndexChanged () <0x40cd0620 + 0x0002a> in :0
at (wrapper remoting-invoke-with-check) System.Windows.Forms.ListView:OnSelectedIndexChanged ()
at System.Windows.Forms.ListViewItem.SetSelectedCore (Boolean value) <0x40cd02c0 + 0x0017f> in :0
at System.Windows.Forms.ListViewItem.set_Selected (Boolean value) <0x40cd0260 + 0x00047> in :0
at CardMaker.Forms.MDILayoutControl.ChangeSelectedElement (System.String sName) <0x40d3a0e0 + 0x00067> in :0
at CardMaker.Forms.MDILayoutControl.Element_Selected (System.Object sender, CardMaker.Events.Args.ElementEventArgs args) <0x40d3a040 + 0x0007f> in :0
at CardMaker.Events.Managers.ElementManager.FireElementSelectRequestedEvent (CardMaker.XML.ProjectLayoutElement zElement) <0x40d39d60 + 0x00067> in :0
at CardMaker.Forms.MDICanvas.contextmenuClick_Handler (System.Object sender, System.EventArgs e) <0x40d39b60 + 0x000f7> in :0
at CardMaker.Forms.MDICanvas.contextmenuOpening_Handler (System.Object sender, System.ComponentModel.CancelEventArgs e) <0x40d39550 + 0x0034b> in :0
at System.Windows.Forms.ToolStripDropDown.OnOpening (System.ComponentModel.CancelEventArgs e) <0x40c8d6a0 + 0x00065> in :0
at System.Windows.Forms.ToolStripDropDown.Show (Point position, ToolStripDropDownDirection direction) <0x40c8ca90 + 0x007bc> in :0
at System.Windows.Forms.ToolStripDropDown.Show (System.Windows.Forms.Control control, Point position) <0x40d39480 + 0x0008b> in :0
at (wrapper remoting-invoke-with-check) System.Windows.Forms.ToolStripDropDown:Show (System.Windows.Forms.Control,System.Drawing.Point)
at System.Windows.Forms.Control.WmContextMenu (System.Windows.Forms.Message& m) <0x40d38f80 + 0x002a3> in :0
at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) <0x40ad6570 + 0x002a7> in :0
at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message& m) <0x40b22980 + 0x00013> in :0
at System.Windows.Forms.ContainerControl.WndProc (System.Windows.Forms.Message& m) <0x40b22900 + 0x0005b> in :0
at System.Windows.Forms.UserControl.WndProc (System.Windows.Forms.Message& m) <0x40b69df0 + 0x0006b> in :0
at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) <0x40ad6540 + 0x00024> in :0
at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) <0x40ad6500 + 0x00036> in :0
at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) <0x40ad4e40 + 0x0031c> in :0
System.ArgumentOutOfRangeException: ControlCollection does not have that many controls
Parameter name: index
Actual value was 0.
at System.Windows.Forms.Control+ControlCollection.get_Item (Int32 index) <0x40b06730 + 0x0018f> in :0
at System.Windows.Forms.TabControl.GetTab (Int32 index) <0x40b9b000 + 0x00032> in :0
at System.Windows.Forms.TabControl.GetTabRect (Int32 index) <0x40d02630 + 0x0001b> in :0
at (wrapper remoting-invoke-with-check) System.Windows.Forms.TabControl:GetTabRect (int)
at System.Windows.Forms.Theming.Default.TabControlPainter.Draw (System.Drawing.Graphics dc, Rectangle area, System.Windows.Forms.TabControl tab) <0x40d01de0 + 0x002c7> in :0
at System.Windows.Forms.ThemeWin32Classic.DrawTabControl (System.Drawing.Graphics dc, Rectangle area, System.Windows.Forms.TabControl tab) <0x40d01d90 + 0x00048> in :0
at System.Windows.Forms.TabControl.Draw (System.Drawing.Graphics dc, Rectangle clip) <0x40d01d40 + 0x0003d> in :0
at System.Windows.Forms.TabControl.OnPaintInternal (System.Windows.Forms.PaintEventArgs pe) <0x40d01cc0 + 0x0005b> in :0
at System.Windows.Forms.Control.WmPaint (System.Windows.Forms.Message& m) <0x40c459f0 + 0x00140> in :0
at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) <0x40ad6570 + 0x001f7> in :0
at System.Windows.Forms.TabControl.WndProc (System.Windows.Forms.Message& m) <0x40b9acd0 + 0x000d3> in :0
at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) <0x40ad6540 + 0x00024> in :0
at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) <0x40ad6500 + 0x00036> in :0
at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) <0x40ad4e40 + 0x0031c> in :0`
eudcedit.exe is a tool built into windows that allows people to create custom characters. It would be useful if CardMaker could support this. Though it's a bit risky as people might lose the character if they format their machine... that's their problem though, not mine. :P
Users could benefit from the ability to translate the card and deck index as a reference value. Due to the translation order using the subcounter and counter translations is not possible.
Note: I did some research experiments on this and there is a lot of complexity due to the current functionality that rotates around the center of an element. Even when changed to rotate from the upper left corner there are complications. One major issue is that Elements are defined by a Rectangle (x, y, width, height), not 4 discrete points. The solution may well involve converting the Rectangle to 4 discrete points and then translating the final resulting points back into a Rectangle.
If someone loves a good challenge with trigonometry this is your opportunity! I may attempt to tackle this again when I am feeling more patient.
I found a crash when deleting multiple elements from the 'Layout Control'.
To reproduce:
In a layout with two elements, use shift to select both and remove them
This is also reproducible under many other conditions, especially when deleting multiple elements near the end of the list.
Result:
Varies depending on exact situation but always a complete crash. Sometimes the Element table graphically glitches and the program freezes, sometimes the program immediately crashes. Once a save dialogue appeared and then the program crashed.
Backtrace:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: index at System.Windows.Forms.ListView+ListViewItemCollection.get_Item (Int32 index) <0x4041d8e0 + 0x000d7> in <filename unknown>:0 at System.Windows.Forms.ListView.GetItemAtDisplayIndex (Int32 display_index) <0x404254e0 + 0x00067> in <filename unknown>:0 at System.Windows.Forms.ListView.get_FocusedItem () <0x404275d0 + 0x0002b> in <filename unknown>:0 at (wrapper remoting-invoke-with-check) System.Windows.Forms.ListView:get_FocusedItem () at System.Windows.Forms.ListViewItem.get_Focused () <0x40427420 + 0x000eb> in <filename unknown>:0 at System.Windows.Forms.ListView+ListViewItemCollection.RemoveAt (Int32 index) <0x40431b40 + 0x000d7> in <filename unknown>:0 at System.Windows.Forms.ListView+ListViewItemCollection.Remove (System.Windows.Forms.ListViewItem item) <0x40431ab0 + 0x00063> in <filename unknown>:0 at CardMaker.Forms.MDILayoutControl.btnRemoveElement_Click (System.Object sender, System.EventArgs e) <0x40430df0 + 0x0046e> in <filename unknown>:0 at System.Windows.Forms.Control.OnClick (System.EventArgs e) <0x403c0900 + 0x00065> in <filename unknown>:0 at System.Windows.Forms.Button.OnClick (System.EventArgs e) <0x403c0880 + 0x00053> in <filename unknown>:0 at System.Windows.Forms.ButtonBase.OnMouseUp (System.Windows.Forms.MouseEventArgs mevent) <0x403c0470 + 0x000ff> in <filename unknown>:0 at System.Windows.Forms.Button.OnMouseUp (System.Windows.Forms.MouseEventArgs mevent) <0x403c0440 + 0x00013> in <filename unknown>:0 at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) <0x403c01f0 + 0x00118> in <filename unknown>:0 at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) <0x40244570 + 0x00217> in <filename unknown>:0 at System.Windows.Forms.ButtonBase.WndProc (System.Windows.Forms.Message& m) <0x40308ab0 + 0x00073> in <filename unknown>:0 at System.Windows.Forms.Button.WndProc (System.Windows.Forms.Message& m) <0x40308a80 + 0x00013> in <filename unknown>:0 at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) <0x40244540 + 0x00024> in <filename unknown>:0 at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) <0x40244500 + 0x00036> in <filename unknown>:0 at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) <0x40242e40 + 0x0031c> in <filename unknown>:0 System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: index at System.Windows.Forms.ListView+ListViewItemCollection.get_Item (Int32 index) <0x4041d8e0 + 0x000d7> in <filename unknown>:0 at System.Windows.Forms.ListView.GetItemAtDisplayIndex (Int32 display_index) <0x404254e0 + 0x00067> in <filename unknown>:0 at System.Windows.Forms.ListView.get_FocusedItem () <0x404275d0 + 0x0002b> in <filename unknown>:0 at (wrapper remoting-invoke-with-check) System.Windows.Forms.ListView:get_FocusedItem () at System.Windows.Forms.ListViewItem.get_Focused () <0x40427420 + 0x000eb> in <filename unknown>:0 at System.Windows.Forms.ThemeWin32Classic.DrawListViewItem (System.Drawing.Graphics dc, System.Windows.Forms.ListView control, System.Windows.Forms.ListViewItem item) <0x40425570 + 0x01193> in <filename unknown>:0 at System.Windows.Forms.ThemeWin32Classic.DrawListViewItems (System.Drawing.Graphics dc, Rectangle clip, System.Windows.Forms.ListView control) <0x403e9000 + 0x001f5> in <filename unknown>:0 at System.Windows.Forms.ListView+ItemControl.OnPaintInternal (System.Windows.Forms.PaintEventArgs pe) <0x403b8f60 + 0x0005a> in <filename unknown>:0 at System.Windows.Forms.Control.WmPaint (System.Windows.Forms.Message& m) <0x403b3e30 + 0x00140> in <filename unknown>:0 at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) <0x40244570 + 0x001f7> in <filename unknown>:0 at System.Windows.Forms.ListView+ItemControl.WndProc (System.Windows.Forms.Message& m) <0x40330ef0 + 0x000ff> in <filename unknown>:0 at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) <0x40244540 + 0x00024> in <filename unknown>:0 at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) <0x40244500 + 0x00036> in <filename unknown>:0 at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) <0x40242e40 + 0x0031c> in <filename unknown>:0
Thanks for fixing those other Mono bugs. Thought I would let you know about another I recently found although this one may not be worth fixing as there is an easy work around.
When running linux mint in high dpi mode the fonts used in card layouts are doubled but nothing else is, resulting in text appearing larger then expected when using files created on systems without high dpi set.
This would be nice to have fixed...
Note: Monospaced fonts will render underlines for trailing spaces in a string. Non-monospaced will not.
From virtualflesh:
Perhaps extend the idea towards a general implementation. If @[override:...] was interpretable in any element "Definition", then one could universally programmatically set an element's attributes.
For example, an element with name "TypeColorBack" is created in Card Maker. To change its color dynamically, a CSV file contains:
type,override:TypeColorBack:elementcolor
type_1,@[color_@[type]]
type_2,@[color_@[type]]
a DEFINES.CSV file contains:
Define,Value
color_type_1,128255128
color_type_2,010000050
This works, but the CSV column containing "@[color_@[type]]" is tediously cloned. An attribute override in the "TypeColorBack" element's Definition within Card Maker could simplify this, and one could ditch the cloned CSV column. This leads to an override control conflict, but I would guess the CSV file override could take precedence over the element's Definition override.
https://i.imgur.com/z036OaL.png
^There should be two inline icons with -1 in the scrshot
The issue appears when:
1.) The script is JavaScript
and either
2.a) image is larger than line height and a percentage factor in img tag is used (setting e.g. percentage = 0.9 doesn't work)
or
2.b) img is defined with fixed height and width, but the FormattedText element is smaller than the set height
I would love to have additional features for controlling the placement of Elements. In particular I would love to have something like qt layouts. The ability to group elements together and manipulating them easily as a group would be very useful. The current 'custom align elements' is a start but lacks the persistence and grid functionality offerers by layout elements. Thanks for your great work.
It might be nice if all elements drew a background color and then rendered on top of it.
Investigate!
Currently templates are stored in a single file as a list. Switch to individual files under a /templates folder. This will make it easy (well easier) for people to share them
Hey there!
I'd like to thank you for this great tool and sorry if I missed something before coming here.
I've tried to add some text to my cards, but found these "???" instead of my special characters.
I've attached some screenshots for a better understanding.
If I try to write these special characters directly in the element, they're shown correctly.
But, when I try to add the same text, coming from a CSV reference, the issue occurs.
Are you intending to support ISO-8859-1?
Is it a bug?
Thanks in advance!
I can't find the program file. Is there something I don't understand. I downloaded it but I can't find the file i am supposed to run?
The CMP file (appended txt extension to conform to github upload constraints) exhibiting:
example_bug.cmp.txt
The Preview Window is just a duplicate of the canvas. With zoom on the Canvas functional there is no additional purpose (and it has hooks into the rendering that should not be present).
Currently if a layout does not have a reference no defines are loaded (not even project level defines). This is kind of annoying and requires a reference of some kind even if the layout does not use it.
This may require a project wide setting to indicate whether to pull the project defines file from local or Google docs as the application at the layout level will have no clue where the defines should be coming from.
A common use case is centering an element horizontally or vertically in the layout. It would be handy to have a buttons that do this. Another use case is evenly spacing objects.
See InDesign's alignment options for ideas.
When exporting a card layout as png, you currently get a white background for transparent parts of the card. It would be nice if there was an option to preserve the transparency.
My use case for this is that I want to create cards for a digital prototype in tabletopia and I would like these cards to have rounded corners.
The file names exported default to the standard file name instead of the custom setting of the individual layouts. This only applies to the whole-project image export.
The code around this area needs a bit of reorganization to be less confusing and a bit more maintainable.
One user did not know they had to click the node in the Project window.
As I see it, the anchor point for every element is on its lower left corner which makes it difficult to arrange elements on the right edge of cards.
I have a CardMaker project with multiple card layouts. Usually I'm only exporting the changes to print and this means some layouts might contain no data. When exporting the project this results in generating a single card for each layout that contains no data.
If the changes were limited to a single layout I could simply export the layout, however, my changes often cover multiple layouts but not all.
I would like to request CardMaker skips layouts with a reference (so those not using a reference are unaffected) while exporting the project to images/PDF.
This might just be a bug. The shift lock sometimes appears to be triggered when not actually desired. Add a status view of the shift-lock to help track down the issue.
BottomAlignment.cmp.txt
The sample above uses an image included with the application sample to trigger the issue.
It appears that the measurement of the FormattedText height assumes that the vertically aligned item will be truncated.
Subject says it all!
This probably should use an open and close tag so the default line spacing for the element can be restored.
Project loading, layout selection, and element selection should all be driven by events not manually handled by outside forms.
It's a huge code change but the end result should be a lot easier to read and maintain.
Printing is buggy and inconsistent. No one should have to fight with it, especially if there is no need for it.
Spend some quality time with the linux build and see if you can resolve the issue with the PDF export crash.
Note: Testing/troubleshooting will be performed using Linux Mint.
It would be nice to have a color option for shapes, so you could do
#rect;600;600;90;@[color]#
For a project with multiple layouts, when exporting to PDF or saving images, the ![cardcount] value for all layouts is equal to the ![cardcount] of the bottom-most layout. The bottom-most layout means the layout shown at the bottom of the Project window.
when i use character like (é,à,ù) in my referenve file (csv) ;they doesnt appear on a text and a formatted text
Page Size: Let users alternatively specify mm/cm (converted to the final inch sizes)
Card Layout: Let users specify mm/cm/inch (based on DPI) (converted to the final pixel size)
If this proves to be imperfect dig further into using untranslated values (specifically on page size). Card Layout is always going to be pixels due to the use of rasterized images.
See https://www.boardgamegeek.com/thread/1578460/how-rotate-text-and-make-it-play-nicely-help-pleas for some background.
The Element height seems to affect the wrapping of words.
not an issue, just wanted to let @nhmkdev know what a great project this is!!! <3
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.