Coder Social home page Coder Social logo

mtnviewjohn / context-free Goto Github PK

View Code? Open in Web Editor NEW
439.0 27.0 30.0 47.24 MB

Context Free is a program that generates images from written instructions called a grammar. The program follows the instructions in a few seconds to create images that can contain millions of shapes.

Home Page: http://www.contextfreeart.org/index.html

License: GNU General Public License v2.0

Makefile 1.22% Shell 0.07% C++ 71.65% C 16.30% C# 2.51% Objective-C 0.63% Objective-C++ 5.65% CSS 0.05% HTML 0.09% NSIS 0.62% PowerShell 0.01% Lex 0.19% Roff 0.07% Python 0.75% Batchfile 0.01% PHP 0.01% Lua 0.01% Nim 0.01% Perl 0.18% Raku 0.01%
contextfreeart cfdg generative-art art

context-free's Introduction

*** Context Free
*** version 3.3

    by Chris Coyne, John Horigan and Mark Lentczner

    Context Free Copyright 2005-2018 Mark Lentczner and John Horigan
    CFDG Copyright 2005 Chris Coyne
	Anti-Grain Geometry library Copyright 2002-2005 Maxim Shemanarev

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
DISTRIBUTION & LICENSE

Context Free is released under the GNU license.  

Context Free is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
GENERAL NOTES


~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
FILE TREE

./              - top level: this file, license, Makefile,
                  Xcode project and Windows CLI solution
./input/        - sample input files
./input/tests   - test input files
./src-agg/      - a subset of the Anti_Grain Geometry sources
./src-common/   - the CFDG engine
./src-ffmpeg/   - FFmpeg resources
./src-ffmpeg/include/  - FFmpeg include files
./src-ffmpeg/lib/      - FFmpeg libraries for Linux
./src-net/	    - Windows .Net specific sources
./src-osx/      - Mac specific sources
./src-scintilla - Mac Scintilla sources
./src-unix/     - Unix/Posix specific sources 
./src-win/      - Windows specific sources
./src-win/derived/     - pre-built output from flex and yacc for folks that
                         don't have those tools available
./src-win/icon/	       - Explorer icons
./src-win/res/         - UI icons
./src-win/win-install/ - files for creating NSIS installer EXE

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
MACINTOSH BUILD NOTES

Requires Xcode 9 & Mac OS X 10.7 (Lion).
Developed with XCode 9/10 and Mac OS X 10.14 (Mojave), has not been tested
with older versions of XCode or Mac OS X.

The Xcode project file is in the top directory:
    ./Context Free.xcodeproj


~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
WINDOWS GUI BUILD NOTES

Requires Visual Studio 2019 or later.

The VS2019 solution file is at ./src-net/ContextFreeNetVS11.sln

If you modify cfdg.l or cfdg.ypp then you must rebuild the parser files 
in src-win/derived. If you have Cygwin or a similar Posix environment 
installed or have access to a Unix/Linux or Mac system then cd to 
src-win/derived and type 'make' (you will need bison and flex too).

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
WINDOWS CLI (command line) BUILD NOTES

Requires Visual Studio 2019 or later.

The VS2019 CLI solution file is at ./ContextFreeCLIVS11.sln

If you modify cfdg.l or cfdg.ypp then you must rebuild the parser files 
in src-win/derived. If you have Cygwin or a similar Posix environment 
installed or have access to a Unix/Linux or Mac system then cd to 
src-win/derived and type 'make' (you will need bison and flex too).

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
BSD/LINUX/UNIX/POSIX BUILD NOTES

You will need a c++ compiler (gcc 7 or clang 4), flex 2.6 (not lex), bison 3.0, the
libpng library, and libicu library (International Components for Unicode). Most of
this should be installed or easily available on any modern operating system 
distribution. For libpng and libicu you will need the full installation of header
files. The Debian packages libpng-dev and libicu-dev provide these. Debian/Ubuntu
derived systems also need the libfl-dev package in order to build flex output.

If you need it, libpng can be found here:
    http://libpng.org/pub/png/libpng.html  
The home for libicu is at:
    http://site.icu-project.org/  
    
The Makefile assumes that libpng and libicu are installed either with the system
libraries or at /usr/local/lib. If either library is installed in a different 
location then you must update the LIB_DIRS variable in the Makefile with this 
location.

From the top level, you should just run:
    $ make

You'll see a warning about "mktemp" and "mkstemp" during the link step.
This can be ignored.

To run the program, try something like:
    $ ./cfdg -s 500 input/mtree.cfdg mtree.png

Run it with -? to get a usage summary:
    $ ./cfdg -?

'make check' will test your compiled cfdg executable. 'sudo make install'
will install cfdg and the cfdg.1 man page in /usr/local.

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 
FFmpeg BUILD NOTES

Check out README.ffmpeg for building ffmpeg and enabling ffmpeg support

context-free's People

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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

context-free's Issues

Question about 16 bit rendering

First of all, sorry for the noise on this channel. It is not easy to find people with AGG experience, so I'll resort to ask a non-Context free question here. It goes without saying that you can simply close this if you do not have time to answer.

I'm currently in the process of building a graphic device for use with the R programming language, based on AGG. It is going well and everything works if I stick to an internal 8bit colour representation. However, if I change to 16bit I begin to get weird blending artefacts for non-black colours and I can't figure out why they appear:

The following is correctly rendered and in 8-bit:

Rplot8bit

This is the exact same render but with 16-bit:

Rplot16bit

As can be seen, the colours are fine in solid areas, but once blending of antialiased part are done it seems to make everything darker...

My development lives at https://github.com/thomasp85/ragg - If you have any input I'll be forever grateful

Bugs due to two selectors used that are not available on older Mac OS X versions (e.g. 10.8)

Issue: Unable to export animation movies

Cause

The use of finishWritingWithCompletionHandler here:

[_assetWriter finishWritingWithCompletionHandler: ^{}];

prevents animation output from completing because the application crashes with an exception:

[AVAssetWriter finishWritingWithCompletionHandler:]: unrecognized selector sent to instance

Effect

It is not possible to export animations (and the app crashes). :(

Potential solution

According to the finishWritingWithCompletionHandler documentation the method was added in Mac OS X 10.9. It replaced the now deprecated finishWriting method.

Perhaps the deprecated method could be used (at least on < 10.9) instead.

Issue: Invalid animation settings don't display alert & break settings dialog/sheet

Cause

If invalid animation settings are provided in the "Start Animation" or "Animate a Frame" dialogs then clicking the "Animate" button generates an exception:

NSAlert beginSheetModalForWindow:completionHandler:]: unrecognized selector sent to instance

The exception is caused by the use of beginSheetModalForWindow here:

[nonono beginSheetModalForWindow: mAnimateSheet
completionHandler: ^(NSModalResponse returnCode){}];

Effect

After the exception occurs the "Animate" button appears non-functional but no feedback is provided that the settings are invalid.

Workaround

In my case I eventually located the following validation code and manually determined (as I recall) the issue was the image dimensions were not multiples of eight:

if (![mAnimationFrame isHidden]) {
// If animating a frame then check if frame is legal
float intpart;
float movieLength = [defaults floatForKey: PrefKeyMovieLength];
NSInteger movieFrameRate = [defaults integerForKey: PrefKeyMovieFrameRate];
float animateFrameCount = movieLength * movieFrameRate * 0.01f;
movieFrame = [mAnimationFrame floatValue];
if (movieFrame < 1.0 || modff(movieFrame, &intpart) != 0.0)
problem = @"Frame must be a positive integer";
if (movieFrame > animateFrameCount)
problem = @"Specified frame is after the end of the movie";
message = @"Cannot create animation movie frame";
} else {
message = @"Cannot create animation movie";
}
if ((int)movieWidth & 7) {
if (problem)
problem = [NSString stringWithFormat: @"%@, also the rendered width must be a multiple of 8 pixels", problem];
else
problem = @"Rendered width must be a multiple of 8 pixels";
}

So, while not exactly friendly it doesn't prevent successful operation (unlike the first issue).

Potential solution

The beginSheetModalForWindow:completionHandler: documentation states the method was new in Mac OS X 10.9.

For a potential solution to support older versions see:

[Note: This issue report is only a stub but hopefully it's better than no issue. :) I'm hoping to add more detail.]

Compiling to WASM?

Hi, I'm big fun of this project for many years! Thanks for workin on it.
Have you thought about compiling it to WASM? It seems like a webclient would be a lot of fun, plus will be very accessible. It could use the canvas or webgl to render the drawings.I think this this codebase would be a great example of what can be ported to the web using WASM. Unfortunately, I'm still on baby steps on WASM otherwise I would jump into that idea. Cheers

how could I count iterations?

Hi MtnViewJohn, thanks for the amazing context-free development.

i was reading this part about Variables and trying to figure out how to count the iteration of a shape... for example. But I'm not sure I am clear about how a global variable could be correctly implemented in this type of script?

startshape SEED1

CF::MinimumSize = 0.5



sine(t,amp,freq,phase) = amp*sin( freq*360*(t + phase) )
cosine(t,amp,freq,phase) = amp*cos( freq*260*(t+phase) )
iter = 0

shape SEED1 {
 //polygon6sided [ sat 0.6 hue 120 ]
 
 iter = iter + 1
 SQUARE [ sat 1 hue 120 b (iter*0.05) size (iter*2) 0.5 r (0...90) ]

 SEED1 [y 1.2 size 0.99 rotate 1.5]
 
 
 
}

shape SEED1 
 
  rule 0.05 {
  if (iter>5) flower ( 12 , 1 ) [s 4]
  SEED1 [flip ( 90+iter)]
  
}

shape SEED1 

  rule 0.05 {
 SEED1 [r -5 b -0.5 
                brightness 0.01]
 SEED1 [y 1. x -0.5 s 0.7 r 30 b -0.5 flip 90 
                brightness 0.1]
 SEED1 [y 1. x 0.5 s 0.7 r -30 b -0.5 flip 90
                brightness 0.05]
}


shape polygon6sided
{
	loop 3 [r 60] SQUARE [[rotate 0 size 0.866025 0.5]]
}

path flower(number petals, number filled) {
  MOVETO(cos(-180/petals), sin(-180/petals))
  loop petals [r (360/petals)]
    ARCTO(cos(180/petals), sin(180/petals), 
          0.4, 0.4 + 0.2 * (petals - 5), 90)
  CLOSEPOLY(CF::Align)
  if (filled) FILL[a -0.5]
  MOVETO(0.65, 0)
  ARCTO(-0.65, 0, 0.65, CF::ArcCW)
  ARCTO( 0.65, 0, 0.65, CF::ArcCW)
  CLOSEPOLY()
  FILL[a -0.5]
}``` 

Recursive function causes SEGV while printing error

As the title says, something like

r00()=r00

Causes a segfault by reading from an invalid address in
CfdgError::CfdgError.

Valgrind report:

==10116== Memcheck, a memory error detector
==10116== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==10116== Using Valgrind-3.14.0.GIT and LibVEX; rerun with -h for copyright info
==10116== Command: cfdg-github 1
==10116== 
==10116== Invalid read of size 8
==10116==    at 0x13429C: CfdgError::CfdgError(yy::location const&, char const*) (cfdg.cpp:112)
==10116==    by 0x172B89: Builder::warning(yy::location const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (builder.cpp:151)
==10116==    by 0x172B40: Builder::error(yy::location const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (builder.cpp:145)
==10116==    by 0x134458: CfdgError::Error(yy::location const&, char const*, Builder*) (cfdg.cpp:150)
==10116==    by 0x1BE033: AST::ASTruleSpecifier::compile(AST::CompilePhase, Builder*) (astexpression.cpp:2630)
==10116==    by 0x1C713E: AST::Compile(std::unique_ptr<AST::ASTexpression, std::default_delete<AST::ASTexpression> >&, AST::CompilePhase, Builder*) (astexpression.h:485)
==10116==    by 0x1E9527: AST::ASTdefine::compile(AST::CompilePhase, Builder*) (astreplacement.cpp:897)
==10116==    by 0x1E4012: AST::ASTrepContainer::compile(AST::CompilePhase, Builder*, AST::ASTloop*, AST::ASTdefine*) (astreplacement.cpp:111)
==10116==    by 0x143FEA: CFDGImpl::rulesLoaded() (cfdgimpl.cpp:459)
==10116==    by 0x134EF1: CFDG::ParseFile(char const*, AbstractSystem*, int) (cfdg.cpp:279)
==10116==    by 0x21CDCA: main (main.cpp:454)
==10116==  Address 0x18 is not stack'd, malloc'd or (recently) free'd
==10116== 
==10116== 
==10116== Process terminating with default action of signal 11 (SIGSEGV)
==10116==  Access not within mapped region at address 0x18
==10116==    at 0x13429C: CfdgError::CfdgError(yy::location const&, char const*) (cfdg.cpp:112)
==10116==    by 0x172B89: Builder::warning(yy::location const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (builder.cpp:151)
==10116==    by 0x172B40: Builder::error(yy::location const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (builder.cpp:145)
==10116==    by 0x134458: CfdgError::Error(yy::location const&, char const*, Builder*) (cfdg.cpp:150)
==10116==    by 0x1BE033: AST::ASTruleSpecifier::compile(AST::CompilePhase, Builder*) (astexpression.cpp:2630)
==10116==    by 0x1C713E: AST::Compile(std::unique_ptr<AST::ASTexpression, std::default_delete<AST::ASTexpression> >&, AST::CompilePhase, Builder*) (astexpression.h:485)
==10116==    by 0x1E9527: AST::ASTdefine::compile(AST::CompilePhase, Builder*) (astreplacement.cpp:897)
==10116==    by 0x1E4012: AST::ASTrepContainer::compile(AST::CompilePhase, Builder*, AST::ASTloop*, AST::ASTdefine*) (astreplacement.cpp:111)
==10116==    by 0x143FEA: CFDGImpl::rulesLoaded() (cfdgimpl.cpp:459)
==10116==    by 0x134EF1: CFDG::ParseFile(char const*, AbstractSystem*, int) (cfdg.cpp:279)
==10116==    by 0x21CDCA: main (main.cpp:454)
==10116==  If you believe this happened as a result of a stack
==10116==  overflow in your program's main thread (unlikely but
==10116==  possible), you can try to increase the size of the
==10116==  main thread stack using the --main-stacksize= flag.
==10116==  The main thread stack size used in this run was 8388608.
==10116== 
==10116== HEAP SUMMARY:
==10116==     in use at exit: 65,587 bytes in 235 blocks
==10116==   total heap usage: 585 allocs, 350 frees, 232,186 bytes allocated
==10116== 
==10116== LEAK SUMMARY:
==10116==    definitely lost: 0 bytes in 0 blocks
==10116==    indirectly lost: 0 bytes in 0 blocks
==10116==      possibly lost: 0 bytes in 0 blocks
==10116==    still reachable: 65,587 bytes in 235 blocks
==10116==         suppressed: 0 bytes in 0 blocks
==10116== Rerun with --leak-check=full to see details of leaked memory
==10116== 
==10116== For counts of detected and suppressed errors, rerun with: -v
==10116== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Truncated comments in `lesson2.cfdg`?

These two sections of the second tutorial lesson seem to have the descriptive text truncated:

SQUARE [ x 0.5 y 5.5 skew 15 15 size 2 ]
// a skew transform (also called
// a shear) pushes a shape parallel
// to the x axis or y axis or both.
// The two numbers following
}

SQUARE [[ b 0.7 ]]
// Ordering a rotate before a
// translate (x or y) causes the
// translate to be rotated. This
// saves
}

Not sure if the "missing" text was never written in the first place or accidentally truncated when copied from somewhere else (couldn't find anything in the file history or via a quick Google search).

Release dates at https://www.contextfreeart.org/downloads.html

Hello John and others,

I think I discovered context-free in ... I don't quite remember. It was many years ago, though.

Since I have discovered it, I am looking back at it regularly, every some weeks or few months or so, give or take, especially at the gallery.

I also update the code every now and then, and in order to do this, I actually go to the "oldschool" page at:

https://www.contextfreeart.org/downloads.html

This leads me to the issue request here - would it be possible to also mention the release date at downloads.html? E. g. when a particular relase happened?

Right now at downloads.html it says that version 3.1 is the current release; I have 3.0.11.4 right now so I am considering updating. It would be a little help to indicate the release time so that I know how far behind I may be (I guess from 3.0.11.4 to 3.1 it may not be a huge change but it would still help a little if the release date would also be shown). At any rate please do feel free to close this issue at any moment in time - context-free is a really awesome idea, some of the autogenerated images are wonderful for wallpaper or small "art" icons to be used as random decorator on webpages too.

A suggestion for an additional way to describe a cfdg grammar

Before I explain my suggestion, allow me to copy/paste the current .cfdg I am working on; it was
written by someone else for a grass-pattern.

startshape field

tile {s 150 }
background { hue 83.1 sat 0.4664 b -0.1255}

rule field
{
  grass{hue 97.6 sat 0.7282 b 0.7647}
}

# Add a chance to add a seedling. 
rule grass 5
{
  seedling{}
  grass{}
}

rule grass
{
  grass{b 0.2}
}

rule grass
{
  grass{b -0.1}
}

rule grass
{
  grass{hue 0.1}
}

rule grass
{
  grass{hue -.1}
}

rule grass
{
  grass{sat 0.01}
}

rule grass
{
  grass{sat -.01}
}

rule grass 10
{
  grass{r 5}
}

rule grass 10
{
  grass{r -5}
}

rule grass
{
  grass{r 180}
}

rule grass
{
  grass{x 10}
}

rule grass
{
  grass{x -10}
}

rule grass
{
  grass{y 10}
}

rule grass
{
  grass{y -10}
}

rule grass 0.01
{
  // end
}

rule seedling
{
  SQUARE{}
  seedling{y 1 r -2 s 0.991}
}

rule seedling
{
  SQUARE{}
  seedling{y 1 r 2 s 0.991}
}

I have been thinking about that. The rule {} entries actually look like method
calls in a programming language.

We also have things such as:

rule grass 5

which I think is ultimately a probability value, right?

So what if we could actually turn that into a programming-language or programming-like
language?

Say we have a common entry point which we call "main". That way we can remove the
startshape-clause. Each individual rule could be constructed like a method.

For example:

rule grass 5
{
  seedling{}
  grass{}
}

Could perhaps become:

def grass(probability: 5)
  seedling()
  grass()

We could use python-like syntax based on indent, or ruby-like syntax where
each "def" ends with "end". (I don't like the python requirement for a ":" after
the def, though. Indent alone should be enough.)

So why do I make this suggestion at all? Well, I think that the existing way to
build up such a context-free generated image, could also be done in a
programming-centric fashion. Perhaps this may be simpler for some folks.
We could also use aliases so that things such as "b -1.0" could be more
verbose, if the user wants to.

For example:

{y 1 r -2 s 0.991}

I think many new users have no idea what these single letters mean. They
can look at the wiki, yes, but I wonder whether it may not be better to simply
allow for a style such as:

y_axis: 1
radius: -2
scale: 0.991

(I made up the names here, but you get the idea.)

Anyway - not sure how likely it is to add alternative set of rules or grammar
but I wanted to suggest it. Note that I do NOT mean to obsolete the old
rules! These should be kept for many reasons, including compatibility,
but also because many other users will probably prefer the old way. Thus
my suggestion is for an ADDITIONAL way. (And perhaps we can cross-translate
it once it exists, so people can always adjust to what they prefer to use.)

Please feel free to close this issue - it is mostly meant as a suggestion for
future changes.

add gh topics

I'd suggest adding Github topics (tags) to the repository. It makes it easier to look for related projects. Personally I use following topics:

  • contextfreeart
  • cfdg

Portable builds

Hello everyone.
Please, provide portable builds in compressed archive format (to use without installation) to download.

Many many thanks if you do xD

Regards, have a nice day =)

Null pointer dereference while printing syntax error

This input causes a crash while printing a syntax error due to the
filename being a null pointer:

startshape S
shape S
rule { U [] }
path U { path FILL [] }

Valgrind report:

==1347== Memcheck, a memory error detector
==1347== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1347== Using Valgrind-3.14.0.GIT and LibVEX; rerun with -h for copyright info
==1347== Command: cfdg-github 3
==1347== 
==1347== Invalid read of size 8
==1347==    at 0x4B7B3D4: std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >::c_str() const
(basic_string.h:2282)
==1347==    by 0x184CFB: CommandLineSystem::syntaxError(CfdgError
const&) (commandLineSystem.cpp:91)
==1347==    by 0x15D880: RendererImpl::run(Canvas*, bool)
(renderimpl.cpp:316)
==1347==    by 0x21D27C: main (main.cpp:510)
==1347==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==1347== 
==1347== 
==1347== Process terminating with default action of signal 11 (SIGSEGV)
==1347==  Access not within mapped region at address 0x0
==1347==    at 0x4B7B3D4: std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >::c_str() const
(basic_string.h:2282)
==1347==    by 0x184CFB: CommandLineSystem::syntaxError(CfdgError
const&) (commandLineSystem.cpp:91)
==1347==    by 0x15D880: RendererImpl::run(Canvas*, bool)
(renderimpl.cpp:316)
==1347==    by 0x21D27C: main (main.cpp:510)
==1347==  If you believe this happened as a result of a stack
==1347==  overflow in your program's main thread (unlikely but
==1347==  possible), you can try to increase the size of the
==1347==  main thread stack using the --main-stacksize= flag.
==1347==  The main thread stack size used in this run was 8388608.
==1347== 
==1347== HEAP SUMMARY:
==1347==     in use at exit: 359,962 bytes in 338 blocks
==1347==   total heap usage: 734 allocs, 396 frees, 544,465 bytes
allocated
==1347== 
==1347== LEAK SUMMARY:
==1347==    definitely lost: 216 bytes in 1 blocks
==1347==    indirectly lost: 0 bytes in 0 blocks
==1347==      possibly lost: 176 bytes in 1 blocks
==1347==    still reachable: 359,570 bytes in 336 blocks
==1347==         suppressed: 0 bytes in 0 blocks
==1347== Rerun with --leak-check=full to see details of leaked memory
==1347== 
==1347== For counts of detected and suppressed errors, rerun with: -v
==1347== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Dependency on Bison 3.03 accidentally added

Context Free is supposed to depend on Bison 2.5 and not require versions above that. But some code uses methods of class yy::location that were added in Bison 3.03. These methods should not be used.

Output Failure

I. Compiled with ffmpeg support:

A.
$ ./cfdg ../tentacles.cfdg 
Failed to create movie file: failed to write video file header
ls -lahrt | grep -i output
(nothing)

B.
$ ./cfdg ../tentacles.cfdg -o output.png
...
The output file name is output.png
$  file output.png 
output.png: ISO Media, Apple QuickTime movie

C.
$ ./cfdg ../tentacles.cfdg output.png
...
The output file name is output.png
$  file output.png 
output.png: ISO Media, Apple QuickTime movie

D.
$  ./cfdg ../tentacles.cfdg -V -o output.png
...
The output file name is output.png
output.png: ISO Media, Apple QuickTime movie


II. Disabled ffmpeg support per "src-ffmpeg/README.ffmpeg"

A.
$ ./cfdg ../tentacles.cfdg
Failed to create movie file: Quicktime support not compiled in

B.
$ ./cfdg ../tentacles.cfdg -o output.png
...
Failed to create movie file: Quicktime support not compiled in

C.
$ ./cfdg ../tentacles.cfdg output.png
...
Failed to create movie file: Quicktime support not compiled in


D.
$  ./cfdg ../tentacles.cfdg -V -o output.png
...
Failed to create movie file: Quicktime support not compiled in


What version of the product are you using? On what operating system?
ContextFree 3.0 compressed tarball (v17)
Linux 3.4.6-1-ARCH #1 SMP PREEMPT i686 GNU/Linux

Original issue reported on code.google.com by [email protected] on 20 Aug 2012 at 7:32

how to I export all frames to jpg at 6000x6000 resolutions

hi;

Thank you for making such a great app, recently I have ramp-up more experiment in using context-free as a result of this constant experiment - I have the need to export all frames to jpg at 6000x6000 or higher resolutions as final images on certain projects. Of course, I would start at lower resolutions to test the result first:)

Is there a feature in the command line mode to exported all frames to jpg or png at 6000x6000 resolutions or higher in one go?

also is it possible to render all variants code in one go, I mean I would like to automate the render of each variant code from A-AAAAAA,
B-BBBBBB, ....., Z-ZZZZZZ nightly; so I could see the result the next day? Is there any chance to increases the variant code sizes beyond 6 figures?

what is a config file and how do I create it?

Regards

Phon

link errors on Linux (avformat_alloc_output_context2)

What steps will reproduce the problem?
1. Download the source for version 3.
2. Install flex, bison, and libavformat-dev. The latter isn't mentioned in the 
readme but seems to be required for the new AGG.
3. make

What is the expected output? What do you see instead?

The linker output is:

objs/ffCanvas.o: In function `ffCanvas::Impl::Impl(char const*, 
aggCanvas::PixelFormat, int, int, int, char*, int)':
ffCanvas.cpp:(.text+0x90): undefined reference to 
`avformat_alloc_output_context2'

What version of the product are you using? On what operating system?

Latest code from mercurial. Ubuntu 12.04. libavformat53 version 
4:0.8.3-0ubuntu0.12.04.1

Original issue reported on code.google.com by [email protected] on 20 Jun 2012 at 12:28

[Documentation] Specific examples explained on the wiki

Hey there,

I am modifying existing .cfdg files right now. I noticed that my knowledge
is quite outdated. :-)

We have a wiki here:

https://github.com/MtnViewJohn/context-free/wiki

Would it be possible to also add an "example" subsection near the end,
where simple examples are explained, to genuine newcomers? (This
would include old and forgetful people like me too!)

Does not have to include many examples; perhaps 4-5 examples, and
the explanation does not have to be long. I am currently having a very
hard time understanding other people's cfdg-rules, so my hope is that
this could help us mere mortals to understand what is going on in the
more advanced variants as well, starting from the basic rules. :-)

Thanks!

missing necessary library in readme to compile

Hi
I followed the instructions in README, installed dependencies and when I typed 'make' it failed with this error:
#include "FlexLexer.h"
After checking the Internet, I found the solution. It is necessary to install libfl-dev.
I am using Linux Mint 20.1 (based on Ubuntu 20.04).

What are rule weights?

Rule weights are mentioned only once in the documentation but don't seem to be defined.

Compile problem with src-common/cfdg.l

Compilation failed after download on line 316 of src-common/cfdg.l

void Scanner::set_debug(bool b)
{
    yy_flex_debug = b;
}

I think there's supposed to be a type at the beginning of the declaration:

bool yy_flex_debug = b;

At any rate, that compiled successfully for me in MX Linux.

Null pointer dereference during rule compilation

Problematic input:

shape N{L(=)[]}
shape L(e)

Valgrind report:

==10794== Memcheck, a memory error detector
==10794== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==10794== Using Valgrind-3.14.0.GIT and LibVEX; rerun with -h for copyright info
==10794== Command: cfdg-github 2
==10794== 
==10794== Invalid read of size 8
==10794==    at 0x14A9E7: std::vector<AST::ASTparameter, std::allocator<AST::ASTparameter> >::begin() const (stl_vector.h:708)
==10794==    by 0x1BE213: AST::ASTruleSpecifier::compile(AST::CompilePhase, Builder*) (astexpression.cpp:2658)
==10794==    by 0x1E7FC0: AST::ASTreplacement::compile(AST::CompilePhase, Builder*) (astreplacement.cpp:638)
==10794==    by 0x1E4012: AST::ASTrepContainer::compile(AST::CompilePhase, Builder*, AST::ASTloop*, AST::ASTdefine*) (astreplacement.cpp:111)
==10794==    by 0x1E9BFA: AST::ASTrule::compile(AST::CompilePhase, Builder*) (astreplacement.cpp:974)
==10794==    by 0x1E4012: AST::ASTrepContainer::compile(AST::CompilePhase, Builder*, AST::ASTloop*, AST::ASTdefine*) (astreplacement.cpp:111)
==10794==    by 0x143FEA: CFDGImpl::rulesLoaded() (cfdgimpl.cpp:459)
==10794==    by 0x134EF1: CFDG::ParseFile(char const*, AbstractSystem*, int) (cfdg.cpp:279)
==10794==    by 0x21CDCA: main (main.cpp:454)
==10794==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==10794== 
==10794== 
==10794== Process terminating with default action of signal 11 (SIGSEGV)
==10794==  Access not within mapped region at address 0x0
==10794==    at 0x14A9E7: std::vector<AST::ASTparameter, std::allocator<AST::ASTparameter> >::begin() const (stl_vector.h:708)
==10794==    by 0x1BE213: AST::ASTruleSpecifier::compile(AST::CompilePhase, Builder*) (astexpression.cpp:2658)
==10794==    by 0x1E7FC0: AST::ASTreplacement::compile(AST::CompilePhase, Builder*) (astreplacement.cpp:638)
==10794==    by 0x1E4012: AST::ASTrepContainer::compile(AST::CompilePhase, Builder*, AST::ASTloop*, AST::ASTdefine*) (astreplacement.cpp:111)
==10794==    by 0x1E9BFA: AST::ASTrule::compile(AST::CompilePhase, Builder*) (astreplacement.cpp:974)
==10794==    by 0x1E4012: AST::ASTrepContainer::compile(AST::CompilePhase, Builder*, AST::ASTloop*, AST::ASTdefine*) (astreplacement.cpp:111)
==10794==    by 0x143FEA: CFDGImpl::rulesLoaded() (cfdgimpl.cpp:459)
==10794==    by 0x134EF1: CFDG::ParseFile(char const*, AbstractSystem*, int) (cfdg.cpp:279)
==10794==    by 0x21CDCA: main (main.cpp:454)
==10794==  If you believe this happened as a result of a stack
==10794==  overflow in your program's main thread (unlikely but
==10794==  possible), you can try to increase the size of the
==10794==  main thread stack using the --main-stacksize= flag.
==10794==  The main thread stack size used in this run was 8388608.
==10794== 
==10794== HEAP SUMMARY:
==10794==     in use at exit: 67,530 bytes in 240 blocks
==10794==   total heap usage: 594 allocs, 354 frees, 236,041 bytes allocated
==10794== 
==10794== LEAK SUMMARY:
==10794==    definitely lost: 0 bytes in 0 blocks
==10794==    indirectly lost: 0 bytes in 0 blocks
==10794==      possibly lost: 0 bytes in 0 blocks
==10794==    still reachable: 67,530 bytes in 240 blocks
==10794==         suppressed: 0 bytes in 0 blocks
==10794== Rerun with --leak-check=full to see details of leaked memory
==10794== 
==10794== For counts of detected and suppressed errors, rerun with: -v
==10794== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Requirement: for XP but need .NET 4.5?

I'm about to download 3.0.9 but confused by the requirement.
Homepage says it's for XP or later but NET 4.5 is only for Vista or later. Furthermore AFAIK the last VS able to target XP is VS2013.

Need clarification

Issue installing on Ubuntu

When downloading and attempting to run make or sudo make install on Ubunutu getting error

src-unix/posixSystem.cpp:37:10: fatal error: unicode/ucnv.h: No such file or directory
   37 | #include <unicode/ucnv.h>
      |          ^~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:209: objs/posixSystem.o] Error 1

Ubuntu Version: 20.04.1
Gcc Version: 9.3.0
Flex Version: 2.6.4
Bison Version: 3.5.1
Libpng Version: 1.6.37

[Doc] Clarifications on the TRSSF canonical order

In the wiki doc on shape adjustment, the doc showed an example

shape foo {
    bar [ x 1 y 2 rot 30 s 2 0.5 skew 10 0 flip 45 ]
}

and in the text below it explained that in this case the adjustment order is to translate first, then rotate, and so on.

I was a bit confused by the text, because if we translate bar first to (1, 2), a rotation would move it around the origin, not (1, 2). The same logic goes to sizing, where it would move to (2, 1).

Fundamentally, the confusion is on the order of applying the affine transformation. If the affine matrix for the translate operation is T, and the R for rotate, then the behavior of CF suggests T * R (shape), while the text says R * T(shape).

I dug around the source code to see how this behavior is implemented. The ASTmodification::makeCanonical function in astexpression.cpp would sort all transformations in canonical order, while ASTmodTerm::evaluate would then apply those transformations. The code would call m.m_transform.premultiply(T) where I believe m is the existing affine transformation and T is the shape transformation. When combined with the canonical order, I believe we are concatenating the transformation matrix as

M * T * R * S * S * F (shape)

where M is the existing/external transformation.

While the order of concatenating the shape transformations is indeed TRSSF, when we do it step by step, we do need to apply the transformations in the reverse order, i.e. F S S R T.

I constructed the following example to illustrate the behavior.

startshape board

m = 5

shape board {
    grid []
    // marks the origin
    SQUARE [b 0.6]
    // If the applying order is TRSSF, then the R here would be no-op on SQUARE
    // However the r is applied to turn a 3x1 bar to 1x3.
    // Indicating R is applied after S.
    SQUARE[x 2 1 s 3 1 r 90]
}

// Draw a horizontal line y = k
path yline(number k)
{
    MOVETO(-m, k)
    LINETO(m, k)
    STROKE(0.01)[]
}

// Draw a vertical line x = k
path xline(number k)
{
    MOVETO(k, -m)
    LINETO(k, m)
    STROKE(0.01)[]
}

shape grid
{
    loop i = -5, 6, 1 [] xline(i) []
    loop i = -5, 6, 1 [] yline(i) []
}

Would like to use your help to clarify if my understanding is correct.

I am happy to send over a small PR to update the wiki.

Bad syntax for functions causes windows client crash

If the user puts an expression between a function name and the parenthesis for the parameters the context free windows client will crash to desktop when rendering. The effect will persist if the program is opened again when the initial render is performed - so it will crash every time the file is opened.

Here is a demo context free file that causes the crash

startshape CRASH []

foo (n) = n+5

shape CRASH
{
	SQUARE[]
	SQUARE [x foo(1)]
	
	SQUARE [x foo 10+(1)]
}

The 'x foo 10+(1)' causes a crash - the system should generate a compiler error.

Detect division by zero

Division by zero isn't detected.
The following sample code produces an error message A shape got too big. with version 3.0.11.3(v28).

startshape myshape
shape myshape{
    SQUARE[r (180/0)]
}

Can´t compile

If I try make it produces this.

Makefile:121: objs/cfdg.tab.d: Datei oder Verzeichnis nicht gefunden
Makefile:121: objs/lex.yy.d: Datei oder Verzeichnis nicht gefunden
mkdir -p objs 2> /dev/null || true
mkdir -p objs 2> /dev/null || true
g++  -Isrc-common -Isrc-unix -Iobjs -Isrc-common/agg-extras -Isrc-ffmpeg/include -I/usr/local/include -Isrc-agg -Isrc-agg/agg2 -O2 -Wall -Wextra -march=native -Wno-parentheses -std=c++14  -c -o objs/cfdgimpl.o src-common/cfdgimpl.cpp
src-common/cfdgimpl.cpp: In member function ‘void CFDGImpl::rulesLoaded()’:
src-common/cfdgimpl.cpp:385:29: error: ‘isfinite’ was not declared in this scope
         if (!isfinite(weight)) weight = 0.0;
                             ^
src-common/cfdgimpl.cpp:385:29: note: suggested alternative:
In file included from src-agg/agg2/agg_basics.h:19:0,
                 from src-agg/agg2/agg_color_rgba.h:28,
                 from src-common/cfdgimpl.h:40,
                 from src-common/cfdgimpl.cpp:31:
/usr/include/c++/5/cmath:601:5: note:   ‘std::isfinite’
     isfinite(_Tp __x)
     ^
Makefile:208: die Regel für Ziel „objs/cfdgimpl.o“ scheiterte
make: *** [objs/cfdgimpl.o] Fehler 1

What I did wrong?
I ´m using Kubuntu 16.04 LTS, Bison 3.0.4 and libpng16.

DSO Link Changes

Fix:
Explicitly link to libm:
sed -i 's/^LIBS\s\+=.*/\0 m/' Makefile

What is the expected output? What do you see instead?
/usr/bin/ld: objs/astexpression.o: undefined reference to symbol 
'atan2@@GLIBC_2.0'
/usr/bin/ld: note: 'atan2@@GLIBC_2.0' is defined in DSO /usr/lib/libm.so.6 so 
try adding it to the linker command line
/usr/lib/libm.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [cfdg] Error 1


What version of the product are you using? On what operating system?
ContextFree 3.0 compressed tarball (v17)
Linux 3.4.6-1-ARCH #1 SMP PREEMPT i686 GNU/Linux


Please provide any additional information below.
http://fedoraproject.org/wiki/UnderstandingDSOLinkChange


Original issue reported on code.google.com by [email protected] on 20 Aug 2012 at 7:34

CF::Tile crashes on OSX

What steps will reproduce the problem?
1. Run any example which uses "tile{}" or "CF::Tile" (e.g. 
http://www.contextfreeart.org/gallery/view.php?id=1447)
2. Context Free crashes

Version:         3.0.6 (38)
OS Version:      Mac OS X 10.9.2 (13C1021)


Original issue reported on code.google.com by [email protected] on 7 May 2014 at 12:07

Attachments:

Unhandled Exception when submitting to gallery

When trying to submit to gallery using the v43 client I get an unhandled exception saying the server failed to respond with the following traceback:

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Net.Sockets.SocketException (0x80004005): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.86.72:5000
at System.Net.Sockets.Socket.InternalEndConnect(IAsyncResult asyncResult)
at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)

************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3416.0 built by: NET472REL1LAST_B
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll

ContextFree
Assembly Version: 2.2.6946.38728
Win32 Version: 3.1.0.43
CodeBase: file:///C:/Users/flemi/AppData/Local/OzoneSoft/ContextFree/ContextFree.exe

Microsoft.VisualBasic
Assembly Version: 10.0.0.0
Win32 Version: 14.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll

System
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3416.0 built by: NET472REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll

System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3429.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll

System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3324.0 built by: NET472REL1LAST_C
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll

System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll

System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll

System.Runtime.Remoting
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll

WeifenLuo.WinFormsUI.Docking
Assembly Version: 3.0.6.0
Win32 Version: 3.0.6.0
CodeBase: file:///C:/Users/flemi/AppData/Local/OzoneSoft/ContextFree/WeifenLuo.WinFormsUI.Docking.DLL

WeifenLuo.WinFormsUI.Docking.ThemeVS2015
Assembly Version: 3.0.6.0
Win32 Version: 3.0.6.0
CodeBase: file:///C:/Users/flemi/AppData/Local/OzoneSoft/ContextFree/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.DLL

System.Xml.Linq
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml.Linq/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll

CFControls
Assembly Version: 1.0.6946.38699
Win32 Version:
CodeBase: file:///C:/Users/flemi/AppData/Local/OzoneSoft/ContextFree/CFControls.DLL

ScintillaNET
Assembly Version: 3.6.3.0
Win32 Version: 3.6.3.0
CodeBase: file:///C:/Users/flemi/AppData/Local/OzoneSoft/ContextFree/ScintillaNET.DLL

Accessibility
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3056.0 built by: NET472REL1
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll

System.Security
Assembly Version: 4.0.0.0
Win32 Version: 4.7.3101.0 built by: NET472REL1LAST_B
CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Security/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Security.dll

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Opening "Render" menu generates exception

When opening the "Render" menu (on Mac OS X 10.8.5 at least) the system log records the following exception:

[GView validateMenuItem:]: unrecognized selector sent to instance

It doesn't seem to prevent correct operation.

According to some posts I found (see below) these lines cause the exception (haven't looked at the code closely though, so it might just be the first one):

return [super validateMenuItem: anItem];

return [super validateMenuItem: anItem];

See:

[Note: This issue report is only a stub but hopefully it's better than no issue. :) ]

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.