summaryrefslogtreecommitdiff
path: root/memos/WM-030.txt
blob: 8c5c5cf26a679c668d10c3efeb223706fdc7b53f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Document: WM-030                                                 P. Webb
Category: Project                                             2018.02.24

                           Socii Dispatch 03

Abstract

   Ship often!

Body

   I have been cranking out features and improvements over the past
   month. As I gear up for a major feature release, I'd like to quickly
   run through what's in production now and what I've learned since my
   last dispatch.

   1. Top 8

      From the ashes of Myspace comes a feature I've missed dearly in
      every social network since. Why is this important to me? Well,
      sometimes I forget my friends' usernames. I never forget a face.
      With Socii you can change your username whenever you want so for
      people you *really* want to keep in contact with (outside of
      real-life phone numbers and such), adding them to your top 8 is
      the way to go.

      📸[🎶 I'm bringing Myspace back, yeah!][IMG1]

   2. Performance

      Three notable changes fall under this section.

      First, I got rid of the WebP decoder[1] (and fixed an issue that
      arose on account of me doing too much in one commit). It was a bit
      slow in development which should have made me realize it'd be MUCH
      too slow for production (even the WebAssembly-based/-compiled
      decoder I found wasn't good enough). Blink-based browsers (Chrome,
      Opera, Vivaldi, &c) were unaffected but Firefox and Safari
      suffered *greatly*. Personally, I use Firefox as my main browser
      so I felt this pain and *hated* it.

      📸[Bye bye WebP…for now][IMG2]

      Second, I implemented pagination. Prior to this, the hub (homepage
      of the actual network[2], not the marketing site[3]) was loading
      every. Single. Post. It was a friggin' *mess* tbh. Now, I'd like
      to have done this in my GraphQL service but I don't understand
      enough about it to implement cursor-based paging so the solution I
      came up with is kinda hacky. It works *for now* but I'm on the
      lookout for tutorials or code samples that implement *proper*
      GraphQL pagination with `graphql.js` (even the official "how
      to[4])" site is devoid of this information).

      Finally, I created a custom script bundler to minify and combine
      front-end JavaScript so there would be far less render-blocking
      scripts to deal with. All the bundling frameworks like Rollup,
      Webpack, &c, do too much while also not being flexible enough to
      do what I wanted to do.

      I'm still working on improving performance. No one wants to visit
      a sluggish site, it's a waste of your time.

   3. Timelines

      You can now toggle between the global timeline and your top 8
      timeline (well, if you've *added* anyone to that list).

   4. Responsiveness

      As a front-end designer, it hurt me to publish something that
      didn't work well at smaller browser widths/breakpoints. I was
      *finally* able to get a *lot* of the stylistic things that were
      bothering me taken care of. Looking at these screenshots though, I
      gotta rethink the post footer. It looks too fat, I think both bits
      of info can fit on the same line.

      📸[Ooh, dat sweet responsive network][IMG3]

   Things I've learned

      1. Ship small features often. Not only do you get a sense of
         progression, but you can find issues quickly should you
         accidentally push errors into production.
      2. Image uploading ~~in a performant way[5]~~ that performs well
         with WebSockets is harder than I thought. I *think* I have
         something figured out but I have some non-Socii work to catch
         up on before I test my theory.

   That's all for now, see ya! 🕸

References

   [1] <https://hub.socii.network/NetOpWibby/status/jdnns5gm000zhxbk97iymsgc>
   [2] <https://hub.socii.network>
   [3] <https://socii.network>
   [4] <https://www.howtographql.com>
   [5] <http://boulter.com/blog/2004/08/19/performant-is-not-a-word>
   [IMG1] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-03-a.jpg>
   [IMG2] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-03-b.jpg>
   [IMG3] <https://🔥.pixels.wtf/blog/image/2018/socii-dispatch-03-c.jpg>