Jump to content

Milyardo

Member
  • Content Count

    30
  • Joined

  • Last visited

  • Medals

  • Medals

Posts posted by Milyardo


  1. Official terrains by Bohemia Interactive:

    I have a PDF of all these maps, except the Desert, Desert Island, Bystrica, and Bukovina..

    Bystrica and Bukovina aren't fictional, they're real districts/provinces of the Czech Republic.


  2. So what? What if they are only interested in part(s) of your entry? Extracting some minor things make an entry incomplete and you are out of the business. From now on modding in ARMA is a commercial and legal issue. If you don't want BI or others to make money with your intellectual property you better get in touch with a lawyer.

    I'm very sad about this development. Until now the ARMA community was one, if not the most creative community. It was a "give and take" relation which works as long as money is not involved.

    This times are gone.... :(

    You might want to look into a few more English lessons before you keep making accusations like these. That part means they have to make an offer for your entire mod, and not parts of it.


  3. Take care of your intellectual property, cause the rat race already started and once you just participate in this contest you lose your intellectual property irrevocably, even if you don't win a single cent!

    It's astonishing that obviously Vilas is the only one who realized that until now.

    my2cent, and now you can tar and feather me ;)

    That isn't what that means at all. It just means once you submit it to the contest you can't unsubmit it. Which makes sense because BI is probably going to tweet/blog/make press relases about the the mods in the contest and include demos, download links, videos, screenshots, etc of the mod, be it images or videos made by the author, or by BI themselves.

    If that still doesn't get you take take off your tin foil hate there's this:

    Shall the quality of the Entry allow it and shall the Organizer be interested in utilizing of the complete execution of the Entry for commercial purposes, the Organizer will offer the Participant conclusion of a relevant contract (i.e. publishing agreement).

    iTL;DR they can't money off your mod without an agreement.


  4. if someone asks you how to do something and later he want to sell it than how you act ?

    What does it matter to you what someone wants to do with their project? It's not yours and you have no say what they do with it. It's not like mods with commercial goals don't already exist.

    community here and "oldschool boys" cooperate, help each other and now imagine on of us wins fortune on it , so .... someone gonna hunt me cause he helped with doing config or i hunt guy cause i donated rifle ?

    how for example i could put P85 to contest when lots of people helped me with configs ?

    Once again, helping someone make something doesn't mean you're entitled to their work; you have a disturbed notion of copyright assignment and derivative work.

    Also, for the second time, no ones going to "hunt" you, if someone uses someone else's work the project gets disqualified and no one gets any money. What part of it's against the rules do you not understand?


  5. configs, model.cfg, help, tutorials via Skype and etc. for Arma3

    You can't assert copyright over someone else's work because you taught them how to make it, nor can you assert copyright over configuration files.

    so to be precise my elements cannot be in CONTESTED part, if someone DOESN'T chase in contest but do it with no profit idea - all is OKAY

    The contest rules forbid this anyways, and it a moot point.


  6. Your global reference is a more uglier method of doing what I described with a persistent V8 handle. It would still leak the object. Pseudo-code illustrating object return by reference:

    _something = "something_id_ref = new Something; 'something_id_ref'" call JS_fnc_exec;
    _something = nil;

    When and who is going to release the global "something_id_ref" in JavaScript land?

    (_something + " = null;") call JS_fnc_exec
    _something = nil;
    

    In this particular example(it's a bad example for what we're trying to illustrate). The user explicitly created a global variable, so it should be up to them to manage it. Detecting user explicit globals would be a fairly advanced feature however and beyond the scope of what I was describing.

    Returning our earlier example:

    _result = "2+2" call JS_fnc_exec //At this step your framework should create a global variable in JavaScript, say "expr1" and return that name
                                               //It's important to note that your framework creates this reference, not SQF, it's up to you to manage it
                                               //and by extension SQF cannot leak references it doesn't create.
    "expr1" call JS_fnc_exec //returns 4
    _result call JS_fnc_exec //also returns 4
    _result = nil
    "expr1" call JS_fnc_exec //returns 4
    call JS_fnc_reset //A new method to reset the v8 execution context or just collect the list of evaluated expressions your framework maintains
                          //resetting the execution context is more desired because it allows us to undefine classes as well.
    "expr1" call JS_fnc_exec //returns undefined
    

    ---------- Post added at 01:27 PM ---------- Previous post was at 12:08 PM ----------

    ;2412370']Why not provide a function that nils the variable in SQF land but notifies the JavaScript land beforehand/too?

    Reference binding and synchronization in general would be a nice to have.


  7. "new Something" does not create a global. There are no active references to that object which will lead to this value being garbage collected by default. To hold onto this object (so the reference can be returned to SQF) I would need to grab and hold a persistent V8 handle for this object. The issue is - when do I release this handle? I cannot detect when local/global variables are unset in SQF - which means this object will never get garbage collected, which means a leak.

    You should reread my first post on this subject, your framework should create the the global reference, and return the name or identifier of that reference as in the second example I posted.


  8. _obj = "new Something" call JS_fnc_exec;
    _obj = nil;
    

    That would leak the JavaScript object as I am unable to detect when SQF reference has died. A nice solution would be for BIS to introduce new "resource" type for the callExtension to return/create. And somehow be notified when the resources are no longer referenced in SQF.

    That not a leak even in the loosest definition of word. There is still a reference to the JavaScript object as a global, which can easily be evaluated through the list of global variables. SQF can't leak those values because SQF doesn't manage those references. That said you will have a ever growing list of evaluated expressions as global variables, this is a common in REPL environments and they usually come with some sort of command to reset the environment or session(in addition to evaluated expressions many other environm


  9. The toString() is actually part of the language. It's not used to serialize objects - but to return a string representation of that object (a good example is a Date object).

    Serialization would probably better than toString() however I still don't think it is correct. When passing values into a REPL assignments should be transitive, passing a value returned from the REPL should result in the same value. The following sequence should be valid regardless of object's type(instead of an object it could be String, or a Long, or an Array) when calling by value, or by reference(ignoring issues of precision).

    _expr1 = "new someObject" call JS_fnc_exec;
    _expr2 = "someObject" call JS_fnc_exec;
    //This should return true
    (expr1 + " === " + expr2) call JS_fnc_exec;
    

    As for your suggestion - is there actually a good reason to return JavaScript objects to SQF land (by some sort of a reference)? Technically it would be possible to make a persistent V8 handle on the returning JavaScript object, hash it in some sort of a number representation and return that object as a specially encoded SQF string.

    Yes a named reference is exactly what I was refering to:

    _value = "new someObject" call JS_fnc_exec" //Should return "expr1"(or some other token of your choosing) as a value
    ("_value+".toString()") call JS_fnc_exec //Should invoke toSting() on expr1
    

    But since you can't really do anything with this in SQF (can't transmit over the network, etc) - that would be pretty much useless.

    I don't understand how that makes references useless at all. references don't work across different VMs or networks in any other language without some sort of framework to serialize objects and send them for you in any other language, even SQF.

    If you truly need to get a JavaScript object out of JS land into SQF - I would suggest getting a JSON representation of that object. Then you can transfer this JSON string over the network and even re-create it on another machine.

    Serializing still wouldn't be correct, in the example above a new object would be constructed every time I pass a the value back to repl, instead of reusing the same object via a reference.


  10. [*]JavaScript Object with .toString() implementation => SQF "STRING" type

    After playing around with this shortly, I don't think this is correct behavior. The framework should instead return a reference(assigning some sort of global named reference would probably be easiest, though I don't know if that would be best) that can be reused in subsequent calls to JS_fnc_exec in a manner similar to many other REPL implementations do for returned values.

    EDIT: Of course this raises the question on how one would manage reference to primatives as well, a how to manage a system for call by value/call by reference(EDIT: Sorry calling by reference/value is a non issue as that is evaluated by v8, instead a system would be needed for returning references or values).


  11. Needs to be a native command however!

    You mean as part of the command menu for player team leaders? Before this is implemented the whole radio/command system should be overhauled to be a little more dynamic that is it is now. A simple land command wouldn't be applicable to every unit and there should should be variations of it to respond to the current RoE and combat status. Even if the command system were programable outside the support/radio radio menu would be great as to allow the community to address the now dated static nature of the command menu.


  12. I would suggest adding debug support as a todo. Perhaps even add the calling SQF function/line as content in the debug message. I don't have experience with v8 but I would first look into a implementation of a handler for v8::Debug::SetDebugMessageDispatchHandler() to do this.


  13. citation? source? definitely not contacted me ...

    From what I remember it was Svartalf from LGP about the port of the Armed Assault, not ArmA 2, I don't think if free was part of that discussion or not(I doubt it if Svartalf was trying to contract the port for LGP).

    http://www.phoronix.com/forums/showthread.php?t=17492

    oh btw. our games works on NIX via WINE ... (A1, A2, OA, TOH, only A3 sort has issues of due to WINE not yet fully supporting DX11) ...

    Those aren't the only issues, AFAIK, BattleEye regressed a few months ago when BattleEye started using KiUserExceptionDispatcher.


  14. And bytecode/intermediate code (which is the question of this thread) are not serialized data. So neither raP nor BSON is relevant to SQF!

    [sic]

    ... clearly you do not know the answer to the question. The only option left is to wait for any dev to jump in and to clear it up.

    You asked if SQF was interpreted or if it was run from bytecode. It's neither, it's compiled. I did state there was a intermediate representation in ArmA(raP) but incorrectly assumed it applied to SQF. However I was correct in stating that intermediate representation is not a bytecode language.

    The Zend Engine (PHP 4) is/was an interpreter.

    The Zend Engine 2 (PHP 5) is a virtual machine (without JIT), just like early JVM.

    I just wrote you the Zend Engine 2 (as a VM) together with PHP 5 was released 9 years ago..

    I don't understand how this anything different from what I said, other than you seem to be implying that Zend and the classical PHP intrepreter are the same which they are not.

    EDIT

    You were saying - the optimizations are a property of virtual machine, not the bytecode. I am asking - can you have a virtual machine without a bytecode layer (and whats the point of your statement)?

    Your question still doesn't make sense. What exactly is a 'bytecode layer'? You have machines and you have input. Bytecode is input into a virtual machine.


  15. Sorry but that's apples and oranges. Config files are data, hardly a programming/scripting language. There is no logic to them at all (besides the pre-processor). Same as JSON having a BSON (binary JSON) representation.

    And you know that based on that link? It didn't even mentioned SQF or scripting. As far as I know you cannot rapify SQF files with official BI tools. Binarized format is used for config/data files.

    JSON/BSON is an excellent analogy for raPification. The docmentation states "raP encoding applies to any humanly readable text file in OFP that contains class statements.". So while it is true that raPification doesn't apply to SQF files specifically, it is not because it contains SQF contains logic or satements. Both raP and BSON are forms of serialization.

    Let's reverse this: can you have a VM without a bytecode layer? Unless you mean something even more advanced, like Google v8.

    I don't understand exactly what you're asking.

    I just happen to know A LOT about PHP as this is my primary language for 10 year now. So.. it got opcodes with Zend Engine 2 (released 9 years ago). They do optimize the opcode level during the grammar parsing process. There are also higher level optimizers in play (APC and Zend Optimzier). So what does it make it then, not a Virtual Machine?

    Yes, the Zend Engine is a virtual machine. The Zend Engine however is not the classical PHP interpreter which is not a virtual machine(more or less, like I said this has changed relatively recently). The article you linked specfically talks about features from Zend the classical php interpreter will borrow.


  16. In my opinion, your reply illustrates that you are a cock.

    That's a little uncalled for. If I'm really being uncessarily terse then by all means elaborate on the subject and answer his question. In my opinion there isn't a question here that can't be answered meaningfully.

    What has formal grammar, language classification and turing machines have to do with being interested in how the engine interprets/compiles/runs the scripts? Especially since you told him "fuck you" basically.

    Those are the fundamental concepts to compilers and machine level instruction processing.

    ---------- Post added at 04:33 PM ---------- Previous post was at 03:54 PM ----------

    Which means the compile call is stripping whitespace and stuff? :) You do sound like you know something about SQF implementation.. can you please enlighten us? Why is this such a secret? The BI wiki has literary zero info on the subject.

    I won't make the claim that I know anything about the implementation. However Armed Assault config and script files can be compiled to a binarised format. This documetation(https://community.bistudio.com/wiki/raP_%28ArmA%29) is pretty outdated, but is true that there is an intermediate representation of a SQF, however this intermediate representation doesn't qualify as a bytecode because this binarised format still requires parsing by a grammar to make a set of instructions free of semantics like object type and scope.

    I get it, MSIL for .NET, Java bytecode for JVM. But opcode layer is also orders of magnitude more efficient to "interpret" not to mention all the possible low level optimizations.

    JIT and low level optimizations like you're infering to come from using a virtual machine to interpret a bytecode language and not an inherit property of bytecode itself. A perfect counter-example would be PHP(though PHP's interperter is becoming more virtual machine like and this is less true than it has been in the past), it has a byte-code representation, however by using bytecode format files the only benefit you gain is during program loading since you skip the step of grammar parsing.


  17. I was wondering about the current SQF scripting state in Alpha - does the Arma 3 scripting engine is using some sort of intermediate opcode/bytecode or it's purely interpreted language?

    Neither.

    What for are the compile command if nothing is actually compiled?

    What makes you think nothing is compiled?

    The reason I am asking this is because you can still see the actual code when debugging the compiled "Code" type. Unless it's some sort of a meta output?

    Thats what debug sybols are for.

    Now if the SQF is indeed an interpreted language in the year of 2013.. I am baffled. We have issues with CPU utilization already, having the SQF use at least an intermediate opcode level (or even JIT compilation in the future) would solve so many performance issues?

    Bytecode VMs were introduced to address problems with application portability, not performance.

    I apologise for the terse responses, in my opinion your question illustrates that you don't have enough familiarity with formal grammar, language classification, and turing machines to make this a worthwhile disucssion.


  18. Yeah, I mentioned that on reddit, but they seem set on Java for some reason. Which means I'll be playing A3 in a VM (and sticking to non-K Intel CPUs for VT-d)... Pretty much replacing one problem with another, but hey, at least we're getting 'somewhere'.

    (http://java-0day.com/)

    Most(1) of those Java Zero day exploits don't apply to context outside the Java Web Start plugin(2) and could not be exploited via applications running in the JVM via JNI. Regardless of how insecure you think Java is, Java is light years ahead of SQL/SQF in terms of performance, security, and correctness.

    Just out of curiosity, what do you propose as an alternative to Java?

    1)One exploit in the past few months did abuse reflection APIs to execute methods outside the context of the security manager, that that bug is fixed.

    2) As an aside, even though the problems had to be fixed from Java, these security problems are more the failing of web browser plugin architecture. There isn't a web browser plugin out there that doesn't have constant security problems, and the same problems have to fixed individually for each plugin. Web plugins as a whole suck and you should be worried about all plugins you have installed not just Java. Ironically, the very website you linked warns against this same thing in it's footnote.

    EDIT: For example, in classes in Java once loaded cannot be redefined. This exploit wouldn't exist in a JVM based environment.


  19. Regarding the whole ToH thing, to me it's no surprise that the API is a little raw. It's a first time implementation of Java in this engine for BI, and they probably kept things simple on purpose.

    At the risk of sounding some what defensive, I never faulted BI for doing so. I just asked for how the information on how the API is going to be improved, and cited problems I saw with it and improvements I'd like see, information I think should be BI's statement on the future Java.

    I don't want to derail the thread into a topic about what Java APIs should and should not look like or if SQF does or does not suck(How is this even an argument? It plainly does.). However, for those who argue that the API in ToH was just fine, I'm interested in hearing evidence for those opinions what they sound fairly outlandish to me. I bought ToH just the other day to confirm that many of the problems I foresaw in the wiki with the API did exist. Even then, many other problems that became apparent even after just an few hours of usage, like with how all invocations to jcall are blocking SQF VM it's called on(Having to invoke a new SQF VM to invoke a new JVM so that jcall doesn't block on the main game engine thread is really really dumb).

    ---------- Post added at 09:37 PM ---------- Previous post was at 09:31 PM ----------

    The API is simple and reflects SQF functions and therefore it's what modders are used to and what modders need.

    No it's not that's why it's being replaced.

    EDIT: I don't want to be forced to use Java annotations in Scala.

    Good thing java annotation processing is a being rewritten in the next release of Scala to make this issue of mapping Java and Scala annotations less onerous. Also it's funny you mentioned this because I just did a brown bag presentation on this subject to our developers at my place of work, If you're interested and live in the Washington DC area, we will do a public version of this presentation of sometime next month. If not I'll PM you the presentation afterwards.


  20. Non-sense.

    Please no. Just provide static functions equivalent to SQF and let everyone to build their crazy OOP API.

    None of the features I suggested conflict with simple static methods in anyway. For example, wouldn't it be awesome to use a @ServerSide or @ClientSide annotation to have the security manager enforce execution of methods in thier respective context? What if you wanted a method that took in any Vehicle cloned it? How would you have the method return the proper type without generics? Generics would be necessary to model functional closures which are a (poorly implemented) feature in SQF. Besides there are a lot of constructs which should be managed by the RV engine instead of clients like threads and file system resources, or a concurrency model for the synchronization of game objects.


  21. I would also hope with more detail on support with Java comes with info on improvements to the API. The Java API in ToH looks like something a first year CS student would write. There are no generics, annotations, or proxies that can address cross cutting concerns like logging or setting up mission contexts. They expected you to cast parameters from Object, why bother with Java if you're going to ignore type safety and cast everything yourself. They don't use Futures or a thread executor and have commands implement Callable. Invocations of jcall were so slow I wouldn't be surprised if the JVM it self wasn't started up until it was jload was run.

    ---------- Post added at 05:13 AM ---------- Previous post was at 05:02 AM ----------

    Do you have any non-trivial experience with CUDA? Or AI? More importantly, both?

    CUDA isn't some magic dust that makes everything go faster. There are limitations and trade-offs made by GPUs, otherwise they would have replaced CPUs.

    This is ignoring the fact you can't implement CUDA from class files, you need an alternative JVM to run java programs via CUDA and you won't be able to change the JVM implementation in ArmA.

    EDIT:Alternatively you could also be refering to calling CUDA with Java bindings, which the SecurityManager shouldn't allow you to do. And even if you could, what are you going to do, ship CUDA with your missions and escalate privileges somehow to talk the CUDA driver?


  22. It was not purposefully removed from Arma 3. On the other hand it's not functionality we use in vanilla content, so I do not believe it was tested. Therefore it should be in Alpha, but I cannot guarantee it.

    We have not abandoned Java, and we want Object-Oriented scripting.

    What improvements are bring made to the Java implementation over the implementation seen in Take on Helicopters? I haven't worked with the implementation itself and my only source for how it works is the Java Scripting article on the wiki, but even with just a hello world example there are several glaring poor implementation decisions.

    import com.bistudio.JNIScripting.RVEngine;
    
    /**
    * Sample Java class 
    * @author Bohemia Interactive
    */
    public class Sample {
    /** 
     * Show a hint passed to jCall.
     * @param args Method parameters
     */	
    public static Object showHint(Object[] args) {
    	if (!(args[0] instanceof String)) return null;		
    	RVEngine.hint((String)args[0]);
    	return null;
    }
    }
    

    So the first the thing that stands out to me is the complete lack of type safety. Sample doesn't extend any class or implement any particular interface, so there's no contract that Sample has to implement. In order to invoke showHint at runtime an expensive method probably iterates over classes in the class loader to find suitable methods(it would better to use Annotations here instead!) to put into a registry(I hope it's in a registry). Sample should probably extend instead be required to implement Callable. This would allow the enviroment to pass any class class implementing a callable function for use via jCall into a Future, making it possible for invocations to the JVM to asynchronous from SQF functions. Also Object shouldn't use as type parameter, define an interface for parameter types and use generics. ShowHint's prototype should look something more like

    public static <T extends FunctionParameter> T showHint(T... elements)

    Where T is a typed wrapper objects around SQF Primitives.

    Two particular features I'm looking forward to is a annotation driven library for sub-classing defining functionality of a class with extensive use of dynamic proxies that will allow mission developers to implement functionality in runtime.


  23. Milyardo, I don't know where you get off claiming truth, correctness, and absolutes about market perception. These are all valid concerns of any company that holds substantial value in thier IP.

    While I quoted that entire paragraph, meant to only respond to the last sentence. And I stand by what I said before, the perceptions you have of LGP are stereotyped from what happened with Loki.

    Both the Unreal and id Tech engine games ergo Quake feature OpenGL renderers ready to go.

    Thanks to the work done by Loki/Ryan Gordon.

    I can't think of anything 'shameful' about Loki or how they conducted business; an honest effort and mistakes were made. Neither do I don't see anyone regarding or treating or comparing LGP to Loki but you...

    You refered to a company that was run by programmers instead of buisness professionals, and because of it, put the risk to the IP of many of it clients, such a thing happened exactly with Loki. Even if you did not mean to imply what happened with Loki during the companies bankruptcy, you still implied that LGP could not satisfy the requirements you listed because they were a small company without the necessary skills or resources to protect a client IP without substantial risk because the company is made of more Programmers than Businessmen. Lastly, the Programmers at LGP are just as experienced as I said they were. LGP has been in business for well nearly decade, which by itself is an achievement for any business. That experience easily constitutes what you implied they lack.

    All the assumptions here, are yours... And the negative, rightous Linux FanBoy attitude doesn't do you, Linux, LGP, or games on Linux any good; especially when you're trying to take down a discussion and Proponent of what appears to be your cause...

    :(

    I'm not exactly sure where I had any sort of negative connotation in my previous post, nor am I sure to why you are resorting to name calling.

    None the less, no matter how skilled and/or professional LGP is, they aren't what's keeping a Linux port from happening. The only ones who can convince LGP is the community. However, what I believe the community needs is an ultimatum from BI(ie pre-order 10k Linux versions and we'll make it) to motivate the Linux community, and BI, and make these Linux ports a reality.

×