|
ToDos
A backlog of things to do for WordCram
Phase-Requirements Documentation and ExamplesInstallation documentation (like a standard Processing library) Create more examples, and get them into the downloads. JavaDoc! Put it in the code, and put it in the ant script. Generate it into a reference folder, with an index.html, per the library guidelines. Generate wiki-page documentation for WordPlacers, WordColorers, etc, from javadoc comments? Auto-deploy them to the wiki svn? Make a WordCram API cheat-sheet. Tutorial/blog post/example sketches on:
WordCrams to CreateBeatles lyrics, the US Constitution, popular baby names, Apache license, The Cathedral and the Bazaar, The Art of Unix Programming A Blog header from WordCram's source. The odd dimensions will be a good test, and it'll require a text provider that can parse out Java words (variable names, methods, classes, etc) -- along with java stop words. Throw in the example sketches and wiki pages. This is all set, except it needs a TextSource for loading a source folder of java files. Once that's in place, the example can be included with the rest of them, and this can be crossed off. Plug-in ImprovementsColorPick some really nice default fonts & colors for demos. Look at colourlovers.com. Colorers something like http://colorschemedesigner.com's Mono(hue), Complement(hue), Triad(hue, offsetAngle), etc. Auto-AnglerAn auto-angler that decides whether to rotate a word or not, based on the destination's aspect ratio. If it's wide & short, longer words will be horizontal; if it's tall & narrow, longer words will be vertical. Short words will be random. double aspect = width / height; double lenPercentile = maxWordLen / thisWordLen; //...not sure of the math here, work it out PlacersA placer that renders bigger words horizontally by weight, and vertically close to the bottom -- should produce a right triangle w/ the right angle in the bottom left. Text Sourcesnew DeliciousTagsTextLoader(username), new RssTextLoader(url), new HtmlTextLoader(url), new TwitterStreamTextLoader(twitterer), new JavaSourceCodeTextLoader(srcDir) Not sure of this one: API change for TextSources: move WordCram methods include/excludeNumbers, withStopWords, and upper/lower/keepCase onto the TextSource. Rather than WordCram's fromWebPage() and fromTextFile(), it'd just have fromTextSource(new TextFile(path, this).excludeNumbers().upperCase()). Well, that last part sucks. Maybe not. Text parsing options: case-sensitivity, and whether numbers are included. Make a standard text format for saving (and re-loading) Words, so you can generate your word weights once, and store it (for faster applets). Core ImprovementsLayoutGet the words to render closer to where the Placer places them. Right now, the PImage the word is rendered to is so large (to account for rotated words), that there's a lot of background color between the point and the first pixels of the word. This makes it harder to effectively code up a WordPlacer, and get the output you want. DONE: switched to java.awt.Shapes, which take up minimal room. Move around rendering process -- separate word placement from word rendering, and render as late as possible. Cleaner organization, and will let words be re-colored without being placed again, or re-laid out without being Shaped again. Keep words from going off-screen. Scale the window (somehow) to fit words in, when they run off-screen. There's some basic bounds-checking now, but it could be a lot better. Try changing the color scheme AFTER rendering it, without totally re-rendering. Try re-laying out words with the same settings. Arbitrary shapes, like tagxedo.com. PerformanceWhen placing a word, remember which quadrant it's in. When checking for colliding words, check the appropriate quadrant first, to speed things up. Parameterize minShapeSize. WordCram.minShapeSize(n) Give WordCram a "max number of words to draw" parameter. WordCram.maxNumberOfWordsToDraw(n) APIGive WordCram a fluent builder interface (in addition to the huge one already there), with sensible overloads (varargs) and sensible defaults. Add more overloads to the fluent builder API. Let users pass a destination PGraphics to WordCram, so it can go to something other than the host PApplet. Thanks, Felix! Fix up printSkippedWords so it's clearer. Renamed it printWhenSkippingWords, and clarified the javadoc. Add a method to get the Word at the given (x,y) coordinates. Done, with a naive implementation, without memoization. Seems fast enough for now. If it becomes too slow, try a quad-tree. Provide a way to set/get properties on Words, so you don't have to sub-class Word for simple things. Word.getProperty and Word.setProperty. Building WordCramGZip the tar downloads. Better unit tests: use Mockito? In progress |