This summarises the use of my shiny apps (at https://shiny.psyctc.org/). The analyses will evolve a bit through 2024 as, I hope, the level of use increases.

Current data

Info

Value

First date in data

2024-02-07

Last date in data

2025-05-18

This analysis time/date

03:13 on 18/05/2025

Number of days spanned

466

Total number of sessions

4959

Mean sessions per day

10.64

I am not using any way to separate different users and session is per app, so if someone used multiple apps during one visit to the server, each app used is counts as a separate session.

App uses per day

Here’s the plot of uses per day.

That shows one large burst of use after the apps were publicised through the Systemic Research Centre Email list (5.iii.24) and a smaller one after a posting to the IDANET list (9.iii.24). There are later bursts that I can’t directly ascribe to any publicity.

Sessions per week

More sensibly, here is the plot by week, actually plotting the sessions per day and counting from the launch from the launch on 7.ii.24. Where the last week is still an incomplete week that has been taken into account in the calculations. 95% CIs are Poisson model estimates.

Breaking that down by app gives me this.

And facetting by app gives this.

Sessions per Month

The first month was incomplete and the last month will usually be incomplete, that is taken into consideration in computing these session per day rates.

Numbers of sessions per app

Here’s the number of times each app has been used during that period.

App

Sessions

First used

Days available

Sessions per day

Days used

% days used

RCI1

2,189

2024-02-07

466

4.697

372

80%

CSC1

785

2024-02-07

466

1.685

276

59%

COREpapers1

284

2024-05-11

372

0.763

139

37%

RCI2

262

2024-02-07

466

0.562

137

29%

CORE-OM_scoring

190

2024-04-16

397

0.479

117

29%

Cronbach1Feldt

182

2024-02-07

466

0.391

124

27%

CIcorrelation

109

2024-02-07

466

0.234

66

14%

Gaussian1

106

2024-03-05

439

0.241

76

17%

ECDFplot

99

2024-02-07

466

0.212

41

9%

Spearman-Brown

72

2024-05-03

380

0.189

51

13%

CSClookup2a

66

2024-02-07

466

0.142

41

9%

CIproportion

61

2024-02-07

466

0.131

49

11%

CImean

56

2024-02-07

466

0.120

46

10%

CISpearman

50

2024-02-07

466

0.107

44

9%

random1

45

2024-11-19

180

0.250

39

22%

Histogram_and_summary1

42

2024-03-25

419

0.100

22

5%

plotCIPearson

40

2024-02-07

466

0.086

28

6%

Feldt2

39

2024-11-27

172

0.227

29

17%

Bonferroni1

35

2024-03-24

420

0.083

23

5%

CIdiff2proportions

34

2024-02-07

466

0.073

19

4%

Attenuation

33

2024-10-09

221

0.149

23

10%

Screening1

30

2024-02-07

466

0.064

24

5%

g_from_d_and_n

30

2024-02-07

466

0.064

28

6%

CISD

29

2024-02-07

466

0.062

26

6%

Attenuation2

26

2024-10-11

219

0.119

23

10%

Create_univariate_data

24

2024-04-09

404

0.059

23

6%

getCorrectedR

18

2024-10-13

217

0.083

14

6%

Hashing_IDs

12

2025-04-05

43

0.279

8

19%

useConvFiveNum

11

2025-04-07

41

0.268

10

24%

The columns of Sessions per day and of Percentage days used are rather misleading as different apps have been available for very different numbers of days. I won’t be able to get a less misleading forest plot of the mean usage per day per app until there has been far more usage than we have had so far so I will maybe add that later in the year.

However, I can get confidence intervals for proportions on what usage we already have so here’s a less misleading forest plot of proportion of the available days on which each app was used. The dotted reference line marks the overall usage as a proportion of days available across all the apps.

Here’s a map of usage per app against dates. The sizes of the points show how many times the app was used on that day. The y axis sorts by first date used and then by descending total number of times used.

That shows that many of the apps were first used on the same day (7.ii.2024) which was the day I set up this logging. I tested all the then existing apps that day so all appear on that day.

Breakdown by day of the week

Weekday

n

percent

Mon

7,149

17%

Tue

7,825

18%

Wed

6,839

16%

Thu

6,118

14%

Fri

6,593

15%

Sat

3,844

9%

Sun

4,196

10%

Same sorted!

Weekday

n

percent

Tue

7,825

18%

Mon

7,149

17%

Wed

6,839

16%

Fri

6,593

15%

Thu

6,118

14%

Sun

4,196

10%

Sat

3,844

9%

Time of day

I’ve broken this down by hour. The server is to some extent protected behind a proxy at my ISP which is good for forcing https access but it does mean that I don’t know where people come from so this is all UMT (i.e. old “GMT”: internet time). I think it also suggests, assuming that most accesses are during working hours, that most visitors/users are coming to the site from Europe or the Americas.

Hour

n

percent

0

51

1%

1

48

1%

2

49

1%

3

47

1%

4

136

3%

5

233

5%

6

317

6%

7

266

5%

8

328

7%

9

306

6%

10

292

6%

11

264

5%

12

301

6%

13

312

6%

14

361

7%

15

290

6%

16

236

5%

17

236

5%

18

178

4%

19

170

3%

20

207

4%

21

163

3%

22

98

2%

23

70

1%

Same sorted.

Hour

n

percent

14

361

7%

8

328

7%

6

317

6%

13

312

6%

9

306

6%

12

301

6%

10

292

6%

15

290

6%

7

266

5%

11

264

5%

16

236

5%

17

236

5%

5

233

5%

20

207

4%

18

178

4%

19

170

3%

21

163

3%

4

136

3%

22

98

2%

23

70

1%

0

51

1%

2

49

1%

1

48

1%

3

47

1%

Browsers

For what little it’s worth, here are the browser IDs picked up by shiny (in descending order of frequency).

The value of “ahrefs.com/robot/” is my translation of accesses that identify their browser as: “Netscape 5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/) -?”.

For reasons I don’t understand, my open source shiny does not seem to detect Microsoft Edge. I have used the apps with Edge (ugh) and it didn’t show up here. If you know why, or even how to detect Edge, do tell me (https://www.psyctc.org/psyctc/contact-me/)!

Browser

n

Chrome

3,455

Firefox

1,013

Safari

400

Other

50

Opera

25

The “Other” there refers to visits from browsers not identifying as one of Chrome, Firefox, Opera or Safari. These are usually or always crawlers, the breakdown of them was as follows.

Browser2

n

http://ahrefs.com/robot/

44

https://developers.facebook.com/docs/sharing/webmasters/crawler

4

Netscape.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBAV/493.0.0.43.104;FBBV/693509315;FBDV/iPhone14,5;FBMD/iPhone;FBSN/iOS;FBSV/18.1.1;FBSS/3;FBCR/;FBID/phone;FBLC/sv_SE;FBOP/80] -?

2

Renaming “N”etscape.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBAV/493.0.0.43.104;FBBV/693509315;FBDV/iPhone14,5;FBMD/iPhone;FBSN/iOS;FBSV/18.1.1;FBSS/3;FBCR/;FBID/phone;FBLC/sv_SE;FBOP/80] -?" to “Netscape.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X)” makes things more readable.

I am a little bit interested in when these crawlers come and go so …

Browser2

firstSeen

lastSeen

http://ahrefs.com/robot/

2024-11-30

2025-05-17

https://developers.facebook.com/docs/sharing/webmasters/crawler

2025-01-08

2025-04-23

Netscape.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X)

2025-02-10

2025-02-10

This shows the map against time, size shows number per day.

For what it’s worth, here are the numbers per day.

Other browser

date

nPerDay

Netscape.0 (iPhone; CPU iPhone OS 18_1_1 like Mac OS X)

2025-02-10

2

http://ahrefs.com/robot/

2024-11-30

1

2024-12-01

1

2024-12-13

2

2024-12-14

5

2024-12-18

1

2024-12-24

1

2024-12-31

1

2025-01-01

2

2025-01-05

1

2025-01-11

1

2025-01-15

2

2025-01-16

1

2025-01-21

1

2025-01-26

1

2025-01-31

1

2025-02-02

1

2025-02-06

1

2025-02-11

1

2025-02-14

1

2025-02-16

1

2025-03-06

1

2025-03-18

1

2025-03-20

1

2025-03-21

1

2025-03-24

1

2025-03-29

1

2025-04-06

1

2025-04-08

1

2025-04-13

1

2025-04-18

1

2025-04-22

1

2025-04-23

1

2025-04-24

1

2025-04-28

1

2025-05-12

2

2025-05-17

1

https://developers.facebook.com/docs/sharing/webmasters/crawler

2025-01-08

1

2025-01-09

2

2025-04-23

1

Browser versions

I can’t think it matters but here is the breakdown with the version numbers as well as the browser name.

Browser

n

Chrome 131

454

Chrome 130

338

Chrome 134

323

Chrome 132

287

Chrome 129

271

Chrome 135

262

Chrome 128

200

Chrome 133

199

Chrome 125

194

Safari 18

168

Chrome 126

149

Safari 17

143

Firefox 125

132

Chrome 127

129

Firefox 131

120

Chrome 124

112

Firefox 133

102

Chrome 136

90

Firefox 130

89

Firefox 132

85

Chrome 122

82

Firefox 129

74

Firefox 128

71

Chrome 123

70

Firefox 124

69

Chrome 101

67

Safari 16

46

Firefox 123

44

Firefox 126

44

Chrome 86

38

Firefox 122

34

Firefox 127

34

Chrome 103

28

Chrome 100

27

Chrome 121

27

Firefox 134

27

Safari 604

26

Chrome 104

22

Chrome 120

20

Chrome 102

18

Firefox 135

18

Firefox 138

17

Chrome 119

16

Firefox 137

16

Firefox 136

14

Opera 117

11

Safari 15

11

Firefox 115

10

Firefox 119

9

Chrome 112

5

Opera 115

5

Safari 14

5

Chrome 106

4

Chrome 109

4

Chrome 79

4

Opera 118

4

Chrome 107

2

Chrome 114

2

Chrome 116

2

Chrome 117

2

Chrome 94

2

Firefox 102

2

Opera 109

2

Opera 113

2

Chrome 110

1

Chrome 111

1

Chrome 115

1

Chrome 4

1

Chrome 90

1

Firefox 109

1

Firefox 68

1

Opera 114

1

Safari 13

1

Durations of sessions

A bit more interesting is the durations of the sessions.
Some sessions don’t have a recorded termination time, currently that’s true for 1198, i.e. 24.2% of the sessions. This could include occasional session still active at the time at which the copy of the database was pulled. However, I think most will be where someone leaves the session open. I have capped the sessions at one hour in the analyses below.

Here are the descriptive statistics.

name

nNA

nOK

min

lqrt

mean

uqrt

max

durMinsAll

1,198

3,761

0.0

1.0

64.7

34.0

2,861.0

durMinsCapped

1,198

3,761

0.0

1.0

18.7

34.0

60.0

durMinsCensored

1,913

3,046

0.0

1.0

9.0

14.0

60.0

durMinsAll includes all the sessions so far, durMinsCapped treats all sessions recorded as lasting 60 minutes as such, more realistically, durMinsCensored ignores those sessions assuming that they were abandoned sessions. (This shows a maximum duration of 60 minutes as session durations were measured to a fraction of a second so any duration of over 59’30" and less than 60’0" is rounded up to 60 minutes and counted as a genuine 60 minutes!).

Most of the sessions, as you would expect given the nature of the apps, are sessions lasting only a few minutes. If I use the censoring and ignore all the sessions that lasted more than an hour on the plausible assumption that they were abandoned sessions rather than someone continuing to try different parameters for any app for more than an hour then there have been 3046 such sessions so far. Of these 58 lasted under a minute. I guess it’s possible to launch an app and get useful output if only wanting the default parameters in under a minute but I think it would be rare so I think we can regard these as “just looking” sessions and they represent 1.9% of the 3046 uncensored sessions.

The number of sessions lasting a minute (rounding to the nearest minute) was 1432, i.e. 47% of the uncensored sessions. I think these probably represent very quick but perhaps genuine uses of an app.

That leaves 1556 sessions lasting longer than a minute but less than an hour i.e. 51.1% of the uncensored sessions, I think these can be regarded as sessions in which someone entered parameters and perhaps played around with different parameters and perhaps noted or pulled down outputs.

For now (August 2024) I see those as pretty sensible breakdown proportions. I guess that as time goes by it may be interesting to break things down by months and by apps but for now the numbers don’t really merit that and the effects of different apps being added at different times mean that the two variables of app and month are structurally entwined.

Values input

Where it might be useful to me to know more about the usage I am logging input values for some apps. Here’s the breakdown of the numbers of sessions in which inputs were recorded.

app_name

n

percent

RCI1

9,274

36.5%

COREpapers1

8,107

31.9%

CSC1

3,911

15.4%

RCI2

1,364

5.4%

random1

477

1.9%

CImean

445

1.8%

ECDFplot

381

1.5%

CORE-OM_scoring

285

1.1%

Cronbach1Feldt

199

0.8%

Histogram_and_summary1

191

0.8%

CSClookup2a

176

0.7%

Spearman-Brown

158

0.6%

CIcorrelation

115

0.5%

Create_univariate_data

113

0.4%

CISpearman

86

0.3%

CIproportion

58

0.2%

Gaussian1

27

0.1%

Feldt2

12

0.0%

Attenuation

11

0.0%

Hashing_IDs

8

0.0%

Screening1

8

0.0%

CISD

7

0.0%

plotCIPearson

4

0.0%

g_from_d_and_n

3

0.0%

useConvFiveNum

3

0.0%

Attenuation2

2

0.0%

CIdiff2proportions

2

0.0%

And here are the variables by app, nVisits is the total number of sessions with recorded inputs for that app, nVars is the number of variables that have been input for that app. Finally, nVals is the number of distinct values that have been input for that variable.

app_name

id

nVisits

nVars

nVals

RCI1

SD

9,274

8

3,662

ci

9,274

8

358

compute

9,274

8

2,388

dp

9,274

8

139

generate

9,274

8

5

max

9,274

8

2

min

9,274

8

1

rel

9,274

8

2,719

COREpapers1

authName

8,107

59

102

clipbtn

8,107

59

7

date1

8,107

59

48

date2

8,107

59

36

embedded

8,107

59

19

filterAssStructure

8,107

59

18

filterCORElanguages

8,107

59

16

filterCOREmeasures

8,107

59

28

filterFormats

8,107

59

17

filterGenderCats

8,107

59

9

mainPlotDownload-filename

8,107

59

3

mainPlotDownload-format

8,107

59

1

or

8,107

59

6

or2

8,107

59

3

or3

8,107

59

4

or4

8,107

59

3

or5

8,107

59

4

otherMeasure

8,107

59

40

otherMeasures_cell_clicked

8,107

59

24

otherMeasures_cells_selected

8,107

59

17

otherMeasures_columns_selected

8,107

59

17

otherMeasures_row_last_clicked

8,107

59

5

otherMeasures_rows_all

8,107

59

71

otherMeasures_rows_current

8,107

59

70

otherMeasures_rows_selected

8,107

59

27

otherMeasures_search

8,107

59

34

otherMeasures_state

8,107

59

74

paperLang

8,107

59

23

papers2_cell_clicked

8,107

59

47

papers2_cells_selected

8,107

59

22

papers2_columns_selected

8,107

59

22

papers2_row_last_clicked

8,107

59

8

papers2_rows_all

8,107

59

108

papers2_rows_current

8,107

59

108

papers2_rows_selected

8,107

59

44

papers2_search

8,107

59

51

papers2_state

8,107

59

115

papers_cell_clicked

8,107

59

336

papers_cells_selected

8,107

59

272

papers_columns_selected

8,107

59

272

papers_row_last_clicked

8,107

59

53

papers_rows_all

8,107

59

1,557

papers_rows_current

8,107

59

1,591

papers_rows_selected

8,107

59

411

papers_search

8,107

59

336

papers_state

8,107

59

1,615

reqEmpCOREdata

8,107

59

44

reqOA

8,107

59

13

reqOpenData

8,107

59

18

reset_input

8,107

59

11

shinyjs-resettable-side-panel

8,107

59

9

tabSelected

8,107

59

117

therOrGen

8,107

59

57

titleWord

8,107

59

22

vecAssStructure

8,107

59

29

vecCORElanguages

8,107

59

8

vecFormats

8,107

59

19

vecGenderCats

8,107

59

8

vecWhichCOREused

8,107

59

58

CSC1

SDHS

3,911

7

694

SDNHS

3,911

7

717

dp

3,911

7

70

maxPoss

3,911

7

497

meanHS

3,911

7

773

meanNHS

3,911

7

934

minPoss

3,911

7

226

RCI2

SD

1,364

6

436

ci

1,364

6

39

compute

1,364

6

330

dp

1,364

6

10

n

1,364

6

200

rel

1,364

6

349

random1

compute

477

12

40

dataTable_cell_clicked

477

12

37

dataTable_cells_selected

477

12

29

dataTable_columns_selected

477

12

29

dataTable_row_last_clicked

477

12

6

dataTable_rows_all

477

12

76

dataTable_rows_current

477

12

83

dataTable_rows_selected

477

12

42

dataTable_search

477

12

29

dataTable_state

477

12

83

valN

477

12

12

valSeed

477

12

11

CImean

SD

445

5

196

SE

445

5

1

dp

445

5

2

mean

445

5

192

n

445

5

54

ECDFplot

annotationSize

381

38

10

decChar

381

38

1

file1

381

38

5

fileHeight

381

38

10

fileHeightQuantiles

381

38

4

fileWidth

381

38

10

fileWidthQuantiles

381

38

4

inputType

381

38

20

pastedData

381

38

30

quantiles

381

38

19

quoteChar

381

38

3

sepChar

381

38

4

summary_cell_clicked

381

38

6

summary_cells_selected

381

38

6

summary_columns_selected

381

38

6

summary_rows_all

381

38

14

summary_rows_current

381

38

14

summary_rows_selected

381

38

6

summary_search

381

38

6

summary_state

381

38

14

tabSelected

381

38

55

textSize

381

38

10

textSizeQuantiles

381

38

4

tibQuantiles_cell_clicked

381

38

5

tibQuantiles_cells_selected

381

38

5

tibQuantiles_columns_selected

381

38

5

tibQuantiles_rows_all

381

38

16

tibQuantiles_rows_current

381

38

16

tibQuantiles_rows_selected

381

38

5

tibQuantiles_search

381

38

5

tibQuantiles_state

381

38

16

title

381

38

10

titleQuantiles

381

38

4

var

381

38

5

xLab

381

38

10

xLabQuantiles

381

38

4

yLab

381

38

10

yLabQuantiles

381

38

4

CORE-OM_scoring

compData_cell_clicked

285

27

5

compData_cells_selected

285

27

5

compData_columns_selected

285

27

5

compData_rows_all

285

27

6

compData_rows_current

285

27

12

compData_rows_selected

285

27

5

compData_search

285

27

5

compData_state

285

27

18

contents_cell_clicked

285

27

2

contents_cells_selected

285

27

2

contents_columns_selected

285

27

2

contents_rows_all

285

27

4

contents_rows_current

285

27

4

contents_rows_selected

285

27

2

contents_search

285

27

2

contents_state

285

27

4

dp

285

27

23

file1

285

27

18

summary_cell_clicked

285

27

1

summary_cells_selected

285

27

1

summary_columns_selected

285

27

1

summary_rows_all

285

27

1

summary_rows_current

285

27

1

summary_rows_selected

285

27

1

summary_search

285

27

1

summary_state

285

27

1

tabSelected

285

27

153

Cronbach1Feldt

alpha

199

6

106

altAlpha

199

6

2

ci

199

6

2

dp

199

6

5

k

199

6

43

n

199

6

41

Histogram_and_summary1

bins

191

25

9

contents_cell_clicked

191

25

5

contents_cells_selected

191

25

5

contents_columns_selected

191

25

5

contents_rows_all

191

25

10

contents_rows_current

191

25

10

contents_rows_selected

191

25

5

contents_search

191

25

5

contents_state

191

25

10

dataType

191

25

6

file1

191

25

10

nDP

191

25

2

plotDownload-format

191

25

1

summary_cell_clicked

191

25

5

summary_cells_selected

191

25

5

summary_columns_selected

191

25

5

summary_rows_all

191

25

12

summary_rows_current

191

25

12

summary_rows_selected

191

25

5

summary_search

191

25

5

summary_state

191

25

12

title

191

25

10

var

191

25

14

xLab

191

25

11

yLab

191

25

12

CSClookup2a

Age

176

5

4

Gender

176

5

6

Lookup

176

5

29

Scoring

176

5

21

YPscore

176

5

116

Spearman-Brown

currK

158

13

9

currRel

158

13

11

maxK

158

13

6

plotDownload-filename

158

13

1

reliabilities_cell_clicked

158

13

7

reliabilities_cells_selected

158

13

7

reliabilities_columns_selected

158

13

7

reliabilities_rows_all

158

13

28

reliabilities_rows_current

158

13

30

reliabilities_rows_selected

158

13

7

reliabilities_search

158

13

7

reliabilities_state

158

13

30

step

158

13

8

CIcorrelation

R

115

4

60

ci

115

4

3

dp

115

4

2

n

115

4

50

Create_univariate_data

charSeparator

113

11

17

dataTable_cell_clicked

113

11

7

dataTable_cells_selected

113

11

7

dataTable_columns_selected

113

11

7

dataTable_rows_all

113

11

14

dataTable_rows_current

113

11

14

dataTable_rows_selected

113

11

7

dataTable_search

113

11

7

dataTable_state

113

11

14

dist

113

11

2

generate

113

11

17

CISpearman

Gaussian

86

6

6

ci

86

6

2

dp

86

6

7

method

86

6

10

n

86

6

25

rs

86

6

36

CIproportion

ci

58

4

6

dp

58

4

10

n

58

4

18

x

58

4

24

Gaussian1

dp

27

4

2

mean

27

4

20

n

27

4

4

nBins

27

4

1

Feldt2

alpha1

12

5

1

alpha2

12

5

3

dp

12

5

3

n1

12

5

3

n2

12

5

2

Attenuation

correlations_cell_clicked

11

8

1

correlations_cells_selected

11

8

1

correlations_columns_selected

11

8

1

correlations_rows_all

11

8

2

correlations_rows_current

11

8

2

correlations_rows_selected

11

8

1

correlations_search

11

8

1

correlations_state

11

8

2

Hashing_IDs

file1

8

2

3

var

8

2

5

Screening1

dp

8

3

1

prev

8

3

5

spec

8

3

2

CISD

SD

7

4

1

SDorVar

7

4

4

ci

7

4

1

n

7

4

1

plotCIPearson

R

4

1

4

g_from_d_and_n

d

3

2

2

n

3

2

1

useConvFiveNum

min

3

1

3

Attenuation2

unattR

2

1

2

CIdiff2proportions

n1

2

1

2

So far nVars is a fixed number for each app as it’s going to be maximum number of input values the app requests from the user. Some apps, e.g. RCI1, have a variable “compute” that is just the button instructing the app to run which wasn’t present in early iterations of the app. Another change is that as I get more savvy about shiny some apps, perhaps existing ones, may develop a step-by-step interface so that the numbers of variables input for each use of the app may differ a bit depending on what the user has chosen to do.

Inputs for the RCI1 app

It becomes a bit messy to analyse the inputs as it has to be done (as far as I can currently see) individually by app. It was quite useful as I could see that it had, at least at some point, been possible to enter impossible zero values for reliability and SD. I have now filtered those values out.

Here’s a breakdown for RCI1. These counts only include values that the user entered manually so if the user just left the value at the default value that isn’t counted (however, if the user changes it and then back to the default value, that entry of the default value is counted). I guess I could fix that by filling in the default value where a variable doesn’t appear in the inputs for the session. I’m not sure that’s sufficiently interesting to be worth the faff.

I guess that the .7 entry for the CI was probably me checking the app worked even for that value but I can’t remember for sure. Otherwise it seems entirely sensible that the only other non-default value was .9. The spread of the reliability values is more interesting and looks sensible to me, similarly for the SD.

I guess I could make the app a more interesting information gathering tools if I invited users to input the scale/score being used (i.e. “CORE-OM total”, “BDI-II total”) and even perhaps also ask about dataset (e.g. “my last six months baseline values”, or “the Sheffield X study”) but I think the amount of post-processing that would be necessary to get anything even halfway clean out of that seems unlikely to make this worth the programming/cleaning hassle.

Version history