These are my links for December 2nd through January 12th:
Tag: html
Multivariate Charts from HTML tables in D3.js
For a dynamic monovariate (single line) chart, please see my earlier post – http://psyphi.net/blog/2013/04/charts-from-tables-with-d3js-and-jquery/.
Sometimes you just have to plot more than one dataset on the same chart, but you might have a complex data table with some “collections” of single-values and some collections of multiple values. Here I’ve put together an example from something I’ve been working on recently. Once your back-end queries (SQL or whatever) are written and your templates convert those data into basic HTML tables, you can plot then straight to SVG/D3 without much extra work.
Nearly all of that extra work is around adding appropriate classes to cells to distinguish columns and collections of columns. The rest is to extract those cells out again and decide which should be plotted together.
In this example, tabs and table headings belong to classes “collection_#” “a_c#” where the collection_# identifies a set of columns to be displayed together and the a_c# identifies the (links for the) columns themselves. Collections with multiple columns therefore have a single collection class but contain more than one a_c# class.
Next each table tbody td data cell belongs to a c# class, one for each column. Each one is also uniquely identified by a td#_<date> which allows hovers on the table cell to highlight the SVG data point and vice versa. Next each cell contains a span with a “val” class (more on that in the next post).
SVG paths may now be built for each column. Clicks on table-headings and tabs are able to examine which columns co-display because they belong in the same collection and then scale and plot them appropriately.
Note that the first and last tabs in this example plot single lines to demonstrate mixed collections in action. The middle two tabs have two lines each but there’s no reason why you couldn’t have more (although there are only seven colours listed at the moment).
Cross-platform automated builds for node-webkit applications
Recently I’ve been extending my “classic” JavaScript knowledge by learning NodeJS. I’m sad to say that writing cross-platform, Desktop-class applications in Perl is just way too much hassle. However, having also discovered node-webkit I’ve been able to accelerate my desktop application development using classic HTML & CSS knowledge and improving my JavaScript techniques, mostly trying to better understand fully asynchronous, non-blocking programming. Apart from some initial mind-bending scoping experiences which maybe I’ll come back to another day, it’s generally been a breeze.
One of the useful things I’ve been able to do is to automate cross-platform application builds for Windows and Mac (Linux to come, not a priority right now but should be easy – feel free to comment). It’s not compilation, but more like application packaging.
My project has the node-webkit distributable zips in “src/”. The target folder is “dist/” and I’m also using a few DOS tools (zip.exe & unzip.exe and the commandline Anolis Resource editor) which live in dist/tools. The targets are built with timestamped filenames, a .exe in “dist/win/” for Windows and a .dmg in “dist/mac/” for OSX. I don’t do anything clever with Info.plist on Mac though I know I should, but the icons are set on both platforms, assuming they’ve been pre-generated and saved in the right places (resources/).
On OSX I’m using system make which presumably came with XCode. On Windows I’m using gmake which on my system came with a previous installation of Strawberry Perl but is also available in a Windows binary/installer.
My Makefile looks something like below (“make” not being one of my strongest skills – apologies for the ugly stuff). It might not be 100% complete as it’s been excised out of the original, much more complicated Makefile, so use with caution. If anyone has any tips on stuffing it all into NSIS automatically as well, please comment.
NW := node-webkit-v0.7.3
NWWIN := $(NW)-win-ia32
NWMAC := $(NW)-osx-ia32
NWLIN := $(NW)-linux-x64
deps:
rm -rf node_modules
npm install
windeps:
if exist node_modules rmdir node_modules /s /q
npm install
# zip.exe & unzip.exe from http://stahlworks.com/dev/?tool=zipunzip
# Resourcer.exe from http://anolis.codeplex.com/
win: windeps
if exist mdc.nw del mdc.nw /q
if exist dist\win rmdir dist\win /s /q
if exist tmp rmdir tmp /s /q
dist\tools\zip -r mdc.nw mdc package.json node_modules
mkdir dist\win tmp
dist\tools\unzip -d tmp -o src\$(NWWIN).zip
dist\tools\Resourcer -op:del -src:tmp\nw.exe -type:14 -name:IDR_MAINFRAME
dist\tools\Resourcer -op:add -src:tmp\nw.exe -type:14 -name:IDR_MAINFRAME -file:resources\mdc72x72.ico -lang:1033
copy /b tmp\nw.exe+mdc.nw dist\win\mdc.exe
copy tmp\icudt.dll dist\win
copy tmp\nw.pak dist\win
if exist mdc.nw del mdc.nw /q
if exist tmp rmdir tmp /q /s
dist\tools\zip -r dist\win\mdc-$(shell echo %date:~-4,4%%date:~3,2%%date:~0,2%-%time:~0,2%%time:~3,2%).zip dist\win
mac: deps
[ ! -f mdc.nw ] || rm mdc.nw
zip -r mdc.nw mdc package.json resources/mdc72x72.png node_modules
touch node-webkit.app
rm -rf node-webkit.app dist/mdc.app dist/mac
mkdir dist/mac
unzip -o src/$(NWMAC).zip
mv node-webkit.app dist/mac/mdc.app
mv mdc.nw dist/mac/mdc.app/Contents/Resources/app.nw
rm dist/mac/mdc.app/Contents/Resources/nw.icns
sips -s format icns resources/mdc512x512.png --out dist/mac/mdc.app/Contents/Resources/mdc.icns
perl -i -pe 's{nw[.]icns}{mdc.icns}smxg' dist/mac/mdc.app/Contents/Info.plist
perl -i -pe 's{node[-]webkit[ ]App}{MDC}smxg' dist/mac/mdc.app/Contents/Info.plist
hdiutil create dist/mac/mdc-$(shell date +'%Y%m%d-%H%M').dmg -ov -volname "MDC" -fs HFS+ -srcfolder dist/mac/mdc.app
rm -rf dist/mac/mdc.app
test:
@./node_modules/.bin/mocha
.PHONY: test
Charts from Tables with D3js and jQuery
I’ve been tinkering with D3js on and off for a couple of months now, purely for generating simple, inline charts in web pages, made from data already dumped into HTML tables. Doing this is easier than building, caching and referencing external bitmap (PNG, GIF or whatever) images with Gnuplot or GD::Graph and also simpler than building bitmap images and serving them base64 encoded inline with <img alt=”” src=”data:…” />.
Using jQuery (or similar) to extract data from an already-present HTML table means there’s almost no code required whenever you want to add and plot a new column that someone might want to report on. Pushing all the work to the client should also mean slightly lighter server loads, though granted it’s already done the heavy lifting during the query to generate the table.
I’ve used examples from a number of sources, mostly from over on the d3js.org website itself and Mike Bostock’s inspiring example gallery. Plus the ever useful jQuery and jQueryUI libraries.
The result is a tabbed (with a jqueryui-themed unordered list) report based on a data table below. Clicking on either a tab or a table heading (all except the date) will animate and redraw the chart above. The data are collected using a jQuery selector on column classes in each.
Feel free to take and reuse it – just pinch the frame source.
Bookmarks for June 1st through November 3rd
These are my links for June 1st through November 3rd:
- Meraki –
- Cambridge Wood Works – Recycling and Reusing Waste Wood In Cambridge UK –
- web-sorrow – a versatile security scanner for the information disclosure and fingerprinting phases of pentesting. written in perl – Google Project Hosting –
- Shades | Software | Charcoal Design –
- Welcome – Fritzing –
- PLOTS Spectral Workbench: index –
- Cubify – Express Yourself in 3D – basic reprap with a bit more polish
- LPMT – Little Projection-Mapping Tool | "Projection-Mapping for the masses" –
- CircuitLab – online schematic editor & circuit simulator –
- Nava Whiteford – SGenomics Ltd –
- Scalable Flash Memory Array – Violin Memory Violin Memory –
- All The Cheat Sheets That A Web Developer Needs | Top Design Magazine – Web Design and Digital Content – via @jitsukerr . Missing bits of perl and apache other than rewrite
- hashcat – advanced password recovery –
Bookmarks for February 8th through April 23rd
These are my links for February 8th through April 23rd:
Bookmarks for January 17th through February 2nd
These are my links for January 17th through February 2nd:
- Instant Screen Sharing | Screenleap –
- Sofortbild – Mac Tethered Shooting –
- Your Mother Was a Chemist: Science in the Kitchen | Your Mother Was a Chemist –
- Try Jasmine in your browser, because downloading a zip file is too much work! – online/web-based coffeescript engine
- Bootstrap, from Twitter – frontend webdev toolkit