Unit Testing vs Integration Testing

Unit Testing

  • mock everything external to your code.
  • mock everything up to the thing to be tested
  • do some stuff
  • assert one thing.
  • Don’t continue a test – instead, mock up the environment to match the new thing to test, and write that in a new test, with a new assert.
  • Its cheap to run lots of tests
  • Its cheap to mock things.

Integration Testing

  • Its expensive to set up data
    • That’s a talk to itself, on how to do that in a sane repeatable way.
  • There is no mocking. Its real stuff, all the time.
  • Thus, when you achieve one milestone, your test (more like a “flow”) continues to the second milestone. Examples:
    • Upload, Pause, Continue Upload, Download, Pause, Continue Download
    • Upload, kill upload, Upload again
    • Upload, Download, kill Download, Download again.
    • Create item, edit item, rename/move item, delete item.
    • Its too expensive to try to get to a middle state, unlike mock-land.
  • Along the way, you print out “assessments” (to go with a AAA-style term) of where your test is at and what data its seeing.
    • ie, Arrange, and then
    • Act Assess Assert
    • Act Assess Assert
    • Act Assess Assert
  • In case of failure, you compare the log of the failed test with the log of a successful previous test to see what’s different.
  • The test can be VERY complicated – and LONG – and that’s fine. You only know the detail of the test while you are building it.
    • Once it goes green in a CI system, you forget the detail, until it fails.
    • If it does fail, you debug through the test to re-understand the test and inspect data along the way.
  • Expect flakiness
    • Sometimes things just fail. Example: locks placed on tables in PostGres for Unique in their UAT environment by some other process.
    • Sometimes things fail because of a reason
      • Somebody changed a schema.
      • Somebody deleted some key data
      • Some process crashed
      • Previous other test left behind data that FK locks the data you want to work with.
      • All these need human care and feeding and verification, its not “mathematically sound” like unit tests are.
    • Its a good idea to put an Assert.Ignore() if any failures happen during Arrange() section (ie, databases are down, file system full, etc – no longer a valid test. Not failed, but not valid, so ignored.
      • Can postpone this till a test starts to be flaky.
  • But when it works
    • you know that all the stuff is CORRECT in that environment.
    • And when it works in CI day after day after day, any failures = “somebody changed something unexpected” and needs to be looked at.
      • Fairly often its a shared DB, and somebody else changed schema in a way that you’re not yet accounting for.
      • Or somebody changed the defaults of something, and your test data that you’re hinging a test on has not been updated to match.

Which Ones To Use Where

  • Use Unit Tests to explore the boundaries and paths inherent in a piece of code.
    • Faster
    • Many of them
  • Use a single integration test (or just a few) to run through the code with all dependent systems
    • try to hit every SQL statement / external service at least once
    • If it worked, combined with all the unit tests, you’re probably good
Tagged with: ,
Posted in Code

SQLite for C#/SQL Developers

Current project uses sqlite3 for local storage of stuff for various reasons.  This was our first time working with it.  We’ve learned a few things that are not obvious.. coming from a SqlServer world —


SQLite Expert for the win.  It has a chocolatey package as well, although that failed to install once for me (but worked twice.  Who knows).

Note that SQLite is multi-process-open-able; data inserted by your program shows up automatically in the Data tab in SQLite Expert.  However, if SQLite Expert has the .db3 file open, can’t delete it to scrub it clean.

All the same: varchar nvarchar and text

SQLite doesn’t care.   It has 5 types of “data” it can store, depending on what the data is.  Handy reference: http://www.tutorialspoint.com/sqlite/sqlite_data_types.htm.

So when we were doing “uniqueidentifier” it was actually doing BLOB under the hood.

Its entirely dependent on what you’re trying to store, as to what gets stored.   So you can store a string in an int field.   https://www.sqlite.org/faq.html#q3  — its a feature, not a bug.

GUIDs as binary, beware Endian.

Most programmatic forms of storing Guid data end up storing it as Binary/Blob.   You know its binary if you do:

select id, hex(id)

And you get two things that look about the same size in length, but are shuffled around:



You might say “hey! bad Endian!”  but actually its Guid.ToByteArray() that’s doing the re-shuffling.

So, if you see the value {E589C1… in a grid result, and you want to select it, and you say

select .... where id=x'e589c1...'

That doesn’t work!  you have to give the bytes in the other order (as returned from hex(id)).

Foreign Keys Not On By Default from C#

This one was a shocker.  Its a pragma to turn foreign key checking on.  However, tools such as SQLite Expert do this automatically for you.

What we ended up with is a GetOpenDbConnection() call that did both .Open() and executed the pragma.

Logging Generated SQL from Dapper

A lot of this got figured out after we could see the SQL Generated by the various libraries we were working with. Turns out, that’s 2 statements after your connection is opened:

con.Flags |= SQLiteConnectionFlags.LogAll;
con.Trace += (o, e) => { Console.WriteLine("SQL: " + e.Statement); };

In Conclusion

These are the bombshells we’ve experienced over the last week.  Hopefully, all the bombshells are done with now.

Other than this learning curve — very solid, very fast, very nice.  2 Thumbs Up. Plus One. Heart It.

Tagged with:
Posted in Code

git rebase

I’ve never done a rebase before.  I figured today would be a good day to try it out.   It’s a simple case —


From the client’s point of view, origin/master is ahead by one commit.   It happens to be a conflicting change.

In Tortoise (I’m starting out easy), I pick “Rebase”, and I’m saying I want to change my branch SG-EndToEndTest to be “re-based on” remote master.


  • Its showing me the list of commits that I’ve had, since I started my branch from wherever
  • Everything is picked.  Could choose to not-pick some stuff, leave it behind, like config file changes for local debugging.

I click “Start Rebase”.  It starts from the bottom of the list (ID=1) above and triest to re-apply the commits to the new root.   It runs into conflicts –


I right click on the conflict, edit it .. turns out TortoiseDiff doesn’t think it’s a conflict, I can easily mark it as resolved.  I have to do this twice, both in .csproj files.

When its done, its all still local – server’s not any different – but local shows:


  • The old commits are still there.
  • But they’ve been cloned and re-grafted onto a new source node, and the label has been moved.
  • If I had to, I could undo everything by force-moving SG-EndToEndTest to be based on ad1c.

If I now push up to the server – I get an error:


Instead, I have to push with –force (“may discard unknown changes”) (ie, “tell the server to do stuff where it discards changes that I, the client, know nothing about – JUST MOVE THE REF”)


Now the server looks like this:


That was my first, very simple, rebase (without squashing).

The pull request that I had open against that branch survived as well, and changed from “Cannot merge – conflicts” to “Can merge automatically”:


Tagged with: ,
Posted in Code

Goodbye to old code and dreams of immeasurable wealth

imageIn the Beginning

I would always hear about people who wrote simple pieces of software, who were in the right spot, at the right time, and their stuff got used and they became famous, and.. perhaps even rich. 

Every time I heard such a story, my baby tyrant would say: “I want that!  Lets DO that!”

To which my Fuddy-grownup would say, “Honey, you probably won’t become famous, and it probably won’t work out.  Are you sure?”

And the Couch-Buddy would say, “Ah, too much work.  Lets read some more facebook.”

I Made a Decision

I started coding this thing that I thought would be a good start of things.  It was an app to make reading twitter easier – less context switches.  It was also an experiment in using Azure, Visual Studio Online, and a little bit in starting bootstrap from scratch.

I got it working.

I started the code 7/26/2015, and by 9/22/2015 I was ready for the big time.   This was mostly an hour or two during a workweek in the evenings, and maybe an hour or two on a Sunday morning.

I had a logo created, bought a bootstrap style, I had added what I thought were the key features I needed, I rebranded it, and I bought a domain name.

image  image

I stopped.

And then life got complicated, and I let it sit – costing me monthly $, btw.  $17 per month to keep it hosted at the cheapest level I could get away with, AND have a domain name.  I used it for a while. 

Eventually, I got cheap, and work distributed a full MSDN license to me with an azure subscription, so I nuked it.

I’m letting it go.

Very recently, I put it back online under my MSDN license –  You can use it here:


I’ve cleaned up the code that I deployed, removed all the passwordly bits from it, and uploaded it to github.  Here’s the guts of it:


Letting go the dreams as well

I would have liked to have seen this thing become better.

  • I could have done a face lift on the front page.  Too many words.  Replace with screenshots of the configuration page and the read page.
  • I could have made it more colorful. Orange and Blue!  You can see this in the icon a bit.
  • I could have made it front-end js only, with no server side talking to twitter, using local-storage for persistence
  • I could have added “click hashtag or username” to create additional groupings on the fly.  delete groupings on the fly as well.

The good news is, all these dreams live on, in a future project – that works with Facebook, instead of Twitter


Letting this one go to make psychic room for other things that interest me.   May it bless others.  If you write a good one like this I’ll use it.

Tagged with: , ,
Posted in Code, Life

A different set of eyes

TL;DR – this post ends up going almost nowhere.  Lots of politics-related things. If nothing else,  read the last 2 paragraphs.

This morning I was listening to Grey and Haran chat about Brexit.  The point Grey brought up was that while the politicians may not be enthusiastic about the decision of the people, the people definitely voted for exit.  And Brady brought up that it seemed like the stayers had a low opinion of the exiter’s apparent intelligence, and that may not be .. respectful.

Then, I listen to the RNC convention.  And.. channeling Brady’s accent – “I must say, I do not think I am the target audience for that convention”.  But, the point remains.  All these people who do resonate with that message – how can I love on them? how can I respect them?

So, let me word a picture.   Its a very hazy picture, mind you.  I’m trying to lob idea-smoke-bombs over a large distance, not use a sniper-rifle here.   I’m trying to work my way to a place where I can love everybody and respect everybody.

Frogs, pools.  That didn’t work, I couldn’t capture resource acquisition well.

Setup 1.

  • I think the world has grown closer together via technology and travel.
  • I think the many interactions this has brought, has made life much more complex.
  • I think that due to {reason A to be discussed later}, life has become hard.
  • I think that there are some people of a bent of:  “excitement”, faith in humanity, “yes I want to let it all in and find a way to make it work”.
  • I think there are other people who this scares the tim-tams out of them.

Question Stop 1.

  • Is it right that we INSIST on integrating everything, finding a way through this mess, and NOT address the fear of the folks who are scared tim-tam-less?
  • Is it even possible to go back to the previous world, with less interactions?
  • Is it possible to at least not welcome the interactions?

Setup 2.

  • Conjecture, {Reason A} is, in all the new opportunity that the more integrated world has presented, or perhaps by some other mechanism, wealth has polarized (the 99% thing).
  • Conjecture, that there are people/entities whose desire/goal is continued acquisition of power, wealth, ownership, control (? this is shaken up below)
  • Conjecture, it is very useful for said people/entities to have a scared population, one that is not seeking smooth integration of the world.  Thus, they focus on a set of fears of that population, as well as reinforce “and here’s how you can live your life in safety”.

Question Stop 2.

  • Is it possible that the conjectured entities/people mentioned in Setup 2, might be altruistic?  They truly believe that a less-integrated world is possible and desirable, where strong borders are the way to go, and that truly is better?

This is where my bias definitely comes in.  My bias says no.  They can’t be that naïve.    I have not found one of these people to talk to directly, honestly, and so I have no way of working my way out of that bias.

Level Set What I think is happening.

Camp 1:

  • The world is a dynamic crazy place
  • We are but one entity in a sea of other entities, but we have lots of leverage
  • Do our part in the world, as part of the world.
  • our system:
    • Try to get faulty parts of our system up to snuff to match the existing working systems in the world.
    • our system mostly works, just need to leverage/use it more
  • Make room for all at the table.
  • Our culture is in need of updating to handle the new world.
  • No God statements are necessary.

Camp 2:

  • The world is a really crazy unsafe place
  • We are a strong entity and can withstand the world, but stop making it easy for them to attack us.
  • We need to protect our stance, remove our direct enemies and obstacles, and thrive.
  • Make sure we have enough to eat.
  • Our culture is proven, strong, and works.
  • Don’t change shit that ain’t broke.
  • Trust that God will take care of us against them.

Where the Heck am I going with this

Every time I try to approach Camp 2, to really feel it, to be a part of it, I get stalled.  I can’t do it.   I’ve been exposed to too many people, my world is too big, my world is too complicated, to fit back into Camp 2.

If I try to totally be in Camp 1, I get to a place where its hopeful- and sounds good, but ends up impractical and hopelessly complicated and lots of compromises and.. basically what happens when a person tries to do stuff without spirit involved.   And then shit goes bad, and when shit goes bad, Camp 2 really sounds better.

As best as I can, maybe I can marry them, but adding my own opinions to the mix:

  • The world is a crazy dynamic place, full of clashing cultures, opinions, and also dangers.
    • Staying better half of average of the world does not have to involve pushing somebody else down.
    • But we do need boundaries on what we’re willing to give and what we’re not, and what we’re willing to accept.
    • If we have it and can give it safely, then give it.
    • But don’t ignore self, expense self, in favor of others.
  • There are many entities in the world
    • Some of them don’t like this new world at all, and would rather we didn’t exist because it makes their lives better.
    • Some are just trying to make themselves better.  If we can, we can help them.

Then, I start to run into opposites that don’t seem to be marry-able.

Take for example:

  • Is the old way of doing things (“Safe Again”, “Great Again”) even feasible?
  • I am reminded of a pack of dogs, and the biggest, meanest dog, is the leader.
    • Is that who we want to be?
    • Is it genetics, biology, the way it is, that there has to be a few big mean dogs, and if we’re not one of them, we’re bantha-fuddu?
    • Is it a myth that we can all get along peacefully without warring?
    • What is human- or animal- nature?
    • What is Spirit-nature?

So it seems the practical human- or animal- nature thing would be, to be the biggest dog and be secure.  Yet it seems the spirit-nature thing would be to transcend that, and love thy neighbor, love thy enemy, etc.

Another example.

  • Do we have enough to eat?
  • Not the best question.  we do have enough food, but maybe more like, do we earn livable wages?
    • I earn a livable wage, I think, but I’m lucky.
    • I’m watching my kid try to earn a livable wage, and its very hard.  If he didn’t have previous-generation-assistance, he could not make ends meet, not without extreme cost-sharing (lots of roommates), two jobs, etc.
    • What the heck is going on here?
    • I suspect there’s a zone of wealth-distribution that works well for most.  If you go too polarized, it doesn’t work so well. Ref: The Spirit Level
      • However, historically, much-more-polarized wealth distribution was norm. Think Downton Abbey.   And how did that de-polarize?
      • “Modern Society” is a very young experiment, relatively speaking.  Middle-Class, etc.
      • It might be that as modern society fails, several folks are basically saying “f-ck it, i’m going to win, I don’t care who it hurts”.
      • Or it might be a correcting pendulum.  From polarized- to distributed, and then the human urge/need to polarize comes back, and it swings back to polarized, and eventually it will swing back again.  maybe.
  • Which camp?
    • I think I’m in the “things are broke inside and they need intervention to fix” camp.
    • Not the “trust the system, its fine” camp.  Its clearly not fine.

The “God” one.

  • This one irks me. For “Our God” to protect us against “Them”, that means that “Our God” is against “Them”?
  • I can NOT draw a circle to exclude them.   They are Spirit’s children too.
  • It really PISSES me off, to see {politicians/marketeers/people-programmers} manipulate people by manipulating concepts related to God/Spirit.

I don’t know where I’m going with this.

  • I’m sad in that I perceive people being taken advantage of, programmed.
  • I’m sad in that the human condition seems to lend itself to a focus on scarcity and survival-of-the-fittest.  (I’m not that fit)
  • I’m glad that there are others who seem to see the same issues as I do.  Sadly, I don’t think any are left represented in this current race.

Yeah, I don’t know diddly.

Good luck, world, I’m going to go nap now.  I hope we survive.


PS: If T does win, I think it’ll be okay.  I think he’s very good at understanding people and manipulating things for a particular benefit.  And I think that if he can make himself look good on the world stage, that will actually be just fine for the United States.   And, it will give those folks in the states who are scared, a sense of relief.  Perhaps the relief will be real, and us high-browed intellectuals will get to learn something, or the relief will be quickly broken, and the folks who thought that was a way to get relief will learn something.  Either way, somebody learns something.   And all the stuff that he’s said he’ll do .. build a wall, lock her down, etc – I suspect a lot of that will be just like UKIP when they won the vote — Oh, no, I didn’t say that, that’s not what I meant, it was misrepresented, etc.  Won’t be that radical.  Don’t buy the marketing message folks, its not reality.

PS: If C does win, I have no clue. I don’t have a feel for her.  Whatever marketing campaign it is she’s running, it falls flat on me.  No spirit involved.  I trust that she’s relatively effective at the jobs given to her, she has no fear of taking on a job to big (and doing the best possible at it)

PS: I miss B.   And I will miss O.  I’ve watched the heck out of him, and he’s been very consistent.  And all the hatred that’s levelled at him – I can see the marketing roots of messages planted.   I hope O sticks around on the world stage, the world needs him. However, he’s definitely a Camp-1 person, with little regard for those who need Camp-2.

Idea! Camp 3.

  • The world is a crazy, dynamic place, as Spirit intended.
  • We have grown into the world faster than we were ready to, and we’re lost and hurting and grabbing for whatever we can and consuming whatever we can in a daze.
  • Universe/Spirit has a plan, and that plan does not end in hatred and death, but rather in love and creativity and productivity.
    • Spirit, please guide us in stepping back our outward concerns, to take care of inner ones.
    • Spirit, please guide us in loving one another.
    • Spirit, please guide us in calming those who are hysterically afraid.
    • Spirit, please guide us in tough love – letting those who are not walking in spirit, have the consequences of their actions, not enabling them.
    • Spirit, please guide us in letting go our consumption-at-the-expense-of-all.

Good enough, that’s positive in my book.  I’ll wrap it up now.

PPS: 12 Traditions as applied to countries?  just sayin’.









Posted in Life

Balance, Money, Nutrition, Time



I got tired of looking at the top half of my stomach.     So, for this week at least:

  • I had my wife change my Facebook password.  BOOM instant 2.5-5 hours of life available.
    • Although, perhaps not.  Might be substituting it with reading twitter and http://Louisville.io slack.
  • I’m trying to stay away from Youtube, with the self-promise of “I’ll look at it on Friday”.   Probably another 4 hours a week.
  • Trying to get a walk in with the dog whenever possible.   2 so far, about 2.2 miles each.   Maybe a little jogging.
    • I was able to jog 1 mile at 145HR, about 13mins/mile, slightly downhill, yesterday.
  • Changing nutrition routines (one day so far, going on day two):
    • Day-start = water + bulletproof coffee, to avoid insulin spike, stay in (overnight) fat-burning longer.
    • When hunger re-hits, then a semi-healthy protein shake (made with some milk, so the carbs start to come in at this point).   This seems to be about 11am.
    • “Normal” food after that, when the hunger hits, seems to be about 2pm.
    • Any time I order something, try to split it in two / make two meals of it.    Eat the other one later.   Even if its 2-3 hours later.
  • I am not capturing nutrition info (yet).    Too much time load.
  • I have a standing swim-time with my father-in-law on Wednesdays.
    • I’m hoping to double that up with some Gym time on Wednesday mornings.
    • Ie, light-work-day, more self-care-day, in the middle of the week.


I just went from trial- to paid- on http://YouNeedABudget.com.   It took some getting used to, but.. it works well (for me).  And, it has spouse-approval (to a certain extent), and spouse-involvement (the best part).    There are some things I wish:

  • I wish it could do budgets over 2 week periods.
  • I wish i could select a proposed transaction, a imported bank transaction, and say: “Hey you these were the same thing”.  It doesn’t match them unless they’re exact.
  • I wish i could trigger the bank import from the mobile app.

That’s it.  Otherwise, its a nice, FAST, friction-free environment to get .. not a handle.. but a balloon, on spending.  Its like Dave Ramsey’s cash envelopes, except digital.

Thanks to @waywardmage for the infectious enthusiasm.

Client Distribution

I once again find myself in the position where I have two clients for whom to do work.  In order to keep focus-ability, I’m forcing myself to reserve time for them ahead of time – like, “next week Tuesday i’ll devote to Client 1”.  This removes the anxiety of “am I doing the right thing” (as I do not have somebody above me, i have to be self-sufficient in context switching and priority setting).    Today is a beautiful day of coding for Client 1 (for the morning, with a clear priority list of tasks), and then some meetings, and then some Client 2 in the afternoon (new project, discovery / design phase, exciting stuff).

Of course if things are on fire, then things are on fire and that’s different.

House Things

  • We just got our garage cleaned out and organized!    YES!
  • Next up is a bathroom upstairs that needs re-done.  Or, there’s several rooms that need painting.
  • There’s a video security system that I need to take down, to give to my son, who would want it more than me.
  • I’m planning on devoting 3 evenings a week to house stuff for the month of August.

 Pet Projects / Folders

Derek Sivers (good egg) has a post that makes sense to me:  Possible Futures.

So, i have folders for the following projects, in terms of approximate sparkly- order:

  • A series of blog entries on testing.  I know a lot about testing, seems like more than most developers, and perhaps I should share it, and maybe cross-ref it against current testing literature out there, and maybe learn something.
  • Some day.. some day.. i’ll convert my car tracks into a nice 3-D sculpture.   I think about this when I commute.  I have a choice of about 4 routes, all of which seem about even.
  • I need to get rid of my 3D printer and supplies.   Psychic weight.  Anybody want them?  Needs a bit of work, i have all the replacement parts.
  • I want to get more Phillips Hue lights and set them up, however, not-wife-approved at the moment.
  • Get my twit-sort.com back online.   I miss it.
  • Tweak my space-game code.  I would love to get it to navigate from one space port to another, with gravity enabled, and possibly a little autopilot.

These projects have fallen off the shelf, and probably won’t get put back on.

  • Front camera for my prius.
  • Will I ever play more Elite Dangerous?
  • Will I ever play more American Truck Simulator?

So, if you don’t hear much from me on this blog, well, that’s what I’m up to.    I tend to write blog articles when a) my life slows down, or b) my life is so fast that I need to level-set myself by writing about it.   This one is part of the latter.





Posted in Life

Latest Round of Harvesting Car-Tracks


In the past, I used Android – Torque, and an upload to Dropbox, to gather car-tracks.

I’ve started up that project again – this post focuses on my solution for gathering car-tracks for later processing.



I got a Samsung Galaxy Note Tablet used, and I’ve stuck it in the glove compartment of my car.  Its plugged in to power, but power only runs when the car is turned on.  Click on image to zoom.

I use automate-it to run a few rules:

  • When power goes off, go into airplane mode.
  • When power comes on, turn off airplane mode, and start MyCarTracks

This seems to work as long as I drive a good amount each day. Then again, when I went to write this blog post, I found the tablet powered completely off – not enough charging?  temperamental battery?   Looks like not enough charging is the culprit.

It would be awesome to completely shut down the tablet when power is lost, and then power on when power is applied; however, I’d have to jailbreak to get that, and my 15 minutes at attempting to jailbreak, didn’t work, so, meh. 


imageI could totally get by with the free version of MyCarTracks.  Its an excellent product!  It has these features which I use:

  • Auto-record car tracks – after you reach 6 miles per hour
  • Auto-stop recording car tracks – when still for 5 minutes.

I can then get access to my tracks via an “Export All” feature, which will let me export to CSV, GPX, or KML.  GPX is the winner for me:

<?xml version=”1.0″ encoding=”ISO-8859-1″
<?xml-stylesheet type=”text/xsl” href=”details.xsl”?>
xmlns:topografix=”http://www.topografix.com/GPX/Private/TopoGrafix/0/1″ xsi:schemaLocation=”http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/Private/TopoGrafix/0/1 http://www.topografix.com/GPX/Private/TopoGrafix/0/1/topografix.xsd”>
<name><![CDATA[2015-04-15 19:52]]></name>
<trkpt lat=”38.242019″ lon=”-85.72378″>
<trkpt lat=”38.241821″ lon=”-85.723613″>
<trkpt lat=”38.241649″ lon=”-85.723491″>


But Wait There’s More!

imageI went ahead and paid them $16 for a 1-year service for a small fleet, which gives me access to my tracks online (up to 2 years old) for quick viewing.   In order to make this happen, I sometimes hook up the tablet to my WIFI and say “synchronize all”.  There’s also an option where I can say “sync between 2 and 3 in the morning”, and I configure automate-it to take airplane mode off from 2-3, however, that’s hit or miss.

Once the tracks are loaded up to MyCarTracks.Com, I can browse them on a pretty nice map.  (picture at the top of the post).

What’s Next

My intention is to load these GPX’s into a small sql-server database, using Spatial (Points), and then come up with little data sets of “here’s all the tracks that passed through these two points”, etc.

I then want to take those tracks and convert them to a 3-D rendering with Z-axis = time, to compare various paths with each other.   

And I want to convert that into a 3-D sculpture.   Because, art.   My art.   Representation, archival – these I love.

But, one thing at a time.  I’m always welcome to shelf my projects; I only work on them when they are attracting my soul.  Might be a bit before I get there.  I do have a start on the gpx-parsing code, though: https://github.com/sunnywiz/cartracks2016

Tagged with: ,
Posted in Code, Vehicles