Moving Towards Tundra 2.0

16 views
Skip to first unread message

jukka....@ludocraft.com

unread,
Jun 13, 2011, 5:27:37 PM6/13/11
to realxt...@googlegroups.com
Hi,

during this past half, work at LudoCraft has continued at an accelerated
pace on the Tundra platform. LudoCraft designed and developed the original
Tundra 1.0 platform, but instead of stopping there, we've been very busy
working towards polishing what we call the Tundra version 2.0.

The main motivation of this work has been on simplifying the architecture
and optimizing it to work with fewer dependencies and a smaller memory
footprint. I started the work some months ago on a separate Tundrajj
branch which is available on github, and now LudoCraft has taken two or
three big steps further to scale down on the size of the framework. For
comparison, the old codebase has 229807 LOC, 774 classes and 59 projects,
whereas Tundra 2.0 sits at 122979 LOC, 309 classes and 26 projects, and
re-builds in well under 10 minutes on my system.

And the best part: it's half the code - but twice the features! We've
taken the time to unify and utilize the core APIs, asset types and
components in the system to be more flexible than before, and extended the
script bindings considerably by implementing an automatic QtScript
bindings generator, which enables the scripts to be more aware of the
scene and perform more complicated geometric processing which wasn't
possible before. Because the math data structures are now symmetric in
terms of features in both C++ and QtScript, it is easier to implement full
applications using scripting only. Also, because the data structures and
APIs are symmetric, we don't need to develop two different reference
documentation bases, but can do with only one!

As for the documentation, see an example of the new maths library
documentation here: http://clb.demon.fi/dump/DocGenerator/ (still alpha).
We are moving away from using doxygen as the primary documentation system,
and instead are generating our own formatted documentation pages, as shown
above (though using doxygen as the parser backend). This documentation
serves for both C++ and QtScript (and hopefully for other script languages
as well) reference.

The codebase is not currently hosted public, and I don't know of the exact
details of what will be released in which time frame, and into which
branch it all will go to. I have however assembled a general changelog of
modifications, so you can get a grasp of all the things that we have
changed. A word of warning: these are not small things, but a result of
some 15-20 man-months of our development effort, so there are a lot of
changes.

One thing you may notice is that there are a lot of code that has been
removed. There are various reasons:
- the code was superceded or obsoleted by a better construct.
- the code (which we don't develop here at LudoCraft) did not compile
after some related change, at which point I deleted the code instead of
trying to make it build without testing, pending a refresh from the
original author or maintainer.
- the code does not work and has not had an identifiable maintainer in a
long time, in which case I simply consider the feature rotten.
- the code was outright badly written or designed and sits too deep in
the core for me to allow it to exist. (some rare individual cases)

Best Regards,
jj


LudoCraft Tundra 2.0 Changelog
---------------------------------------
Deleted code and deprecations.
- Deleted EventManager and the internal event system queue mechanism
(EventManager.h, IEventData.h). Direct signal-slots are used instead, as
they are more convenient.
- Rewrote all uses of EventManager to provide a proper signalling API,
e.g. in TundraLogicModule Server.cpp and Client.cpp.
- Deleted obsolete ConfigurationManager.
- Deleted ServiceManager and the concept of services.
- Deleted UiServiceInterface.
- Deleted rotten EC_BillboardWidget, EC_MovableTextOverlay.
- Deleted dependency to the PoCo library altogether, and other smaller
3rd party libraries like curl.
- Removed the use of GetModuleManager wherever applicable. Modules are
queried directly through Framework::GetModule, not via a separate
manager.
- Deleted EC_ChatBubble, EC_Clone, EC_Gizmo, EC_Ruler, EC_Selected,
EC_VideoSource, EC_3DCanvas, EC_3DCanvasSource, EC_Videosource. These
features can be reimplemented as plugins proper outside of core.
- Deleted the folder EC_3DGizmo, which has gone unused.
- Deleted PhononPlayerModule, ScenePersistenceModule, UpdateModule,
pending a refresh to the new plugin mechanism.
- Deleted CAVEStereoModule, pending a refresh to the new plugin mechanism.
- Deleted IntervalTimer and LockFreeList core objects (unused).
- Deprecated OgreRendererService (currently under the name IRenderer),
replaced with the mechanism below.
- Deprecated the concept of 'current active scene' and 'the default
scene'. Instead, use a single 'current active camera on the main UI'
query.
- Removed hash-based asset reload checks and booleans for isLoaded.
- Deleted badly placed Renderer::RenderAvatar.
- Deleted QGraphicsEffects from UiProxyWidget.
- Deleted Platform.h, PlatformNix.h, PlatformWin.h as unneeded.
- Deleted unused Root logging functionality and Framework thread task
mechanism.
- Removal of several **Raw workarounds. (more still exist, which should
be rid of asap)
- Removed all legacy code that was unmaintained, unused or otherwise
badly implemented to be harmful to use. Core code should either implement
properly or not at all - temporary hacks will not be accepted without a
very good reason.

Solution reorganization
- Deleted the obsolete projects Foundation, Interfaces, RexCommon.
- Deleted the obsolete projects InWorldChatModule, InventoryModule,
RpcUtilities, RexLogicModule, ProtocolUtilities, ProtocolModuleOpenSim,
ProtocolModuleTaiga, HttpUtilities and Core.
- Deleted the obsolete components EC_HoveringWidget, EC_NetworkPosition,
EC_OpenSimPresence, EC_OpenSimPrim.
- Removed SceneStructureModule and moved all its contents to
ECEditorModule (these two always come together or not at all).
- Moved EC_InputMapper to Input project.
- Moved EC_DynamicComponent to Scene project.
- Grouped EC_SoundListener and EC_Sound to same project to improve
compilation times.
- Moved EC_Light to OgreRenderingModule.
- Deleted the use of PCH in all EntityComponents projects in which it
doesn't help compilation times.
- Replaced server.exe and viewer.exe with a single tundra.exe, uses
--server parameter to decide whether to start a server, and --config
viewer.xml if to start a client viewer UI.

New Plugin API (mostly never used directly)
- New plugin mechanism for a simpler and more flexible plugin
implementation.
- Implemented a new plugins.xml to configure the set of modules and
startup .js files to load. Use --config startup parameter to specify the
set of modules to load.
- Removed the module description XML files and startup-time sorting based
on dependencies.

Finished the work on Asset API
- Fixed several bugs where storages, providers and disk sources were not
remembered for assets when taking them from the web cache.
- Unify the handling different asset ref forms into Asset API.
- Implemented an Asset Ref resolving step, where a relative ref is
resolved (possibly inside some context) to an absolute ref.
- Reimplemented the signalling flow of asset downloads to guarantee a
coherent signal flow independent of how an asset is loaded.
- some changes to signals to remove ambiguity, e.g. renamed
IAssetTransfer::Loaded() to IAssetTransfer::Succeeded() to avoid
confusion with IAsset::Loaded().
- Implemented context-based relative asset handling to allow relative
dependencies between assets to work properly
- Implemented asset refs to named asset storages which allows scenes to
be transferred from one server to another without having to manually
search&replace script refs.
- Implemented subassetname specifications to assetrefs to allow pointing
to a part of an asset inside an asset.
- Implemented asset storage synchronization on login to be able to refer
to assets using relative names or named storage specifiers on the server.
- Implemented a push-based asset update notification mechanism (e.g.
alongside HTTP storages) so clients automatically know to fetch the
newest version of an asset as soon as it is available.
- Implemented a text serialization mechanism ("serialized storage
strings") for systematically handling configuration for different types
of asset storages
- Implemented an asset discovery mechanism that synchronizes folders of
assets from a networked storage (e.g. using PROPFIND when over HTTP).
- Formalized the concept of an Empty asset: URL to fetch is known,
neither loaded or locally cached data is available.
- Formalized the concept of an Unloaded asset: URL to fetch is known,
data is available locally, but the contents are offloaded from (GPU)
memory.
- Added a null asset factory (e.g. for headless mode), and removed
several IsHeadless() checks sprinkled in hardcoded places.
- Deleted the decoding step of an asset transfer (decoding occurs on
asset load)

New math library (float2, float3, float4, float3x3, float3x4, float4x4, Quat)
- Automatically generated bindings instead of manual ones.
- Removed manually written Transform, Quaternion and Vector QScriptValue
bindings.
- Remove use of previous Irrlicht math code which lacked in features and
used inconsistent conventions
- Math objects for geometric computations, symmetric in C++ and QtScript.
(AABB, OBB, Sphere, Line, LineSegment, Ray, Triangle, Plane)
- Example preliminary documentation here
http://clb.demon.fi/dump/DocGenerator/

Reimplemented environment-related functionality.
- SkyX and HydraX integration.
- Deleted the use of Caelum altogether, replaced with SkyX (optionally).
- Deleted all badly structured EC_Skybox, EC_SkyDome, EC_SkyPlane,
Sky-templates.h.
- Deleted rotten EC_OgreEnvironment and EC_OgreSky.
- Reimplemented EC_Sky as a more generic attribute-based sky component
when SkyX is not used.

Avatar
- Implemented AvatarDescAsset and EC_Avatar to use the Asset API.
- Reimplemented avatar script as a more extensible way to allow extending
own animation playback and controlling which built-in behavior is used
and when.
- Simplified the mechanism how avatar description files refer to other
assets.
- Partially reimplemented the avatar editor against the mechanism.
- Removed object camera/tripod camera controls from the avatar script,
they need to be separate applications (or optionally removable).
- Deleted old EC_AvatarAppearance, EC_Controllable, EC_OpenSimAvatar
components and other obsolete avatar uploading functionality.

Reimplemented Console API
- Deleted the old ConsoleCommandStruct registration mechanism.
- Implemented console commands to operate directly on Qt slots.
- Moved FunctionInvoker to core to enable the above. Will be used for
entity actions as well in the future.
- Autocompletion suggestions.
- Enable browsing previously typed commands.
- Deleted MODULE_LOGGING_FUNCTIONS #define macros and reimplemented
logging via much simpler means.
- Deleted DEFINE_LOGGING_FUNCTIONS.

More robust asset support
- Implemented script-accessible modification functions for TextureAsset
(SetContents, SetContentsDrawText, SetContentsFill, QImage interop)
- Exposed OgreMaterialAsset material specifications for C++ and QtScripts.
- Reimplemented asset editors for textures, meshes, materials and
particle scripts, with syntax highlighting support.
- Added support for the handling of relative refs to ParticleAsset,
QtUiAsset, Script and OgreMaterialAssets.
- Implemented QtUiAsset::Instantiate() to be used over
UiApi::LoadFromFile wherever applicable.

New component factory mechanism
- Removed ComponentManager, DECLARE_EC and DECLARE_MODULE_EC.
- Deleted Foundation.h, IComponentRegistrar.h,
- Implemented a new simpler registrable component factory similar to
asset factories.

More robust component types
- Implemented EC_Material which allows replicated modification of
materials e.g. for animation purposes.
- Reimplemented EC_HoveringText with more features and control over how
text is generated. Removed hardcoded animation logic in the component
that is more flexibly implemented in scripts.
- Reimplemented EC_Highlight with attribute-based features.
- Improved EC_ParticleSystem to work with AssetRefListener.
- Renamed EC_OgreCamera to EC_Camera and filled it with utility functions
(GetMouseRay(), IsObjectVisible()) and attributes (up vector). Refactored
it to use the new math classes.
- Implemented isKinematic property for EC_Rigidbody.
- Switched convex hull generation code due to critical bugs in the
previous algorithm.
- Deleted PostProcessWidget. Improved EC_OgreCompositor to enable
asset-based compositors.
- Added a sample demo UI to bin/scenes/Compositor/ to showcase the
different compositors.
- Remove hashing from component type names to prepare for new optimized
sync protocol implementation.
- Reimplemented EC_Billboard to support attributes and AssetRefListener.
- Removed IComponent::IsSerializable() - all components are serializable.

Likely breaking changes
- Reimplemented and simplified EC_Placeable which had became a
inconsistent mess of random conveniency functions. Now math code is
properly handled in the new math classes instead of built-in into
EC_Placeable functions.
- Removed the use of hardcoded conversion scenenodes in the scene graph
to flip y<->z. Now all input data is used as-is without runtime
conversions. Reimplemented asset importers to not perform swap hacks.
- Core API function naming refactored to be more consistent in all classes.
- Deleted Entity::HasComponent. (just call Entity::GetComponent and test
for null).
- Deleted the excessive use of namespaces throughout the core API - they
aren't needed, and make code much more verbose than it needs to be.
- Deleted SceneAPI::GetSceneRaw.
- Deleted Entity::GetComponentRaw().

Refactored the core scene structure to support additional augmented scene
views of the core scene:
- OgreWorld contains the Ogre-specific data of the core scene
- PhysicsWorld contains the Bullet-specific data of the scene
- Users can register their own scenes, in case the
entity-component-attribute mechanism is limiting.
- Exposed to scripts as "scene.ogre." and "scene.physics." objects.
Operates as the primary interface of
both visibility- and physics -related scene queries for scripts.
- Implemented frustum-based visibility queries for scripts along the
raycast queries.
- Implemented OnEnterView and OnLeaveView -mechanisms to allow scripts
and plugins to implement visibility-based optimization on their script
logic.

Editor improvements
- Enabled changing entities' temporary status from Scene Structure window.
- Enabled changing entities' local/replicated status from Scene Structure
window.
- Enabled a dialog-based "..."-selection for assets in the EC editor
asset refs.
- Added "E"-button to ECEditor to open an asset in an asset ref to an
editor.
- Enable cloning assets from the editor.
- Show asset status in Assets window.
- Added "Do not alter asset references" option to scene import dialog,
which leaves relative asset refs intact.

Other API and misc. changes
- Added Entity::Clone()
- Deleted Renderer::RepaintUi().
- Added FunctionDialog for the Assets menu for accessing functions from
individual assets, providers and storages from the UI.
- Added IAssetStorage::Type()
- Removed Framework::GetModuleQObj with Framework::GetModuleByName,
exposed IModule to scripts.
- Added script access for specifying exact EC_AnimationController
animation timing parameters.
- Fixed EC_VolumeTrigger to actually work.
- Optimized OgreMaterialAsset clones to do a direct in-memory copy
instead of going through disk.
- Implemented a separate RedirectedPaintWidget for optimized Qt UI
blitting in certain cases.
- Fixed Profiler crashes and issues where it lost some profiling blocks.
- Deleted UiApi::AddWidgetToSceneRaw.
- Reimplemented the managing of important directory paths to centralized
functions:
- Application::SetCurrentWorkingDirectory().
- Application::CurrentWorkingDirectory()
- Application::InstallationDirectory()
- Application::UserDataDirectory()
- Application::UserDocumentsDirectory().
- Implemented and tested unicode support for path handling.
- Reimplemented all code to use the abovementioned folders instead of
assuming cwd is some specific directory, to prepare to run Tundra
in-process in a web browser plugin.
- Deleted AssetModule::AddHttpStorage and replaced it with a more generic
AssetModule::AddAssetStorage which uses serialized storage strings.
- Deleted poorly structured IAssetProvider::AddStorage, replaced by
serialized storage strings.
- Reimplemented frame-time limiter to sleep inside Qt's event loop
instead of the Ogre renderer.
- Implemented IAssetStorage::GetAllAssetRefs() to enable querying storage
contents.
- Fixed SceneManager entity ID allocation to return guaranteedly unique
IDs. Added runtime checks for known critical (but never yet seen) bugs in
SyncManager.

Input API improvements.
- Tied the setting of mouse cursor to InputContexts so that they get
cleaned up after contexts are deleted or overridden by priority, to avoid
commonly seen user bugs where an override is never cleared.
- Implemented InputAPI::MousePos.
- Reimplemented mouse double click handling in InputAPI, deleted related
test booleans.
- Treat input as being over Qt when mouse cursor is hidden

Entity parenting support.
- Implemented support for parenting entities to other entities or bones of
meshes.
- Implemented EntityReference attribute type.
- Added EC_Mesh::GetAvailableBones().
- Implemented script-accessible support for querying mesh bone transforms.


Peter Steinlechner

unread,
Jun 13, 2011, 10:03:48 PM6/13/11
to realxt...@googlegroups.com
WOW - thats quite a list! But I see HydraX and SkyX is in it and cant wait now to see how it looks in Tundra 2.0

Cheers
Pedro

On Mon, Jun 13, 2011 at 11:27 PM, <jukka....@ludocraft.com> wrote:
Hi,

during this past half, work at LudoCraft has continued at an accelerated
pace on the Tundra platform. LudoCraft designed and developed the original
Tundra 1.0 platform, but instead of stopping there, we've been very busy
Working towards polishing what we call the Tundra version 2.0.

Ali Kämäräinen

unread,
Jun 14, 2011, 5:23:46 AM6/14/11
to realxt...@googlegroups.com
Hi,

Re: SkyX and Hydrax, here's a screenshot http://dl.dropbox.com/u/16413694/rex/Tundra2SkXHydax.png , though a picture really doesn't do justice for these add-ons, especially for Hydrax.

Grey skies,
Ali Kämäräinen

Jonne Nauha

unread,
Jun 14, 2011, 5:51:14 AM6/14/11
to realxt...@googlegroups.com
Great and detailed list from Jukka. And nice screenshot from Ali, a lot of people have been asking for skyx and hydrax and now the time is near :)

I am a little concerned though on the amount of stuff/modules/ECs removed from your new Tundra. I'd like to ask you is this code now removed as in "git rm" or just disabled from the build via cmake and waiting for porting to be done? At what point have you last rebased/merged the tundra branch, was it when tunrajj was created?

All the improvements in the list seem very nice and useful. The math library and other big api changes concern me though as they will basically break everything (scripts wise at least) that has been done to date. I think unloading this 15-20 man months amount of work/code on the rex project in one big splash is a little inconvenient for many of the companies and parties involved. It's like the core was rewritten in the total darkness without any discussion and now we should all just move to it. I think it would have been a lot nicer to do these changes and talk about them together in smaller increments in the main repo in open source fashion, so everyone could port scripts, modules, ECs as we go along.

Again I see only great things in the changelog, lot of improvements visually, script api and performance wise. But it's quite the code dump and everyone needs to think how much man months it will take us (not just Admino but CIE, playsign, ENNE, the french guys etc.) to port our stuff into this new Tundra 2.0. I hope we can get to read and build this code soon so we can asses what this work amount approximately is to port everything to it. I'm fine by all the changes, it would have been just nicer to ease gradually to the new thing during the 2-3 months you have been working on it. But then again there are many refactors here that would have not been possible to do in small steps so its hard to say.

I don't know what other companies/parties involved are thinking about this, would be nice to hear comments from everyone.

Best regards,
Jonne Nauha
Adminotech developer



Jukka Jylänki

unread,
Jun 14, 2011, 9:19:32 AM6/14/11
to realxt...@googlegroups.com
On Tue, 14 Jun 2011 12:51:14 +0300, Jonne Nauha <jo...@adminotech.com>
wrote:

> from your new Tundra. I'd like to ask you is this code now removed as in
> "git rm" or just disabled from the build via cmake and waiting for
> porting
> to be done? At what point have you last rebased/merged the tundra branch,
> was it when tunrajj was created?

The code has been deleted from the repository, but of course git history
has it all. I'm investigating moving into a model where the core would be
in one branch, and the applications themselves are in another, or a git
submodule perhaps. We feel that the core in the current public codebase is
getting polluted by features that should be strictly on the application
level. Having an explicit separation of these might help people to avoid
accidentally mixing the two.

Naturally I will not dump our codebase to erase any existing branch in the
public repository, and I will not delete any of the history from the
public branches.

> I think
> unloading this 15-20 man months amount of work/code on the rex project in
> one big splash is a little inconvenient for many of the companies and
> parties involved.

Bitten once, twice shy, past work in the current public codebase
introduced unwanted features and issues for us. I don't get paid from
trying to sort out all the code that gets committed, and I will not
maintain and hand out checklists of things our developers need to remember
to remove from the public codebase to configure it to work for us. Our
vision is that Tundra is a generic network-based application development
platform, and not an application itself, but I see the public codebase has
been drifting away from that goal. Additionally, some of the features we
have been developing cannot be made public at this time due to contract
agreements.

> It's like the core was rewritten in the total darkness without any
> discussion and now we should all just move to it.

You are naturally free to work on any codebase, nobody can stop you. My
message is simply that we don't do our internal development on top of the
public Tundra branch or the Tundrajj branch, which we consider both to be
old versions.

--
------------------------
Jukka Jylänki
Programmer
LudoCraft Ltd.

http://www.ludocraft.com
jukka....@ludocraft.com
------------------------

Jonne Nauha

unread,
Jun 14, 2011, 10:04:09 AM6/14/11
to realxt...@googlegroups.com
On Tue, Jun 14, 2011 at 4:19 PM, Jukka Jylänki <jukka....@ludocraft.com> wrote:
On Tue, 14 Jun 2011 12:51:14 +0300, Jonne Nauha <jo...@adminotech.com> wrote:

from your new Tundra. I'd like to ask you is this code now removed as in
"git rm" or just disabled from the build via cmake and waiting for porting
to be done? At what point have you last rebased/merged the tundra branch,
was it when tunrajj was created?

The code has been deleted from the repository, but of course git history has it all. I'm investigating moving into a model where the core would be in one branch, and the applications themselves are in another, or a git submodule perhaps. We feel that the core in the current public codebase is getting polluted by features that should be strictly on the application level.  Having an explicit separation of these might help people to avoid accidentally mixing the two.

Naturally I will not dump our codebase to erase any existing branch in the public repository, and I will not delete any of the history from the public branches.

I'm unsure what you mean by polluted features, you have mentioned this more than once lately. I think the current tundra branch is quite clean of these things. Application level might pop up in example scenes or at most js startup folder (the camera code you destroyed apparently, great), but not c++ code really. Or do you think voip is something on application level, everyone that wants voip should make a 3rd party Tundra installer where they ship a voip module? And then release a new one every time the core gets updated? If you think the Tundra core should not support voip, video playback, some concept of "devices" and how to register/pass these I think we have a different view of it then. I don't know why we should limit ourselves to basic network sync + assets. I can't see modules there (tundra branch) that would implement some certain applications instead of giving support to do so in scripts and other 3rd party modules. Some of the ECs you removed might have had stupid shit in them, but they were indeed old and no one used them, so I don't think they were polluting the code really, the code was just dead in the repo in a folder.
 
I think
unloading this 15-20 man months amount of work/code on the rex project in
one big splash is a little inconvenient for many of the companies and
parties involved.

Bitten once, twice shy, past work in the current public codebase introduced unwanted features and issues for us. I don't get paid from trying to sort out all the code that gets committed, and I will not maintain and hand out checklists of things our developers need to remember to remove from the public codebase to configure it to work for us. Our vision is that Tundra is a generic network-based application development platform, and not an application itself, but I see the public codebase has been drifting away from that goal. Additionally, some of the features we have been developing cannot be made public at this time due to contract agreements.

Again unwanted features for you, what about the rest of us and the users? :P We don't get paid to monitor each others commits, but we should in all common sense talk about features that we are implementing together if we want to work on a common code base. I think DevicesAPI is the only core thing we added while you were "away" and for that we tried to contact you and get feedback, the response was you are too busy to look at it and that it should not be a core API (because you didn't design it I guess?). We are trying to get contributors to join our development efforts, I have the sensation the current situation is kind of "this is mine, I made this, don't touch it" and I don't like it at all, even if I agree that core should be kept minimal but we still need more people touching the "core" than Ludocraft.
 

It's like the core was rewritten in the total darkness without any discussion and now we should all just move to it.

You are naturally free to work on any codebase, nobody can stop you. My message is simply that we don't do our internal development on top of the public Tundra branch or the Tundrajj branch, which we consider both to be old versions.

Yes and you are free to do the same as you have done for months now. But don't expect everyone to jump on board after dumping a new core to a branch. The situation might just become that your internal stuff wont be able to connect/work/operate with all the other realXtend Tundra worlds out there, and in fact propably  now can't. If we don't all move to the new effort then you will be sandboxed in a custom client/server solution. But I guess that situation is fine with you and your company as you probably knew what was a possibility by branching out like this and not sharing the new core earlier.

Your idea of making the Tundra SDK and Tundra client/server builds is a good idea. We could still keep all the code in one place and have different builds for just the core tundra and the Tundra viewer/server application. Even if I cant really see what we would remove from current tundra branch to the SDK, possibly all shipped assets, javascripts and UpdateModule (that is a optional module anyways not in the main build) but thats about it?

As talked with Toni and Ali on IRC, we can see it once the code is out how much effort for everyone it is to jump on board versus the benefits everyone gets from this new core. I have been waiting for this code commit from last thursday now so I could see how the branch looks. Now I'm off to holidays and this will have to wait for another month at least for my input on the subject. Hopefully other people can start work on the branch sooner.

Jarkko Vatjus-Anttila

unread,
Jun 15, 2011, 9:20:07 AM6/15/11
to realxt...@googlegroups.com
Chiru project cents to the conversation as well.

We see that there has been great development done in Ludocraft and I
bet most of the features are really something which would be very
beneficial for us as well, even though we are running in slightly
different scope than the companies around here which rely on
commercialization. We do research on certain topics and one of the
corner stones for our development has been that we will ride with
semi-ready and stable platform where we can focus on developing things
assisting the research targets directly. We consider any work in the
core to be away from the research targets, but having said that we are
glad to bring our improvement there as well, where it seems suitable.

In open source projects one of the greatest benefits is the visibility
over the community to see where the development is going. It gives an
edge and an opportunity to prepare upcoming development and be
prepared with our own code to match those changes. Using a big lump of
fundamental changes to bombard common codebase is not a very nice way
of development and will cause a stir in the project. Even though the
code was not released, it still would have been nice to know the way
of development already earlier. I'm not saying that it is illegal to
work in favor of business cases, but information about the way towards
the future would have been nice. On the other hand one can consider
that this announcement was exactly that information, but IMHO it might
prove too much as one single lump of code.

My fear is that once the code is available, it will prove too big of a
leap (even though changes are good) for us to jump into the same
direction. It would simply cause too much of an integration and
porting work which we are having hard time to prove to belong to the
project anyways. Of course I'm saying this without seeing the code,
and I hope the leap is not that big and hence I hope the integration
effort would not be that large. This will remain to be seen. Looking
forward for those changes.

- j

Toni Alatalo

unread,
Jun 14, 2011, 12:33:06 PM6/14/11
to realxt...@googlegroups.com
On Tue, 2011-06-14 at 17:04 +0300, Jonne Nauha wrote:
> I'm unsure what you mean by polluted features, you have mentioned this
> more than once lately. I think the current tundra branch is quite
> clean of these things. Application level might pop up in example
> scenes or at most js startup folder (the camera code you destroyed

That remark seemed nonsensical to me too -- afaik the core is basically
the same in the different branches, and doesn't have app specific
things. Everyone devving now wants a generic app platform. I think Jukka
had actually misunderstood something of the work done during spring,
e.g. how the core ui has been extended.

But now for example this commit from today makes me wonder .. granted,
it's just an EC, and not really core in that sense, but still something
that is proposed (by this commit) to be in the default distro always and
certainly is very application specific:

https://github.com/realXtend/naali/commit/a6f47a0dba1c63779bf0fbd82054376f08168a63
EntityComponents/EC_Sittable/EC_Sittable.cpp

void EC_Sittable::GoTowardsTarget()
Scene::Entity *avatar = GetOwnAvatar();

.. that seems misplaced to me, on first sight at least.

Sitting is a feature of AVs, wouldn't it be better to have the logic to
move AVs etc. be in the AV application .. where also the other av
movement codes are? This EC that grabs control of AVs seems a bit
strange, especially as many apps don't even have AVs. The EC could
perhaps better be just data (even a DC type defined by AV app perhaps,
if sit targets only make sense when also AVs are used?)

Sure, many ECs are some quite specific functionality (like WebView) and
make sense as such, possibly this is ok this way too, but does seem a
bit strange and warrants some thinking.

It is quite a challenge to both allow quick dev and delivery of new
features, but also controlled dev with long term design so that the tech
stays clean. One idea I've been thinking for that would be separating a
more stable long term core, and dev sandboxes with experimental things
and quick hacks needed for feats etc. At least the separation of core +
extra mentioned in earlier posts is good indeed, was discussed also in
the live meets.

> Jonne Nauha

~Toni

Morgaine

unread,
Jun 15, 2011, 3:32:10 PM6/15/11
to realxt...@googlegroups.com, Morgaine Dinova
+1 for well-designed core and clean separation of core and apps.

-1 million for closed development, unilateral deletion, and springing a dramatically revised core 2.0 as a fait accompli on what was an open project.

Toni gives a good example of open discussion about why a particular feature may not be appropriate for core.  That's the way to handle it in an open project, not swinging an axe behind closed doors at code you don't like for 15-20 man months, and then throwing a new core 2.0 over the wall.  Such unilateral decision making creates an "us and them" divide, and leads to poor relationships and uncertainty about the future.

It sets a very bad precedent for project openness.  I hope that this was just a mistake, and that core redesigns will be handled openly in future.  Openness really is for the good health of the project in many social and technical ways.


Morgaine.




=========================

Jonne Nauha

unread,
Jun 15, 2011, 4:57:16 PM6/15/11
to realxt...@googlegroups.com
I just want to point out this EC_Sittable thing was discussed by me, toni and the guy who implemented it. I am on the same line, the EC was supposed to be a data/utility func only thing to first help scripts define entities that can be sat on and then possibly helping scripts for animating the avatar there. It was never an intention to put the guiding logic in the the c++ code. The EC should be data + possible utility funcs if they are helpful and needed. It was speced in a hurry and somewhere we had a miscommunication, it happens when you work in different countries and use irc as you main communication tool :) So fyi this is a non-issue and fixes are being done now to move the logic to js. 

This is how we should solve things that "pollute" core, we should say "hey thats not right" like toni did, then i say "oh, you are right lets fix it" and we put the wheels in motion. It's much nicer than deleting the code and sending an email about it :I Also I would like to point out that this EC_Sittable surely would not be a part of the base component line we provide in a Tundra SDK release. I would very much think this kind of helpful things would go to the Tundra client/viewer bundle, but currently we only have this bundle for end users not an real SDK so everything goes there. I think the separation is very easy to draw at the end between must have ECs and modules and application side ECs, modules and scripts, we just have to do it.

I'm fairly confident after todays IRL meeting at Ludo with Jukka etc. we can get this Tundra 2.0 thing rolling. With some discussion and common sense but we all need to be ready for compromises so we can get to a common ground. But lets just all look at the code first and then talk more.

Best regards,
Jonne Nauha
Adminotech developer



Jukka Jylänki

unread,
Jun 16, 2011, 3:23:20 AM6/16/11
to realxt...@googlegroups.com
I am sorry to see the email I sent has caused bad feelings.

To clarify:
- We are not forcing anyone to move towards the codebase "we wrote in
hiding".
- The development has not exactly been a secret, I've talked about e.g.
coordinate system conversions and asset api implementations before over
IRC, but my time doing general advertisement emails about what we are
doing is rather limited.
- We have had, and are having meetings with related parties, to query if
any things in the backlog cause problems for them.
- We are not taking existing code away from anyone, and strategically, we
are ok, although sad, if "the public" decides to continue on the current
github-hosted codebase.
- Some of the code was developed over "commercial funding", and there
hasn't been a decision made yet to whether the repository will be released
into public. Jarkko expressed grief that this e-mail is coming very late,
but it's on the opposite, I'm letting people know of what kind of work has
been done, well before any moves are made.
- Don't be afraid if some files have been deleted from the codebase. Git
doesn't lose anything, and it's easier to restore files using git than to
manually go restoring commented out code. In the rex project, we have had
too good a track of retaining old code in the repository with the thoughts
"someone's going to fix it Real Soon, and it almost works now." (for
example, OgreAssetEditorModule, EC_HoveringWidget, ScenePersistenceModule,
OpenAssetImport, ...), but even after half a year, it's still not there
yet.
- I would like to powwow every week with everyone in harmony, but this is
not a hobby project I'm working at home, but real deadlines with real
deliverables. In several cases, it's a do-or-die for us, and it makes no
sense whatsoever for me to hold general meetings over a feature X I know
exactly how I need to implement in order to ship our product Y. When/If
the time for release comes, anyone is welcome to reject that
implementation, which is only natural. Making a proposal in terms of
functional working and tested code almost always trumps a design document,
and I find it odd to hear comments that people would have felt more
welcoming towards to getting only design documents instead.
- Again, we are not forcing anyone to move towards the codebase we are
developing.

Perhaps parties external to Oulu don't know the details here - LudoCraft
is not currently running its Tundra development on open-source funding or
similar, but we have customers who are foremost interested in getting
working products. I don't get paid to attend day-to-day scrum meetings
over IRC anymore *sob*. We are making an unpaid effort to bring our
development to the public, but if it causes bad blood, it will just be a
lose-lose for everyone.

We do not want to unilaterally force the direction the public codebase is
developing towards, that is why we have been meeting with the other
developers to hear their thoughts. We have to have a consensus from all
parties, or otherwise we are better off abandoning the thought completely.
We are ok if in the end, the LudoCraft Tundra codebase diverges from the
public codebase, but naturally we hope to reach a convergence here.

Since we have the manpower and experience, I will dictate the direction
the technology LudoCraft uses internally will develop towards. I am good
at making amendments in the case it brings us more actual working
features, valuable bug fixes, better design and outside expertise, but
I've also worked on some open source projects to see bad participants who
only bring loud mouths to the table, and nothing ever progresses.

I understand a sense of "why wasn't I involved!" grief, but the previous
email is exactly that - we are involving you now. So now that that
reaction is out of the way, I am happy to answer to any concerns you might
have related to the actual changelog itself.

And remember, we are not forcing anyone to suddenly "hop on" to anything.

Best Regards,
jj

Toni Alatalo

unread,
Jun 16, 2011, 4:40:31 AM6/16/11
to realxt...@googlegroups.com
On Thu, 2011-06-16 at 10:23 +0300, Jukka Jylänki wrote:

Thanks for the clarifications, Jukka, I was just about to start writing
a (much briefer!) reply with the same points.

Also other companies sometimes have the issue that e.g. contracts with
customers demand that some code is made public only after a certain
period of time. Actually we are lucky when the permission is gotten at
all -- open source practices are still not too well known everywhere.
Typically it is actually most beneficial for the customers too when the
development they need is done quite directly in the mainline repository,
so also the version they use is the one that gets most testing and
bugfixes etc. But this is a far reach for an organization with a lawyer
who needs an explanation and study of the licenses to see why they can't
get exclusive rights to the *whole* codebase :)

BTW this kind of delays happen also with e.g. Opensim dev, we are not
alone with the problem. For example right now Intel has been developing
their scalability system (server side proxies, or 'client managers') for
1,5 years and none of it is public yet. One reason I heard in January or
so (IIRC from them directly) is that they are making it for some
customer who wants to use it first (which btw sounded strange to me, I
didn't know Intel research labs does custom software dev for customers).

> not a hobby project I'm working at home, but real deadlines with real
> deliverables. In several cases, it's a do-or-die for us, and it makes no
> sense whatsoever for me to hold general meetings over a feature X I know
> exactly how I need to implement in order to ship our product Y. When/If
> the time for release comes, anyone is welcome to reject that
> implementation, which is only natural. Making a proposal in terms of
> functional working and tested code almost always trumps a design document,
> and I find it odd to hear comments that people would have felt more
> welcoming towards to getting only design documents instead.

Yes, these real life demands, business pressures etc. and it all being
about making a useful platform that can be used for some sort of
benefit, is what I nowadays call "normal open source" :) . It is the
same for all the companies involved, and largely the case in other
successful open source projects out there. Sure in good cases it is also
mixed with volunteer efforts etc., and luckily we have that too.

Basically we need to refine the process so that it's most cost effective
-- and I believe that is well in line with the usual open source
practices that Morgaine rightly called for. Because knowing about
developments beforehand, getting to share results as early as possible
etc. minimizes overlapping efforts, more complex merges and heavy
communication. I trust this to be the case because see open source being
mostly about practicality and cost effectiveness, and the common
practices have been refined in many projects by many companies for long
now.

And to be fair, I'm now the only one who gets actually paid (by
realXtend association, thanks for the sponsorship of CIE.fi) part time
to work on the project in general, so I have the luxury time to
concentrate on reviewing and commenting other peoples and companies code
etc. Is my job basically to improve the processes so that companies can
better rely on the shared code, contribute to it etc. without too much
hassle. But there is no way around the need of a fair amount of
communication -- I guess that's what we pay instead of EPIC or so
license fees, or just making an inhouse product.

+1 for running code as design specs, that's why I call many commits
'proposals' :) "Rough consensus and running code" is even the way to
*standardize*, the IETF says, and has succeeded. But is still good to
also post a heads-up beforehand so ppl know what's coming, and share the
w.i.p. since the beginning and continuously during the work, when
contracts with customers etc. permit.

I think enough has been said now, we can happily wait for the code
(should come next week) and go from there then .. it may take a while to
adopt it, but it's ok 'cause 1.x series works fine and these proposed
changes don't cause much a difference up to the application level (apart
from faster startup, lower mem use etc), so we can keep developing apps
and games and modules etc. in the meantime.

> jj

Cheers,
~Toni


Antti Ilomäki

unread,
Jun 16, 2011, 8:17:30 AM6/16/11
to realxt...@googlegroups.com
Just a couple of quick, probably mostly useless points.

First of all, I understand and know from experience how difficult the
concept of open source can be to corporata lawyers / bosses. I also
know how important such projects are for the developer companies and
thus also to the project - if you just take a look at Jukka's feature
list you can see what a dedicated team of programmers can achieve in a
relatively short time. This is one way for a platform to grow, being
driven by the application projects built on top of it.

The challenge is in fitting together the deadline and secrecy needs of
customer projects and the general platform development work. One thing
I believe could help would be to create possibilities for
communication between developers. For that we have a pretty good tool:
the realXtend Association that was founded for exactly that kind of
work. We already had one general planning session, where people could
talk about their ideas and needs for the future, perhaps this
tradition can continue? I have also heard talks about roadmaps etc.,
which will likely be very useful indeed. At least it would be useful
to discuss ideas, especially related to core development, before they
turn up as (lots sof) code for Toni or others to review.

Morgaine

unread,
Jun 16, 2011, 9:47:22 AM6/16/11
to realxt...@googlegroups.com, Morgaine Dinova
2011/6/16 Antti Ilomäki <antti....@gmail.com>


The challenge is in fitting together the deadline and secrecy needs of
customer projects and the general platform development work.


It is rather important that commercially sensitive / deadlined / secret work be kept out of core.  Such modules should always be independent add-ons.  If secret customer projects need special hooks in core to work, that's fine, add the hooks to core as part of the standard open API, but nothing more.

The consequences of putting commercially sensitive, deadlined or secret customer functions in core are terrible:  core releases get deferred because product management wants to spring a surprise for commercial advantage, and everyone else suffers.  It creates an atmosphere of secrecy too, and uncertainty for everyone else.

The core really needs to be maximally open and non-secret, with customer projects external to it.  That's good modularization policy too! :-)


Morgaine.



==================


2011/6/16 Antti Ilomäki <antti....@gmail.com>

Jonne Nauha

unread,
Jun 16, 2011, 1:48:50 PM6/16/11
to realxt...@googlegroups.com
Morgaine your statements are fine in principle and I can concur with them, but you are badly mistaken if you think any of that happens in our code base or what is going on with this Tundra 2.0 discussion. Nothing of the sort. The blunt truth is that realXtend would be dead without Ludocraft and other companies like us doing commercial projects on top of Tundra. The open source money ended six months ago and after that its been relying on us all to deliver open source code with private funding and the pressure is on the companies. Very few people (if any) do this for the kicks on week-ends and we dont have basically any real open source interest in the actual development. We do have lots of users and a great little community but that is different from actual real open source code contributors. Exceptions would be ENNE and CIE now, but I consider them being core devs now too, and both of those entities have their own funding as well for research or commercial things.

The fact that Ludocraft is giving this code we can only be grateful as they could as well keep it for their commercial endevours and leave us re-implementing all this stuff over again assuming we even could. The only concern for the open source side here is how the rest of us are going to port existing applications to use the new core. It's not an issue of code quality or placement as we all know (who work on rex) that it is always superb and well designed when it comes from Ludocraft.

I just wanted to comment on your thing as I don't want anyone reading this to get the wrong ideas. The whole topic got a little side tracked, we really should be applauding Ludo for sharing the code, the concerns that I and possible others had here came a bit too strong and probably gave false image of the situation to many. The "purity" of our core is well protected from the things you mention, and will be even better once we get this 2.0 stuff rolling and separate the core more clearly from the application level.

As the normal users of Tundra I would keep all my fingers crossed this jump goes smoothly so you get a nicer client/server set. I mean you wont be having any issues porting c++ or javascript code so the switch to the new core is transparent to you! If you are a developer and do need porting I'm fairly sure I will make some kind of blog post or wiki how to convert your code into the new core so the switch will be pain free.

Peace out :)

Best regards,
Jonne Nauha
Adminotech developer



Morgaine

unread,
Jun 16, 2011, 3:47:55 PM6/16/11
to realxt...@googlegroups.com, Morgaine Dinova
On Thu, Jun 16, 2011 at 6:48 PM, Jonne Nauha <jo...@adminotech.com> wrote:
Morgaine your statements are fine in principle and I can concur with them, but you are badly mistaken if you think any of that happens in our code base

I was merely quoting Antti, 2011/6/16 Antti Ilomäki <antti....@gmail.com>


The challenge is in fitting together the deadline and secrecy needs of
customer projects and the general platform development work.

If there is no risk of core code getting entangled in secret development then that is excellent news.  Nothing more needs to be said. :-)

Should it ever be needed though, adding open API hooks to core which can then be used to hook in non-open customer projects is a good way to factor the codebase and keep everybody happy.  (And keep the companies' money rolling in. :P)


Morgaine.


===================
Reply all
Reply to author
Forward
0 new messages