inkdb-data
v0.0.5
Published
Open Source Fountain Pen Ink Data
Downloads
3
Readme
Open Source Fountain Pen Ink data
So here's an interesting idea: Let's open source data about fountain pen inks.
Who makes what? Is it expensive? Does it flow well? Lots of feathering? Is it a uniform color, or does it majestically shade? What about if you use it with a semi-flex or flex nib? What does any of that even mean??
Why open source?
I'm a firm believer that the internet is for hosting the world's aggregate body of knowledge. Some of that knowledge is encyclopaedic (which depending on when you came online, might mean about.com, google, wikipedia, stack exchange, quora, and many more places like them), and some of that knowledge is extremely specialised and found in hard to find forums and personal webpages.
I happen to like arting, and I don't want to have to spend days on the internet, and weeks in shops, just to get a basic understanding of a small number of fountain pen inks. This is what the internet is supposed to be for, so let's make that happen: I submit to you, and the entire world, the world's first open source fountain pen ink data repository.
Contributing your knowledge
I'm only one person, and there's only so much I can do (even if what I've done so far could be considered obsessively elaborate. I don't think it is, but then again my opinion doesn't matter in this particular case) so the only way the world's going to get all the information on all the inks that are commercially available for fountain pens is going to be a group effort. In fact, you don't even need to have done any ink work yourself to help out:
Found a link to an ink review? Give a shout-out!
Just because you don't want to sit down and analyse fountain pen inks yourself (and let's be honest: why on earth would you, it's tedious! Some of us love that, but then some people also like playing "XCOM: Enemy Within" on classic difficulty) does not mean you can't help out.
Have you seen an ink review on a forum, or someone's homepage, and you think it's elaborate and worthwhile for the rest of the world to know about? Create a new issue on this repo to have it added as a "review" link for the associated ink!
Written an ink review that you think should be linked?
You are a hero to fountain pen users world wide, and I would love to add the link for your review to this data set. People should be able to easily find your review, even if it's not been published through the more well known fountain pen forums or pen websites.
Own an ink and want to rate it?
If you own a particular ink, and you like writing with it, whether you realise it or not you are the perfect person to say something about that ink! While writing a detailed review of an ink takes time and practice, and is greatly appreciated by the rest of the fountain pen using world, you don't need to go quite that in-depth to make a contribution: why not simply rate your ink in terms of what you feel you're qualified to rate? Does it flow well? How much did it cost you? Is it a little sedimenty if you leave the bottle standing for a while? Maybe it's a fluerescent or even highlighter ink! Simply tick some boxes, and in less than a minute, feel good about yourself for having helped improve the body of knowledge that the world can tap into!
Are you also a programmer, let's talk code for a moment
Data alone is not enough. Putting something like this online without an API, and without some sensible code backing it, would make it mostly useless. Also, while we could get fancy with SQL/ORM/etc. there really are only so many inks for sale on the planet at any one time, and there's a fair number of companies that make fountain pen inks, but that number is also relatively low in terms of model storage. We're talking less than 100 companies of wihch the vast majority produce vastly fewer than 100 inks...
Building the data
For development, this data uses node.js
, with npm
for testing and building. If you change any data, first force a rebuild to test your changes:
$> npm test
If that passes, run a true build:
$> npm run build
This will yield a new index.js
and source map for use in the browser.
Using the library in the browser
Include index.js as a script: <script src="index.js"></script>
should be all you need.
Using the library in Node
Require the library as you would any other, after installing it.
$> npm install inkdb-data --save
And then in your code:
var Inkdata = require("inkdb-data");
Inkdata.loadAPI(function(err, api) {
var inks = api.getInks();
var companies = api.getCompanies();
console.log("loaded " + inks.length + " inks, from " + companies.length + " companies");
});
Data storage
Let's make things simple: flat files for everyone, with the data stored in .json format, because it's very easy to read for both humans and computers, and writing API connectors based on a file system might requiring a bit of memory mapping, but let's be honest: 100 companies with 100 inks each, and each ink model needing about 2kb worth of text to model is still only 20MB. Even on the cheapest, lowest end hardware (let's say, a $35 Raspberry Pi B+), using up 20MB, or ever 40MB, for serving up the entire planet's fountain pen ink data, is nothing.
Code and layout
Inks are stored in the FS as directories for companies, with subdirectories for ink line (if relevant), with individually identifiable inks names based on "the ink's name" as a .json file, so that if we want the profile for De Atramentis's "Petrol", we'd be able to cat its data as:
$> cat ./data/De Atramentis/Petrol.json
Similarly, if we wanted to find Pelikan's "Mandarin", which is an "Edelstein" line ink, we could cat it as:
$> cat ./data/Pelikan/Edelstein/Mandarin.json
The API process simply taps into the file system (either "real", insofar as that's a thing, or a virtual file system) and aggregates the data stored into an easy to query object. Let's talk APIs for a moment:
Querying the data: the API
In order to make everyone's lives easier, there's a simple API that we can all tap into (or implement for different languages if needed) in order to get data out:
api.getCompanies()
→ array of stringsGet the list of companies that produce fountain pen inks.
api.get(<company name>)
→ portfolioGet a company's portofolio. A portfolio comes with its own API, covered below.
api.get(<company>, <ink line>, <inkname>)
→ inkDirectly access individual inks, based on a company name, optional ink line name, and ink name. Inks have their own API, covered below.
Portfolio
portfolio.getName()
→ stringA reflective function to get the name of company this portolio belongs to.
portfolio.getInkLines()
→ array of inklinesGet the inklines sold by this company. Inklines have their own API, covered below.
portfolio.getInks()
→ array of inksGet all inks in this company's portfolio, irrespective of ink links. Inks have their own API, covered below.
Inkline
inkline.getCompany()
→ stringA reflective function to get the name of company this ink line belongs to.
inkline.getName()
→ stringA reflective function to get the name of this ink line.
inkline.getInks()
→ array of inksGet all inks in this ink line. Inks have their own API, covered below.
Ink
ink.getCompany()
→ stringA reflective function to get the name of company this ink belongs to.
ink.getInkline()
→ stringA reflective function to get the name of ink line this ink belongs to.
ink.getName()
→ stringA reflective function to get the name of this ink.
ink.getProperties()
→ propertiesGet an ink's qualitative properties like dry time, cost, etc. Properties have their own API, covered below.
Properties
The properties object has a number of getters following the .get[propname]
pattern, where the property is capitalized on the first letter. Supported properties are:
- drytime
- flow
- shading
- nibtype
- cost
- fluorescence
- solution
- deposit
- rating
Can anyone use this data?
Short answer: yes.
Longer answer: yes, but the data is licensed under a share-and-share-alike license, and you got this data because of the hard work of others, so if you can, please help improve it.