-
Notifications
You must be signed in to change notification settings - Fork 0
/
source.opml
899 lines (897 loc) · 87.7 KB
/
source.opml
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- OPML generated by OPML Editor v10.1b19 on Mon, 27 May 2024 16:20:23 GMT -->
<!--
Hi this is Dave Winer. I write all my project code in an outliner, which
generates all the files that make up this GitHub project. You'll see a
source.opml file like this in each of my projects. It contains the outline
source that the repo files were generated from. This is the most logical place
to store them. You can read the code in any outliner that supports OPML, which
includes https://drummer.land. You can use the Open URL command in
Drummer's File menu to open the "raw" version of this file straight from the
GitHub repo.
-->
<opml version="2.0">
<head>
<title>nodeEditor: feedlandInstall</title>
<dateCreated>Wed, 04 Jan 2023 14:16:33 GMT</dateCreated>
<dateModified>Mon, 27 May 2024 16:20:23 GMT</dateModified>
<ownerName>Dave Winer</ownerName>
<ownerId>http://davewiner.com/</ownerId>
<expansionState>1, 2, 3, 6, 31, 37, 54, 56, 78, 85, 91</expansionState>
<vertScrollState>1</vertScrollState>
<windowTop>80</windowTop>
<windowLeft>767</windowLeft>
<windowBottom>968</windowBottom>
<windowRight>2115</windowRight>
</head>
<body>
<outline text="/scripting.com/code/feedland/install/">
<outline text="worknotes.md" created="Tue, 24 Jan 2023 16:41:56 GMT">
<outline text="#### 5/27/24; 12:18:38 PM by DW" created="Mon, 27 May 2024 16:18:37 GMT">
<outline text="New config settings, `membershipClosedHeadline` and `membershipClosedExplanation` can customize the default messages in the signon dialog in FeedLand. " created="Mon, 27 May 2024 16:18:38 GMT"/>
<outline text="They default to the previously hard-coded messages. " created="Mon, 27 May 2024 16:19:53 GMT"/>
</outline>
<outline text="#### 2/25/24; 9:30:54 AM by DW" created="Sun, 25 Feb 2024 14:30:52 GMT">
<outline text="TL;DR -- <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql">setup.sql</a> has been updated so it now creates a database that's compatible with the current version of the server software. If you need to convert an existing installation to the new software, you'll have to do what I did in the steps below, or you could export subscription lists and start over with a fresh database. " created="Sun, 25 Feb 2024 14:30:55 GMT"/>
<outline text="See this <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/feb2024transition.md">special docs page</a> for a step-by-step account of how to upgrade an existing installation." created="Sat, 13 Apr 2024 13:41:36 GMT"/>
</outline>
<outline text="#### 2/22/24; 1:40:39 PM by DW" isComment="true" created="Thu, 22 Feb 2024 18:40:38 GMT">
<outline text="Created a <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setups.sql">new version</a> of setup.sql that includes the indexes in the table creation code. " created="Thu, 22 Feb 2024 18:40:39 GMT"/>
<outline text="I will test it by creating a new instance before archiving the old version and replacing it with the new one. " created="Thu, 22 Feb 2024 18:41:18 GMT"/>
</outline>
<outline text="#### 11/14/23; 9:24:15 AM by DW" created="Tue, 14 Nov 2023 14:24:15 GMT">
<outline text="Added an index <a href="https://github.com/scripting/feedlandInstall/issues/41#issuecomment-1791143618">recommended</a> by Scott Hanson. " created="Tue, 14 Nov 2023 14:24:16 GMT">
<outline text="`create index itemGuidUrl on items(guid, feedUrl);`" created="Tue, 14 Nov 2023 14:22:22 GMT"/>
</outline>
<outline text="It took about four minutes to run on feeland.org. " created="Tue, 14 Nov 2023 14:27:40 GMT"/>
<outline text="Also added it to the <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql#L163">SQL code</a> used to initialize a fresh FeedLand. " created="Tue, 14 Nov 2023 14:24:38 GMT"/>
</outline>
<outline text="#### 11/13/23; 11:42:10 AM by DW" created="Mon, 13 Nov 2023 16:42:09 GMT">
<outline text="Making WordPress <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/wordpresslogin.md#making-wordpress-identity-the-default">the default identity service</a>." created="Mon, 13 Nov 2023 16:42:10 GMT"/>
</outline>
<outline text="#### 11/8/23; 3:43:27 PM by DW" created="Wed, 08 Nov 2023 20:43:25 GMT">
<outline text="New versions of feedland, feedlanddatabase, <a href="https://github.com/scripting/reallysimple/tree/main/demos/feedhunter">feedhunter</a>, 0.6.16, 0.7.10, 0.4.1, respectively." created="Wed, 08 Nov 2023 20:43:27 GMT"/>
</outline>
<outline text="#### 11/5/23; 5:01:57 PM by DW" created="Sun, 05 Nov 2023 22:01:55 GMT">
<outline text="Supervisor Mode implemented. " created="Mon, 06 Nov 2023 12:57:50 GMT"/>
<outline text="New versions of feedland, feedlanddatabase, daveappserver, versions 0.6.15, 0.7.9, 0.7.10." created="Sun, 05 Nov 2023 22:01:58 GMT"/>
<outline text="New column in the user table -- <i>role</i> whose default value is "user", one other recognized value "admin"." created="Sun, 05 Nov 2023 22:03:36 GMT"/>
<outline text="Notes for the update are at <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/userroles.md">userroles.md</a>. " created="Sun, 05 Nov 2023 22:04:34 GMT"/>
</outline>
<outline text="#### 11/2/23; 9:39:07 AM by DW" created="Thu, 02 Nov 2023 13:39:07 GMT">
<outline text="Provided an example for how the <i>apps</i> object works in <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/appscolumn.md">appscolumn.md</a>. " created="Thu, 02 Nov 2023 13:39:08 GMT"/>
</outline>
<outline text="#### 11/1/23; 11:05:17 AM by DW" created="Wed, 01 Nov 2023 15:05:13 GMT">
<outline text="WordPress login. " created="Wed, 01 Nov 2023 15:05:18 GMT"/>
<outline text="I posted a quick howto at <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/wordpresslogin.md">wordpresslogin.md</a>. " created="Wed, 01 Nov 2023 15:05:25 GMT"/>
<outline text="If you want to turn it off, set config.flAllowWordpressIdentity false" created="Wed, 01 Nov 2023 15:06:51 GMT"/>
</outline>
<outline text="#### 10/17/23; 9:51:53 AM by DW" created="Tue, 17 Oct 2023 13:51:53 GMT">
<outline text="Added new index in <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql">setup.sql</a>. " created="Tue, 17 Oct 2023 13:51:54 GMT">
<outline text="`create index feedItemIndex on items(flDeleted, pubDate, feedUrl);`" created="Tue, 17 Oct 2023 13:50:34 GMT"/>
</outline>
</outline>
<outline text="#### 10/14/23; 11:12:38 AM by DW -- v0.6.0" created="Sat, 14 Oct 2023 15:12:36 GMT">
<outline text="<a href="https://github.com/scripting/feedlandInstall/blob/main/docs/readinglistupgrade.md">Instructions</a> to upgrade a FeedLand installation to support reading lists." created="Sat, 14 Oct 2023 15:12:39 GMT"/>
<outline text="Modified <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql">setup.sql</a> to include support for reading lists." created="Sat, 14 Oct 2023 15:57:41 GMT"/>
</outline>
<outline text="#### 10/3/23; 3:57:17 PM by DW" created="Tue, 03 Oct 2023 19:57:14 GMT">
<outline text="Added two index creation commands to the end of <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql">setup.sql</a>. These had been added manually to feedland.org, but not documented here. They improve performance for rivers of lots of feeds like my <i>All</i> category." created="Tue, 03 Oct 2023 19:57:17 GMT"/>
</outline>
<outline text="#### 9/21/23; 9:33:02 AM by DW" created="Thu, 21 Sep 2023 13:33:02 GMT">
<outline text="Documented new <i>staticfiles in sql</i> feature. " created="Thu, 21 Sep 2023 13:33:03 GMT">
<outline text="1. <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/config.md#flstaticfilesinsql">config.flStaticFilesInSql</a>" created="Thu, 21 Sep 2023 13:33:33 GMT"/>
<outline text="2. <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql#L121">SQL code</a> to create the new staticfiles table. " created="Thu, 21 Sep 2023 13:33:58 GMT"/>
<outline text="3. <a href="https://github.com/scripting/feedlandInstall/issues/39">Instructions</a> for getting started, with a place to ask questions. " created="Thu, 21 Sep 2023 13:34:38 GMT"/>
</outline>
<outline text="Removed setup instruction for News Product server config. The feature is built into FeedLand now, no need to install a separate app." created="Thu, 21 Sep 2023 13:48:33 GMT"/>
</outline>
<outline text="#### 9/19/23; 11:30:14 AM by DW" created="Tue, 19 Sep 2023 15:30:14 GMT">
<outline text="Documented flRenewSubscriptions. It's been there since 10/29/22. There are times you want it off, esp when running behind a firewall, you're asking to renew but you won't pass the test. It accomplishes nothing in that case but wasting resources. " created="Tue, 19 Sep 2023 15:30:15 GMT"/>
</outline>
<outline text="#### 9/13/23; 10:21:36 AM by DW" created="Wed, 13 Sep 2023 14:21:34 GMT">
<outline text="Two new config values, flUseRiverCache, ctSecsLifeRiverCache." created="Wed, 13 Sep 2023 14:21:37 GMT"/>
<outline text="Added to the <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/config.md#fluserivercache-ctsecsliferivercache">config.md page</a> and <a href="https://github.com/scripting/feedlandInstall/blob/main/config.json#L61">config.json example</a>. " created="Wed, 13 Sep 2023 14:41:31 GMT"/>
</outline>
<outline text="#### 8/16/23; 5:15:49 AM by DW" created="Wed, 16 Aug 2023 09:15:47 GMT">
<outline text="Previous versions saved pending confirmations in memory and on disk in stats.json. This worked fine where there is one instance of feedland.js, but now we're scaling up so there can be many instances, all working on the same data. This means we have to have the option to store pending confirmations in the database so all instances can work off the same data. " created="Wed, 16 Aug 2023 09:15:53 GMT"/>
<outline text="If you're running a single-instance FeedLand , the defaults are set so that it continues to operate as before. If you want to update to use the database as storage for pending confirmations, this is what you have to do." created="Wed, 16 Aug 2023 09:19:12 GMT">
<outline text="1. In config.json, add a new setting, flUseDatabaseForConfirmations set to true." created="Wed, 16 Aug 2023 09:20:14 GMT">
<outline text="<code>flUseDatabaseForConfirmations: true,</code>" created="Wed, 16 Aug 2023 09:21:50 GMT"/>
</outline>
<outline text="2. In your database, create a new table called pendingConfirmations." created="Wed, 16 Aug 2023 09:21:09 GMT">
<outline text="<%includeExample ("installPendingConfirmations")%>"/>
</outline>
<outline text="3. cd into the directory containing feedland.js and npm install." created="Wed, 16 Aug 2023 09:29:16 GMT"/>
</outline>
<outline text="Of course you need to reboot FeedLand to reflect the new setup. " created="Wed, 16 Aug 2023 09:25:12 GMT"/>
<outline text="I have also updated the docs to reflect this new feature." created="Wed, 16 Aug 2023 09:26:14 GMT"/>
<outline text="Previously confirmations expired after one hour by default. I changed the default to 24 hours. There were complaints that they expired too quickly. It's hard for me to understand what causes the delay, but let's give them a bit more grace. You can of course change this setting." created="Wed, 16 Aug 2023 09:33:05 GMT">
<outline text="<code>confirmationExpiresAfter: 60 * 60 * 24,</code>" created="Wed, 07 Dec 2022 23:49:52 GMT"/>
</outline>
<outline text="To test, sign off and sign back on. Create a new account. Please report any problems <a href="https://github.com/scripting/feedlandInstall/issues/37">in this thread</a>. " created="Wed, 16 Aug 2023 09:30:43 GMT"/>
</outline>
<outline text="#### 5/26/23 by DW" created="Fri, 26 May 2023 15:17:04 GMT">
<outline text="New version, gets the updated prefs system in the database. " created="Fri, 26 May 2023 15:17:07 GMT"/>
<outline text="No feature in FeedLand that's waiting for this feature, I added it for another project I'm working on, one which makes it possible to build apps on FeedLand as a platform. " created="Fri, 26 May 2023 15:17:27 GMT"/>
<outline text="When you want to install the new version:" created="Fri, 26 May 2023 15:18:04 GMT">
<outline text="1. <i>npm update</i> the feedland.js app." created="Fri, 26 May 2023 15:18:21 GMT"/>
<outline text="2. In MySQL, run this command: <i>alter table users add apps json;</i>" created="Fri, 26 May 2023 15:18:32 GMT"/>
<outline text="3. Relaunch feedland.js. " created="Fri, 26 May 2023 15:19:17 GMT"/>
</outline>
</outline>
<outline text="#### 4/24/23 by DW" created="Tue, 25 Apr 2023 16:48:28 GMT">
<outline text="Site is publicly announced in this <a href="http://scripting.com/2023/04/24/151114.html">Scripting News post</a>. " created="Tue, 25 Apr 2023 16:48:39 GMT"/>
</outline>
<outline text="#### 3/29/23; 9:44:01 AM by DW" created="Wed, 29 Mar 2023 13:43:58 GMT">
<outline text="Add flNightlyBackup to the <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/config.md">config.md</a> docs page. " created="Wed, 29 Mar 2023 13:44:02 GMT"/>
</outline>
<outline text="#### 3/20/23; 12:20:36 PM by DW" created="Mon, 20 Mar 2023 16:20:36 GMT">
<outline text="Added urlFeedlandApp to both example config.json files." created="Mon, 20 Mar 2023 16:20:37 GMT"/>
</outline>
<outline text="#### 1/30/23; 1:09:27 PM by DW" created="Mon, 30 Jan 2023 18:09:27 GMT">
<outline text="Documented new config.json value urlServerForClient." created="Mon, 30 Jan 2023 18:09:28 GMT"/>
</outline>
<outline text="#### 1/29/23; 11:08:31 AM by DW" created="Sun, 29 Jan 2023 16:08:29 GMT">
<outline text="It's now possible to read the source.opml file for this repo by clicking a <%gitSourceReader ("feedlandInstall", "link")%>." created="Sun, 29 Jan 2023 16:08:31 GMT"/>
<outline text="It doesn't work for this site right now because it's still private and the gitSourceReader app needs to read the source.opml file over HTTP." created="Sun, 29 Jan 2023 16:31:29 GMT"/>
</outline>
<outline text="#### 1/25/23; 10:09:58 AM by DW" created="Wed, 25 Jan 2023 15:09:57 GMT">
<outline text="<a href="https://github.com/scripting/feedlandInstall/blob/main/docs/config.md#urlstarterfeeds">Documented</a> <i>urlStarterFeeds</i> value in config.json." created="Wed, 25 Jan 2023 15:09:58 GMT"/>
<outline text="Wrote a <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/signup.md">doc</a> explaining how to sign up on your own instance. " created="Wed, 25 Jan 2023 15:57:32 GMT"/>
</outline>
<outline text="#### 1/24/23; 11:42:08 AM by DW" created="Tue, 24 Jan 2023 16:41:58 GMT">
<outline text="We now support SMTP email in addition to SES." created="Tue, 24 Jan 2023 16:40:28 GMT"/>
<outline text="Did a quick review of this site, and will post a note in the Issues section explaining how we start. " created="Tue, 24 Jan 2023 16:58:50 GMT"/>
<outline text="Adding more collaborators to this now-private repo." created="Tue, 24 Jan 2023 17:19:13 GMT"/>
<outline text="Started this Worknotes file. " created="Tue, 24 Jan 2023 16:59:25 GMT"/>
</outline>
</outline>
<outline text="docs/setup.md" created="Sat, 14 Jan 2023 15:40:39 GMT">
<outline text="# How to set up a FeedLand instance" created="Sat, 14 Jan 2023 15:40:46 GMT">
<outline text="A checklist to set up a new instance. " created="Sat, 14 Jan 2023 15:40:56 GMT"/>
</outline>
<outline text="### Requirements" created="Sat, 14 Jan 2023 16:00:19 GMT">
<outline text="A server with Node.js installed." created="Sat, 14 Jan 2023 16:00:49 GMT"/>
<outline text="Access to MySQL either on the local machine or as a service running elsewhere." created="Sat, 14 Jan 2023 16:01:19 GMT"/>
<outline text="An SMTP mail sender or an Amazon <a href="https://aws.amazon.com/ses/">SES</a> account to send email for authentication." created="Sat, 14 Jan 2023 16:01:33 GMT"/>
<outline text="Amazon <a href="https://aws.amazon.com/s3/">S3</a> for optional features." created="Sat, 14 Jan 2023 16:01:37 GMT"/>
</outline>
<outline text="### Download the folder" created="Sat, 14 Jan 2023 15:58:47 GMT">
<outline text="<a href="https://github.com/scripting/feedlandInstall/archive/refs/heads/main.zip">Download the folder</a> from this repo, and copy the files into the folder you want to serve from. " created="Sat, 14 Jan 2023 15:58:57 GMT"/>
<outline text="Note: the only files you actually need for the install are:" created="Fri, 20 Jan 2023 16:44:24 GMT">
<outline text="* config.json" created="Fri, 20 Jan 2023 16:45:20 GMT"/>
<outline text="* emailtemplate.html" created="Fri, 20 Jan 2023 16:44:44 GMT"/>
<outline text="* feedland.js" created="Fri, 20 Jan 2023 16:44:43 GMT"/>
<outline text="* package.json" created="Fri, 20 Jan 2023 16:44:42 GMT"/>
</outline>
</outline>
<outline text="### Install the packages" created="Fri, 20 Jan 2023 19:57:44 GMT">
<outline text="Launch the terminal app on this system, <i>cd</i> into the directory containing the files and type:" created="Sat, 14 Jan 2023 15:59:12 GMT">
<outline text="`npm install`" created="Sat, 14 Jan 2023 15:59:56 GMT"/>
</outline>
<outline text="It downloads the packages needed to run FeedLand into the node_modules sub-folder." created="Sat, 14 Jan 2023 16:00:00 GMT"/>
</outline>
<outline text="### MySQL setup" created="Sat, 14 Jan 2023 15:41:31 GMT">
<outline text="Decide if you want to run your own copy of MySQL or use a service to manage it for you." created="Sat, 14 Jan 2023 15:41:42 GMT"/>
<outline text="I use Digital Ocean's MySQL service and have been very happy with the cost, performance and reliability of the service." created="Sat, 14 Jan 2023 15:55:38 GMT"/>
<outline text="You will need to get the following information to add to the database section of config.json." created="Sat, 14 Jan 2023 15:42:04 GMT">
<outline text="* host: The domain name of the machine running MySQL." created="Sat, 14 Jan 2023 15:43:02 GMT"/>
<outline text="* port: The port it's running on." created="Sat, 14 Jan 2023 15:43:15 GMT"/>
<outline text="* user: The name of the user associated with the database. " created="Sat, 14 Jan 2023 15:43:32 GMT"/>
<outline text="* password: The user's password." created="Sat, 14 Jan 2023 15:43:38 GMT"/>
<outline text="* database: The name of the database that will hold FeedLand's info." created="Sat, 14 Jan 2023 15:43:48 GMT"/>
</outline>
<outline text="If your MySQL server requires all traffic to be encrypted, add an "ssl" section to the database section of config.json." created="Mon, 13 Nov 2023 14:35:06 GMT">
<outline text="```JSON" created="Mon, 13 Nov 2023 14:36:59 GMT"/>
<outline text=""ssl": {"rejectUnauthorized": true}"/>
<outline text="```" created="Mon, 13 Nov 2023 14:36:15 GMT"/>
</outline>
<outline text="For more info and help, see <a href="https://github.com/scripting/feedlandInstall/issues/41">this thread</a> in the Issues section of this repo." created="Mon, 13 Nov 2023 14:36:15 GMT"/>
</outline>
<outline text="### Create your database" created="Sat, 14 Jan 2023 15:44:21 GMT">
<outline text="Open a terminal window to connect to the MySQL database. " created="Sat, 14 Jan 2023 15:44:29 GMT"/>
<outline text="The commands to create the database are in <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql">setup.sql</a>. Select the text from that file and paste it into the terminal window. " created="Sat, 14 Jan 2023 15:44:52 GMT"/>
</outline>
<outline text="### S3 setup (optional)" created="Sat, 14 Jan 2023 16:02:15 GMT">
<outline text="Some features depend on using Amazon <a href="https://aws.amazon.com/s3/">S3</a> to store feeds for users and likes. " created="Sat, 14 Jan 2023 16:02:19 GMT"/>
<outline text="If you want to use those features, set up a place for FeedLand to store the files. " created="Sat, 14 Jan 2023 16:03:29 GMT"/>
<outline text="It can be a separate bucket, or a folder within an existing bucket. " created="Sat, 14 Jan 2023 16:03:47 GMT"/>
<outline text="The location must be accessible via HTTP." created="Sat, 14 Jan 2023 16:03:59 GMT"/>
<outline text="The config values for S3 storage are: urlForFeeds, s3PathForFeeds, s3LikesPath." created="Wed, 01 Feb 2023 22:05:03 GMT"/>
</outline>
<outline text="### Set up an Amazon SES account (optional)" created="Sat, 14 Jan 2023 15:53:27 GMT">
<outline text="We use <a href="https://aws.amazon.com/ses/">SES</a> to send mail. At some point we will probably expand the options here." created="Sat, 14 Jan 2023 15:53:38 GMT"/>
<outline text="I'm not exactly sure how to do it. I did it myself once a few years ago, and it's worked without a hitch since then. " created="Sat, 14 Jan 2023 15:54:06 GMT"/>
<outline text="If someone wants to write docs on how to do this, I'd be happy to link them in here. " created="Sat, 14 Jan 2023 15:54:32 GMT"/>
<outline text="You will need to have a <a href="https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_profiles.html">credentials.txt</a> to provide access info to the Amazon software. " created="Sat, 14 Jan 2023 15:54:45 GMT"/>
</outline>
<outline text="### Set up an SMTP mail server (optional)" created="Tue, 24 Jan 2023 17:07:24 GMT">
<outline text="As of 1/24 you can now configure FeedLand to send emails via SMTP, in addition to the previously supported Amazon SES. " created="Tue, 24 Jan 2023 17:07:36 GMT"/>
<outline text="To configure it for SMTP, provide four new values in config.json, smtpHost, smtpPort, smtpUsername and smtpPassword." created="Tue, 24 Jan 2023 17:08:36 GMT"/>
<outline text="I've included these in the example config.json file and described them in the config.json docs. " created="Tue, 24 Jan 2023 16:44:00 GMT"/>
</outline>
<outline text="### Fill in the info in config.json" created="Sat, 14 Jan 2023 15:57:01 GMT">
<outline text="I've included a template for <a href="https://github.com/scripting/feedlandInstall/blob/main/config.json">config.json</a>, with the pieces you need to fill in to get your FeedLand instance running. " created="Sat, 14 Jan 2023 15:57:12 GMT"/>
<outline text="Open that file in a text editor, in the folder you're running FeedLand. It should be obvious how the data from this page maps onto the entries in config.json, but here are some notes about special cases." created="Sat, 14 Jan 2023 15:58:05 GMT">
<outline text="* If you're running the server locally, say on port 1452, you would set myDomain to "localhost:1452"." created="Fri, 20 Jan 2023 17:08:42 GMT"/>
<outline text="* You should set flWebsocketEnabled true if you want users to get realtime updates. " created="Fri, 20 Jan 2023 17:10:11 GMT"/>
<outline text="* There is a set of steps for using Twitter identity, but we haven't documented them at this time. So unless you know what you're doing re Twitter identity, leave this false. " created="Fri, 20 Jan 2023 17:11:45 GMT"/>
<outline text="* urlForFeeds, s3PathForFeeds, s3LikesPath and urlNewsProducts are for optional features, if you don't want to host feeds for users, or make Likes subscribable, set them to the empty string. " created="Fri, 20 Jan 2023 17:12:48 GMT"/>
<outline text="* If you want to host feeds for each user or for Likes, set flUserFeeds and flLikesFeeds true." created="Wed, 01 Feb 2023 22:15:20 GMT"/>
</outline>
</outline>
<outline text="### Run the app" created="Fri, 20 Jan 2023 17:25:31 GMT">
<outline text="Type this at the command line:" created="Fri, 20 Jan 2023 17:25:36 GMT">
<outline text="`node feedland.js`" created="Fri, 20 Jan 2023 17:25:42 GMT"/>
</outline>
<outline text="To try it out, enter the value for myDomain in config.json into a web browser. That should bring up the FeedLand client, ready for you to sign up or sign in." created="Fri, 20 Jan 2023 17:25:47 GMT"/>
<outline text="You should then create an account for yourself using the signup process, <a href="signup.md">documented here</a>. This is the same process your users will use to create their own accounts." created="Wed, 25 Jan 2023 15:11:24 GMT"/>
</outline>
<outline text="### Edit emailtemplate.html" created="Fri, 20 Jan 2023 17:16:01 GMT">
<outline text="Any time you want to change what's in the emails FeedLand sends on your behalf, just edit the text of this file." created="Fri, 20 Jan 2023 17:16:21 GMT"/>
</outline>
<outline text="### Optionally, install newsProductServer app" isComment="true" created="Thu, 19 Jan 2023 16:06:54 GMT">
<outline text="See the instructions in the <a href="https://github.com/scripting/newsProductServer">newsProductServer</a> repo." created="Thu, 19 Jan 2023 16:07:08 GMT"/>
</outline>
<outline text="### Getting updates" created="Tue, 24 Jan 2023 17:09:58 GMT">
<outline text="This is how to install new versions of the FeedLand software." created="Tue, 24 Jan 2023 17:10:03 GMT"/>
<outline text="Change into the directory containing feedland.js."/>
<outline text="`npm update`"/>
<outline text="Quit and restart the server."/>
</outline>
<outline text="### Other docs" created="Tue, 21 Feb 2023 16:41:36 GMT">
<outline text="If you're using HTTPS, Scott Hanson has written a <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/https.md">guide</a> to setting up HTTPS with FeedLand. " created="Tue, 21 Feb 2023 16:41:41 GMT"/>
<outline text="There's a special <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/examples/configforhttps.json">example config.json</a> derived from a working HTTPS installation. " created="Tue, 21 Feb 2023 16:42:46 GMT"/>
</outline>
</outline>
<outline text="docs/config.md" created="Wed, 04 Jan 2023 17:05:42 GMT">
<outline text="# About config.json" created="Wed, 04 Jan 2023 17:05:47 GMT">
<outline text="All configuration for FeedLand is done in this file" created="Wed, 04 Jan 2023 17:05:54 GMT"/>
</outline>
<outline text="### General notes" created="Wed, 04 Jan 2023 17:06:40 GMT">
<outline text="The things you have to set are at the top of the file. As you go down the file, they get more optional." created="Wed, 04 Jan 2023 17:06:49 GMT"/>
</outline>
<outline text="### myDomain" created="Wed, 04 Jan 2023 17:07:31 GMT">
<outline text="This is how the server talks about itself. If it's running on a remote machine, use the domain name for the machine. If FeedLand is not running on port 80, include the port. Like this: mydomain.com:1452." created="Wed, 04 Jan 2023 17:07:50 GMT"/>
</outline>
<outline text="### database" created="Wed, 04 Jan 2023 17:07:40 GMT">
<outline text="This struct provides all the info FeedLand needs to communicate with your MySQL database. " created="Wed, 04 Jan 2023 17:08:57 GMT"/>
</outline>
<outline text="### port" created="Wed, 04 Jan 2023 17:09:43 GMT">
<outline text="The port that FeedLand will run on. " created="Wed, 04 Jan 2023 17:09:52 GMT"/>
<outline text="FeedLand also looks for process.env.PORT, and will use that port instead, if it's provided." created="Wed, 04 Jan 2023 17:10:06 GMT"/>
</outline>
<outline text="### flWebsocketEnabled" created="Wed, 04 Jan 2023 17:11:00 GMT">
<outline text="FeedLand can use WebSockets to send messages back to the client app, when new items are found, or are updated. " created="Wed, 04 Jan 2023 17:11:02 GMT"/>
<outline text="It defaults to true." created="Wed, 04 Jan 2023 17:11:55 GMT"/>
</outline>
<outline text="### websocketPort" created="Wed, 04 Jan 2023 17:11:59 GMT">
<outline text="Ignored if flWebsocketEnabled is false, otherwise it specifies the port that we run WebSockets on. " created="Wed, 04 Jan 2023 17:12:12 GMT"/>
</outline>
<outline text="### flEnableNewUsers" created="Wed, 04 Jan 2023 17:12:43 GMT">
<outline text="If true, new users will be able to create accounts using email as identity. " created="Wed, 04 Jan 2023 17:12:55 GMT"/>
<outline text="It defaults to false. " created="Wed, 04 Jan 2023 17:13:24 GMT"/>
<outline text="Note that from this point in the file all the defaults should only be changed if you want to change the basic behavior of FeedLand. " created="Wed, 04 Jan 2023 17:13:29 GMT"/>
</outline>
<outline text="### maxRiverItems" created="Wed, 04 Jan 2023 17:14:13 GMT">
<outline text="When FeedLand generates a "river" structure, this is the maximun number of items it will return. " created="Wed, 04 Jan 2023 17:14:16 GMT"/>
<outline text="Default: 175." created="Wed, 04 Jan 2023 17:14:39 GMT"/>
</outline>
<outline text="### maxNewFeedSubscriptions" created="Wed, 04 Jan 2023 17:14:47 GMT">
<outline text="Each user can create this many new feed subscriptions, ie feeds that no one else is subscribed to. " created="Wed, 04 Jan 2023 17:14:55 GMT"/>
<outline text="You can subscribe to as many other feeds as you like. " created="Wed, 04 Jan 2023 17:15:16 GMT"/>
<outline text="Default: 250." created="Wed, 04 Jan 2023 17:15:29 GMT"/>
</outline>
<outline text="### flUpdateFeedsInBackground" created="Wed, 04 Jan 2023 17:15:38 GMT">
<outline text="If true, FeedLand will read feeds in the background looking for new items. This is a very basic function, if you turn it off the feed reader won't do very much." created="Wed, 04 Jan 2023 17:15:50 GMT"/>
<outline text="Default: true." created="Wed, 04 Jan 2023 17:15:43 GMT"/>
</outline>
<outline text="### minSecsBetwFeedChecks" created="Wed, 04 Jan 2023 17:16:35 GMT">
<outline text="The number of seconds between checking for feed updates in the background. It chooses a different feed every time, based on which feed has least recently been checked. " created="Wed, 04 Jan 2023 17:16:46 GMT"/>
<outline text="Default: 15." created="Wed, 04 Jan 2023 17:16:42 GMT"/>
</outline>
<outline text="### mailSender, confirmEmailSubject, confirmationExpiresAfter, flUseDatabaseForConfirmations" created="Mon, 16 Jan 2023 15:34:55 GMT">
<outline text="These values determine how confirmatioin emails are sent." created="Mon, 16 Jan 2023 15:35:23 GMT"/>
<outline text="mailSender is the email address of the sender of the emails. " created="Mon, 16 Jan 2023 15:35:44 GMT"/>
<outline text="confirmEmailSubject is the subject for confirmation emails." created="Mon, 16 Jan 2023 15:36:02 GMT"/>
<outline text="confirmationExpiresAfter is the number of seconds after which email confirmations expire. 86400, the default, is 24 hours. " created="Mon, 16 Jan 2023 15:36:12 GMT"/>
<outline text="flUseDatabaseForConfirmations determines whether we store the pending confirmations in memory or in the database. If you're starting a new installation, you should set this true. It defaults to false, to preserve previous behavior." created="Wed, 16 Aug 2023 09:43:02 GMT"/>
</outline>
<outline text="### urlNewsProducts" created="Tue, 17 Jan 2023 17:42:19 GMT">
<outline text="The URL of the <a href="https://github.com/scripting/feedlandInstall/tree/main/newsProductServer">news products server</a> you're using. " created="Tue, 17 Jan 2023 17:42:37 GMT"/>
</outline>
<outline text="### flNewsProducts">
<outline text="If true, the server supports news products. In the client the menu item for the user's news product is enabled only if flNewsProducts is true. " created="Sun, 22 Jan 2023 18:35:27 GMT"/>
<outline text="The settings are still there for the categories in the news product even if flNewsProducts is false. "/>
<outline text="Default: false." created="Sun, 22 Jan 2023 18:35:40 GMT"/>
</outline>
<outline text="### flUserFeeds ">
<outline text="If true, the server supports user feeds. In the client two menu items are enabled only if flUserFeeds is true. " created="Sun, 22 Jan 2023 18:35:27 GMT">
<outline text="* Edit my feed"/>
<outline text="* Read user feeds"/>
</outline>
<outline text="The settings for the user's title and description are enabled even if flUserFeeds is false. "/>
<outline text="Default: false." created="Sun, 22 Jan 2023 18:35:40 GMT"/>
</outline>
<outline text="### flLikesFeeds ">
<outline text="If true, the server supports feeds for likes, both for individual users and for all users of FeedLand on this server. " created="Sun, 22 Jan 2023 18:35:27 GMT"/>
<outline text="Default: false." created="Sun, 22 Jan 2023 18:35:40 GMT"/>
</outline>
<outline text="### smtpHost, smtpPort, smtpUsername, smtpPassword" created="Tue, 24 Jan 2023 16:40:06 GMT">
<outline text="Set these values if you want FeedLand to send confirming emails via SMTP instead of Amazon SES (the default). " created="Tue, 24 Jan 2023 16:40:28 GMT"/>
</outline>
<outline text="### urlStarterFeeds" created="Wed, 25 Jan 2023 15:00:39 GMT">
<outline text="When a user first signs up with FeedLand, we ask if they want subscribe to a set of starter feeds." created="Wed, 25 Jan 2023 15:00:50 GMT"/>
<outline text="If you want to provide your own starter list for your users, set the <i>urlStarterFeeds</i> value in your config.json with the URL of your OPML subscription list. " created="Wed, 25 Jan 2023 15:01:33 GMT"/>
<outline text="Default: http://scripting.com/publicfolder/feedland/subscriptionLists/starterfeeds.opml" created="Wed, 25 Jan 2023 15:02:05 GMT"/>
</outline>
<outline text="### urlFavicon" created="Wed, 25 Jan 2023 15:00:39 GMT">
<outline text="You can customize the favicon of your FeedLand installation by setting urlFavicon in config.json to point to the favicon file you want to use. " created="Wed, 25 Jan 2023 15:00:50 GMT"/>
<outline text="Default: http://scripting.com/favicon.ico" created="Wed, 25 Jan 2023 15:02:05 GMT"/>
</outline>
<outline text="### urlServerForClient" created="Mon, 30 Jan 2023 18:05:54 GMT">
<outline text="If you want to use HTTPS to serve FeedLand you must set this value in config.json. " created="Mon, 30 Jan 2023 18:06:10 GMT"/>
<outline text="The URL should begin with either // or https:// so that the FeedLand client will be able to call back to your server in accordance with the rules for HTTPS." created="Mon, 30 Jan 2023 18:06:26 GMT"/>
<outline text="An example, if your value for myDomain is "hello.com", this his how you would define urlServerForClient." created="Mon, 30 Jan 2023 18:07:12 GMT">
<outline text=""urlServerForClient": "https://hello.com/"" created="Mon, 30 Jan 2023 18:07:43 GMT"/>
</outline>
<outline text="Default: http://mydomain.com/" created="Mon, 30 Jan 2023 18:08:31 GMT"/>
</outline>
<outline text="### urlServerForEmail" created="Sun, 12 Feb 2023 17:23:10 GMT">
<outline text="The URL of the server we'll use in emails. It's required if you're using email identity. " created="Sun, 12 Feb 2023 17:23:15 GMT"/>
<outline text="Default: undefined." created="Sun, 12 Feb 2023 17:26:22 GMT"/>
</outline>
<outline text="### flUseTwitterIdentity" created="Sat, 11 Feb 2023 14:56:54 GMT">
<outline text="If you want to use Twitter for identity instead of email, set this true. " created="Sat, 11 Feb 2023 14:58:18 GMT">
<outline text=""flUseTwitterIdentity": true" created="Mon, 30 Jan 2023 18:07:43 GMT"/>
</outline>
<outline text="If it's true you also need to specify <i>twitterConsumerKey</i> and <i>twitterConsumerKeySecret</i> in config.json, which you can get from the Twitter developer system. " created="Sat, 11 Feb 2023 14:58:31 GMT"/>
<outline text="Default: false" created="Sat, 11 Feb 2023 14:58:13 GMT"/>
</outline>
<outline text="### flUseS3ForStorage, s3PathForStorage" created="Wed, 15 Feb 2023 14:42:27 GMT">
<outline text="You can use S3 storage instead of local file system storage, by setting <i>flUseS3ForStorage</i> true in config.json. " created="Wed, 15 Feb 2023 14:50:25 GMT"/>
<outline text="Then <i>s3PathForStorage</i> is the path on S3 that FeedLand should use for storage. As with the file system, there will be publicFiles nad privateFiles sub-directories." created="Wed, 15 Feb 2023 14:50:57 GMT"/>
<outline text="The publicFiles content can be accessed over the web the same way they would if they were stored locally on the FeedLand server machine. " created="Wed, 15 Feb 2023 14:51:57 GMT"/>
<outline text="The default for <i>flUseS3ForStorage</i> is false." created="Wed, 15 Feb 2023 14:52:37 GMT"/>
<outline text="Here are <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/s3storage.md">some tips</a> for setting things up on the Amazon side of this. " created="Thu, 16 Feb 2023 14:29:12 GMT"/>
</outline>
<outline text="### flNightlyBackup">
<outline text="If true we backup the database at midnight local time to the data sub-folder of the folder containing the FeedLand app. " created="Wed, 29 Mar 2023 13:40:45 GMT"/>
<outline text="The default value for flNightlyBackup is false." created="Wed, 29 Mar 2023 13:58:40 GMT"/>
</outline>
<outline text="### maxGetAllUsers" created="Fri, 14 Jul 2023 15:55:14 GMT">
<outline text="The number of users who are returned when database.getAllUsers is called, and for the <a href="https://feedland.org/?userslist">Recent Users</a> command in the feedlandHome app." created="Fri, 14 Jul 2023 15:56:09 GMT"/>
<outline text="The default value for maxGetAllUsers is 100." created="Wed, 29 Mar 2023 13:58:40 GMT"/>
</outline>
<outline text="### flUseRiverCache, ctSecsLifeRiverCache" created="Wed, 13 Sep 2023 14:10:15 GMT">
<outline text="FeedLand can cache rivers so that every time one is requested, if nothing has changed in the feeds it contains, it can save doing a database rebuild for that river. " created="Wed, 13 Sep 2023 14:10:42 GMT"/>
<outline text="We also age-out cache elements, so they to rebuild every so often even if none of the feeds they contain have updated. " created="Wed, 13 Sep 2023 14:11:43 GMT"/>
<outline text="The default value of flUseRiverCache is true. " created="Wed, 13 Sep 2023 14:12:22 GMT"/>
<outline text="The default value of ctSecsLifeRiverCache is 300 (five minutes). " created="Wed, 13 Sep 2023 14:12:44 GMT"/>
</outline>
<outline text="### flRenewSubscriptions" created="Tue, 19 Sep 2023 15:30:49 GMT">
<outline text="If true, we renew rssCloud subscriptions every 24 hours. " created="Tue, 19 Sep 2023 15:30:51 GMT"/>
<outline text="If you're running behind a firewall, you should turn this off, the subscription renewal will fail. " created="Tue, 19 Sep 2023 15:33:54 GMT"/>
<outline text="The default value is true." created="Tue, 19 Sep 2023 15:31:18 GMT"/>
</outline>
<outline text="### flStaticFilesInSql" created="Thu, 21 Sep 2023 13:35:14 GMT">
<outline text="If true, FeedLand will store static files in an SQL table instead of the local filesystem or S3." created="Thu, 21 Sep 2023 13:35:19 GMT"/>
<outline text="This setting overrides the other storage-related config settings such as flUseS3ForStorage and s3PathForStorage or publicFilesPath. In other words even if you have it set up to save to S3, we will save to the local table if flStaticFilesInSql is true. It's set up this way so migration from S3 or local files to the database is automatic, if it can't find a file in the table, it'll try to find it in the other storage location, if so it returns that. " created="Thu, 21 Sep 2023 13:35:47 GMT"/>
<outline text="The default value is false." created="Tue, 19 Sep 2023 15:31:18 GMT"/>
</outline>
<outline text="### logMinSecs, logMaxResults" created="Wed, 27 Sep 2023 16:31:37 GMT">
<outline text="<i>New feature, 9/27/23.</i>" created="Wed, 27 Sep 2023 16:32:08 GMT"/>
<outline text="FeedLand will log info about SQL queries that take longer than <i>logMinSecs</i> seconds or return more than <i>logMaxResults</i> results. " created="Wed, 27 Sep 2023 16:32:35 GMT"/>
<outline text="Default values are 5 and 1000." created="Wed, 27 Sep 2023 16:33:10 GMT"/>
</outline>
<outline text="### flUseSqlForSockets, minSecsBetwSqlSocketChecks" created="Wed, 27 Sep 2023 16:34:03 GMT">
<outline text="<i>New feature, 9/27/23.</i>" created="Wed, 27 Sep 2023 16:32:08 GMT"/>
<outline text="If <i>flUseSqlForSockets</i> is true in addition to sending websocket messages when we find a new feed item, either through scanning or receiving and rssCloud ping, we periodically do an SQL query for new elements in the items table. You would set this true if you're running FeedLand in a multiple-instance environment. " created="Wed, 27 Sep 2023 16:34:30 GMT"/>
<outline text="<i>minSecsBetwSqlSocketChecks</i> determines how often FeedLand will do the SQL query if flUseSqlForSockets is true." created="Wed, 27 Sep 2023 16:36:59 GMT"/>
<outline text="Default values are false and 5." created="Wed, 27 Sep 2023 16:37:17 GMT"/>
</outline>
<outline text="### flWriteRssFilesLocally, localRssPath" created="Wed, 27 Sep 2023 22:51:37 GMT">
<outline text="<i>New feature, 9/27/23.</i>" created="Wed, 27 Sep 2023 16:32:08 GMT"/>
<outline text="If <i>flWriteRssFilesLocally</i> is true, when we write an RSS file, in addition to saving it to a public place we also save it to the system's local disk." created="Wed, 27 Sep 2023 22:52:11 GMT"/>
<outline text="<i>localRssPath</i> is the path we save it to. This feature has been there since the software was first written, it served as a debugging aid, but there was no way to control the feature, so we added the boolean so you could turn the feature off on systems that don't have local filesystems. " created="Wed, 27 Sep 2023 22:52:40 GMT"/>
<outline text="flWriteRssFilesLocally defaults true for backward compatibility." created="Wed, 27 Sep 2023 22:53:49 GMT"/>
<outline text="localRssPath defaults to "data/feeds/"." created="Wed, 27 Sep 2023 22:54:06 GMT"/>
</outline>
<outline text="### flAllowWordpressIdentity" created="Wed, 01 Nov 2023 15:08:52 GMT">
<outline text="<i>New feature, 11/1/23.</i>" created="Wed, 01 Nov 2023 15:08:55 GMT"/>
<outline text="If true, users can create accounts using their WordPress account. " created="Wed, 01 Nov 2023 15:09:13 GMT"/>
<outline text="The default value is true." created="Tue, 19 Sep 2023 15:31:18 GMT"/>
</outline>
</outline>
<outline text="docs/userroles.md" created="Sun, 05 Nov 2023 22:04:48 GMT">
<outline text="# New <i>roles</i> column in the <i>user</i> table" created="Sun, 05 Nov 2023 22:04:56 GMT">
<outline text="There's a new column in the users table called roles. " created="Mon, 06 Nov 2023 13:03:50 GMT"/>
<outline text="It defaults to user. If you change it to admin for a user, they will be able to "supervise" any other user on a FeedLand instance, for support and debugging. " created="Mon, 06 Nov 2023 13:04:02 GMT"/>
</outline>
<outline text="### How to upgrade" created="Sun, 05 Nov 2023 22:05:59 GMT">
<outline text="Create a new column in the <i>users</i> table:" created="Sun, 05 Nov 2023 22:06:43 GMT">
<outline text="`alter table users add column role varchar(32) default 'user';`" created="Sun, 05 Nov 2023 22:06:53 GMT"/>
</outline>
<outline text="There is no user interface at this time for setting the value of a user's role, but you can do it at the command line:" created="Sun, 05 Nov 2023 22:08:54 GMT">
<outline text="`update users set role = 'admin' where screenname = 'betsyguernsey';`" created="Sun, 05 Nov 2023 22:09:32 GMT"/>
</outline>
</outline>
<outline text="### Context" created="Sun, 05 Nov 2023 22:11:43 GMT">
<outline text="This feature is used to implement Supervisor Mode, where an admin user can see the product from the point of view of another user, to help diagnose a support issue. " created="Sun, 05 Nov 2023 22:11:47 GMT"/>
<outline text="It's patterned after a similar feature in WordPress." created="Sun, 05 Nov 2023 22:12:20 GMT"/>
<outline text="Docs for using Supervisor Mode will appear elsewhere. " created="Mon, 06 Nov 2023 12:58:42 GMT"/>
</outline>
</outline>
<outline text="docs/appscolumn.md" created="Thu, 02 Nov 2023 13:26:08 GMT">
<outline text="# What is the apps column in users table for?" created="Thu, 02 Nov 2023 13:26:25 GMT">
<outline text="The apps column is a JSON object that we use to store info about the apps we connect with, or any other data an app wants to keep around on a per-user basis." created="Thu, 02 Nov 2023 13:27:48 GMT"/>
</outline>
<outline text="### Background" created="Thu, 02 Nov 2023 13:45:14 GMT">
<outline text="There's a shell coming for writing browser-based UIs for FeedLand. I don't want the feedlandHome user interface to be the only way of using FeedLand. "/>
<outline text="Every app that builds on FeedLand will need storage, the <i>apps</i> object is for user-level app storage. "/>
</outline>
<outline text="### Example" created="Thu, 02 Nov 2023 13:28:46 GMT">
<outline text="<a href="https://textcaster.org/">Textcaster</a> is an app I did last spring that turns FeedLand into a linkblog. I use it for the <a href="http://scripting.com/?tab=links">linkblog</a> on Scripting News. " created="Thu, 02 Nov 2023 13:29:27 GMT"/>
<outline text="This is an example of the apps object for each user of Textcaster." created="Thu, 02 Nov 2023 13:30:08 GMT"/>
<outline text="<%includeExample ("appsObjectForTextcaster")%>"/>
</outline>
</outline>
<outline text="docs/wordpresslogin.md" created="Wed, 01 Nov 2023 14:53:25 GMT">
<outline text="# WordPress login upgrade" created="Sat, 14 Oct 2023 15:16:15 GMT">
<outline text="How to set up FeedLand to allow users to login via <a href="https://developer.wordpress.com/docs/wpcc/">WordPress Connect</a>. " created="Wed, 01 Nov 2023 14:53:57 GMT"/>
</outline>
<outline text="### Create an app on WordPress.com" created="Wed, 01 Nov 2023 14:54:16 GMT">
<outline text="Create a <a href="https://developer.wordpress.com/apps/">new application</a> on wordpress.com. " created="Wed, 01 Nov 2023 14:54:48 GMT"/>
<outline text="It's up to you what the name, description and website url is for the app. " created="Wed, 01 Nov 2023 15:02:41 GMT"/>
<outline text="The "Redirect URL" is essential and must be right or it won't work." created="Wed, 01 Nov 2023 15:03:43 GMT">
<outline text="`https://myfeedland.org/callbackFromWordpress`" created="Wed, 01 Nov 2023 15:02:00 GMT"/>
</outline>
<outline text="That assumes your server is hosted on myfeedland.org." created="Wed, 01 Nov 2023 15:01:39 GMT"/>
</outline>
<outline text="### Add this to config.json" created="Wed, 01 Nov 2023 14:56:45 GMT">
<outline text="<%includeExample ("wordpressLoginConfig")%>"/>
<outline text="Obviously replace the values for clientId and clientSecret with the ones you got from the WordPress app page." created="Wed, 01 Nov 2023 15:04:37 GMT"/>
</outline>
<outline text="### Making WordPress identity the default" created="Mon, 13 Nov 2023 16:42:57 GMT">
<outline text="Set config.flWordPressIdentityDefault to true and restart. " created="Mon, 13 Nov 2023 16:43:06 GMT"/>
<outline text="The buttons on the logon page of your server will now link up to a WordPress identity. " created="Mon, 13 Nov 2023 16:43:38 GMT"/>
<outline text="There is a link in the <a href="https://imgs.scripting.com/2023/11/13/signondialog.png">instructions</a> that you can click to sign up via email as before. " created="Mon, 13 Nov 2023 16:44:13 GMT"/>
<outline text="The commands in the System menu have been updated as well. " created="Mon, 13 Nov 2023 16:44:31 GMT"/>
</outline>
</outline>
<outline text="docs/readinglistupgrade.md" created="Sat, 14 Oct 2023 15:16:07 GMT">
<outline text="# Reading Lists upgrade" created="Sat, 14 Oct 2023 15:16:15 GMT">
<outline text="If you have a FeedLand installation prior to v0.6.0, released on October 14, 2023, you'll need to make some changes to the database before installing the new software. " created="Sat, 14 Oct 2023 15:16:32 GMT"/>
<outline text="There are changes to the subscriptions table, and two new tables, readinglists and readinglistsubscriptions." created="Sat, 14 Oct 2023 15:41:21 GMT"/>
<outline text="The new software supports Reading Lists, user-level docs to come." created="Sat, 14 Oct 2023 15:47:03 GMT"/>
</outline>
<outline text="### Notes on <i>subscriptions</i> table changes" created="Sat, 14 Oct 2023 15:19:17 GMT">
<outline text="We had to change the lengths of <i>listName</i> and <i>feedUrl</i> to create space for adding <i>urlReadingList</i> to the primary key in the <i>subscriptions</i> table. " created="Sat, 14 Oct 2023 15:19:27 GMT"/>
<outline text="This created problems for us, and possibly will for you. Some feedUrl's may not fit in 256 characters. In feedland.org's database, there were only three records, out of tens of thousands. I solved the problem by deleting the subscriptions. Far from an ideal solution, but the other alternative was to reorganize this table and the code that runs it, and the cost for that was too high. I'm still learning about SQL databases, and I apologize if you hit similar problems in this change, if so -- please post a note in <a href="https://github.com/scripting/feedlandInstall/issues/40#issue-1943334716">this thread</a>." created="Sat, 14 Oct 2023 15:20:13 GMT"/>
</outline>
<outline text="### Database changes" created="Sat, 14 Oct 2023 15:17:19 GMT">
<outline text="<%includeExample ("readingListSqlChanges")%>"/>
</outline>
<outline text="### Installing new software" created="Sat, 14 Oct 2023 15:44:55 GMT">
<outline text="After making the database changes, install the new versions of feedland and feedlanddatabase with ``npm update``" created="Sat, 14 Oct 2023 15:45:04 GMT"/>
</outline>
<outline text="### Problems, questions, suggestions, kudos" created="Sat, 14 Oct 2023 15:30:26 GMT">
<outline text="I started a <a href="https://github.com/scripting/feedlandInstall/issues/40#issue-1943334716">thread</a> in the Issues section. " created="Sat, 14 Oct 2023 15:30:42 GMT"/>
</outline>
</outline>
<outline text="docs/feb2024transition.md" created="Sat, 13 Apr 2024 13:37:43 GMT">
<outline text="# February 2024 transition" created="Sat, 13 Apr 2024 13:38:02 GMT">
<outline text="We added a bunch of stuff to the database tables that FeedLand uses. " created="Sat, 13 Apr 2024 13:38:12 GMT"/>
<outline text="Here we document the steps, in case you're operating a pre-Feb2024 FeedLand install. " created="Sat, 13 Apr 2024 13:39:19 GMT"/>
<outline text="Hopefully this will be the last time we do such a chaotic transition. " created="Sat, 13 Apr 2024 13:38:51 GMT"/>
</outline>
<outline text="The steps" created="Sun, 25 Feb 2024 14:31:23 GMT">
<outline text="1. Created a new feedland database setup using the original <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.sql">setup.sql</a>." created="Sun, 25 Feb 2024 14:31:30 GMT"/>
<outline text="2. Ran the current version of feedland. " created="Sun, 25 Feb 2024 14:31:48 GMT"/>
<outline text="3. Fixed all the SQL errors because the new columns weren't defined. This required running four bits of code at the command line." created="Sun, 25 Feb 2024 14:32:01 GMT">
<outline text="<%includeExample ("upgradecode1")%>"/>
</outline>
<outline text="4. At that point feedland.js ran reasonably well. There was still one problem, all the feeds had feedId of 0. The feeds table needed to be rearranged a bit. " created="Sun, 25 Feb 2024 14:36:34 GMT"/>
<outline text="5. I ran this bit of code." created="Sun, 25 Feb 2024 14:37:14 GMT">
<outline text="<%includeExample ("upgradecode2")%>"/>
</outline>
<outline text="6. It worked. Now new feeds are getting feedId values that increment with each new feed. " created="Sun, 25 Feb 2024 14:41:52 GMT"/>
<outline text="7. I then made the changes I made manually to the old version of setup.sql, and that's the new version. " created="Sun, 25 Feb 2024 14:42:50 GMT"/>
<outline text="8. I deleted setup2.sql." created="Sun, 25 Feb 2024 14:44:08 GMT"/>
<outline text="9. We now know that the code and spec for the database are in agreement, and hopefully they will never fall out of sync again. This was some bad practice over here. Mea culpa. " created="Sun, 25 Feb 2024 14:48:50 GMT"/>
<outline text="10. To be sure we're on solid ground I created a new server following with the new setup and it's still running smoothly in mid-April 2024. " created="Sat, 13 Apr 2024 13:40:34 GMT"/>
</outline>
</outline>
<outline text="docs/howsubscriptionworks.md" created="Wed, 12 Apr 2023 16:04:45 GMT">
<outline text="# How subscription works in FeedLand" created="Wed, 12 Apr 2023 16:04:52 GMT">
<outline text="For each feed in the database, it keeps track of who first subscribed to the feed."/>
<outline text="When a user subscribes to a feed, first we check to see if it's in the database, if it is, we go ahead and subscribe the user."/>
<outline text="If the feed is not in the database, we run a query to see how many feeds the user is the first subscriber of. If that number is lower than the limit,Êconfig.maxNewFeedSubscriptions, we go ahead and subscribe."/>
<outline text="If the feed is not in the database, and the user is at the limit, we do not subscribe to the feed and return an error. The user sees a dialog that says they have exceeded the limit."/>
<outline text="All the code for this, other than the UI, is in <a href="https://github.com/scripting/feedland/blob/main/database/database.js#L1730">feedlanddatabase</a>."/>
</outline>
</outline>
<outline text="docs/examples/configforhttps.json" created="Tue, 21 Feb 2023 16:47:16 GMT">
<outline text="{">
<outline text=""whatIsThis": "An example config.json file for a FeedLand installation running under HTTPS, with news products and special feeds enabled."," created="Tue, 21 Feb 2023 16:49:06 GMT"/>
<outline text="" created="Tue, 21 Feb 2023 16:50:01 GMT"/>
<outline text=""port": 1452,"/>
<outline text=""/>
<outline text=""flWebsocketEnabled": true,"/>
<outline text=""websocketPort": 1462,"/>
<outline text=""urlWebsocketServerForClient": "wss://myfeedland.bullhome.com/","/>
<outline text=""/>
<outline text=""myDomain": "myfeedland.bullhome.com","/>
<outline text=""urlFeedlandApp": "https://myfeedland.bullhome.com/"," created="Mon, 20 Mar 2023 16:19:40 GMT"/>
<outline text="" created="Tue, 21 Feb 2023 16:48:19 GMT"/>
<outline text=""mailSender": "bullmancuso@bullhome.com","/>
<outline text=""confirmEmailSubject": "bull's feedland confirmation","/>
<outline text=""/>
<outline text=""urlServerForEmail": "https://myfeedland.bullhome.com/","/>
<outline text=""urlServerForClient": "https://myfeedland.bullhome.com/","/>
<outline text=""/>
<outline text=""database": {">
<outline text=""host": "mydatabaseprovider.com","/>
<outline text=""port": 40303,"/>
<outline text=""user": "admin","/>
<outline text=""password": "xxx","/>
<outline text=""charset": "utf8mb4","/>
<outline text=""connectionLimit": 100,"/>
<outline text=""database": "feedland","/>
<outline text=""debug": false,"/>
<outline text=""flLogQueries": false,"/>
<outline text=""flQueueAllRequests": false"/>
<outline text="},"/>
</outline>
<outline text=""/>
<outline text=""flUseTwitterIdentity": false,"/>
<outline text=""flEnableNewUsers": true,"/>
<outline text=""flBackupOnStartup": false,"/>
<outline text=""/>
<outline text=""flNewsProducts": true,"/>
<outline text=""flUserFeeds": true,"/>
<outline text=""flLikesFeeds": true,"/>
<outline text=""/>
<outline text=""urlForFeeds": "https://s3.amazonaws.com/bullman/feedland/userfeeds/","/>
<outline text=""s3PathForFeeds": "/bullman/feedland/userfeeds/","/>
<outline text=""s3LikesPath": "/bullman/feedland/likes/","/>
<outline text=""urlNewsProducts": "https://newsprod.bullhome.com/","/>
<outline text=""/>
<outline text=""maxRiverItems": 175,"/>
<outline text=""maxNewFeedSubscriptions": 250,"/>
<outline text=""/>
<outline text=""flUpdateFeedsInBackground": true,"/>
<outline text=""minSecsBetwFeedChecks": 15,"/>
<outline text=""/>
<outline text=""productName": "FeedLand","/>
<outline text=""productNameForDisplay": "FeedLand","/>
<outline text=""/>
<outline text=""urlServerHomePageSource": "http://scripting.com/code/feedland/home/index.html","/>
<outline text=""/>
<outline text=""githubBackup": {">
<outline text=""enabled": false,"/>
<outline text=""username": "mygithubaccount","/>
<outline text=""password": "mygithubpassword","/>
<outline text=""repo": "feedlandServer","/>
<outline text=""basepath": "backups/","/>
<outline text=""committer": {">
<outline text=""name": "Jane Doe","/>
<outline text=""email": "jane.doe@gmail.com""/>
<outline text="},"/>
</outline>
<outline text=""message": ".""/>
<outline text="}"/>
</outline>
<outline text="}"/>
</outline>
</outline>
<outline text="docs/s3storage.md" created="Thu, 16 Feb 2023 14:21:31 GMT">
<outline text="# Using S3 storage" created="Thu, 16 Feb 2023 14:21:35 GMT">
<outline text="You can tell FeedLand to store data files on Amazon S3 instead of the local file system. This is necessary in some hosting setups that don't let apps write to the local file system. This is where the <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/config.md#fluses3forstorage-s3pathforstorage">config.json settings</a> are explained. " created="Thu, 16 Feb 2023 14:22:48 GMT"/>
<outline text="On the S3 side, here's how you set up a bucket to serve this function for FeedLand. " created="Thu, 16 Feb 2023 14:24:24 GMT">
<outline text="1. Static website hosting must be enabled for the bucket."/>
<outline text="2. All "Block public access" options must be disabled."/>
<outline text="3. If you provision a user and credentials for FeedLand (recommended), select "ACLs enabled" under "Object ownership.""/>
<outline text="4. The credentials must be supplied as environment variables (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`)."/>
<outline text="5. The credentials you use must have permission to read, list, and write to the S3 bucket. Here is an example policy:">
<outline text="<%includeExample ("bucketPolicy")%>"/>
</outline>
</outline>
<outline text="Thanks to <a href="https://github.com/chriszarate">chriszarate</a> for writing these notes. " created="Thu, 16 Feb 2023 14:27:47 GMT"/>
</outline>
</outline>
<outline text="docs/signup.md" created="Wed, 25 Jan 2023 15:12:18 GMT">
<outline text="# How to sign up to use your instance of FeedLand" created="Wed, 25 Jan 2023 15:12:21 GMT">
<outline text="This is the first release of the new mechanism for creating a user account in FeedLand, so it's a good idea to say in one place, how to do that." created="Wed, 25 Jan 2023 15:12:28 GMT"/>
<outline text="1. Enter the URL of your FeedLand instance into a browser. You should be greeted by a <a href="http://scripting.com/images/2023/01/25/introductoryDialog.png">dialog</a> inviting you to sign in or sign up. Click the <i>Sign up</i> button." created="Wed, 25 Jan 2023 15:12:55 GMT"/>
<outline text="2. A <a href="http://scripting.com/images/2023/01/25/signupDialog.png">dialog</a> appears asking you to enter a name and an email address. Both must be unique. The name must be at least four characters long. The dialog will tell you as you type if the name you've entered is available. When you're ready click the <i>Send</i> button. " created="Wed, 25 Jan 2023 15:13:53 GMT"/>
<outline text="3. You're prompted to check your email. When you do there should be an email whose subject is "FeedLand confirmation". There's a link in the email. Click it. " created="Wed, 25 Jan 2023 15:16:23 GMT"/>
<outline text="4. You should be taken back to your FeedLand instance. A dialog asking if you want to subscribe to a few feeds to get started." created="Wed, 25 Jan 2023 15:14:50 GMT"/>
</outline>
</outline>
<outline text="docs/sourceopml.md" created="Fri, 03 Feb 2023 14:15:24 GMT">
<outline text="# About source.opml" created="Fri, 03 Feb 2023 14:15:31 GMT">
<outline text="I write code in an outliner, and it generates the code in this repo from the outline. So what you see as source on GitHub actually isn't what I edit. I couldn't accept a pull request to the generated code. It would just be wiped out the next time I made a change to the outline and re-generated" created="Tue, 24 Jan 2023 17:22:57 GMT"/>
<outline text="So the best thing to do when you spot a mistake is flag it as an issue in the repo, point to the code in question if that's helpful, and I'll thank you and make the fix myself." created="Tue, 24 Jan 2023 17:23:31 GMT"/>
<outline text="And if you want to add a feature and have it included in this distribution, post an issue and let's talk about it. ;-)" created="Tue, 24 Jan 2023 17:24:03 GMT"/>
<outline text="BTW, if you have an outliner handy, you can read the source the way I wrote it. I always try to include a source.opml file in my projects, as I do <a href="https://github.com/scripting/feedlandInstall/blob/main/source.opml">here</a>. " created="Tue, 24 Jan 2023 17:27:09 GMT"/>
<outline text="You can read the code in source.opml by <%gitSourceReader ("feedlandInstall", "clicking this link")%>." created="Mon, 30 Jan 2023 16:30:27 GMT"/>
</outline>
</outline>
<outline text="docs/tips.md" created="Thu, 05 Jan 2023 14:17:27 GMT">
<outline text="# Tips" created="Thu, 05 Jan 2023 14:17:30 GMT">
<outline text="Random advice for getting started with your own FeedLand installation." created="Thu, 05 Jan 2023 14:17:33 GMT"/>
</outline>
<outline text="### How to restart your server" created="Tue, 24 Jan 2023 17:11:27 GMT">
<outline text="If you launched it at the command line, press Control-C on Unix or Cmd-C on a Mac. " created="Tue, 24 Jan 2023 17:11:33 GMT"/>
<outline text="Then, switch into the directory with feedland.js, and launch it with " created="Tue, 24 Jan 2023 17:11:56 GMT">
<outline text="`node feedland.js`" created="Tue, 24 Jan 2023 17:12:28 GMT"/>
</outline>
</outline>
<outline text="### How to update when a new version of FeedLand comes out" created="Sun, 22 Jan 2023 16:11:30 GMT">
<outline text="Change into the directory containing feedland.js."/>
<outline text="`npm update`"/>
<outline text="Quit and restart the server."/>
</outline>
<outline text="### Manually setting up a user" created="Thu, 05 Jan 2023 14:17:53 GMT">
<outline text="You can create a new user by entering a MySQL command at the command line. " created="Thu, 05 Jan 2023 14:18:04 GMT">
<outline text="`insert into users (screenname, emailAddress, emailSecret) values ('bullmancuso', 'bullmancuso@gmail.com', 'getoutahere');`" created="Thu, 05 Jan 2023 14:18:37 GMT"/>
</outline>
<outline text="On the user's machine, go to the home page of your server, open the JavaScript console and enter." created="Thu, 05 Jan 2023 14:19:07 GMT">
<outline text="`localStorage.emailMemory = "{'emailaddress': 'bullmancuso@gmail.com', 'code': 'getoutahere', 'screenname': "bullmancuso'}";`" created="Mon, 16 Jan 2023 15:44:26 GMT"/>
</outline>
<outline text="Then go to the feed list for the user." created="Thu, 05 Jan 2023 14:24:55 GMT">
<outline text="`http://yourserver.com/?username=bullmancuso`" created="Thu, 05 Jan 2023 14:25:06 GMT"/>
</outline>
</outline>
</outline>
<outline text="docs/installnode.md" created="Sat, 21 Jan 2023 20:09:51 GMT">
<outline text="# How to install Node" created="Sat, 21 Jan 2023 20:09:56 GMT">
<outline text="I asked <a href="https://chat.openai.com">chat.openai.com</a> to write this for me. :-)" created="Sat, 21 Jan 2023 20:10:02 GMT"/>
</outline>
<outline text="### How to" created="Sat, 21 Jan 2023 20:10:17 GMT">
<outline text="To install Node.js, you can download the installer package from the <a href="https://nodejs.org/">official website</a> and run it on your computer. The installer will guide you through the process of installing Node.js and updating your system path to include the Node.js executable."/>
<outline text="Alternatively, you can install Node.js using a package manager such as apt (on Ubuntu) or brew (on macOS)."/>
<outline text="On Ubuntu:">
<outline text="```">
<outline text="sudo apt-get update" created="Sat, 21 Jan 2023 20:11:35 GMT"/>
<outline text="sudo apt-get install nodejs"/>
<outline text="```" created="Sat, 21 Jan 2023 20:11:39 GMT"/>
</outline>
</outline>
<outline text="On MacOS:">
<outline text="`brew install node`"/>
</outline>
<outline text="You can check the version of Node.js that you have installed by running the command node -v in your terminal."/>
</outline>
</outline>
<outline text="docs/setupses.md" created="Sat, 21 Jan 2023 20:09:51 GMT">
<outline text="# How to setup SES" created="Sat, 21 Jan 2023 20:09:56 GMT">
<outline text="I asked <a href="https://chat.openai.com">chat.openai.com</a> to write this for me. :-)" created="Sat, 21 Jan 2023 20:10:02 GMT"/>
</outline>
<outline text="### How to" created="Sat, 21 Jan 2023 20:10:17 GMT">
<outline text="* Setting up Amazon SES (Simple Email Service) involves several steps, including creating an AWS account, obtaining SMTP credentials, and configuring your email sending domains and email addresses. Here is a general overview of the process:"/>
<outline text="* Create an AWS account: If you don't already have an AWS account, you'll need to create one in order to use Amazon SES. Go to <a href="https://aws.amazon.com/">aws.amazon.com</a> and click on "Create a new AWS account.""/>
<outline text="* Obtain SMTP credentials: Once you have an AWS account, you'll need to obtain SMTP credentials to use for sending email through Amazon SES. Go to the AWS Management Console, select the "Identity and Access Management (IAM)" service, and create a new IAM user with the "Programmatic access" type of access."/>
<outline text="* Create a new SES email sending domain: In the Amazon SES console, click on "Verified Email Addresses" and then "Verify a New Email Address" to verify the email address that you will be sending email from."/>
<outline text="* Create an SNS topic and subscribe your email address: In the Amazon SNS console, create a new topic, and subscribe your email address to it."/>
<outline text="* Configure your DNS: To configure your DNS, you will need to add a few MX, SPF and DKIM records to your domain's DNS settings."/>
<outline text="* Test sending an email: Once you have completed the above steps, you can test sending an email from your email address to another email address."/>
<outline text="* Please note that some of the specifics of these steps may vary depending on your specific use case and the email sending domain you are using. It's recommended to follow Amazon SES documentation for more detailed instructions."/>
</outline>
</outline>
<outline text="emailtemplate.html">
<outline text="<html> ">
<outline text="<head>">
<outline text="<title>[%title%]</title>"/>
<outline text="<meta http-equiv="Content-Type" content="text/html; charset=utf-8">"/>
<outline text="<meta name="viewport" content="width=device-width, initial-scale=1.0">"/>
<outline text="<style>" isComment="true">
<outline text="body {">
<outline text="}"/>
</outline>
<outline text=".divPageBody {">
<outline text="color: black;"/>
<outline text="background-color: whitesmoke;" isComment="true"/>
<outline text="}"/>
</outline>
<outline text="</style>"/>
</outline>
<outline text="<script>" isComment="true" created="Thu, 12 Dec 2013 17:06:51 GMT" pgfnum="33502">
<outline text="function everySecond () {">
<outline text="}"/>
</outline>
<outline text="function startup () {">
<outline text="console.log ("startup");"/>
<outline text="self.setInterval (function () {everySecond ()}, 1000); "/>
<outline text="}"/>
</outline>
<outline text="</script>" created="Thu, 12 Dec 2013 17:07:17 GMT" pgfnum="33504"/>
</outline>
<outline text="</head>"/>
</outline>
<outline text="<body>">
<outline text="<div class="divPageBody">">
<outline text="<p>Click the link below to [%operationToConfirm%].</p>"/>
<outline text="<p><a href="[%confirmationUrl%]">[%confirmationUrl%]</a></p>"/>
<outline text="</div>"/>
</outline>
<outline text="<script>" isComment="true">
<outline text="$(document).ready (function () {">
<outline text="startup ();" created="Wed, 30 Oct 2013 15:20:06 GMT" pgfnum="30656"/>
<outline text="});"/>
</outline>
<outline text="</script>"/>
</outline>
<outline text="</body>"/>
</outline>
<outline text="</html>"/>
</outline>
</outline>
<outline text="package.json">
<outline text="{">
<outline text=""name": "feedlandShell","/>
<outline text=""version": "0.4.1","/>
<outline text=""author": "Dave Winer <dave@scripting.com>","/>
<outline text=""license": "GPLV2"," created="Wed, 18 Jan 2023 17:19:16 GMT"/>
<outline text=""main": "feedland.js","/>
<outline text=""files": [" created="Thu, 24 Feb 2022 17:55:44 GMT">
<outline text="]," created="Thu, 24 Feb 2022 17:55:50 GMT"/>
</outline>
<outline text=""repository": {">
<outline text=""type": "git","/>
<outline text=""url": "https://github.com/scripting/feedLandInstall.git""/>
<outline text="},"/>
</outline>
<outline text=""dependencies" : {">
<outline text=""feedland": "*""/>
<outline text="} "/>
</outline>
<outline text="}"/>
</outline>
</outline>
<outline text="feedland.js" created="Wed, 18 Jan 2023 17:26:58 GMT">
<outline text="const myVersion = "0.4.1", myProductName = "feedlandShell"; " created="Mon, 03 Feb 2014 03:21:03 GMT" pgfnum="36831"/>
<outline text="" created="Wed, 18 Jan 2023 17:27:55 GMT"/>
<outline text="require ("feedland").start ();" created="Wed, 18 Jan 2023 17:28:15 GMT"/>
</outline>
<outline text="readme.md" created="Wed, 04 Jan 2023 15:16:50 GMT">
<outline text="# FeedLand server install" created="Wed, 04 Jan 2023 15:16:53 GMT">
<outline text="Instructions for setting up a FeedLand server." created="Wed, 04 Jan 2023 15:17:13 GMT"/>
</outline>
<outline text="### Private testing and bug fixing" isComment="true" created="Wed, 04 Jan 2023 17:20:57 GMT">
<outline text="We have started testing the install process for FeedLand server as of January 24, 2023. " created="Wed, 04 Jan 2023 17:21:01 GMT"/>
<outline text="If you have access to this site, you can try installing from the <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.md">instructions</a>. Report any problems as <a href="https://github.com/scripting/feedlandInstall/issues">issues</a> in this repo. " created="Fri, 20 Jan 2023 15:57:50 GMT"/>
<outline text="And here's the <a href="http://roadmap.feedland.org/">roadmap</a> for this release. " created="Fri, 03 Feb 2023 14:19:38 GMT"/>
</outline>
<outline text="### About FeedLand" created="Wed, 04 Jan 2023 15:17:28 GMT">
<outline text="I've been running a FeedLand server myself since October 2022. " created="Wed, 04 Jan 2023 15:17:33 GMT"/>
<outline text="It was always the plan to let other people run their own FeedLand instances, but first I wanted to be sure the server ran reasonably smoothly, and the UI was stable. " created="Wed, 04 Jan 2023 15:17:50 GMT"/>
<outline text="I think at the beginning of 2023 we've gotten there. " created="Wed, 04 Jan 2023 15:18:31 GMT"/>
<outline text="Hence this package." created="Wed, 04 Jan 2023 15:18:42 GMT"/>
</outline>
<outline text="### How to install" created="Wed, 04 Jan 2023 15:20:27 GMT">
<outline text="When you follow <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/setup.md">the setup instructions</a> you will have a FeedLand instance running on your server." created="Wed, 04 Jan 2023 15:20:36 GMT"/>
<outline text="You can use it yourself, or share it with others. Or use both models at the same time. " created="Wed, 04 Jan 2023 15:21:07 GMT"/>
<outline text="If you're just using it yourself it does not have to be accessible over the net. " created="Wed, 04 Jan 2023 15:21:35 GMT"/>
</outline>
<outline text="### Where's the source code?" created="Sun, 22 Jan 2023 16:22:56 GMT">
<outline text="The server software is layered as a stack of Node packages that build on each other. These are the packages Dave Winer wrote and maintains. The top level stuff is GPL2-licensed, the lower level packages are MIT-licensed. " created="Sun, 22 Jan 2023 16:32:15 GMT">
<outline text="* <a href="https://github.com/scripting/feedland">feedland</a> -- the top level, the HTTP and websockets interface that connects to the browser-based client." created="Sun, 22 Jan 2023 16:24:51 GMT"/>
<outline text="* <a href="https://github.com/scripting/feedland/tree/main/database">feedlanddatabase</a> -- the code that manages the tables for users, feeds, items, subscriptions, likes. " created="Sun, 22 Jan 2023 16:25:49 GMT"/>
<outline text="* <a href="https://github.com/scripting/opml">opml</a> -- reading and writing OPML files for subscription lists. " created="Sun, 22 Jan 2023 16:30:33 GMT"/>
<outline text="* <a href="https://github.com/scripting/reallysimple">reallysimple</a> -- reading RSS, Atom, RDF feeds. " created="Sun, 22 Jan 2023 16:29:04 GMT"/>
<outline text="* <a href="https://github.com/scripting/rss">daverss</a> -- publishing RSS feeds." created="Sun, 22 Jan 2023 16:28:31 GMT"/>
<outline text="* <a href="https://github.com/scripting/appServer">daveappserver</a> -- handles the file system, mid-level web server, email, identity." created="Sun, 22 Jan 2023 16:25:38 GMT"/>
<outline text="* <a href="https://github.com/scripting/twitter">davetwitter</a> -- interfacing with the Twitter API, identity." created="Sun, 22 Jan 2023 16:27:38 GMT"/>
<outline text="* <a href="https://github.com/scripting/github">davegithub</a> -- writing to GitHub repos, for backups. " created="Sun, 22 Jan 2023 16:30:17 GMT"/>
<outline text="* <a href="https://github.com/scripting/http">davehttp</a> -- low-level HTTP functionality." created="Sun, 22 Jan 2023 16:26:59 GMT"/>
<outline text="* <a href="https://github.com/scripting/sql">davesql</a> -- interfaces to MySQL, queuing. " created="Sun, 22 Jan 2023 16:29:17 GMT"/>
<outline text="* <a href="https://github.com/scripting/mail">davemail</a> -- sending email." created="Sun, 22 Jan 2023 16:27:31 GMT"/>
<outline text="* <a href="https://github.com/scripting/s3">daves3</a> -- reading and writing to and from Amazon S3." created="Sun, 22 Jan 2023 16:28:41 GMT"/>
</outline>
</outline>
<outline text="### HTTPS" created="Tue, 21 Feb 2023 16:58:21 GMT">
<outline text="If you're using HTTPS, Scott Hanson has written a <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/https.md">guide</a> to setting up FeedLand with HTTPS. " created="Tue, 21 Feb 2023 16:41:41 GMT"/>
<outline text="There's a special <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/examples/configforhttps.json">example config.json</a> derived from a working HTTPS installation. " created="Tue, 21 Feb 2023 16:42:46 GMT"/>
</outline>
<outline text="### No pull requests, please" created="Tue, 24 Jan 2023 16:56:56 GMT">
<outline text="I can't accept pull requests because I edit the code in an outliner, that's <a href="https://github.com/scripting/feedlandInstall/blob/main/docs/sourceopml.md">what source.opml is all about</a>. " created="Fri, 03 Feb 2023 14:16:35 GMT"/>
<outline text="So the best thing to do when you spot a mistake is flag it as an <a href="https://github.com/scripting/feedlandInstall/issues">issue</a> in the repo, point to the code in question if that's helpful, and I'll thank you and make the fix myself." created="Tue, 24 Jan 2023 17:23:31 GMT"/>
<outline text="And if you want to add a feature and have it included in this distribution, post an <a href="https://github.com/scripting/feedlandInstall/issues">issue</a> and let's talk about it. ;-)" created="Tue, 24 Jan 2023 17:24:03 GMT"/>
</outline>
<outline text="### Questions, support" created="Wed, 18 Jan 2023 15:34:26 GMT">
<outline text="If your questions are about server installation and setup, post a note in <a href="https://github.com/scripting/feedlandInstall/issues">issues section</a> of this repo. " created="Wed, 18 Jan 2023 15:34:33 GMT"/>
<outline text="If you need help with using FeedLand to manage and share feeds, post a note in the <a href="https://github.com/scripting/feedlandSupport/issues">FeedLandSupport</a> issues section." created="Wed, 18 Jan 2023 15:35:20 GMT"/>
<outline text="No matter where you post it, please look to see if your question has been covered in other threads, and please be <a href="http://guidelines.scripting.com/">respectful</a>. " created="Wed, 18 Jan 2023 15:36:05 GMT"/>
</outline>
</outline>
<outline text="config.json" created="Wed, 04 Jan 2023 16:04:01 GMT">
<outline text="{" created="Wed, 04 Jan 2023 16:04:03 GMT">
<outline text=""whatIsThis": "A simple example config.json file for a FeedLand installation, with none of the extra features turned on."," created="Tue, 21 Feb 2023 16:49:06 GMT"/>
<outline text="" created="Tue, 21 Feb 2023 16:54:30 GMT"/>
<outline text=""port": 1452,"/>
<outline text="" created="Sun, 12 Feb 2023 17:09:00 GMT"/>
<outline text=""flWebsocketEnabled": true,"/>
<outline text=""websocketPort": 1462,"/>
<outline text=""urlWebsocketServerForClient": "ws://mydomain.com:1462/"," created="Mon, 13 Feb 2023 22:30:43 GMT"/>
<outline text="" created="Fri, 20 Jan 2023 17:07:26 GMT"/>
<outline text=""myDomain": "mydomain.com","/>
<outline text=""urlFeedlandApp": "http://mydomain.com/"," created="Mon, 20 Mar 2023 16:19:40 GMT"/>
<outline text="" created="Mon, 23 Jan 2023 20:55:55 GMT"/>
<outline text=""smtpHost": "smtp.mailhost.com","/>
<outline text=""smtpPort": 587,"/>
<outline text=""smtpUsername": "bullman","/>
<outline text=""smtpPassword": "getoutahere","/>
<outline text="" created="Mon, 16 Jan 2023 15:33:21 GMT"/>
<outline text=""mailSender": "bullmancuso@thefamily.org"," created="Fri, 04 Nov 2022 14:52:49 GMT"/>
<outline text=""confirmEmailSubject": "FeedLand confirmation"," created="Wed, 04 Jan 2023 16:10:53 GMT"/>
<outline text=""confirmationExpiresAfter": 86400," created="Mon, 16 Jan 2023 15:34:36 GMT"/>
<outline text=""urlServerForEmail": "http://mydomain.com/","/>
<outline text=""flUseDatabaseForConfirmations": true," created="Wed, 16 Aug 2023 09:48:10 GMT"/>
<outline text="" created="Tue, 17 Jan 2023 17:43:43 GMT"/>
<outline text=""database": {">
<outline text=""host": "mydatabaseprovider.com","/>
<outline text=""port": 40303,"/>
<outline text=""user": "admin","/>
<outline text=""password": "xxx","/>
<outline text=""charset": "utf8mb4","/>
<outline text=""connectionLimit": 100,"/>
<outline text=""database": "feedland","/>
<outline text=""debug": false,"/>
<outline text=""flLogQueries": false,"/>
<outline text=""flQueueAllRequests": false"/>
<outline text="},"/>
</outline>
<outline text="" created="Mon, 16 Jan 2023 15:33:58 GMT"/>
<outline text=""flUseTwitterIdentity": false,"/>
<outline text=""flEnableNewUsers": true,"/>
<outline text=""flBackupOnStartup": false,"/>
<outline text="" created="Fri, 20 Jan 2023 20:05:11 GMT"/>
<outline text=""flNewsProducts": false,"/>
<outline text=""flUserFeeds": false,"/>
<outline text=""flLikesFeeds": false,"/>
<outline text="" created="Fri, 13 Jan 2023 18:59:47 GMT"/>
<outline text=""urlForFeeds": "http://data.mydomain.com/feeds/","/>
<outline text=""s3PathForFeeds": "/data.mydomain.com/feeds/","/>
<outline text=""s3LikesPath": "/data.mydomain.com/likes/", "/>
<outline text=""urlNewsProducts": "http://newsproducts.mydomain.com"," created="Tue, 17 Jan 2023 17:43:44 GMT"/>
<outline text="" created="Wed, 11 Jan 2023 19:18:04 GMT"/>
<outline text=""maxRiverItems": 175,"/>
<outline text=""maxNewFeedSubscriptions": 250,"/>
<outline text=""/>
<outline text=""flUpdateFeedsInBackground": true,"/>
<outline text=""minSecsBetwFeedChecks": 15,"/>
<outline text="" created="Wed, 04 Jan 2023 16:11:33 GMT"/>
<outline text=""productName": "FeedLand","/>
<outline text=""productNameForDisplay": "FeedLand","/>
<outline text=""/>
<outline text=""urlServerHomePageSource": "http://scripting.com/code/feedland/home/index.html","/>
<outline text="" created="Wed, 13 Sep 2023 14:39:27 GMT"/>
<outline text=""flUseRiverCache": true,"/>
<outline text=""ctSecsLifeRiverCache": 300,"/>
<outline text=""/>
<outline text=""githubBackup": {">
<outline text=""enabled": false,"/>
<outline text=""username": "mygithubaccount","/>
<outline text=""password": "mygithubpassword","/>
<outline text=""repo": "feedlandServer","/>
<outline text=""basepath": "backups/","/>
<outline text=""committer": {">
<outline text=""name": "Jane Doe","/>
<outline text=""email": "jane.doe@gmail.com""/>
<outline text="},"/>
</outline>
<outline text=""message": ".""/>
<outline text="}"/>
</outline>
<outline text="}" created="Wed, 04 Jan 2023 16:04:05 GMT"/>
</outline>
</outline>
</outline>
<outline text="build script" created="Wed, 04 Jan 2023 15:16:56 GMT">
<outline text="nodeEditorSuite.utilities.buildIFeedlandInstall ()" created="Fri, 18 Feb 2022 16:51:42 GMT"/>
</outline>
</body>
</opml>