Better Connections | Dev Diary
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
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
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:
ssb-poll-schemas
and perhaps scuttle-poll
ssb-poll-schema
meetingTime
schema!isPoll.meetingTime
and isPosition.meetingTime
now livescuttle-poll
meetingTime
typeFirst 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.
The choice picker is super elegant:
The time picker has 2 modes, one where the times are the same
More options page seems sensible, this is where we can put things like:
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)
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.
Interestingly viewing the closed poll, they shift the selected time to the front (regardless of time ordering)
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 :
top-to-bottom
(current /calendar view) vs left-to-right
(classic and doodle style month view)As a quick hack I wondered if I could get away with just using CSS to rotate Marama into a classic calendar configuration. yep:
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
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.
28018-08-20
This is proof that mix is traveling back in time. He wrote that 26000 years in the future.
started building out a doodle example with marama
clockwise: code, scry, doodle for reference
patchbay-scry
: the working title for the mvpNext up: building a simple port of doodle's time selector
QUESTION : does anyone know a lightweight way or determining your current timezone?
(otherwise I'll just drop a butty moment tool in)
@mix i LOVE scry. Here is some context from the podcast naming party
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
<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.
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
this might also be useful viewing https://www.youtube.com/watch?v=-5wpm-gesOY
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
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)
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
the colour scheme is dope
Sweet reminder: this dev diary has once been a #somebodyshould! %Cpa2zJx... Thanks Mix for making it happen!
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!
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.
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 :
NOTE TO SELF - go through an disable submission buttons on when publishing (add loading spinning replacement like in dark-crystal
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 !
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?
woops, I published new modules but forgot to push up patchbay... late nite coding
Up now master : 60057b1f770d4e34bc1db58a793835f06125102d
did you see %fT4KD7b... @christianbundy ?
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.
thanks for that bug-catch @christianbundy , you're absolutely right ... I forgot to add March to my monhs array!
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.
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
more specifically, the author of the scry can resolve it, Everyone else can see the resolution(s)
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
published ssb-gathering-schema 1.0.0
- schemas and validators for gatherings.
next up:
scuttle-gathering
, overhauling of patchbay-gathering
patch-gathering
:(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.
Rest up, friend.
Sorry to hear. Have fun afk
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.
Where was I? Here's me looking back and thinking aloud :
ssb-poll-schemas
scuttle-poll
ssb-gathering-schemas
scuttle-gathering
you are here @mixresolution
messages show up as notifications!If I manage to get through all of that within the grant time, I'd love to get on to:
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!
@dan hassan want to start and invocation in that channel? I'd love to jam on that idea to explore possibilities
yes! and I will! and also I would like to try and implement! I am getting my coding gears back in.... gear!
Published scuttle-gathering@1.0.0
Currently has basic methods with safety gaurds (ssb-gathering-schema) for publishing messages :
Next up: making some getting methods which reduce the state of a gathering into a handy document.... and some pull streams...
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.
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.
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 :
Just published scuttle-gathering@1.1.0 which I'm very happy about.
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
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)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 )
wove some more interface. specifically the gathering cards and show. Needs styling but mostly done.
After styling I'll move on to:
oh and want to:
New form for creating and editing gatherings
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:
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
Wow, that looks polished compared to our current gatherings.
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*
worked on :
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.
weaving this workflow together involves 7 repos:
patchbay
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
I just completed the flow I proposed in my grant application. Like this but prettier:
I'm super excited. The flow (from the perspective of the author of the scry_ goes as follows:
progenitor
field, which points back to the scry that made the gatheringmentions
field, including everyone who participated i nthe scryPeople 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).
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)
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.
This was an exciting moment :-)
@bob this is what is was trying to use to set up a time with you, me and @dinosaur
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
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
@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?
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:
ssb-blob-files
patchbay-gatherings
(now live in patchbay master)This is the hours I've tracked since starting this grant - check out the hit I took from a flu in the middle
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"
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:
scuttle-gathering
v1.3.0
recps
to the original gathering and the rest is taken care for you for all methodsssb-schema-definitions
recps
defn to allow only 1-7 recps
, published as v1.0.9
patchbay-gatherings
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
previous date seems wrong
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)
here's the gathering pictured : %aGragCm...
/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
@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.
A gif(t) for you!
scry
gatherings
patchbay
I want to prioritise tasks which are:
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.
Reviewed @Avinash's PR to add mentions and descriptions to Scrys.
super excited for this improvment
oh, that last post was the 24th
add a description to your scry
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!
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.
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
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
This is a story I am tuned in for!
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
Wasted a bunch more time this morning fixing another ssb-ref
bug...
New standalone client is coming along well. Still mulling on the name.
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.
I found a name ... thanks to zach and alanna.
I'll reveal it tmrw
Found this in the logs under waiting
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
patchbay-builder
to make an infinite-game
installerscuttle-shell
branch of patchbay up to speed and got it workingimportant links:
got scuttle-shell
based installers for patchbay
working ... I think?
Linux
Windows (some quirks)
Mac (but documented some errors I can follow up on)
Check it out >>>> %jBe2JUO...
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
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
Fixes pushed and live (in patchbay master):
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.
Another fix:
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):
look how many real gatherings we're coordinating already ... these are all meetings I am looking forward to with excellent humans
@mix can I run it at the same time as patchbay?
Check out the announce and all the details %7aw//w7... (cc @Connor
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)
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 and a conference in melbourne (yeah a 10 day trip knocked a 2-3 week sized hole in our family pattern)
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 :
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 jarringSchemas / validators make building so much easier. Use them!
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:
?
If you're passionate about any of these I'd love to help you build any of them
if you've got any questions about the grant, my learnings, or things I've made, please feel free to ask