You are reading content from Scuttlebutt
@kieran %M6igs/cQA87pIoJ/+WeDXsS592UH1h9YKJ3xRnG9BGo=.sha256

dev-diary/kieran

Drawing together all my previous dev diary entires into an actual dev diary (i.e. a single thread), since I've been struck for time prior to now and my contributions have been more targeted and organisationally wanting. Here's a collection of backlinks!

week 1:

week 2:

week 3:

week 4: (holiday)
week 5:

cc: #darkcrystal #dark-crystal #dark-crystal-diaries #mmt

@kieran %nnkcHzSx2Cr6UHFxWfYjKg2n/oH864G269EAIe9fTfw=.sha256

07.12.2018

This week on the Dark Crystal Maze...


Choose your own adventure UI

Following conversations about the UI and interface ideas in weeks 3-5, I began coding some basic views demonstrating the 'choose your own adventure' approach to UI. Opened a PR here.

dark-crystal-index#adventure.png

dark-crystal-new.png


Forward Shards

Implemented the forward shards functionality, to be found in this pull request

dark-crystal-forward#new.png

Realised we'ved missed off the branch reference on the forward schema, which would in theory point back to it's parent shard message. Debatable whether we want this. Open to thoughts. PR open here

Ideally I'd like to merge these two different UI's by the end of this sprint, but this is unlikely to be before Christmas, it may happen over the Christmas period in times when I get the urge to code...

code-goblin-small.jpeg

@dan %b9QMO4h0nu+ug6uxoyYgHlDRUq5i7lTyH5u6HorqtJ0=.sha256
Voted # 07.12.2018 ## This week on the Dark Crystal Maze... --- ## Choose your
@dan %Mpj6IRGA/GWhVSK+rK1lzwxq8VVvyL7+UG29pw1pSII=.sha256
Voted # dev-diary/kieran Drawing together all my previous dev diary entires into
User has not chosen to be hosted publicly
@dan %WcVUbR73gLIcUmFXV9XlEt5AHEhH96baj5he4XQHr4Q=.sha256
Voted whoop! ![dice.gif](&9ZtWL1Ug4axgxHGjIi6nMp8+x4UbsStv8T1sLjbAltI=.sha256)
User has chosen not to be hosted publicly
@kieran %gzCKllc2R0Kw9L2h4sJSG0nxWQrFdJwHOp8DkXmTzlA=.sha256

crystal-maze.jpg

20.12.18 - 21.12.18


This Weeks Changes!

  • Worked together with @peg on Thursday to get the recover.async.recombine working in a neat modal view, showing all forwarded shards for a specific secret. Grouped by secret.

forwards.png


  • Refactored come reused components (such as Secret) and added some styling.

forwarded-secret.png


  • Made amendments to @peg's query to group forwarded secrets by original author

others-crystals.png


  • Reviewed and merged @mix's PR to ssb-schema-validation
  • Merged view-forwards branch into development
  • Published ssb-schema-validation and ssb-dark-crystal-schema to NPM.
  • Tried to publish scuttle-dark-crystal to NPM but was blocked by tests failing remotely (but passing locally? Confusing, didn't have more time to dive in...)

How I felt at the end of the week....

rifraff.gif

@kieran %pqdf1znyeo9yy1LCeG3oeYLXL1Tv6kR3j0NY5J0VhG4=.sha256

In other big news, I have quit my second job (default) and will be committing (going walkaway) once again all my working-life time to Dark Crystal and decentralised projects. Excited for what the new year will hold, bring on 2019!

User has chosen not to be hosted publicly
@mix %CarYN1Bxu+4hbQiZx0A78K9i31ABpakTCLyDPHqEnV4=.sha256

nice work @kieran. With the tests failing I'm not sure if you fixed all the dependencies - there's this card that tracks all that. See you've made a start on it, will have a closer look when back into this : https://trello.com/c/kUknXFuv/67-fix-dependencies-publish-versions-of-tools

@Anders %vD7r8jayLNppHJ0hgssiD0+k0XJDJJMrCzNDFkAktS8=.sha256
Voted In other big news, I have quit my second job (default) and will be committi
User has chosen not to be hosted publicly
@Matt Lorentz (desktop) %/11eUJiW0FMlbVQqKmyX4pTtnlb4tAP9BHQp7IKkVdU=.sha256
Voted In other big news, I have quit my second job (default) and will be committi
@dan %fTzsn2TRdNo5ewnCEXzf/LyLfL8aPgvu12Im5vfr7qs=.sha256
Voted In other big news, I have quit my second job (default) and will be committi
@dan %JVcWPlFFYKzCubNCR8C0c8YoZw8tLlb8YO5SrqhE/n4=.sha256
Voted ![crystal-maze.jpg](&366MrUN7WzpVNIy9pdlv6rvAqnq6FPMioo25/xuRDQQ=.sha256)
@kieran %9Jcy5O+/gr9Ned6V7/RsX3VrAsqAHhZb9A39Y/oH0aU=.sha256

Dependencies were updated correctly, the issue was the tests failing, by the looks of it because it was unboxed messages from some of the fetch tests? Not sure why that passed locally but failed on travis, but there you go. One more PR to merge which resolves a bug I found due to a dud record in my ssb log. Then we should be good to go live.

@kieran %pY0QrG+K/87xdwWprL2U+yJ3mHKZQ+vukG26MWiKh9Q=.sha256

7.1.19 - 11.1.19

  • Merged in @mix's changes to the documentation for ssb-schema-validation.
  • Brought Dark Crystal advisor @aspra up to date on our latest code changes and ideas.
  • Debriefed / reflected on a fruitful idea exchange meetup with @fredd and @aspra from Dyne in Amsterdam
  • Reinitiated contact with Briar. Sadly Michael and I miscommunicated a meeting location and we didn't meet up today. Rescheduling for next week.
  • Assisted @peg with outreach to Whistler
  • Design meeting with @peg and @mix, we floated a set of different methodologies for helping move forward with design through user testing
    • use of narrative devices
    • testing individually
    • testing in groups in a workshop format (community driven design?)
    • filmed testing to enable us to pin-point challenge moments retrospectively.
    • Actioned to get minimum 4-5 people trialling the app in the next couple of weeks and begin to collate feedback.
User has chosen not to be hosted publicly
@kieran %ooUdNgkWIi83Qv10sitkbHreD1zj8zWsJYqUiLbVO/g=.sha256

14.1.19 - 18.1.19

  • Tested Dark Crystal with a close friend, encountered the classic onboarding issues, and exposed some design issues (see %X4qcsxu...). Gave me some great info to re-evaluate how to approach my next user tests.
  • Off to the Agorama Web Jam tomorrow to chat p2p and hopefully will get a chance this weekend to show off Dark Crystal, maybe even get a few folk trying it out :eyes:
  • Met with @mix and @peg to feedback from our user testing and plan for the next
  • Raised some trello tickets following this conversation
  • Met Michael from Briar and discussed feasibility of implementing DC social fabric pattern in their ecosystem.
  • Gobbled up @peg's excellent feasibility study about secp256k1 and began looking at the repos.
  • Raised two issues / enchantments for scuttle-dark-crystal, one of which is being funded by Gitcoin. See Github issue and put my name in the hat to do the work. :tophat:
    • Extract the lib/secrets-wrapper out of scuttle-dark-crystal
    • Create a dark-crystal-secrets repo which includes all our dark crystal crypto magick.
    • Create a dark-crystal-secrets-api for making this crypto code interoperable.

So some p2p user testing, lots of comms, then mostly reading and poking bits of code and seeing what breaks!

User has chosen not to be hosted publicly
@dan %s88oRlV1AJ71NXb32NfkPijrc0MwOwjXRoRn9qxbXPg=.sha256
Voted # 14.1.19 - 18.1.19 * Tested Dark Crystal with a close friend, encountered
@kieran %klLMGKINQx+tkLc+4kraWnUVTQoKYcgEKEsKJN0yAXI=.sha256

21.1.19 - 25.1.19

  • Gitcoin funded Dark Crystal Secrets API
    • Created an express app
    • Test-drove development of API end-points
    • Extract secrets-wrapper into a new package called dark-crystal-secrets
    • Opened PR to scuttle-dark-crystal with updated package
    • Integrate with the relevant functions from dark-crystal-secrets and format JSON responses.
    • Ensure effective error handling and clear responses
  • Had a painful experience rebuilding my computer after it died on me
  • Met Michael from Briar for a first chat about possible integration

28.1.19 - 1.2.19

  • Wrote up feminist principle response
  • Coordinated a day for doing some user-testing of Dark Crystal at Agorama next Wednesday.
  • Emailed Polly about user-testing Dark Crystal with folk from Space4 and Outlandish. Will be visiting the office next Thursday.
  • Extrapolated challenges of inheritance from our past research and brainstorming for upcoming grant applications
  • Wrote up the painful experience of rebuilding my computer
  • Met @glyph for an inspiring #the-local-gossip episode chatting about fungi, remediation, reciprocity and human-fungal ecologies.
  • Organised call with Peg and Raphael from Whistler
  • Organised call with Peg and Michael from Briar
  • Nearly ompleted dark-crystal-secrets-api, a simple JSON API which accesses our secrets-wrapper (now dark-crystal-secrets) and exposes the crypto.
    • Dockerised the express application
    • Wrote swagger docs and gave them some custom DC styling
    • Finished the API tests
    • Published dark-crystal-secrets to NPM.
    • Researching reverse proxy for nginx configuration
  • Worked on nlnet application
User has chosen not to be hosted publicly
@dan %wBIzvpIPnKuqcmeOwBtJupIT2fd7DOWGj2P0YUM3aAw=.sha256
Voted # 21.1.19 - 25.1.19 * [Gitcoin funded Dark Crystal Secrets API](https://git
@kieran %lJdaqMu2vewdKyFaIaSOBTmNG3av6qTVZTiH4WcnSIg=.sha256

4.2.19 - 8.2.19

@dan %5qAKBBvr7HT1mQVrH8Lha8oEGDbMYalvJpelJ7hOvbY=.sha256
Voted # 4.2.19 - 8.2.19 * Completed [dark-crystal-secrets](http://github.com/blo
@kieran %mIIgP1I96Uwi3eDgO9J/Jmn1ZTbCsi+8k9Jb8aYo3Mo=.sha256

11.2.19 - 15.2.19

dark-crystal-settings-edit.png

  • Integrated local peers into patchbay-dark-crystal (little thought for styling yet)
  • Hosted Weekly B call
  • Wrote a DC summary and sent to @mu
@dan %rZivGHK15ZYHgpvg03TblQjUmymFxIuoZJ9oGBvphiA=.sha256
Voted # 11.2.19 - 15.2.19 * Worked on the OTF application * Deployed https://api
@kieran %9MbF6oN3Z2I94I8x6/jl8fASK0JRSkVVt+FDtikospw=.sha256

18.02.19 - 05.03.19

  • Completed OTF concept note and sent on 28.02.19
  • Started learning #cyclejs. Its so elegant!
  • Standardised the modals and buttons across patchbay-dark-crystal so they're all matching size and position respectively.
  • Refactored code to remove dark-crystal-show.js, uses component functions instead of depject pages.
  • Preload { type: about } messages to alert first time users to upload an avatar / give a description

Screenshots from patchbay-dark-crystal

dark-crystal_crystals-index.png

dark-crystal_settings-edit.png


Screenshots from dark-crystal-standalone

  • Made some sketches for a new UI - %7xQFL3W...
  • Ripped hypertabs and patchbay out of dark-crystal-standalone
  • Prototyped a new mobile-first UI based on sketches.

Uses a new project structure:

.
├── app
│   ├── actions
│   │   └── secrets
│   │       └── fetch.js
│   ├── components
│   │   ├── NavBar.js
│   │   ├── NavBar.mcss
│   │   ├── ViewTabs.js
│   │   └── ViewTabs.mcss
│   ├── index.js
│   ├── router
│   │   ├── async
│   │   │   ├── normalise.js
│   │   │   └── router.js
│   │   └── sync
│   │       ├── goBack.js
│   │       ├── goTo.js
│   │       └── routes.js
│   ├── styles
│   │   ├── colours.mcss
│   │   ├── css.js
│   │   ├── main.mcss
│   │   ├── mcss.js
│   │   └── normalise.mcss
│   └── views
│       ├── secrets
│       │   ├── index.js
│       │   ├── index.mcss
│       │   ├── show.js
│       │   └── show.mcss
│       ├── settings
│       │   ├── account
│       │   │   ├── index.js
│       │   │   └── index.mcss
│       │   ├── index.js
│       │   ├── index.mcss
│       │   └── network
│       │       ├── index.js
│       │       └── index.mcss
│       └── shards
├── assets
│   ├── banner.jpeg
│   ├── base.html
│   ├── icon_200x200.png
│   └── icon_660x660.png
├── config.js
├── index.js
├── lib
│   ├── about
│   │   └── html
│   │       ├── avatar.js
│   │       └── avatar.mcss
│   ├── blob
│   │   └── sync
│   │       └── url.js
│   ├── index.js
│   └── sync
│       ├── initialise
│       │   ├── electronState.js
│       │   ├── errorCatcher.js
│       │   ├── settings.js
│       │   ├── styles.js
│       │   └── suggestionCaches.js
│       └── start.js
├── package.json
├── package-lock.json
├── README.md
└── server.js

Actions are setup to execute and cache a query in an observable. For example in the /secrets view, we can execute the query to grab all dark-crystals and build out our dataset. These can individually be passed to the /secrets/${id} view, which uses depject so can access and extra dependencies needed the index view didn't, without having to execute a separate query.

dark-crystal-standalone_secrets-index.png

dark-crystal-standalone_settings-account-edit.png

@kieran %ONbawboWieGdmzPdy8IxSXCbGqAxMZuF7A3Pfh+OWcg=.sha256

Just added a neat little feature that enables the router to render different layout templates depending.

// app/router/sync/routes.js
exports.create = (api) => {
  return nest('router.sync.routes', (acc = []) => {
    const { secrets, settings, layouts } = api.app.views

    const routes = [
      // if we don't specify a route, it defaults to layouts/index
      [ SecretsIndexPath, { view: secrets.index } ],
      [ SecretsShowPath, { view: secrets.show } ],
      // we specify a different layout...
      [ SettingsIndexPath, { view: settings.account.index, layout: layouts.settings } ],
      [ SettingsAccountIndexPath, { view: settings.account.index, layout: layouts.settings } ],
      [ SettingsNetworkIndexPath, { view: settings.network.index, layout: layouts.settings } ]
    ]

    return [...acc, ...routes]
  })
}

// app/router/async/router.js
exports.create = (api) => {
  function Router () {
    const routes = api.router.sync.routes()

    return (request, cb) => {
      const route = routes.find(([validator]) => validator(request))
      if (route) {
        var { view, layout } = route[1]
        if (!layout) layout = api.app.views.layouts.index
        // create the views together, yield the relevant view as child elements to the layout
        cb(null, layout(request, [ view(request) ]))
      }
    }
  }
}

// app/views/layouts/index.js
exports.create = (api) => {
  return nest('app.views.layouts.index', layoutIndex)

  function layoutIndex (request, children) {
    return h('article', [
      NavBar({
        routeTo: api.router.sync.goTo,
        goBack: api.router.sync.goBack,
        currentPath: request.path
      }),
      ViewTabs([
        { name: 'secrets', routeTo: () => api.router.sync.goTo({ path: `/secrets` }), class: 'active' },
        { name: 'shards', routeTo: () => api.router.sync.goTo({ path: `/shards` }) }
      ]),
      // render the view...
      ...children
    ])
  }
}
@kieran %9TRuVizitdaADPcsszIbXCR5Rf9sDLaH8cUVEXkfFDU=.sha256

Hacked around today with the show page for /secrets too...

dark-crystal-standalone_secrets-show.png

@cryptix %bjErTB6fiJfjBJMj207tglkzdA6W/K4e+mcoBdG1jvE=.sha256
Voted Hacked around today with the show page for `/secrets` too... ![dark-cryst
@dan %mLxDUiCX1BtyvdmUfQa3pygCJkcavXITmyK6pIb/XBY=.sha256
Voted Hacked around today with the show page for `/secrets` too... ![dark-cryst
@dan %9pajl3KjUZ0yt+M1pwdBlknPZ3X744Uly/KdkiLXOco=.sha256
Voted # 18.02.19 - 05.03.19 * Completed OTF concept note and sent on 28.02.19 *
@dan %wqy6VucvPI73lpnHPCz+VOW2ugR//duJRtfLHFIaLd8=.sha256
Voted Just added a neat little feature that enables the router to render differen
@mix %jv0QhVeMqJ73pSxp3VG7ZEAEjNdv3dP7o4r/TovlMy4=.sha256

hey @kieran looking neat. That settings page looks ideal for onboarding. Which branch / repo should I look at to find that?

I was thinking about building that into ssb-ahoy

@kieran %wPIEQ3m/KHH13yvDntS91fX3LTIkjVFZBuLy3+x/zE4=.sha256

@mix thanks! Check out the development branch of dark-crystal-standalone.

@kieran %gi4K78kHWVqYuWymK4BnUEtPqNirsNLaA+dTHiqpZfE=.sha256
Voted hey [@kieran](@MpDd66GPXgN1+eMNrZInHkWq1THMurWwLdMx8BZ1ncw=.ed25519) lookin
@dan %IYpIUbVrQKFWQNOpfsX+XRfgjAArBf42UwzpgJg0DKE=.sha256
Voted hey [@kieran](@MpDd66GPXgN1+eMNrZInHkWq1THMurWwLdMx8BZ1ncw=.ed25519) lookin
@dan %7SQCyBsREkt66IBdcUCBP58bBpBK2uNdCU9jUepAWvw=.sha256
Voted [@mix](@ye+QM09iPcDJD6YvQYjoQc7sLF/IFhmNbEqgdzQo3lQ=.ed25519) thanks! Check
@kieran %i6mVJ3DzcabmtqheUA/ysW7bPo5rGA1Aka8x/1yem8g=.sha256

11.03.19 - 15.03.19


Landing View

dark-crystal-standalone_root-index.png

Secrets Index View

dark-crystal-standalone_secrets-index-1.png

Secrets Show View

dark-crystal-standalone_secrets-show-1.png

Secrets New Views

dark-crystal-standalone_secrets-new-name.png

dark-crystal-standalone_secrets-new-secret.png

dark-crystal-standalone_secrets-new-trust.png

dark-crystal-standalone_secrets-new-submit.png

Peers Show View

dark-crystal-standalone_peers-show.png

Settings Network Index View

dark-crystal-standalone_settings-network-index.png

@dan %y2ndkvfDr6HBvOLHPaqWK2x4sYaydwUcQkk0EX34EOU=.sha256
Voted # 11.03.19 - 15.03.19 * Was ill for the first few days so was _wiped_ * Ch
@kieran %J5w8+TMd1bk2F4Xh34EFS6nKbvVTzUbUkQmEWabtmtU=.sha256

@peg and I have been chipping away at integrating #dark-crystal into #patchwork. This far, we've got backup, recovery and a shards view completed. When you visit your settings page, you now see a new area...

patchwork-integration_settings-index.png


You've got 3 options:

  1. Backup your identity with your peers
  2. Recovery an identity
  3. View the shards you hold, as a custodian

Backup New

patchwork-integration_backup-new.png


Once you've successfully backed up, the view will re-render, showing you your backup details:

Backup Show

patchwork-integration_backup-show.png


If you're trying to recover an old identity and remember who the custodians are, you can contact them and send them a request...

Recovery New

patchwork-integration_recovery-new.png


Once you've requested them, a state machine will show you how its coming along... once you've recovered the ssb identity in question, you are given the option to restart Patchwork and resync, either deleting the existing identity (the one you're using), or backing it up.

Recovery Show

patchwork-integration_recovery-show.png


You'll need to view requests and send them back to people as a custodian, to help people recovery their identities. Here you can see all the requests you've received for a shard, and respond to them, forwarding the shard to the correct identity.

Shards Index

patchwork-integration_shards-index.png

We've made it challenging for people to send, to make sure folk check that they're doing what they're supposed to be doing! :smiley:

patchwork-integration_shards-index-confirm.png


There's still a bit more development to do. We want to automate the process of rebuilding an identity after you've recovered, which will require a bit of back-end wrangling with electron.

We hope it will be merged, but considering Patchwork is in a state of flux, its future is unclear. But considering the views are approaching 'complete', I thought it was time to show it off a bit. :smile:

#ssb-show-and-tell #darkcrystal #dark-crystal-diaries #mmt

@Anders %ZDB+lGb/8V3l7K+I60cp2z1fMRpWLutn8anC4F9bALM=.sha256
Voted [@peg](@vEJe4hdnbHJl549200IytOeA3THbnP0oM+JQtS1u+8o=.ed25519) and I have be
@dan %s7GTwq86XdKM/63EEPw20XdXSNLEF6shFLMucdTGhjI=.sha256
Voted [@peg](@vEJe4hdnbHJl549200IytOeA3THbnP0oM+JQtS1u+8o=.ed25519) and I have be
User has chosen not to be hosted publicly
@kieran %T6v37PYHWPt91/QhjURMN7x7MkJGvp8I4MwXklE6M1U=.sha256

24.06.19 - 05.17.19

Been doing some more hacking again for the last couple of weeks, making headway into learning about the kappa-core ecosystem. Exciting stuff!

User has chosen not to be hosted publicly
@dan %C81xyPOY4w9FHLN6ga5Vge1s6W/OXZRUrIqz3Re7ywY=.sha256

Dark Crystal in Patchwork woulda been cool :)

Join Scuttlebutt now