mattsanders
Instead of hard coding your hierarchy into the structure of XML or JSON. Define some basic type information (unique id and node type).
If you have situations where an object can be referenced before it is defined simply make a proxy loading type that listens for it to load.
After that it is a cakewalk:
[
{
id: "UUID OR Rolling Number Per File OR DB Index OR ...",
type: "business",
name: "Dunder Mifflin Paper Company, Inc."
description: "look at me I can be a root type for the graph OR one of many!"
offices: [
list of ids of objects of type "office" or object that wraps this with other metadata (relation object)
]
},
... potentially other business entries,
{
id: see above...
type: "office",
name: "Scranton Branch",
description: "This can describe each branch"
departments: [
list of ids of objects of type "department" or object that wraps this with other metadata
]
},
... other offices,
{
id: see above...,
type: "department",
name: "sales",
members: [
list of ids of objects of type "employee" or object that wraps this with other metadata
]
},
... other departments,
{
id: see above...,
type: "employee",
title: "manager",
name: "Michael Scott",
reports: [
list of ids of objects of type "employee" or object that wraps this with other metadata
]
},
{
id: see above...,
type: "employee",
title: "sales man",
name: "Dwight Schrute",
reports: [
id of self since Dwight needs someone he can trust,
{
id: see above...,
type: "report_meta",
reportee: id of Pam,
visibility: "secret"
}
]
},
... other employees,
etc.,
etc.
]I definitely find that routine helps, but over time, with discipline, you can adapt to different environments. The most important thing for me is my work system... not so much my work space.
I work on everything from full stack web, low level hardware and electronics, VR/AR, cloud infrastructure and database administration, video games, iOS/Android native, etc. I need something that is portable, powerful, and easily cross platform.
My latest system is a macbook pro with 32GB Ram and an external eGPU graphics card for VR development. I run Parallels as my primary VM allowing me to run a Bootcamp Windows partition as a VM. It is also the only solution that currently supports Metal for graphics intensive applications. I rarely need to hookup the headset, but when I do I can boot to Windows natively for that. I can do native iOS and Android easily from the mac OSX partition. I even run Ubuntu on the VM for testing server setups locally.
When I am home I work from just about any room with my laptop stand, however, in order to ZONE I do need to find a quite spot while the kids are around (or use headphones). I also often work in coffee shops, book stores, libraries, and grocery stores (those with a food court).
I typically spend the day on my day job and evenings when the kids are down I work on contract work, but for me it just seems like a hobby most of the time anyway.
I have slack and google meet installed on my phone and have my calendar and emails synced with my work accounts.
I LOVE GIT! I use git for all of my consulting and side projects and even when a client or day job uses perforce I can use git-p4 to create a much better offline flow.
I know this isn't for everyone and I have deviated in many cases from the points in the article, but it definitely has been working well for my life style thus far.