aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/docs/TL_DR.html
blob: 2cf8fa3a6dc666f0f77b7ad168438b257730154c (plain)
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
<html>
<title>SledjHamr TL;DR</title>
<head>
</head>
<body bgcolor="black" text="white" alink="red" link="blue" vlink="purple">
Welcome to a summary of SledjHamr and SledjChisl!

<p>I have a theory that the quality of an open source project is
inversely proportional to the number of forks. &nbsp; OpenSim and SL / OS
viewers have a lot of forks. &nbsp; I have one to. &nbsp; lol</p>

<ul>
<li><a href="#SledjHamr">SledjHamr</a> &nbsp; Overall project.</li>
<li><a href="#SledjChisl">SledjChisl</a> &nbsp; How we get there.</li>
<li><a href="#history">The story so far.</a></li>
<li><a href="#onefang">onefang</a> &nbsp; Semi-retired computer programmer and sysadmin with a great breadth and depth of experience.</li>
</ul>

<h1><a id="#SledjHamr">SledjHamr</a> &nbsp; Overall project.</h1>

<p><a href="index.html">SledjHamr</a> is a rewrite from scratch of Second Life (SL) / OpenSim (OS)
style 3D online virtual world client / server. &nbsp; It also intends to
hook up with other virtual worlds and standards.</p>

<p>Simulating a world requires lots and lots and lots and lots of little
details. &nbsp; So rewriting OpenSim server and a viewer from scratch will take
a long time, especially for one person.</p>

<p>The plan is to use OS server and SL clients as crutches, when a bit of
SledjHamr is ready, it replaces the matching bit in OS/SL.</p>

<p>OpenSim is mostly a bunch of web services that talk to each other and
the viewers. &nbsp; There is also some UDP protocols involved. &nbsp; So my plan is
to move away from the OpenSim web server and allow the use of other web
servers. &nbsp; I also plan on writing things in C and Lua, with little bits of
assembler if needed (see below for my claim to a right to be a language
bigot). &nbsp; I think I can get much better performance using C and LuaJIT,
and so far my experiments have shown that I do.</p>

<p>The world already has many ways of doing HTTP transfers, with very
mature things like CDNs, proxies, reverse proxies, etc. &nbsp; So distributing
assets across the world is a solved problem. &nbsp; So let's use all of that to
make things better.</p>

<p>OpenSim isn't a complete system though. &nbsp; You need to supply some extra
bits via another web server to complete the system. &nbsp; So initially I'll
concentrate on those. &nbsp; Using FCGI as a fast method of hooking C and Lua
code up to web servers.</p>

<p>A further part of my plan is to replace the non web protocols with
some binary based protocol.  &nbsp; Way more efficient. &nbsp; So there
is a sub-project called "nails", hammering everything together. &nbsp;
Nails could also bridge between SledjHamr and other virtual worlds.</p>

<h1><a id="#SledjChisl">SledjChisl</a> &nbsp; How we get there.</h1>

<p>However that's a really huge project, so SledjChisl was invented to
slowly chisel away at things until it becomes SledjHamr.</p>

<p>So far that's a single executable based on toybox LuaJIT, qlibc, and fcgi2.  </p>

<p>SledjChisl is basic server management stuff and a minimal account
creation system. &nbsp; This rewrote bash scripts I had written earlier
to do the management things. &nbsp; Start, stop, and get status for the
grid or individual sims. &nbsp; Create IARs and OARs automatically on a
weekly basis, including what I call GITAR files, which include git in the
IAR / OAR files to track changes. &nbsp; GITAR files tend to be roughly
twice the size of ordinary IAR / OAR, but include enough git tracked
history to recover things from any given week since it started. &nbsp;
The weekly backup also has an option to rsync the results somewhere for
offline backups. &nbsp; Also other things like getting an updated
OpenSim, building everything, running the tests.</p>

<p>SledjChisl runs everything in tmux. &nbsp; It automates figuring out
which ports sims use, opening up tmux windows and panes for them. &nbsp;
Including categories of prioritised sims startup, and figuring out how
quickly to start them up in parallel so it doesn't over stress the server.
&nbsp; One of those tmux panes is for the log output of the FCGI based
account system. &nbsp; So you can, for example, have the first tmux
window with four panes, one for ROBUST, one for FCGI log, one for your
Welcome sim, and one for general terminal commands. &nbsp; The next tmux
window might have your two most important sims other than Welcome. &nbsp;
Next might be windows for your sea only sims, perhaps 8 panes of those
per window. &nbsp; Then your smaller sims with four per window. &nbsp;
Then your big heavy weight sims that might take ten minutes each to start
up, so you want them to start last.</p>

<p>For those unfamiliar with tmux, it's very similar to screen, but can
be scripted and has mouse support. &nbsp; For those not familiar with
screen, it's a utility to allow control of multiple command terminal
windows in one text command terminal.  Both allow sharing with multiple
people and persistence after you log off.</p>

<h1><a id="#history">The story so far.</a></h1>

<p>About a decade ago I came up with the ideas for SledjHamr, and
discussed it with some of the members of a grid I was running at the
time.  They helped to flesh some things out and came up with other
ideas.  Though mostly it's been my ideas.</p>

<p>Shortly after that I started writing prototype code using
Enlightenment Foundation Libraries. &nbsp; I was part of the overall
Enlightenment project at the time, and very familiar with EFL, so the
choice was easy. &nbsp; Before I started Samsung had been hiring some of
the EFL team to use EFL and Enlightenment for their Tizen project.
&nbsp; Samsung started a skunk works project to add 3D support, but that
team was forbidden to talk with others. &nbsp; The major basic thing they
where missing was any sort of avatar animation system. &nbsp; Even though
I had written some of the subsystems of EFL, their response to my request
to add that was "you gotta do something for us first". &nbsp; Then things
got a bit ugly and I left EFL in disgust. &nbsp; So the SledjHamr project
got put on hold for a while.</p>

<p>The SledjHamr prototype had a little scene, that was described by Lua
scripts on the server. &nbsp; The viewer had basic camera control. &nbsp;
I had my own script engine that converted LSL into Lua, than ran it with
LuaJIT, and supported llDialog(), though it wasn't hooked up to do things
to the world yet, but it could fire up MLP and run it's menu system.
&nbsp; That script engine was orders of magnitude faster than OpenSim at
the time.</p>

<p>During that SledjHamr sabbatical, I was running a grid and tweaking
OpenSim. &nbsp; The main thing I did was to speed up the script engine a
bit by removing three things. &nbsp; What I call the Oh Silly Threat
System got tamed so that not so much useful stuff was forbidden for truly
over the top paranoid reasons, and the function calls to check for
permissions that would always be granted got removed. &nbsp; The Second
Life "this function will sleep for X seconds" stuff was all removed.
&nbsp; And I found out that the function calls in each function that
supposedly calculated "lines per second" didn't actually do that, and the
results never actually went anywhere, so those function calls got removed
as well. &nbsp; Removing all those useless function calls made the script
engine noticeably faster, and only caused a problem for one badly written
script.</p>

<p>Then I started writing SledjChisl. &nbsp; OpenSim + SledjChisl, which
I call <a href="https://sledjhamr.org/cgit/opensim-SC/">opensim-SC</a>,
has been running at least three grids for over a year.</p>

<h1><a id="#onefang">onefang</a> &nbsp; Semi-retired computer programmer and sysadmin with a great breadth and depth of experience.</h1>

<p>I have been programming since the late '70s. &nbsp; Working on all
sorts of things in all sorts of languages. &nbsp; I have used 100
programming languages in my career, so I think I have earned the right to
be a language bigot. &nbsp; I can learn a new language in an hour, and be
expert in it in a week. &nbsp; I'm also great at writing documentation.
&nbsp; My favourite programming languages are assembler, C, and Lua.
&nbsp; LuaJIT FTW!</p>

<p>I have been working professionally with OpenSim and SL/OS viewers for
over a decade.  I used to be the maintainer of Imprudence viewer.  To
which I added experimental support for over 20 different mesh formats
that would download them directly from the web, this was about the time
LL was adding mesh. &nbsp; I've also been paid to add VR support to a
corporate OpenSim viewer, before the current crop of VR headsets where
released to the public (I used an Oculus Rift DK2, the finished project
used Oculus Rift CV1).</p>

</body>
</html>