You are reading content from Scuttlebutt
@mix %WO7WjRFL64mNxgFjrP9jauAVWQ3UZaEMwW7p6EtGyQw=.sha256

Better Connections | Dev Diary

studio-gibli-tarn-mountain-meadow

proposal : %xpH7/rx...

I'm setting out on this adventure. I'm excited and know it's going to be a bunch of work.
I've got some clear proximal goals, and I'm gathering lmy energy.

HERE WE GO

@mix %rlXRGuui2nldEwHZkwbf3uMhEnIp298f5PDdO5ty3gk=.sha256

Here's a sketch of the order I imagine I'm going to climb this mountain. I the course to change as a I reveal more of the terrain:

  1. Build a multi-choice poll type for timestamps
    • involves ssb-poll-schemas and perhaps scuttle-poll
  2. Build an interface (similar to Doodle)
    • set up a new poll
    • contribute to a poll
    • close a poll (announcing a chosen time)
    • see an overview of polls (optional for v1?)
  3. Have a poll generate a gathering
    • review the state of gatherings code
    • perhaps consolidate work from across the ecosystem
  4. Extract the calendar from patchbay
  5. Build standalone app
@mix %9s8v+LKzOq+Ykhuz+F0PGSag0JVo1z+wFbd50KfSNtw=.sha256

2018-08-16

ssb-poll-schema

  • turns out @piet has already implemented a meetingTime schema!
  • addeed a couple more tests
  • connected the methods through to the API - isPoll.meetingTime and isPosition.meetingTime now live

scuttle-poll

  • Added publishing methods for the meetingTime type
  • wrote tests around how to collate results for this type of poll, got them passing :heavy_check_mark:
  • got distracted refactoring + pruning
@mix %7iXaHXqgYfjGzvmJf1w3JvWVhqlSn8GExmnATp5+Uq8=.sha256

2018-08-17

First pass on the backend is done, I'm moving into the front end.

Reviewing Doodles designs - what a pleasure, there's a bunch to learn here!
Here's some observations and notes for future me building these out.

Create a new Poll

The choice picker is super elegant:

  • you see a month and can pick days on the calendar. This is a must-have IMO, I can re-use + adapt /calendar work I've already done
  • the times part is more complex
    • the time picker is a drop-down menu with 15 min increments (yes!), and it also has an entry field which hides a lot of logic
    • it also has two modes :
      • same time every day (probably build this first)
      • different times each day (not hard, just a bit of detail and care

The time picker has 2 modes, one where the times are the same

Doodle time picker mode 1

Doodle time picker mode 2

More options page seems sensible, this is where we can put things like:

  • private option (later)
  • inviting people to participate (probably include mentions in the poll object)

Doodle more options

Particpate in the poll

I can't get over how much info this view packs SO CLEANLY. beautiful.
I would love to meet the people who designed this.

Note in our case we might want to invite people before we do time-picking, because at some stage we might be able to fold in peoples time zones if they declare them (to see what times this is for people in other parts of the world... mm later)

Selection_068.jpg

Closing the poll

Only surprises here were the big red disclaimer / descriptor, and that Doodle lets you choose multiple times.
I think for the first version we'll just build selecting one time. Again super clear use of colour and highlighting.

Selection_069.jpg

Interestingly viewing the closed poll, they shift the selected time to the front (regardless of time ordering)

Selection_070.jpg

@mix %Mp/EHHqxRaVTnNnNYbV7whguF2i/J626gy2p7+9ZzVY=.sha256

I extracted the month-builder from /calendar into a module called marama (see meaning here)

Next step is to add some options for how to display the month :

  • days stacked top-to-bottom (current /calendar view) vs left-to-right (classic and doodle style month view)
  • show day number in each tile
  • add an "on-click" handler and have range-selection and and date-picker type logic be distinct
  • figure out how to allow different sizes of month calendar
    • centering things when you have odd number of pixels widths at small scale looks terrible.
    • maybe specify a 'radius' thing more generally
@mix %Cp9O1hbMjl5gPkYkGPgIZN/zH7F99GwvCdP8AB8TASI=.sha256

As a quick hack I wondered if I could get away with just using CSS to rotate Marama into a classic calendar configuration. yep:

marama

here's the custom MCSS you can drop in the /setting page if you want to try it

Marama {
  div.days {
    transform: rotate(-90deg) rotateY(180deg)

    transition: transform 1s ease-in
    :hover { transform: none }
  }
}

MaramaDayName {
  transform: rotateY(180deg) rotate(90deg)

  transition: transform 1s ease-in
  :hover { transform: none }
}

the transition and :hover are totally just for fun, they make a month rotate when you hover over it, but make clicking on particular dates a pain in the arse

@mix %QxKSOIznkivzCWzu/O11BimRmsugni6UzqC8p3oMNtA=.sha256

28018-08-20

Today I finished most of what I need from Marama - ability to programatically scale, rotate, and show day numbers instead of dots. I had a great time and I'm super happy with my work.

marama-letnice-style

marama-doodle-style

@andrestaltz %23g1eLWdvLbrSgt3ADsRgENnaZZg/qct2XsB+K+mk80=.sha256

28018-08-20

This is proof that mix is traveling back in time. He wrote that 26000 years in the future.

User has not chosen to be hosted publicly
User has not chosen to be hosted publicly
@mix %anK3SwvAaJwAPaNC0lCE9AjxSo9SwKQgqAODpjLEjKM=.sha256

2018-08-21

started building out a doodle example with marama

@mix %rpmzBnIfqKV/mt9dEvy83ttVaiUv0outXtjUH/v6EL0=.sha256

2018-08-22

scry progress

clockwise: code, scry, doodle for reference

  • started patchbay-scry : the working title for the mvp
  • built out:
    • stateful logic for adding days
    • dom structure and styles

Next up: building a simple port of doodle's time selector

@mix %KGFYvg3n8g3S1rLMMhsdi1M6KTLBQIweoBVKUx7XRDA=.sha256

QUESTION : does anyone know a lightweight way or determining your current timezone?
(otherwise I'll just drop a butty moment tool in)

User has chosen not to be hosted publicly
User has not chosen to be hosted publicly
@dan %sS//UEkLkHYLKVFwbvsXCzmu1j53ND54h1mMk35m5QY=.sha256

@mix i LOVE scry. Here is some context from the podcast naming party


@nanomonkey %+zPoF6E...

Is it a Cyphercast? I suggest calling it Shell Scrying, which is the art of listening to the sound of the ocean in a sea shell, and hearing distant voices. But it's also a play on shell command, and the fact that we are all hermit crabs finding new homes in cast away shells, connected by a vast ocean of cypherspace.

Shell Scrying Cyphercast

User has chosen not to be hosted publicly
@Dominic %kEoTqeBBqA1CTerAacAb3VQvHDcEWeNK0PPHxDjfJF4=.sha256

<lord of the rings meme>

one does not simply determine the current timezone

getTimeZoneOffset doesn't give you daylight savings, so the timezone might change between now and the time the event happens. new Date().toString() does seem to have a timezone code, but note that sometimes these are actually ambigious.

For example, India Standard Time

$ timedatectl set-timezone Asia/Kolkata
> new Date().toString()
'Wed Aug 22 2018 12:12:36 GMT+0530 (IST)'

and Ireland Summer Time

$ timedatectl set-timezone Europe/Dublin
> new Date().toString()
'Wed Aug 22 2018 07:42:52 GMT+0100 (IST)'

One time I missed a call because I was in Ireland but they thought I was in India.

Also, Australia also has EST/EDT, as does the US.

I guess you can look at the timezone name and the offset, that might work.

User has chosen not to be hosted publicly
@mix %ZeWXyP5gCGjXkvPkDo/JzVEWj+uffelCBZvWtPbWviU=.sha256

yeah I need a human readable thing like "Pacific/ Auckland" that's familiar enough that a person isn't confused about the times they are entering.

SOO... i'm outsourcing this to a module for sure. Thanks all

@jfr %wXQ6u59RWqzrr3XvI839KirgiCGIqsrIhXLjCJwzrMg=.sha256

this might also be useful viewing https://www.youtube.com/watch?v=-5wpm-gesOY

@mix %Mh66+LRFlqJRbFL6BOCSkOPeEF8f10v+lAp81JhNQYk=.sha256

Lord, I've seen that before @jfr, I'm halfway through it again and it's like a horror story. I think Dominic sumarised it well when he said "the problem with timezones is that they are political". That pretty much accounts for why it's so friggen hard to reason about.

ooo, Tom Scott did an internationalis(z)ation one too : https://www.youtube.com/watch?v=0j74jcxSunY

@mix %qZN7Dz85GJot++ewPm90Q+6QseaRNF5WnET9Td2Y6FQ=.sha256

I looked at moment.js ... if I install that the times will be good out till 2022 ... I know all software dies but 4 years is a kinda short feeling

huh, moment references this API in some browsers. Works for me in electron console:

Intl.DateTimeFormat().resolvedOptions().timeZone
// => "Pacific/Auckland"

I might use that (with a greyed out UTC -12 = new Date().getTimezoneOffest() / 60 as a backup)

@mix %1Vnv4N9NtOQksEThoZWkn/dQMyo/ejciDZtyXQ1hN1s=.sha256

2018-08-23

scry time picker

Tonight at Art~Hack I got the time picker working. With days and times picked I'm on the cusp of posting the first Scry poll.
Super excited

@Rich %ehYtsRlxIeQYFYPwTxJFbTNYnV7ICC22fdF/Wv5X0h4=.sha256

the colour scheme is dope

User has not chosen to be hosted publicly
@andrestaltz %bY77/3ROsQYa79cXIn25wC1ADM8ktXM173P7xml+olg=.sha256

Sweet reminder: this dev diary has once been a #somebodyshould! %Cpa2zJx... Thanks Mix for making it happen!

@mix %p9XAJb5wLt1irXLhqbgxeZPn8iq00kNUP5s9NaaK60w=.sha256

2018-08-27

  • some much needed (and relaxing) refactoring
  • put in simple frame for a form with steps
@mix %5AnO3XLCPG+U8dALir0mNhHCR8LlQ0r+oTXKrz1XMtI=.sha256

didn't get more than a couple of hours in the last couple days.
Really wanted to but was busy with some contracting (interviewing people in a large ethereum company as part of a project to support their collaborative practice), and interview with the Ethereum Foundation.

Coding today though!

@mix %3ePpn37cmJkiys1lo9ERsT2/Hdgs4KsO63G5Xy2ylTM=.sha256

2018-08-31

patchbay scry

Publishing a scry now works in Patchbay (branch scry)... phew, lots of little bugs. I always forget how painful forms are.
There are some things which need polish but going to focus next on viewing a scry and publishing responses.

@mix %lwvbsAMkkLnmBvWoOkjvmCQ4iCfkaG+lnwZULg/AdoE=.sha256

scry show

a nice evening pulling together the start of the view for an active Scry.

This is built with scuttle-testbot, fetching a real poll + positions from a test db.
Check out patchbay-scry : views/show.test.js if you'd like to see my setup

Things to add :

  • post your position
  • edit your position
  • live update triggering (with backlinks stream)
  • ability for author to close the scry
    • sets the closesAt
    • announces the selected time
  • avatars
  • summation of votes for each column
@mix %bckfWE3VYHrTdJ1lRiciVkKlzpg2tnHPe/nHNysU81g=.sha256

NOTE TO SELF - go through an disable submission buttons on when publishing (add loading spinning replacement like in dark-crystal

User has not chosen to be hosted publicly
@mix %RjKiUs9Qv/eyORrAi7/46/Lp01gXf6GPVIBp7peIuQM=.sha256

2018-09-04

scry mvo

Today I just hit mvp.
Scry is live in Patchbay master... like %FhzzDz/...
cc @christianbundy if you want to do a call sometime ... uhhh fill in that Scry !

@Christian Bundy %RV3x01i4YsO3GCzYT3CvEVBqhwdke0ina4DuMupUAZk=.sha256

@mix

I can't wait to try this, it looks great! I checked out the latest master from GitHub but haven't seen any new commits. Am I looking in the wrong spot?

@mix %fT4KD7b8T9uos/f1oonjsfj6d2r852efkaSukW6seF8=.sha256

woops, I published new modules but forgot to push up patchbay... late nite coding
Up now master : 60057b1f770d4e34bc1db58a793835f06125102d

@mix %KyPAeZg6D3PDwbFIEXeYz7aD6dOeeGhJUZAxhKjZwEM=.sha256

did you see %fT4KD7b... @christianbundy ?

@Christian Bundy %8DkOZwvSrqqlAiKHgA3zzGWbJc0u/SpBvAa9bVv03ik=.sha256

@mix

Yep, just used it and it looks great, I'm looking forward to a call!

Btw, I'm sure this is something trivial, but I think there may be an off-by-one error in the month output. It's showing Monday the 10th, which is [correctly] September, but the UI is still showing "Aug" above the dates. I tried to resolve it on my own but I didn't see anything obvious.

@mix %BHvCMtdzbq8jpq7tlH3BTF/GJQfm/GeqW51SwxVLM5E=.sha256

thanks for that bug-catch @christianbundy , you're absolutely right ... I forgot to add March to my monhs array!

@mix %ZnlMbw6/o2z+SGsoX2gji7zN5U6AFjKwydA9VzN5ISY=.sha256

2018-09-05

today I worked on writing schemas and logic for a new message type poll-resolution which will be used for declaring the outcome of a poll / scry.
All working apart from some quirk integrating it into poll/sync/get ... but also did some little bits of refactoring of scuttle-poll, and I think have a minor change which will kill a circular dep.

@mix %kMMc6x9cWQC3NIMv+MQ9B+UxqjM2C0ZEOTs/HmN8N4I=.sha256

2018-09-06

resolve-scry.gif

you can now "resolve" a scry.... check it out : %FhzzDz/...

It also mentions everyone who participated when you do this, which will make building notifications super easy later

@mix %Cj0UhNIWTIgei8UYvmXL90g7H2kQlzT11fcubYIVZqk=.sha256

more specifically, the author of the scry can resolve it, Everyone else can see the resolution(s)

@mix %OEqm5+66l0lefOVSH6cO7vmYV/1p2dM6PUV+7btH+iI=.sha256

Note to self : imagemagick commands for making gifs
(thanks to @marina
for the [reminder] about this amazing command line tool)

mogrify -resize 600 *.jpg 
convert -layers OptimizePlus -delay 100 -loop 0 *.jpg scry.gif
User has not chosen to be hosted publicly
@mix %q6bVvk3rKzgcmurCZgoYK4ovn9Yt1sOVWYGuJazhhbg=.sha256

2017-09-07

published ssb-gathering-schema 1.0.0 - schemas and validators for gatherings.

next up:

  • make parsers for gathering updates,
  • extracting gathering forms and actions from patchwork and building scuttle-gathering , overhauling of patchbay-gathering
  • ... and killing patch-gathering :(
@mix %/wintPFtrkGYbRoKsxg9UMdqqncwWXisI/bHp6lTo8I=.sha256

I hit my head and got a mild concussion. Doc says no screens for three days, so I'll be offline for a little while. I'm feeling ok, so hope to be back to normal after that.

User has not chosen to be hosted publicly
User has not chosen to be hosted publicly
User has not chosen to be hosted publicly
@dan %s1tGKLb1zSJlWZ85KkXFd8CJPfOQIYNFQOqCsIYsGgI=.sha256

Rest up, friend.

studio-gibli-reflections-ripples-concentric-rings.gif

User has not chosen to be hosted publicly
@Anders %KAc/3Xscm8GfsWtdJnTbRebfoF/NE/4RnGLjqB4tByw=.sha256

Sorry to hear. Have fun afk :smiley_cat:

@dan %h2/F57d5oivM+uh0Kszcyf/yLHy6j0eX5Fta7q6b4B8=.sha256

bed rest sick restoration

User has not chosen to be hosted publicly
@mix %PHxm9w2cVRVrLJfV39RbBWoMrzaXtD7F62W56clJISQ=.sha256

thanks for all the kind words and wishes friends.
I'm spinning back up... today I'm going to do a little code project to help my mum design knitting patterns.
Will probably swing back into Scry more fully on friday.

@mix %Zj8lHdzt8L8kqFTCF7XHHDlgZg0Ay7TnUqtdc0cTf/M=.sha256

2018-09-14

Where was I? Here's me looking back and thinking aloud :

  1. Build a multi-choice poll type for timestamps
    • :white_check_mark: ssb-poll-schemas
    • :white_check_mark: extend scuttle-poll
  2. Build an interface (similar to Doodle)
    • :white_check_mark: set up a new poll
    • :white_check_mark: contribute to a poll
    • :white_check_mark: close a poll (announcing a chosen time)
    • :grey_question: see an overview of polls (optional for v1?)
  3. Have a poll generate a gathering
    • :white_check_mark: create ssb-gathering-schemas
    • :triangular_flag_on_post: create scuttle-gathering :arrow_left: you are here @mix
      • :white_large_square: review patchwork implementation
      • :white_large_square: extract general methods
      • :white_large_square: extract general views
        • gathering creation
        • gathering editing
        • gathering display
      • :white_large_square: design + build a simple bridge from closed scry to a gathering creation form
  4. Work on the flow
    • where do you start a scry from ? (calendar, it's own page)
    • can you mention people in scry setup
    • make a message renderer to make resolution messages show up as notifications!
    • how do you easily give someone a link to a scry
  5. Make the whole flow private
    • private scry's
    • private gatherings ... phew
  6. Standalone app

If I manage to get through all of that within the grant time, I'd love to get on to:

  • pick different times for each day
  • iCal import/ export (I want to learn about drag / drop files)
  • A range of calendar views reworks
    • zoomed in views : just this month, just this week
    • filters : only things I'm going to, things my friends are going to
    • better performance (less event listeners?!)
  • prototype making scry participation possible anywhere by folding the js into a blob / dat?! (cc @matt this would be an excellent target for your idea)
@dan %akufAXZ8YEI7wBCTTWM6jbGMHBqOjLhoScnCA99Czm4=.sha256

how do you easily give someone a link to a scry

Have been thinking that a tinyurl type utility or tiny-content-address or tiny-hash would be super useful!

@mix %PAkuv0z/FYzMKwE2z+G5QNfkFSkhi0pMgMRM2LZD2kI=.sha256

@dan hassan want to start and invocation in that channel? I'd love to jam on that idea to explore possibilities

@dan %0c81BGTu5co7VBfOZURSZfhGUxEi9OQwgD57PJLmcuo=.sha256

yes! and I will! and also I would like to try and implement! I am getting my coding gears back in.... gear!

@mix %a1bfQ2d+rVsRHnPL2tjU7FCWmRV4fH0WafGGah2MQIk=.sha256

2018-09-14 (cont'd.)

Published scuttle-gathering@1.0.0

Currently has basic methods with safety gaurds (ssb-gathering-schema) for publishing messages :

  • publishing initial gathering
  • updating a gathering
  • declaring whether or not you're attending

Next up: making some getting methods which reduce the state of a gathering into a handy document.... and some pull streams...

@mix %E+AyQkFroTb5wTwwEFt0Osdmle0kQZgsbhTO2T7p+Yo=.sha256

2018-09-17

First half of the day was wellbeing (I've got a cold), as well as going to the library with ziva, and geurilla planting a creeping fig vine on an ugly shared fence.

Started writing an async getter method for scuttle-gathering, but immediately realised I hadn't implemented branches on the gathering update messages, which means sorting them isn't really reliable D:

That's done now, may get on to writing more of the getter tonight.

@mix %RM+gg7ddPowGLqi3oA/i8UiIDB2MlLcQcqcSR/1J6/I=.sha256

I would say that I love the pattern of making these helper modules.
I gives the complexity space to reveal itself and then be tidily addressed. I bet the current implementations are pretty sloppy because there are so many little things to handle.

@mix %2BgE+N9IkRRRyRIyp2jz/Ltl9YMwdcRE8Xl0rax3neY=.sha256

past couple of days have been largely out by more sickness. Did a couple of hours or code, but decent chunks of time were also given to :

  • participating in maintenance grants / volunteerism conversation
  • helping @piet with setting strategy with his ssb-mobile grant.

2018-09-20

Just published scuttle-gathering@1.1.0 which I'm very happy about.

  • Rad tests, supporting some mmmm refactoring.
  • Simple aliases in the API now added (see if you can guess what they do!):
var scuttle = require('scuttle-gathering')(server)

scuttle.post(opts, cb)
scuttle.put(key, opts, cb)
scuttle.attending(key, boolean, cb)

scuttle.get(key, cb)
// calls back with a nicely reduced state of the gathering
@mix %hVJhboJljkgCwb9F7WLLVrSytWXJ9Vy0d2aUsp40nic=.sha256

here's the 'document' you get back from get

{
  key: MessageId,
  title: String,
  startDateTime: {
    epoch: UnixTime,
    tz: String                 // *
  },
  description: String,
  location: String,
  image: {
    link: Blob,
    name: String,             // *
    size: Integer,            // *
    type: MimeTypeString      // *
  },
  images: [ Image, Image, ... ] // Objects of same form as image property
  attendees: [ FeedId, FeedId, ... ]
}

To this I'm also going to add:

  • heads : sometimes it's useful to have access to the most recent messages in the document/ thread histroy (e.g. for populating the branch attribute on messages)
  • thread : all the backlinks in causal order (including posts and whatever else)
@mix %+Pxui9O3lP0XQqtVyGUkew4ggDVX8LJ66vTn3qbr1yI=.sha256

2018-09-24

Got most of the new new-gathering form built using marama as the time picker, and scuttle-gathering for publishing.
Need to add image upload, then it's pretty much good to go. Excited about that because I plan to factor out image attachment in a way it will be a re-useable component / methods for other parts of the ecosystem.

After that there's a bit of work to make it so that you can pre-populate the form, and revist the form for edits.
And then it's on to refactoring everything so patchbay works with all these new components (I'm ripping out and deprecating patch-gathering, which was an idealised view layer which was meant to work with all patchcore based things but was never picked up by Patchwork :crying_cat_face: )

@mix %USZdch6zKqM62/E0m1RNBuPwaEKRwbbrB8K0Ughx7Ao=.sha256

2017-09-25

wove some more interface. specifically the gathering cards and show. Needs styling but mostly done.
After styling I'll move on to:

  • editing an existing gathering
  • live updating of an existing gathering (triggered remotely by a pull stream or observeable!?!?!)
  • adding images to a gathering - super module version
@mix %TtFkhkFiFfcDNgNJdaAfh8thsIVoro3HusHN3bRdPMI=.sha256

oh and want to:

  • add some simple renderers for attending and update type messages (low priority)
@mix %fj9XJThu9UGWUTXeTMsbwzr2ew+M08VqNpLnQqa9tCE=.sha256

2018-09-26

Selection_122.jpg
New form for creating and editing gatherings

Selection_121.jpg
New view for gatherings.

Long day of coding, but thoroughly happy with progress. Forms are nicely factored out, so a fresh gathering / pre-populate gathering / existing gathering all use the same display logic, and have isolated state logic.
TL;DR - A few things to polish up butthe basic for connecting gatherings to scrys's is done.

Tmrw:

  • live update mechanism
  • image uploads !!
  • style the edit button into a nicer place
@mix %En8HA8Um6oKv3bHSIMGljV+kbwxPY2eBCl/skIIEG2M=.sha256

p.s. Location is a new text field you can now (optionally) populate with the new gatherings.

no it's not your favoutie geojson whatever format, it's just a string. Strings are gonna be fine, trust me

User has not chosen to be hosted publicly
User has chosen not to be hosted publicly
User has not chosen to be hosted publicly
@Anders %J16C5/Tdd7ccoOx53ERDh7wMExss/lq1TOi0JVNQUoo=.sha256

Wow, that looks polished compared to our current gatherings.

@Christian Bundy %Q59n+fAVx3vaFh7ccDv/yozsz/kQeXqN+HVZp0vp22w=.sha256

no it's not your favoutie geojson whatever format, it's just a string. Strings are gonna be fine, trust me

Party on null island! Meet me at data:application/json,%7B%22type%22%3A%20%22Point%22%2C%20%22coordinates%22%3A%20%5B0.0%2C%200.0%5D%7D!

*laughs in [probably invalid] GeoJSON*

@mix %YsB6lFLYMQhXMqPWtXgZsTYjXGvE2wooj/Whp6wEUxQ=.sha256

2018-09-27

worked on :

  • new live updating method (code example here)
  • launching a gathering fro ma resolved scry
    • turns out scry needs to know if an associated gathering has been created
    • introducing a new poll field : progenitor !!

a lot of my language is tied visually and flavourfully to magic (the card game, #mtg).
Example: this is Progenitus, a gargantuan hydra, an avatar and the soul of a plane called Alara.

progenitus.jpg

@mix %8Uu7atJoFmGey8kbIb6lt2GWiIYUNfKYjihKnA6sOsg=.sha256

weaving this workflow together involves 7 repos:

Scry side

  • ssb-poll-schema
    • definition of meetingTime type poll (alias: scry)
    • defintion of a poll 'resolution'
  • scuttle-poll
    • methods for creating, getting, resolving scrys
  • patchbay-scry :new:
    • (a standalone module seperate from patchbay-poll)
    • UI components for scry (fairly agnostic, with dependency injection for server, avatar rendering, gathering creation etc)
    • 'plugs' which connect UI components into patchbay depject system.

Gatherings side

  • ssb-gathering-schema :new:
    • defintions of a gathering root, updates, and attendance type messages
    • validators for all these
  • scuttle-gathering :new:
    • methods for creating, getting, updating, gatherings
  • patchbay-gatherings :new:
    • already existed, but I'm re-writing it to work with scuttle-gathering + overhaul the design
    • same patten of UI + plugs as patchbay-scry

patchbay

  • have been bumping up against litte bits and pieces and tidying as I go
  • think I'm going to extract /calendar out, but not sure what to group it with yet
@mix %BwHqG7QwCIQveSCIzO7HltvQn1EWf28/KRl/bNn1CBw=.sha256

mind_castle.jpeg

This is what I tell people programming it like : building a castle in your mind, but it's like a sand castle where if you turn away it will slump and dissolve

yes that's more magic art

@mix %qXn4n0LWkHpCwhbP8rMyjOndRFRQhmk8RtKjfOBCAgo=.sha256

2018-10-01

I just completed the flow I proposed in my grant application. Like this but prettier:

scry mockup

I'm super excited. The flow (from the perspective of the author of the scry_ goes as follows:

  1. start a scry
  2. once you've got input, "resolve" the scry (marks a particular time choice)
  3. clicking on the "New Gathering" button which is now available launches a form that's pre-populated with the selected scry time
  4. the published gathering has:
    • a progenitor field, which points back to the scry that made the gathering
    • a mentions field, including everyone who participated i nthe scry

People visiting the scry later will see a link through to the gathering it spawned
People mentioned will have the gathering show up in their friggen notifications (this bit might need a little more connecting, but the guts are all there).

:boom:


This is merged in master now
NOTE - the refactor of patchbay-gatherings has improved it a bunch, but cannot currently attach images. I'll be doing that tomorrow (and making ait a component others can re-use, and ultimately add things like drag-and drop image support)

@mix %h8xSTKCs7VZS/Y4iCaA2C693OeA1/B07uzxQoWKXMWc=.sha256

scry and gathering notifications

I just got notifications of the resolution of a Scry I participated in, and the Gathering that was spawned from it ... in my /notifications tab!
Feels so good. I'm so stoked for what thinking about flows in this space can do... and notificing that adding mentions to things is going to be super powerful ... because notifications are pull-based - only render the sort of notifications from the people you care about. I want to build an module just for this jees.

@dan %ALEn6QbdmXWPC1lUPRP8a/UBGwwa8xe/XcZSwwGKq7w=.sha256

scry-ssb-hot.png

This was an exciting moment :-)

:clock730: :clock3: :clock6:

@bob this is what is was trying to use to set up a time with you, me and @dinosaur

@mix %vtq5RQ8BctlJrC0lMd0RTZlCr9G7woSoqGCsmSZw8WM=.sha256

2018-10-02

REFACTORING

Today I started extracting and refactoring the nightmare which is the FileInput in Patchcore. Great news is that it's significantly tidier, you can check out the work so far here : https://github.com/ssbc/patchbay-thread/blob/master/views/components/composer-attachments.js

I reworked the flow to use pull-streams, so that the core of the logic now looks like this :

pull(
  pull.values(files),
  pull.asyncMap(buildFileDoc),
  pull.asyncMap(imageProcess({ stripExif, resize })), // NOTE this also blobifies the data
  pull.drain(
    (doc) => AttachFile(doc, ev),
    (err) => {
      if (err) console.error(err)
    }
  )
)

SO CLEAN

BONUS :ribbon:

this refactoring enabled MULTIPLE FILE ATTACHMENT
e.g. select 5 photos from your adventuring. BOOM, attached

pull-streams meant this only took swapping file[0] for files on one line

User has not chosen to be hosted publicly
User has not chosen to be hosted publicly
@dan %ecmyUfjA3HVWEof/m6UxAmoPnKVSAvIlSFmiTYzwTWw=.sha256

@bob lets debug in this thread: %aIWhTCq...


Mix, you are in the process of saving so many cypherhours, perhaps years over the lifespan of ssb?

@mix %9EzdpGfqisfYfxU+dilkmDSAa1aC6DBG0NPIEAl7SEM=.sha256

2018-10-03

Today I published ssb-blob-files, which will enable me to easily add image attachments to gatherings.

Feels fricken great, so much tidier AHHHH

Tmrw:

  • adding a image to gatherings
  • pausing to check my bearings
  • probably proceeding to building out the private workflow
    • private gatherings (do this first)
    • private polls
@mix %qd1i8zqg+ghgltBU0PvB0Bmvx5dcwEd5mIDsHfPnMBk=.sha256

2018-10-04

  • patched patchcore with ssb-blob-files
  • published scuttle-blob - a thin wrapper around ssb-blob-files so I don't have to pass a server around
  • added simple image attaching (adding, editing) to patchbay-gatherings (now live in patchbay master)
@mix %3A1WnGTXG3cV6/g1RjuZ8dv517KYUE4I0M2RkhUhyLE=.sha256

grant progress update

grant progress update

This is the hours I've tracked since starting this grant - check out the hit I took from a flu in the middle :disappointed_relieved:

I estimate a month of fulltime work to be ~ 128 hours of work ( 5 days a week, 6 solid hours a day )
This means I've got another 1-2 weeks before I'm going to calling the grant funded part of this work "Done"

@mix %iOv3NrffBBXM45BJRk42CA6UCFvVZ7d6ijOhVabHGeU=.sha256

reflection - I've been doing less hours that I would have thought in my good weeks. either I've missed logging some work (not that likely), or other tasks are taking a lot more time than I'm aware.

Other things that have been on my plate:

  • parenting (we have babysitters 10-18 hours a week)
  • some consulting facilitation
  • a few DarkCrystal calls
  • scuttlebutt
    • being involved in grant conversations
    • coordinating with people to do some calls about scuttlestack (regular, christianbundy, person from tibet whose name I can't type!)
  • protozoa stuff (our coop)
User has not chosen to be hosted publicly
@mix %vh37GRkUxpnyJ6AWVrCx/uzruZN3Kk5ZTdXmTlxEg1c=.sha256

2018-10-10

scuttle-gathering

  • added private methods, published as v1.3.0
    • just add recps to the original gathering and the rest is taken care for you for all methods
  • cc @matt you might like to start using this module internally. I plays well with an observeable connection too!

ssb-schema-definitions

  • tightened recps defn to allow only 1-7 recps, published as v1.0.9
  • you might like to re-install your schema validators or update to get this bump

patchbay-gatherings

Selection_132.jpg

I plugged the above in, and the styling is munted but I'm 90% it's working. Think this might go live tmrw! (not sure how it will hit the rest of the ecosystem of calendar things but we'll see

@mix %OXOnsDDoWSw0z8ySK6xSzRBGjg4DnLuaxTq928f6OYU=.sha256

previous date seems wrong

2018-10-10

Selection_134.jpg

  • Adding "recipeints" to a gathering switches it into private mode - shown by dark background (needs more design)
  • Private mode means attached images are encrypted

Selection_135.jpg

  • what a public gathering currently looks like
  • updates now auto-mention current attendees !

This is live in Patchbay master now. @dan hassan
would love if you could confirm this is all working your end!

Art: Reality Spasm by Jason Felix (a magic card)

@mix %4oeL98buwJJfQNvEnPh1riQCsaLxCEzC/M7q1znEKJg=.sha256

here's the gathering pictured : %aGragCm...

@mix %R/1FiOKJmNTGguJXUt97donS0LHheSk49QmrqdJ/edk=.sha256

/calender doesn't yet display private gatherings...

fuck that took a lot of wiring up - there is no way I could have done this without a testing harness (and maintained my sanity)...
I am SUPER HAPPY with the balance of complexity and clarity in scuttle-gathering

@dan %HGzu2S+A0eplkw/Sf5IQzGMDnHDxnTArM2lvS+ysbKg=.sha256

@mix I can confirm that I can see the PRIVATE gathering. I decree this a #cyphernova event. The first private gathering in ssb history.

Mix, this is big.

@dan %vsrQLeS8pB2P0Kw64v2+PmvZ8Drs/pTxfoM+U22r4tQ=.sha256

A gif(t) for you!

studio-ghifli-cyphernova-swallow-fire.gif

@mix %YXuvnnA6nivbRiXePZ3fOBTlMODSxwVXhdnY8EWgch4=.sha256

2018-10-11 - reflection & planning

scry

  • more fields on setup
    • mentions
    • description
  • private scy
  • ability to do different times on different days

gatherings

  • mentions
    • show mentions that are happening when creating from scry
    • allow adding mentions
  • recps
    • help users understand private gatherings
    • show recipinets as greyed out when editing (?)
  • markdown rendering of fields (like location)
  • better rendering of dates (?)
  • render gathering update messages
  • check cards live-update?

patchbay

  • /calendar
    • create gatherings
    • create scry
  • /gatherings
    • create scry
  • know where to find scrys that are running
  • know how to share scrys
  • create scry from /polls ?
  • standalone time client
    • figure out how to require minimal patchbay (less plugins)
    • build installer
    • check if scuttlebot@12 changes connection if e.g. patchwork / patchbay is running
    • try building with scuttle-shell

I want to prioritise tasks which are:

  1. enable more people to use scry
  2. benefit from long periods of dedicated focus
    • several of the points are smaller and an be filled in later
  3. helping @Avinash to build features they're interested in

For what I'm building I think the standalone app is the most important.
I'm also really excited for it because I tihnk I'll be prototyping some simple patterns others can follow.

@mix %De61imJWhlB1zd+S4IdQNfsdSFaiTNuTQvqQ10nt34A=.sha256

2018-10-25

Reviewed @Avinash's PR to add mentions and descriptions to Scrys.
super excited for this improvment :pineapple:

@mix %EPvXI8wsocT1Gnl3uYF0T9Y8RoDZvgtbKcH5/xo/DWs=.sha256

oh, that last post was the 24th

2018-10-25

image.png
add a description to your scry

image.png
tag some friends as you launch the scry to get them notified of it

These new features were added by @Avinash (I just reviewed his code). I went to put fake data in to take these screenshots and realised that I had a very clear and concrete use-case .... so immediately used the feature!

:heart:

@mix %g9Rau+WNof05cD5NRTbWEK3ZcVUGJ9j0inoHmVes0f8=.sha256

2018-10-29

spent today making it so that I could pull in patchbay's core into another repo and launch it but with only some plugins.
Got that working, which means perhaps not far off making a standalone calendar / scry app. The devil will be in the details like the initial tabs.

I've booked in a sitting with @zach tmrw who is going to help me find a name for this thing.

@mix %FTsd3pq59tT4BKyU4WwnUixVIksADjgVHhQQNa42L8I=.sha256

image.png

Here's what the code looks like .... I kinda like it but it could also be a terrible idea. It's one of those things you don't know until you kick it around a bit

@mix %WUC1sqrP0ujRtIqLCq+XFDaGgF93iGOcHMm01iQKdR8=.sha256

2018-10-30

tarot npm module name

Today I continued my search for the name of the app which will contain scry, gatherings, and calendar. Zach helped my connect with some of the core patterns of what this thing is in the world and what I want to invoke. Really exciting conversation.

The cards told us a really interesting story. I'll write about it more after I've slept on it

@dan %jw4vrvbe+iHRR/QnjnYg84BKMUVF9b9LdIFozc2YKhY=.sha256

This is a story I am tuned in for!

@mix %uDeFvRowhLiU8xr+0fd6yyUh/2zZufXu0uwXLHHEuoQ=.sha256

2018-11-01

spent a bunch of time debugging a problem with validators.
Turned out a minor change in ssb-ref had removed an API and this broke a bunch of the stack... I have a bad feeling npm might be behaving badly and updating is gonna be painful for others.

big thanks to @Avinash and @christianbundy for the invaluable help finding and fixing the problem :heart: :heart: :heart:

@mix %Ay4icZz8Rj49nv+oAWDEOI20AceOJh8h48iQdtB4vTo=.sha256

2018-11-05

Selection_159.jpg

Wasted a bunch more time this morning fixing another ssb-ref bug...
New standalone client is coming along well. Still mulling on the name.

@mix %gTuKsJsEP+gMjVJmsW6Odtg+IwE8FfQGXC31GJ1l0gI=.sha256

Oh yeah, added the ability to start scry's or gatherings from /calendar, this will be in patchbay as well soon

Check out the new icons in the top left as well - I'm removing menus from this new client and just having the most important high level links to pages as links in the top left. Would have been nice to be able to pin the hypertabs, but can't do everything on the first pass.

@mix %gx25KEIsGx5IXoLze3ByRjeWxGyGxFXoh/PqbCYq9sM=.sha256

I found a name ... thanks to zach and alanna.
I'll reveal it tmrw

@dan %Sjdt4IhpiCZLNTc37bxMKZ6fkLkTMwMyLBcwZJimRXI=.sha256

Black swan on the lake at sunset in New Zealand. It’s a very pretty place to be broken down. Waiting on the word from the rental company.

Found this in the logs under waiting

@mix %0X+8M8HT1oiPheiMX6EaWLH3xBCcxbDQn98VILrBYCE=.sha256

INFINITE GAME

is the name of the standalone app : https://github.com/mixmix/infinite-game

the tarot reading drew out several elements into the light. the one that I'd been feeling in my gut was about how this thing does involve appointment times, and specific gatherings, but that's the most short-term part of the pattern to focus on. I wanted to focus on what the long term effect was. The card on the right in the tarot reading represented (for me) the calendar, the overview, but with the lens of looking back at all the things all our friends has organised, of celebrating, of being bountifully rich, and also looking forward to this continuing.

I'm really drawn to long term thinking, and virtuos cycles. Infinite game for me taps into some playfulness, while reminding you that the future is in your hands ... you are an active agent in this game. It also references an idea I was introduced by some facillitator... finite versus infinite games:

(my introducer must have been influenced by this source)

There are at least two kinds of games: finite and infinite. Finite games are those instrumental activities - from sports to politics to wars - in which the participants obey rules, recognize boundaries and announce winners and losers. The infinite game - there is only one - includes any authentic interaction, from touching to culture, that changes rules, plays with boundaries and exists solely for the purpose of continuing the game. A finite player seeks power; the infinite one displays self-sufficient strength. Finite games are theatrical, necessitating an audience; infinite ones are dramatic, involving participants...
wikipedia

@mix %OhqD3+MiL7n/rGrDtO4weeGLBqIB4PMM8PmoVK3t3GA=.sha256

2018-11-07

  • :white_check_mark: worked on building on generalising patchbay-builder to make an infinite-game installer
  • :white_check_mark: brought scuttle-shell branch of patchbay up to speed and got it working
  • :white_large_square: pulled up @cryptix work and started working on making a patchbay installer which folds over scuttle-shell
    • this is hard to test!
@mix %dyj6YIaebZo/Qn0hv82ip5KYi7cphORHp8nIC0yVKok=.sha256

important links:

@mix %jen/x6Ad23MxXpGb8P0Z3uwwN5bUxj7XM232Hphmg0s=.sha256

2018-11-08

got scuttle-shell based installers for patchbay working ... I think?

:white_check_mark: Linux
:white_check_mark: Windows (some quirks)
:x: Mac (but documented some errors I can follow up on)

Check it out >>>> %jBe2JUO...

User has not chosen to be hosted publicly
@mix %DZvjo5e+NPIRvSUYe8We5tk5Z++s2kygwUAEcogjPz8=.sha256

hey @Alois Bělaška I think you missed the link to the issue I made in the above message. Thanks for verifying you were getting the same thing though

User has not chosen to be hosted publicly
@mix %yvfy8sg/vSObD6Bu1GltQuD5y7bCPBFQYcsg4xAwiLQ=.sha256

201-11-09

Decided to build infinite-game installers using classic scuttlebot so at least all platforms could use it.
Spent a few hours working through configuration errors across platforms and some weird intermittent bugs ....sigh
Think it's mostly working

@mix %raEXu7DB8/YBCuvYFQaATp8Wh7z654/1DPo0vZWqV4M=.sha256

2018-11-10

Selection_161.jpg

Fixes pushed and live (in patchbay master):

  • scry's now tell you which timezone they're assuming you're in
  • scrolling for smaller screens

p.s. the scry shown above is the biggest scry I've been in so far. Really exciting to pretty much effortlessly find a time across a couple of continents and so many people.

@mix %61XZi7SwgOfCmnKaR8frPs9cqF1zxfIuD/BPEFKZNzc=.sha256

Another fix:

  • descriptions now on this scry show (as well as the card view)

oh .. I might not have mentioned I made an overview of all scry's active and the ones you've participated in (this was one of the final pieces of view needed for a standalone scry app):

Selection_162.jpg

look how many real gatherings we're coordinating already ... these are all meetings I am looking forward to with excellent humans

@mix %eV1EfX+FK6BMnm7L6r1h9sk+vTVV9z6jYNp33BlbBgg=.sha256

2018-11-12 Cross Platform installers

https://github.com/mixmix/infinite-game/releases/tag/v1.0.1

@Connor %zxwJpnKfbF42+XSa55mz6isl8yrYAguKjaJCbAwMEKw=.sha256

@mix can I run it at the same time as patchbay?

@mix %G3SNqdfPUFS3SgDDWFXauiu/wbuPRbAuIE1H2NDJrXA=.sha256

Check out the announce and all the details %7aw//w7... (cc @Connor

@mix %K6aVsB24T2GMsHlH0NAchiHatSdWnOLRsG3nVpDAm7o=.sha256

kyoto_temple_garden_mix.jpg

Closing the Grant

As part of closing this grant, I'm going to pause and reflect about the journey - where it intended to go, where I got to, and what learning there is to share

I fucking loved doing this grant. I was able to produce code I was proud of, improve the ecosystem around things I touched, and improve on patterns I'd previously explored.
It's been interesting to contrast this with my 1st grant (Mix helps you build it), which was much more open ended, which I feel like I've been doing good work on in many small ways, but is way less tangible from the outside. I felt (and feel) insecure about that one. This one felt clear, acheivable, most of the hard design was already done, and there was the right balance of known delivery + unknown exploration.

I really enjoyed stopping and planning next steps at save points during the grant. While I didn't build every features I would have love to, I feel like I nailed the core, and these pauses and course corrections helped a lot. For example I decided to not polish features and instead make sure I could get this tool into as many peoples hands as possible by making a standalone app. This is a going to be an interesting side experiment in itself. It was motivated by experience with ssb-loomio grant, where we found getting UI into all the clients really hard. It's also an investment in mainstreaming soapy and cryptix' work with scuttle-shell. I've done some prototyping and intend to continue this work after the grant.

Things I had trouble with in this grant were some changes in the stack which made making installers and even stable installs from the repo shaky. One was a minor change to ssb-ref which led to an uncaught and fatal change in schemas. Easy fix happily. The other was upgrades in scuttlebot (I think) leading to hours of slow testing of setups across 3 OSes. This was tedious and demoralising because I'm not confident I got all the bugs... and I'm no confident people won't have problems I (or someone) will have to spend more time trying to fix. Around this I could have asked for more help, and I definitely could have done some more mindfulness or walks in the sunshine to help ground me more (rather than beating my head against it)

Time tracked

Selection_165.jpg

I was aiming for 128 hours on this grant (~ equivalent of a month of 5 day a weeks @ 6 hours billable work a day). At 144 hours I went over this a little but some of the goals of the later work bled into deliverables for #dark-crystal work, so I feel good with that.

The two dips in productivity are a 2 week flue :disappointed: and a conference in melbourne (yeah a 10 day trip knocked a 2-3 week sized hole in our family pattern)

Learning to share ?

I'm particularly happy with some patterns I explored in scuttle-gathering - I managed to divide the code into really delightful to test parts, like seperating building and publishing. I also introduced permitted-params (stolen from experince in ruby) and found it made code really tidy.

Another pattern that's worked well, is a strategy for live updating. TL;DR is :

  • all getters are async
  • there's a live-stream which triggers refreshes using the async getters to reload whole sections if necessary
    This is really sweet because it's a pattern which is mutant or yo-yo or preact friendly. It's based on the observation that generally lookups are really cheap for a particular view, and it's easier to reason about the things you want to trigger a reload than it is to make everythng live everywhere. Also everything live everywhere can be quite jarring

Schemas / validators make building so much easier. Use them!

Where to next

While this grant period is formally closed, these are tools I'm using on a regular basis now and will want to continue to improve.

Some of the things I'm itching to do are:

  • scry
    • make private an option
    • allow picking of different times on different days
    • better setting (and adjustment) for closing of scry
    • an option for marking scrys which let any participant resolve it
    • collapse time options which >= 3 people can't make
    • show you started the scry
  • gatherings
    • better time printing (more human time, e.g. in 2 days)
    • better gathering card dessign
  • infinite game
    • fold over scuttle-shell
    • get a better symbol for 'scry' icon than ? :disappointed:
    • make an icon for the app
    • update to use patchcore-2 and other performance improvements
  • calendar
    • extract as a module
    • offer week or day views
    • add filters for just events you / friends are going to

If you're passionate about any of these I'd love to help you build any of them

Questions

if you've got any questions about the grant, my learnings, or things I've made, please feel free to ask

:pray:

@dan %7qbxWlcvogVEAuMViOKAoepQZXkSX2Gp24pOi/DRBts=.sha256

studio-gibli-forest-sky-trees-light.gif

User has not chosen to be hosted publicly
User has not chosen to be hosted publicly
Join Scuttlebutt now