Tree of Direction == Claws of Doom

https://github.com/sunnywiz/TreeOfDirection/commit/8058bc3598c189ded425f044bde39528e335d4fd

This was supposed to look pretty, but its not.

image

If I look at the simpler version in an isometric top down view, it might make more sense:

image

This is taking a grid of points on a map, and asking Google for the optimal route from home to that point.  This ends up creating .. I don’t know what to call it.  Its a decision tree, says Lamont .. yes, that’s a good name for it.   It also points out that Google has forgotten that a certain street doesn’t go through, and is incorrectly routing me down Old Henry Rd.

I’ve added something in red .. its the boundaries between “neighborhoods”.    Also note that 3 routes almost touch where my current work is, which is why there’s so much indecision about the “best” route to work.  Whereas, if you’re in the middle of a particular neighborhood, then there’s little choice.   This says the best way for me to get to the new work place will be 146->HurstBourne.

I think this is better done staying as  a 2D print.   I might need to learn.. PdfKit?   Something to generate PDF’s with.  I can get a poster-sized PDF printed for $5 via Office Max.     However, what I might do is overlay a few maps .. like “with heavy traffic” vs “without”, with transparency.   And a lot more detail.

I did learn a lot about using Google’s Directions API.   Very nice.  Polylines are pretty amazing – took a small string and it decoded into 22 points!!!   https://developers.google.com/maps/documentation/utilities/polylinealgorithm.

More to follow, I’m sure.

Tagged with:
Posted in 3D, Code

Commute, 3D Print: 2/3 gathering tracks, prototype

imageI should have written this a few weeks ago when this was fresh … but time has moved on.  I can’t pretend. 

Easiest way through it:

a) I did a prototype.  You can see a video of it .. pictures don’t do it justice .. at the following links:

https://www.instagram.com/p/BT-A9yrhNCv/

https://www.instagram.com/p/BT-BWXphF5I/

b) I used an Android program called “MyCarTracks” to then record my tracks.   I specifically used these options:

  • Autorecord – when turned on, mycartracks starts on boot and can be set up to start recording when the car starts moving.  This prunes out the GPS points when your car is on, but not moving yet.
  • It has the option of “don’t record a point till you’ve moved N*precision feet”, which gets rid of Jitter.  side effect though is time at stoplights ends up looking angular rather than vertical.
  • It allows track naming during or after the trip, to make it easier to identify tracks.
  • It allows export to CSV on the SD card; you don’t have to use their online service.

I tried to do the following routes – if Google Maps will let me:

image

It took several mornings – I had to go straight there, and NOT stop at Starbucks.   That can be hard, sometimes.   I also wanted to get it around 8am, during commute hours – mostly successful. 

c) I put all these maps together into my program, and …  ran into a problem.  Somehow, the code that writes out to a .STL file seems to stop at 32k.   So, I had to rejigger the code a bunch ..   I also changed it so that all the tracks would END “top-justified” at work, so that the shortest track was on top. 

image

d) And then it was time to stop.   I could have futzed with it forever ..   So, gulped, uploaded my image, ordered it printed.  And immediately:

imagee) Buyer’s regret.  Turns out I could have gotten it printed for significantly less money!   I found http://3dprintingpricecheck.com/  which led me to https://www.makexyz.com which supposedly would have printed my thing in resin for $27.90.    However, the dimensions .. maybe that’s smaller. 

So I called it “a learning experience”, and let it go, archived the project, and started a new one.

All the code is at http://github.com/sunnywiz/commute3d.  Including the final .STL (and most of the intermediate ones as well) and my GPS logs.

I’ll post some more pics and video when the print arrives.

Tagged with: , ,
Posted in 3D

Commute 3D print: 1/3: nodejs, openjscad, vscode

I have had a project in my brain for a long time – I think I first mentioned it in 2013*

The problem is, it wouldn’t go away.  It started to .. stink.  In my mind, stale, and stinking, and in my mind.   It had to be done.

The gist of the project is:

  • Take several ways of driving to work
  • Plot them out in 3D space with Time on the Z-Axis, in a virtual race as it were
  • Should be able to see things like stoplights show up as vertical bars

Well, I got tired of thinking about it, decided to do it.  I was spurred on by finding out that “jscad”, which I had known as openjscad.org, was now available as a node module — https://www.npmjs.com/package/jscad.  Okay, lets do this!

* Here’s a first reference: Car Stats: Boogers! Foiled!  1/11/2013  … There’s a few other posts just prior where I had been plotting interesting things from car track data, using powershell.

The implementation details

image

The above screenshot shows a sample output with some initial tracks, but .. they are the wrong tracks.  I’ll be recording the correct tracks later.

  • I created a “Base” for the sculpture by also drawing all the tracks along Z=0, but a little bit wider.
  • I made it a bit more stable by putting a “Pillar” up to the other end of the track, so its supported.

Code at: https://github.com/sunnywiz/commute3d .. the version as of 4/29/2017 11:57pm should be runnable to give the above output.

image

It took me probably 12 hours spread over 3 days …  here are some of the things I learned along the way:

chocolatey install nodejs

I’ve taken to using chocolatey to install windows packages so I don’t have to go hunt things down on the internet.   Most of my machines have it, its part of me setting up the machine.

I could totally install nodejs via chocolatey – and once installed, that gave me npm.

image

The command line, btw, would be:   cinst –y nodejs

npm init

This bit will seem silly to people who’ve been using it for a while, but these were the walls I had to hit.

image

Can’t npm install a package (everybody says “run this command” – it doesnt work) … until you’ve first “npm init” started a project.  I was thinking it was like CPAN where you added a package to a central repo and it was available, but nope, its more like “local depdency per project” more like nuget.  Makes sense, my CPAN (Perl) was was from 1998 and the world has changed since then.

node is awesome

It feels like the days of Perl way back.   Need something?  There’s a library.  Install it, use it, move on, solve the problem.  

VSCode is awesome

image

Editing and debugging is a LOT easier if you use an appropriate developer environment.  I tried vscode, and much to my surprise, I found it could:

  • Edit with intellisense (I knew this, but didn’t realize how fast it was)
  • Debug!  Watch!  Inspect!  OMG!   Very similar to Chrome Dev Tools.
  • Integrated terminal
  • Integrated git awareness and commits and pushes
  • Split screen yadda yadda
  • Very Nice.

nodejs asynchronous can be a learning curve

Take these two bits of code:

image

image

The first problem I had was that It would go to read all the tracks in … asynchronously.  I didn’t have a way to wait till all the tracks were read before it continued on to doing something with the tracks.

That lead me to some confusing code using “Promises.map”.  Then I found out that, most folks do const Promises = require(‘bluebird’)!    There’s a library that makes things easier.

So, if you’re not aware, and explaining to my future self:

  • Call readtracks .. its an async call
  • It returns a promise.
  • the implementation of readtracks eventually either calls resolve or reject (in my case, resolve).
  • At that point, the promise’s “then” clause gets run.
  • the glob … function (er, files)  is a “normal” nodejs callback strategy at the level below promises .. doesn’t rely on promises, its doing a directly specified callback.
  • the bluebird.map() basically does a foreach() on files, for each one, runs filename through a function, takes the result of that function, sticks it in an array.  It does this in a promise…
  • … which when its done with all the things, then calls resolve
  • the text fileName => readTrack(fileName) is the same as function(fileName) { return readTrack(fileName) }.
  • when you have promises, there’s a way of writing them out using “async” and “await”.    I didn’t try that.
  • the .then(resolve) is the same as .then(function( x ) { resolve(x); } )

The other beginner mistake that I kept making – I would forget to say “new” when I meant to create a new object.  Smile 

So I want to join two points in 3d space with a beam

I spent an embarrassingly long time trying to figure out how to take a cube, and scale it and rotate it and transform it so it acts as a beam between (x1,y1,z1) and (x2,y2,z2).

The answer is: 

image

The resolution:4 gives it four edges.

I need to view .STL files on my machine

3D Builder is a windows program that would let me do it, but it hung sometimes.

The easier route was to drag the model over to http://www.viewstl.com/  (which is what I did for the screenshot with this blog post).

Netfabb got Bought Out

Once upon a time, I found some really nice software .. which I thought I liked enough to give them real money.   Looking back, I cant find a record of giving them money… I guess I intended to at one point.

In the time that I haven’t been doing 3D printing, apparently AutoDesk bought them out, and.. the new cost is $125 PER MONTH.  Uh, no.   While researching for this blog post, I did manage to find a binary of the old netfabb Studio Basic, so I snagged that.   I saved my emails with the keys that I had used to activate it in the past, and those seemed to work, so Yay!

CSG Unioning of 1000+ things takes a long time

I also discovered console.time() while benching this.

When running the program, I end up with a bunch of CSG’s, but they’re all intersecting.  I need to merge them together to get a printable thing.

That code, when run for a larger print (100 tracks), took all of 18 hours to do the merging.  That was … too much.   So, I tried to write a program to make the merging easier.

1029 items (spheres, cylinders, boxes) unioned together, NO DEBUGGER, yielding a CSG with 11935 polygons:

  • If I union them in a for loop one after the other
    • 34 minutes!
    • It gets slower over time.
    • there’s a O(N^2) probably that happens under the hood – it has to re-consider the same shape over and over as it tries to add new shapes.
  • If I union them using a binary tree tactic:
    • 42 seconds!!!
  • The actual numbers:
    • image
  • There’s probably libraries out there that specializing in union arrays of CSGs, rather than two objects at a time.   Maybe I’ll upgrade at some point.

image

Note that if I upload the non-unioned version to somebody like sculpteo, they have an “auto-fixer” tool that fixes things pretty quickly, this is not absolutely necessary.  Just .. feels mathematically clean to do it.

I did try to write the above fancyUnion using promises, but .. didn’t help.  Node still only uses one thread, it did not branch out to multithreading. 

3 Major sources of Documentation for jscad / openjscad / csg:

Conclusion

Code is written!   

I’m going to hopefully get some tracks recorded over this week.

I’ll make another post of how the printing process goes with the real sculpture.

Tagged with: , , , ,
Posted in Code

Its been forever.. here, lets watch some ice melt.

One of my gifts to our life was a GE Opal Nugget Ice Maker.    

I was curious how stale the Ice could get.   So I timelapsed it.  Here it is, from about 6am to about 11pm:

 

My guess is that its loosing maybe 1/3 volume in about 12 hours.  So maybe 36 hours for a full refresh of ice?

 

In other news:

  • I finished up a session with Code Louisville .. several unlisted videos from that.   May make them public in the future.
  • I’ve transitioned over to covering maintenance tasks at work – and figuring out my tooling for capturing that flow:

image

  • I’m also trying out using a google group in “shared inbox” mode to capture requirements naturally from emails
  • I’ve got a zapier zap for converting emails into cards on the above board.
  • I ran more than 2 miles for the first time in 2 years or so!
  • We as a family tried to go without an internet connection at home, and we only lasted about 2 weeks.

I’m hoping that my schedule has cleared up a bit..

  • At first, I barely had time to take care of just the emergencies, I had left myself no time to breathe with all my projects / commitments
  • Now, the last 3 nights, I’ve had options of what to do with my time.. and I’ve mostly been catching up, decompressing, regaining my humanity
  • I’m promising NOTHING (that’s how I get into trouble), but just writing this blog post .. feels like I’m coming back to an equilibrium of some sort.
Tagged with: ,
Posted in Life, science

3D Fractals via Mandelbulber

I was scanning recommended videos on Youtube when I came across this one:

 

I had to see this.  It was amazing.  I was hooked.  I had to find more. 

That led me to this program: https://sourceforge.net/projects/mandelbulber/files/Mandelbulber%20v2/win64%20build/

Which I then ran, and tinkered with.  Result:  I rendered two/three desktop backgrounds for myself.

orange fern brushed metal
brushed metal-aliased  

At 2560×1080, the first two took about 15 minutes.  The third one, which looks like the second one, was actually rendered at 5120×2160, and then scaled down to 2560×1080 (simulating an anti-aliasing of 2x).   However, it .. came out different:

image

image

There are more holes, in the one with higher resolution.

This is because

a) Mandelbulber dynamically scales fractal complexity as it raytraces, and

b) the model that I chose, i chose one with “negative scale”, which I think means, the fractal works by taking chunks out of space rather than by adding chunks into space. 

I gave up at this point.  There’s an unlimited investigation that could happen, and my curiosity had been satisfied.  I could make desktop wallpapers of any resolution.. but I’d need to search for something cool to take a picture of.  And there’s so many variables.

I did find another VR flythrough, albeit i have no VR goggles, so someday I want to see this in stereoscopic:

 

Be aware there’s a lot of material editing stuff that you can do as well – which can be a bit hard if you haven’t dealt with materials (specular, texture, etc) before.   Oh, and dynamic volumetric fog – lots of computation even at 320×200.    Like I said, unlimited time could be spent…

Or you can oogle these:

http://www.mandelbulber.com/gallery_page1.php

image

(screenshotted so you can see how beautiful before deciding to click the link).

Tagged with:
Posted in 3D, science

Inventory of Projects

I’ve been meaning, for a while, to put together a spreadsheet of the (software) projects I’ve worked on in my life so far.   The sheer number of them is staggering.

The thought was I could put in enough columns so that .. an interesting taxonomy could emerge. 

Its also one of those things where, I never thought the list would get so large that I couldn’t remember them, but.. here I am.  I guess 26 years of paid experience will do that to a person.

I Started It

I tried to do that for a bit – here’s what I got:

https://docs.google.com/spreadsheets/d/19ivowzqQJiPrMVk8rAfHbZ-cf_G6tqmQAzqYIW1sc00/edit#gid=0

image

The columns I have so far are:

  • Name
  • Year(s) – turns out some of them extended over multiple years.
  • Employed by + Project For – working at igNew, my project was for a client other than my employer.  But before that, these were the same.
  • Implementation Details – this was pretty hard, to figure out what columns to use:
    • Language – Its mostly C#, but if I go back far enough there’s some Java, Perl, Clipper, etc as well.
    • UI – technologies related to UI stuff
    • DB Backend – technologies related to database stuff
    • Host Platforms – I was trying to figure out how to say Asp.Net MVC vs a Windows Service.
    • Additional Technologies – I think maybe EF + Dapper need to move to DB column
  • Management Details
    • SCM used.. this feels like an unnecessary column, who would ever want this info?
    • Unit Testing / Mock framework – if sorted by start year, can see how this becomes important
    • Integration Testing – as I think this is super important, putting it out in its own column.
    • CI/Build strategy – or lack of it – how we went about running the project
  • Project Management Details
    • Roles
      • Engineer = “thought about how to do it” + “did it”
      • Lead Engineer = “mostly all me”
      • Project Manger = “updating the Burndown” + “Communicating estimates + schedule”
      • Ops Support = “things broke in Prod.  Figure it out.”
    • Slices  – If I worked with a team of people, then these are the bits that I worked on.
    • Proud Of – this is probably the best part of looking back.
    • Coworkers + Contacts – I’m going to have to go look up many names for Contacts.

What Now?

There are so many projects!   I put down 11 tonight,  I think the list of paid things is..  probably in the 40’s? 1-3 per year, depending on role, and then add in another 30-40 of fun things?

I guess I could make a list of all the projects I could think of first .. vertically .. going through each Job.

I could (and will!) also add in all the for-fun projects that I’ve done.  

But Why?

Simply put, this is to battle Imposter syndrome.   Also, in my job, I’m undergoing a role shift – where I’m taking on more Ops and Maintenance type work – it feels like a good time to look back at my career as a software developer and take some stock of what I’ve accomplished so far.

The other part of it is, … my resume.  I don’t need one at the moment, but every time people talk about keeping a resume updated … the level of detail involved … gives me anxiety.  So the thought is, if I have this spreadsheet out there – my resume can become more of “who I am” and “what I care about” and shove all the detail crap to this spreadsheet.

Tagged with:
Posted in Code, Life

Updates to twit-sort

I am currently on vacation!  In Florida!  We drove!

I took the opportunity (in the early mornings / late nights when everybody else is asleep) to work on some code that I wanted to update – I don’t normally get time to do this.   Its my twitter-reading app.   Which only I use.  But hey, that’s fine, I haven’t tried to market it.

Changes

Change #1:  I kept seeing “…” with truncated tweets.  A little research led to some interesting stuff — basically following retweets to get down to the original tweet to get the text from there.

Along the way I tried to build up a “who quoted who” breadcrumb:

image

The code is a bit wonky:

image

However, its confusing – many people (or clients) retweet without actually having a retweet link.  There’s “quoting” which is different ..  eh. whatever.  If I’m given it via the API, passing it through, figure it out later.

Change #2: I surfaced the like count and favorite count, as well as a link per tweet to open the tweet in its own window (as hosted by twitter). 

image

Complications

I have the code in github, which is public, and I don’t want my access keys and tokens and stuff checked in there.   So, I had to fudge around a bit – this was my solution:

image

  • I created a branch with all the passwords and stuff, and worked from there.
  • Once it was done, I either did a rebase (with cherry picking) or a direct cherry pick to move commits over to master, which I pushed up.

Granted I could use my azure visual studio hosted git, but I wanted the code to be visible / usable.  So.. if anybody has other ideas of how to do this better, please let me know.

What Next (with this project)

Not much else I can do with this in its current codebase.  I could certainly make it prettier, but .. eh, that’s not me.

If I had unlimited time, I’d rewrite it – make it so it did all its fetching and filtering and sorting locally (in javascript).  I could get a LOT fancier then – things like pulling out hashtags into groups, etc.  Maybe adding some sentiment analysis things.

However, I have so many other projects on the burner.. this one won’t make it for a while.  My need has been solved, so there’s very itch here to scratch.

The url of the site:   http://twit-sort.azurewebsites.net

The code: https://github.com/sunnywiz/twit-sort

Tagged with: , ,
Posted in Code
Categories
Tags
.net 3d 3d-printing 4k abc15 algorithms ames android anonymous types asp.net audio editing backup basecamp beatunes biorhythm bittorrent blender blog boston marathon bpm c# caffeine campfire candycrush car carmax charity chiropractor cities-skylines clog clone codelouisville codepalousa coding coffee collaboration color run ComputerElbow ComputerVision configuration consulting cooking crash course crashplan crestwood dabda dan dapper DataSet ddl diabetes dictation dotnetmud downtown e-cycling elite excel exercise expiration facebook feature-branching firefall flipflops Flow FL Studio focus food fortresscraft franklinplanner gadgets game-design games git github google docs google maps gopro gps grandpa greenshot hack half marathon headless health heart rate hiren ignew integration testing interop inventory ios ipad itunes javascript jobs karma kdf keyboards keys kittens lamont laptop lavalamp lego life lifehack linq linqtotwitter los angeles louisville mandelbulber massage therapy mastery-teaching maths merge metformin Minecraft miniature modeling monitor mud muhammad ali institute music mvc mycartracks netfabb nexus10 node nostalgia nutrition oldham county grand slam opal openjscad openscad owin pacedj paper mockup pepakura performance photoscan politics pomodoro postgresql powershell premiere prius process product-management project-management qa resharper review rmi roman road 5k RSI rubiks running samsung 700t sandals schedule scooter scribblelive selenium service shapeways sleep slic3r sneakersync snot software software-engineering solidoodle soylent spacegame speaking sql sqlite SSDT SSIS standing state-machine stayfocusd stonehearth sunset tablet teaching team teamcity teamtreehouse testing tfs time timelapse torque touch tracks trs80 Tuple tutor twitter ubuntu unit testing utilities video video editing visual studio vscode vsvim warp stabilizer windows 8 windows home server wordpress wpf xml
Archives