These are my links for December 2nd through January 12th:
Tag: javascript
Bookmarks for November 19th through December 2nd
These are my links for November 19th through December 2nd:
Bookmarks for August 29th through November 12th
These are my links for August 29th through November 12th:
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).
Bookmarks for August 5th through October 14th
These are my links for August 5th through October 14th:
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
Bookmarks for June 5th through June 26th
These are my links for June 5th through June 26th:
- Big Compute for Big Data – Products – Joyent –
- Leaflet – a JavaScript library for mobile-friendly maps –
- rCharts – NVD3 & friends in R
- Instant Server – temporary (35 mins) ec2 micro instance, ubuntu64
- The GUI Loft — a Win32::GUI designer/builder for Windows User Interface creation in Perl –
Bookmarks for May 6th through May 22nd
These are my links for May 6th through May 22nd:
- LaBrea – "Sticky" Honeypot and IDS –
- dionaea — catches bugs –
- kippo – SSH Honeypot – Google Project Hosting –
- Elixir – Interesting high level, rubyish syntax running on erlang vm. Attractive traits.
- Gnuplot compiled by Emscripten –
- Humdinger :: Windbelt Generators –
Bookmarks for March 8th through April 30th
These are my links for March 8th through April 30th:
- NVD3.js :: re-usable charts for d3.js –
- Inception | Break & Enter – defeat screenlock, disk encryption for e.g. powered-on & screenlocked devices with physical access
- Asterisk for Raspberry Pi –
- Storm, distributed and fault-tolerant realtime computation –
- Bitcoin Mining Hardware – ASIC Bitcoin Miner – Butterfly Labs –
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.