Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Anyone know how to get starting with understanding how to create apps that allow modding?

Received: by 10.68.241.162 with SMTP id wj2mr240867pbc.2.1340932650670;
        Thu, 28 Jun 2012 18:17:30 -0700 (PDT)
X-BeenThere: collexion@googlegroups.com
Received: by 10.68.129.226 with SMTP id nz2ls9800607pbb.5.gmail; Thu, 28 Jun
 2012 18:17:30 -0700 (PDT)
Received: by 10.68.196.232 with SMTP id ip8mr226051pbc.6.1340932650026;
        Thu, 28 Jun 2012 18:17:30 -0700 (PDT)
Received: by 10.68.196.232 with SMTP id ip8mr226050pbc.6.1340932649999;
        Thu, 28 Jun 2012 18:17:29 -0700 (PDT)
Return-Path: <t...@rubidine.com>
Received: from mail-pz0-f54.google.com (mail-pz0-f54.google.com [209.85.210.54])
        by gmr-mx.google.com with ESMTPS id tf10si836063pbc.0.2012.06.28.18.17.29
        (version=TLSv1/SSLv3 cipher=OTHER);
        Thu, 28 Jun 2012 18:17:29 -0700 (PDT)
Received-SPF: pass (google.com: domain of t...@rubidine.com designates 209.85.210.54 as permitted sender) client-ip=209.85.210.54;
Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of t...@rubidine.com designates 209.85.210.54 as permitted sender) smtp.mail=t...@rubidine.com
Received: by dadv36 with SMTP id v36so4697544dad.27
        for <collexion@googlegroups.com>; Thu, 28 Jun 2012 18:17:29 -0700 (PDT)
        d=google.com; s=20120113;
        h=mime-version:in-reply-to:references:date:message-id:subject:from:to
         :content-type:content-transfer-encoding:x-gm-message-state;
        bh=LvRLB9snB7cGdWHOo2kmk8R3nFncaDfoQnsP0L3QrMU=;
        b=YowwjqX/UdNuCx6CNQ12Ek/f2Y1GcM7S45HApfbmWfXlTjoUgO4lJ+x5jZRm3ZzHkR
         IeXCs1pZXHivYHOB9llsJn0959SKopW1TENknJRDW3N5yuZr7hFFZEVKvcWixKF3sBUS
         vmV6pmHnxvNZ6KFlszXakwqcqhVTK9Qx/F4r5D48m3KHJ1iAj+r+fnQrjM6xH1d+9pev
         hifBeIYcRFxhogifsR93WrjNX/cA/nLieyNnaZZmf1rpinalEPtY+gUjbsdjaRqMIzTA
         X6FvEnE2i8u5Pwn2bim001DwW5Hfr3v8l6jgQ88IOyAf9cQ/cOFCfdh/6DFnXX5Ztvpl
         M6QQ==
MIME-Version: 1.0
Received: by 10.68.224.133 with SMTP id rc5mr551701pbc.14.1340932649559; Thu,
 28 Jun 2012 18:17:29 -0700 (PDT)
Received: by 10.142.6.37 with HTTP; Thu, 28 Jun 2012 18:17:29 -0700 (PDT)
In-Reply-To: <CA+NVox-qiWOmXDyZOQY3P0KMiPfqGoMOSz6YZVx2FXfCRtP...@mail.gmail.com>
References: <CAG-TLwdOOP=pUKGvbnjL07MZHypRqoLcuupyrbJybpQa0Fw...@mail.gmail.com>
	<CAP8Yv7LGw5PxQSAOUYQ+5M8mdbnSG6mqqLEG6onNRQL3utP...@mail.gmail.com>
	<CABnEKx1pCPbbYUntUKE0DY6Qnzh4HLA2XAcxMD2NaEeSO5V...@mail.gmail.com>
	<CA+NVox-qiWOmXDyZOQY3P0KMiPfqGoMOSz6YZVx2FXfCRtP...@mail.gmail.com>
Date: Thu, 28 Jun 2012 21:17:29 -0400
Message-ID: <CABnEKx2VhdGoXZJGfB4eSxWR_dH7EoHJZAfk2FnBYg8RM1B...@mail.gmail.com>
Subject: Re: Anyone know how to get starting with understanding how to create
 apps that allow modding?
From: Todd Willey <t...@rubidine.com>
To: collexion@googlegroups.com
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
X-Gm-Message-State: ALoCoQm7svsePSJ/5ToT+scP198PFxCn/xbEzcClQL91TdVNsGIB2QBMB1f9+QXHwKwoI3stJbOp

On Thu, Jun 28, 2012 at 4:43 PM, Noah Adler <noah.ad...@gmail.com> wrote:
> Todd, can you give some concrete examples of the abstract messaging queue=
 in
> the wild? =A0I've seen some systems which propose this, but imho it seems=
 like
> the additional complexity of managing a polyglot system tends to put off
> newcomers and projects lose traction. =A0Where would this be more valuabl=
e
> than a technique that riffs on the idioms of the specific language?

If you don't have concerns about using multiple languages or having to
scale components individually, then you can get away with whatever
your language of choice recommends.  I brought it up since Tommy
mentioned multiple languages.

Concrete examples would be pretty much anything covered on
http://highscalability.com/

>
> I did something similar in an older version of .NET, and it amounted to
> basically defining a set of interfaces in one assembly, and referencing t=
hat
> from the main executable's [obfuscated] assembly. =A0So plugins would jus=
t
> need to create another assembly referencing that interface. =A0Then, as w=
ith
> Java, use the reflection capabilities to instantiate the plugins.
>
> For what it's worth, Drupal goes an entirely different route, and uses a
> hook system which is purely based on convention. =A0Certain 'hooks' are
> documented, such as 'hook_node_save', and any module is free to implement=
 a
> callback by simply defining a function something like
> 'modulename_node_save'. =A0A lot of people seem to like this or find it
> intuitive.
>
> Tommy, what languages in particular are you looking at for this?
>
> cheers,
> noah
>
>
> On Thu, Jun 28, 2012 at 2:55 PM, Todd Willey <t...@rubidine.com> wrote:
>>
>> The mechanisms for doing this vary by language.
>>
>> In java you can implement your own ClassLoader, and use the reflection
>> api to discover things about the classes that are being loaded, and
>> add those things into the existing call chain as desired.
>>
>> In ruby you can just require gems that re-open classes and exploit the
>> dynamic nature of ruby to replace or hook into an existing method
>> call.
>>
>> You can create APIs that you expose to runtimes (python, lua, &c.) and
>> then embed a scripting language into your existing project.
>>
>> You can also be language agnostic and use a messaging queue or similar
>> mechanism to publish data and intents, and have listeners (in any
>> language) on those topics that pick up the data and perform the
>> actions. =A0Then you only have to swap out particular processes
>> listening on specific topics (like "compute-gcd") to change your
>> behavior for that particular intent.
>>
>> -todd[1]
>>
>> On Thu, Jun 28, 2012 at 2:46 PM, nx <n...@nu-ex.com> wrote:
>> > Yeah, I like to think of modules as things conforming to a public API.
>> >
>> > You'll want to start by creating a public API for your mods to expose.
>> >
>> > In Erlang the adapter pattern is common:
>> >
>> > DBAdapter =3D db_mysql_adapter,
>> > DBAdapter:save(Thing),
>> > DBAdapter:delete(Thing),
>> > DBAdapter:update(Thing).
>> >
>> > Where DBAdapter could be the name of any module that exposes the
>> > methods save, delete, and update.
>> >
>> > If you want to have a mod framework where you install a mod that
>> > affects your core application, then you'll want your core app to run
>> > some code that will search a specified directory (i.e. "modules") for
>> > all of your mods and execute methods or functions on them. If the mods
>> > conform to your special API your core app will be able to access and
>> > initialize stuff on them whenever they're in the modules directory.
>> >
>> > On Thu, Jun 28, 2012 at 2:08 PM, Thomas D'Andrea Jr.
>> > <thomas.dand...@gmail.com> wrote:
>> >> I want to start developing some apps to understand a bit more about a
>> >> couple
>> >> languages, and I want to be able to then create other apps to plug in=
,
>> >> mod,
>> >> or add modules onto the original app. Not really sure how to do that
>> >> though,
>> >> does modding just expose public commands or classes for the modder to
>> >> use?
>> >>
>> >> Tommy
>> >>
>> >> --
>> >> You received this message because you are subscribed to the Google
>> >> Groups
>> >> "Collexion" group.
>> >> To post to this group, send email to collexion@googlegroups.com.
>> >> To unsubscribe from this group, send email to
>> >> collexion+unsubscribe@googlegroups.com.
>> >> For more options, visit this group at
>> >> http://groups.google.com/group/collexion?hl=3Den.
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups "Collexion" group.
>> > To post to this group, send email to collexion@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> > collexion+unsubscribe@googlegroups.com.
>> > For more options, visit this group at
>> > http://groups.google.com/group/collexion?hl=3Den.
>> >
>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "Collexion" group.
>> To post to this group, send email to collexion@googlegroups.com.
>> To unsubscribe from this group, send email to
>> collexion+unsubscribe@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/collexion?hl=3Den.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Collexion" group.
> To post to this group, send email to collexion@googlegroups.com.
> To unsubscribe from this group, send email to
> collexion+unsubscribe@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/collexion?hl=3Den.