-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Here's a description of the existing code/functionality of a 'fork' of
the OpenDDR code I created and which I want to contribute to the
DeviceMap project.
I called the project Miri (yes, Star Trek) and below I use the
project's namespace to refer to the various components, a detail that
will have to change in due course.

Some design requirements I set :

- -  CLS-compliance (ECMA-335) : standards are debatable, the point is
pick a sensible one and stick to it.
- - dependencies : avoid.
- - use technology available 'everywhere' : I use MS SQL but I'd put as
much trust in PostgreSQL (can't say that about MySql) and HTTP, Redis,
JSON, protobuf, exist 'everywhere' open and free.

- - the system should be used :
  - to import known data sources (OpenDDR XML and UAProfiles)
  - to export/serialize data sets used by the main device resolver
  - to maintain Vocabulary/Aspect/Property definitions
  - to maintain device data (with version control)
  - to function as a main device resolver :
    - API
    - web front-end (editor rights for proper logons)
  - to 'import' and analyze traffic log data (w3c and other log formats)
    (this includes the log of its own API and web-front end !)

  - the resolver functionality should be able to run independently

- - standards (repeat 3x) : implement, accommodate, all relevant standards
- - fun

Status : I've got the basics (resolver, api, logon, membership
rights,...) running in a flat UI on .Net MVC 4, 'release' ready and am
fiddling with HTML/CSS/MVC etc to get the other functionality in a
presentable and usable UI, a 'simple' matter of piecing things
together and it's ready for use/users.

Since I understand Reza is leading what looks like a very similar
effort, albeit on a different 'platform', I held back a bit not
wanting to seem to run interference with 'my' .Net stuff.

Miri namespace and functionality overview
============================================
Miri.Ddr : identical in functionality etc to OpenDDR's W3c.Ddr-Simple
Miri.Oddr : identical in functionality to OpenDDR's Builders and Models
            main difference : no XML : uses IConnection :
            interface to connect builders to data source
            (dictionaries/hashmaps)

            => read from one source - write to other 'source'
               OpenDDR XML    -> SQL
               UAProfile RDF  -> SQL
               SQL            -> Redis (JSON/protobuf)
               SQL            -> JSON/protobuf (file, stream)
               JSON/protobuf  -> JSON/protobuf/*HTML*/...
               ...            -> ...

           Rather than parsing/loading XML in a cache, the main
           device resolver loads a cache of 'pre-cooked' data.
           The cache consists of builder-tokens and device-properties
           key value pairs.

Miri : Main Device Resolver
       - implements IConnection to Repository which is :
         - a Db : holds data connection parameters read for config file
         - a Version : holds version info on current Db and Resolver

       - implements 2 resolution functions that take
         Oddr.Models.UserAgent as parameter :
         - Identify : returns a device Id (string)
         - Resolve : returns an Oddr.Models.BuildObject (IBuildObject)

         !! Because of the way the data is serialized in JSON
            or protobuf the properties dictionary/hashmap contains :

           name, value, aspect, datatype, description, default value

         - implements logging for performance, debugging and testing

Miri.Parsers : - UAProfile parser
               - fall-back parsers in case ua 'is not a device'
               - Catfish response parser (see below)

Miri.Objects : Implements CRUD and query functionality (SQL) :
               - Vocabulary/Aspects/Properties
               - Device data : OpenDdr/DeviceMap & UAProfile (linked)
               - UserAgent test data and test results

               - data version control (device data)

               - list devices per vendor, models per vendor,...
               - list devices with property or property set...
               - compare test data and results to device data
                 (develop 'calibrated' test data sets and tests)

Miri.Services : - Resolver Node : implements main device resolver
                  - API service : returns serialized IBuildObject
                    (JSON key value pairs)
                  - 'font-end' service : returns "Device"
                - Device : implements and extends
                           W3c.Ddr.Simple.IService
                  - deserialize IBuildObject.Properties
                  - filter : returns property subsets from properties
                  - serialize : HTML, JSON, Protobuf
                  - data editor extension

Catfish : Catfish is a 'client-probe' javascript based on EFF's
Panopticlick and has been extended to include among other things :
dual-orientation, WebGL-spex,...
Included on '1st contact', it uses AJAX to return a JSON object with
useragent properties that can (partially) be mapped to device map and
uaprofile properties.
This 'response' can be used as fall-back or can used or stored for
analyses.

Data model
==========
The database contains : device data, vocabulary data and Useragent
test data. These 3 'sets' are interconnected.
Device Data : 'bulk' procedure import from OpenDDR XML or UAProfile
source files. This set of tables is only loosely normalized. Importing
raw data into a 'scratch' table and then using SQL to validate and
distribute the data over its respective final tables often proves much
faster and much less code/errors.
Vocabulary Data : strictly normalized tables following the W3C
Vocabulary/Aspect/Property model. Used in the validation of Device
data imports and to maintain 'authoritative' name, description, data
type etc. (OpenDDR/DeviceMap and UAProfile)
UserAgent Data : set of table with useragent strings, user agent types
and resolver tests and test results.

Looking forward to your suggestions as to which direction to run with
all this -- after digesting the above,

Regards,

esjr
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJReA8VAAoJEOxywXcFLKYcGUIIAMTbfJhGQVTIA2Rur1ZDP5ws
9g8CQEOCd6WdPiSDkgPXrc9zyFDzT5cLcQxrnRGRHQu32zyRmMF5FhbZoDIFz5va
rmLJSqyBUNRbi2+TXNbvNAR/vPAF6MVymhLbWKbm0Iv/ELhrMjvLf386YBxZjVpi
LP8y/qqf5OAtZkypkfAri1IR0Gga4d04gAXP/1oISh3k6XoiToKnide2yUUm1PLR
HND1Z9pMMYUjPgHLy3nuQ4DFG9K5CvmztiLlNI8io9bJBzA6iJ+LbKyXUWsVgewO
OvbQdZD98hbmr4sf7PkMSY9Hul/N5h3gFQUsdtDv/aw74EgmKQ8QL3Xa5enqA5M=
=+Jhj
-----END PGP SIGNATURE-----

Reply via email to