just a little information about the branches where quite substantial
work is going on in different places. just for the devs to know,
possibly doesn't require any coordination (are quite orthogonal, even
though there is overlap is is probably quite simple and small):
a) Enne's develop_withtundra updates: a candidate for a future unified
branch, which merges tundra to develop so a separate tundra branch isn't
needed anymore (except perhaps as a light build preconfig). Continues on
the merges Jukka and I did earlier. Has text-to-speech etc. which came
to develop after tundra merged from there the last time. Is currently
AFAIK Tundra 1.0.4, but pulling current tundra to this should go pretty
smoothly. Alberto said IIRC a couple of weeks ago that they'll be
merging their other dev branches and updating their main repo, when have
the time. Has separated the av&world cards using login to an own module
(out of UiModule) etc. Ah and has the configurable QtScript debugger
integration, https://github.com/enne/naali/tree/develop_withtundra4
b) Chiru is working on multiconnection / multiscene support. Very much
work in progress, I don't know if the code that actually uses it is on
github yet even. Had fun bugs >week ago when they showed the
work-in-progress, when there was multiple tundra connections and
scenemanagers but still only a single underlying ogre scene :)
https://github.com/Chiru/naali/tree/perscene-syncmanager
c) Jukka began a very interesting aggressive refactor branch, a 'fix
everything' effort it seems :) (sounded that because he was ill so had
time of from project work :p) .. cuts down dependencies (Poco is gone,
module loading done somehow simply in own code, there are no module xmls
anymore etc), removes useless namespaces and does js exposing more
cleverly etc. Jonne was making a new config api here yesterday (for fun)
etc., https://github.com/realXtend/naali/commits/tundrajj . Jukka
himself said that he doesn't yet know what the future of that branch is,
but at least a fun experiment I figure .. to see how small and simple we
can go. The simpler the better, I figure -- some other players/viewers
like Unity3d, Panda3d and Gamekit are ~5-15MB downloads and start
quickly, that's a good target for our core too. All the functionality of
the current develop / Naali 0.4.0 >100MB download monster can still
remain as optional. But certainly we don't always want to be like an
operating system distribution, with not only qt, but also half of
gtk/gnome (for telepathy dbus things) and the python standard library
included :)
I won't be touching these much soon, but try to stay on track of what's
going on .. while working on demos etc. (LVM has an infinite todo, and
much basics missing, but I got bored of not being able to run the
project visualization thing so tested as my free time fun porting it
from opensim to tundra .. i see lego bricks already :) The code is in
https://github.com/antont/rexprojectspace/ .. the 3rd party blog post
about it is this in google cache
http://webcache.googleusercontent.com/search?q=cache:FL1MnE4qLycJ:blog.knowsense.co.uk/blog/_archives/2010/12/20/4707937.html+opensim+software+project+alatalo&cd=4&hl=fi&ct=clnk&gl=fi&source=www.google.fi
the original address says now that the blog has used all it's
bandwidth :p
http://blog.knowsense.co.uk/blog/_archives/2010/12/20/4707937.html
After demos are in better shape, I can probably return to help with
merge work and other core things .. for example in May after LVM has
been published.
~Toni
Hi again!
I failed to test earlier, was getting a linking error due to Scene lib missing, and only a couple of days ago realized that it was just because I had an old CMakeBuild.txt lying around there (realized 'cause got a similar problem with mainline tundra branch when Devices API was added).
Now there is the problem that knet has changed since 1.0.5, and that branch is still at that, so a question:
Are you planning to merge again, bring tundra 1.0.7 (tagged yesterday) to this version of develop?
If not, I could test it anyhow by building with 1.0.5 compatible knet, or try cherry-picking the knet related commits since 1.0.5 to develop_withtundra (may be easy).
> Main changes are the development of a new Camera Module to add new
> widgets showing different perspectives of the selected object,
> improvements on the UiModule and EtherModule, fix of the object
> manipulators, corrections on the javascript debugging and merging of
Would like to get to test these nice new feats, cam module sounds like a great addition for editing (i suppose that's why you added it too). Fixed obj manipulators and JS debugging certainly too.
BTW I suppose you have some sort of windows builds of this version for your own version? That would help to test too.
> being the tundra 1.0.5 version merged, we would encourage the
> community to agree on having a single development branch.
Yep getting rid of unnecessary divides would be good indeed.
> Andrés Navarro
~Toni
> --
> http://groups.google.com/group/realxtend-dev
> http://wiki.realxtend.org
> http://dev.realxtend.org
* Extend exposition of Vector3df and Quaternion to Javascript.
* Integration of Javascript BDD framework Jasmine with tests for
Vector3df and Quaternion.
* Extend EC_Placeable methods for relative and absolute rotations.
* AutoSave python component for backing up and restoring scene.
* Ordering of menu entries and several fixes on Ui.
* Fix messages and screenshots on the EtherModule.
Using those changes, we have developed Javascript controllers for
EC_Placeable and EC_RigidBody based entities, which allow easy
rotation and movement and provide several lookAt and goTo methods.
Those controllers have been used to create an avatar script which
allows flying keeping physics and walking based on mouse interaction
with objects.
I think this is seriously cool, from an end user perspective -- anyone interested in how creating with Tundra works should try this. Is basically just the same docking biz as in 0.4, but with improvements like being able to save window layouts etc.
We are talking about the technical side on IRC now, I'm sure we can fine a nice way to integrate. A little more of how and why I find these UI additions so useful, and certainly studio Enne has had good reasons to keep that going .. helping creators in being productive is most important in the toolset.
~Toni
14:16 < antont> i was doing the port of that game also to get first hand experience of how creating something with tundra is now
14:17 < AndresENNE> that's a good way to evaluate user experience
14:17 < antont> and hated how was lost with the eceditor & scenestruct windows all the time when switching between those and my code editor etc, and when needed to restart the server constantly always had to again open scenestruct + ecedit etc
14:17 < antont> having this nice layout, basically like the old build mode, would have helped me this morning i think
14:18 < antont> nice how the consoles are there too, i always liked having the console docked with 0.4 .. handy especially when have several e.g. clients open, to stay on track on what console belongs to which client
14:19 < AndresENNE> every widget can be docked or not
14:20 < antont> yep
14:21 < antont> is perfect i think
14:21 < antont> like was in 0.4 already basically
Best Regards,
Jonne Nauha
Adminotech developer
--
yes - now it works so that server.exe and viewer.exe load that ui, but
there is also player.exe which doesn't have the authoring tools .. just
a pure end user thing. that's how Enne needs it so they did that, is so
in that build.
> A question also came up about the possibility if users could temporary
> load objects to the server (similar to the autoreturn in OpenSim)? I
> think this could be quite useful for collabortion.
what is autoreturn? you mean like a sandbox is reseted? that's how the
www.realxtend.org demo works now, changes to the scenes there are not
saved.
> Pedro
~Toni
Yes editing policies, sandbox logics etc. are all very much applications
specific things.
> Toni: Any idea who/when this could be actually started now that we are
> on the security topic. Maybe you could take a look after the game
> stuff you doing now? :)
I can probably work on it after the 9th -- that's when need to demo nice
things, hopefully some first test of that game port a little too :) ..
but also probably integrate knon and some of toy, with the tools, to the
same scene etc .. which must run without remote connections etc.
The only question regarding that permissions hook has been whether we
can do it by changing the existing OnEntityCreated and
OnAttributeChanged signals, or whether we need new ones.
My current understanding is that we need new ones that are emitted
before those. Because with those we can't control the order in which the
go to different handlers, so the perm hook might come after other places
applied the change already. Signals don't have priorities or a filter
mechanism etc.
So unless there are better ideas by the 10th, I can try adding the
hooks .. perhaps BeforeEntityCreated or PreAttributeChanged or something
would be nicer names than AttributeAboutToChange, or at least
EntityAboutToBeCreated? (the current signal for authentication is
server.UserAboutToConnect and there's also server.IsAboutToStart()). I
can do it with ugly names first and see how it works, names are easy to
change then :)
Jukka suggested that the attribute change signals should have both the
old and new values included and that sure seems like a good idea.
> Jonne Nauha
~Toni
Thanks for info!
I've spent some spare moments during my home day setting up a Linux
build of that, first made some stupid mistakes with git branches so got
delays but seems to be running now .. I'll push the little tweaks that
needed to do when it compiles (so far just QWidget.h -> qwidget.h in
UiWidget.h).
Will review the changes a bit and probably push to the central develop
branch soon, so the bot system will be running linux builds when you&we
make further changes there etc.
> Andrés Navarro
~Toni
That one include capitalization fix was the only one needed, compiled
and ran then.
There's one stupid problem: the files you have edited and added (lots of
interesting stuff there, haven't seen much of it yet) seem to have CRLF
line endings now for some reason, the windows/dos style, instead of the
plain LF unix-style which is usually used with Git, and in the Naali
repo too.
I followed the procedure in the github info page to convert them, that
has also info of the settings which should prevent this from happening:
http://help.github.com/line-endings/ .. i.e. set git option autocrlf to
true in your dev machines, please. I'm sorry we didn't give this
instruction earlier, apparently miss a link to it in our wiki even.
Pushed the linefeed conversion and the linux build fix to
https://github.com/antont/naali/commits/dwt107 -- you can either pull
from there, or convert the line endings yourself .. is a bit stupid that
when I made, I'll show as the latest author of the lines you've written,
but the actual history is of course there too so doesn't matter too
much.
The simple bundled examples are working for me, but get a crash
(segfault) when try to load the LVM / Chesepeake Bay app. It is in the
Javascript modules transform attrs conversion func -- apparently you had
some js support changes, but I didn't see what exactly yesterday 'cause
ran into problems with diffing against the mainline version due to the
linefeed differences (every line showed as different :p). This is the
crash:
Program received signal SIGSEGV, Segmentation fault.
fromScriptValueTransform (obj=..., s=...)
at /home/antont/src/enne-naali/JavascriptModule/ScriptCoreTypeDefines.cpp:399
399 s.position = *pos.data();
Apparently you have changed this part, like this? Does LVM
scene2/lvm_full.txml work for you? I haven't had access to windows now
so have only been able to test with this own build.
< fromScriptValueVector3(obj.property("pos"), s.position);
< fromScriptValueVector3(obj.property("rot"), s.rotation);
< fromScriptValueVector3(obj.property("scale"), s.scale);
---
> // $ BEGIN_MOD $
> Vector3dfPtr pos =
qscriptvalue_cast<Vector3dfPtr>(obj.property("pos"));
> Vector3dfPtr rot =
qscriptvalue_cast<Vector3dfPtr>(obj.property("rot"));
> Vector3dfPtr scale =
qscriptvalue_cast<Vector3dfPtr>(obj.property("scale")
);
>
> s.position = *pos.data();
> s.rotation = *rot.data();
> s.scale = *scale.data();
> // $ END_MOD $
I'm travelling this afternoon to Holland, to metameets.com (a demo there
on Saturday) so will be mostly offline till Monday .. back to this more
then.
Cheers,
~Toni
Conclusion is now that new signals are needed, as the way to implement
this kind of a filter mechanism.
We met on Monday with Jukka and Lasse and agreed to go with this set of
signals now -- I'll start implementing when get the chance, perhaps a
first step on coming Monday .. then is a bit unclear with the holidays
etc. This is the plan anyhow:
> hooks .. perhaps BeforeEntityCreated or PreAttributeChanged or something
> would be nicer names than AttributeAboutToChange, or at least
> EntityAboutToBeCreated? (the current signal for authentication is
> server.UserAboutToConnect and there's also server.IsAboutToStart()). I
Jukka had drafted this set of names with AboutTo* style which seems ok:
-Server::UserAboutToConnect (already implemented, works for auth)
-SyncManager::
- AboutToCreateEntity(UserConnection *source, MsgCreateEntity &entity)
- AboutToRemoveEntity(UserConnection *source, MsgRemoveEntity &entity)
- AboutToCreateComponent(UserConnection *source, Entity *target, comp)
* the list of components from net msg split to individual calls
- AboutToRemoveComponent(UserConnection *source, Entity *target, comp)
- AboutToModifyAttribute(UserConnection *source, IAttribute
*targetWithOldValue, QVariant newValue)
* For DynamicComponent:
- AboutToCreateAttribute(UserConnection *source, IComponent *target)
- AboutToRemoveAttribute(UserConnection *source, IComponent *target)
We were also considering a simplification, so e.g. a simple permission
check to disable all editing doesn't need connecting to many signals ..
this would suffice to prevent any remote changes to the scene on server:
- AboutToModifyEntity
* emitted for Create/RemoveComponent and Create/Modify/RemoveAttribute
And for Entity-Actions:
- AboutToTriggerAction(UserConnection *source, Entity *target,
ExecType, QString action, QStringList params)
We actually didn't talk about how to handle the situations when client
makes some change locally, which is then rejected on the server. Was
thinking about it afterwards, and Erno was also wondering yesterday how
to deal with not getting confusing situations with invalid state on the
client.
For the first use case of simply disabling editing on a server, that's
ok, 'cause for such usage in end user applications (such as a game) the
UI probably doesn't have the editing tools (e.g. EC editor) which could
do those changes which would be rejected then. If someone connects to
such a server with a 'rogue' client and tries to edit it, is ok if he
gets confused, as it's not the end user scenario.
But with more fine grained situations where e.g. users can edit their
own objects freely, but not others, or if they can edit some attributes
of some components but not others (e.g. the URLs of webviews) we'll
easily need some info of what's going on to be able to present in the UI
and to keep the state valid on the client.
Have been thinking that one way is simply to do this with custom logic:
e.g. have the permission check module (e.g. a js script) work so that
when it rejects a change on the server, it uses entity actions to
communicate to itself on the client side to show a UI alert informing
the user.
Erno was wondering if simply sending the old kept value back from server
would work ok to enforce same state on the client. This might be even
quite ok in the UI .. if you try to edit a field in EC editor that you
are not allowed to, it would always reset back to the server value after
you edit.
Plan is to only have these hooks enabled on the server, which is
authorative -- we thought that typically client is not supposed to
reject data from the server. Erno was wondering if that'd be useful
sometimes, and it's trivial to enable/disable in the code (it's the same
syncmanager anyway, that just checks for client/server mode if the
behaviour is to differ). But I think we can first go with the server
only idea, easy to enable if someone really needs on the client, but
perhaps better first without as it can be just confusing.
These signals fire for individual changes as they come -- there is no
support for transactions that you could reject as a whole. We figured
that when someone needs such larger batches of changes, can implement
those as an entity action (a remote function call).
> ~Toni
same.
Got the first step indeed mostly done on Monday, and completed it now.
Decided to start with this overall all reaching signal:
> We were also considering a simplification, so e.g. a simple permission
> check to disable all editing doesn't need connecting to many signals ..
> this would suffice to prevent any remote changes to the scene on server:
> - AboutToModifyEntity
> * emitted for Create/RemoveComponent and Create/Modify/RemoveAttribute
Am now emitting that also for Create/Remove entity, so that one signal
works for preventing any remote editing of a scene. The entity parameter
is null for the CreateEntity message.
Tested that it works with this Javascript thing,
https://github.com/realXtend/naali/blob/tundra/bin/jsmodules/apitest/permissioncheck.js
(by doing ./server --run jsmodules/apitest/permissioncheck.js)
This actually suffices for many traditional, as in pre-made, apps -- for
example the Chesapeake bay LVM app, the reference / default avatar app
etc. don't modify attributes etc. on the client side but just send
actions and the server runs the logic.
So you can just copy that js file to the jsmodules/startup/ directory on
your server, and should be good to go to host a public server without
the worry that anyone can login with a normal client and use the
scenestruct gui to delete the whole scene etc.
The logic is easy to combine with some sort of authentication, so that
e.g. only clients that give a certain password at login can edit. Except
that I forgot to add the UserConnection ref to the signal, will add that
next :p
The fine grained signals for individual attribute changes etc. are, I
figure, needed for apps where e.g. some custom UI allows users to modify
the URLs of some webviews, but nothing else. I'll implement those at
some point.
Current implementation leaves the unauthorized client in a non-synced
state, for example if it deletes an entity, it gets to delete it for
itself, even though the server then rejects that change so it doesn't
happen for anyone else. Same for rejected attribute changes -- they
happen in the client that makes them, but nowhere else. Erno's idea of
just sending the old state back to the client might work ok to help with
this, and I've been thinking that scripts in apps can do custom UI
notifications etc. if want to give more info of when that happens (e.g.
if in TOY someone can only edit objects that has rights to etc).
Current code doesn't have extra checks to fire these signals on server
only, but those are easy add if really needed (is how we designed it).
Seems a bit unnecessary as it's easy to just enable the logic on server
only, but perhaps good to add still so that someone doesn't run these in
client accidentally?
~Toni
> -Server::UserAboutToConnect (already implemented, works for auth)
> -SyncManager::
> - AboutToCreateEntity(UserConnection *source, MsgCreateEntity &entity)
> - AboutToRemoveEntity(UserConnection *source, MsgRemoveEntity &entity)
> - AboutToCreateComponent(UserConnection *source, Entity *target, comp)
> * the list of components from net msg split to individual calls
> - AboutToRemoveComponent(UserConnection *source, Entity *target, comp)
>
> - AboutToModifyAttribute(UserConnection *source, IAttribute
> *targetWithOldValue, QVariant newValue)
>
> * For DynamicComponent:
> - AboutToCreateAttribute(UserConnection *source, IComponent *target)
> - AboutToRemoveAttribute(UserConnection *source, IComponent *target)
>
> And for Entity-Actions: