Help
RSS
API
Feed
Maltego
Contact
Domain > kamaelia.org
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-04-26
18.239.183.4
(
ClassC
)
2026-01-25
18.238.238.20
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Sun, 25 Jan 2026 06:34:22 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://kamaelia.org/X-Cache: Redirect from cloudfrontVia: 1.1 cadbce1567bbdb91eb3bfcc0b1de05c0.cloudfront.net (CloudFront)X-Amz-Cf-Pop: SEA900-P5X-Amz-Cf-Id: 7g_0L0Byu1HB9jp2OBnZ3HX-bvjwz3V-cN6nsGOva_HV3TwGSW_wsA html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 23921Connection: keep-aliveDate: Sun, 25 Jan 2026 06:34:23 GMTLast-Modified: Sat, 09 Nov 2024 00:16:51 GMTETag: a869a5322287c538881b94081b79f0f1Server: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 0b834179ab679169d69e76efd0f63c8c.cloudfront.net (CloudFront)X-Amz-Cf-Pop: SEA900-P5X-Amz-Cf-Id: Io44Gu3P9POkwzxfp1zIZWaUe1BgkE7gmAMIn6pUFsLbX9GvBz_y5g html>head>title> index /title>link relstylesheet typetext/css href/site-resources/base.css>link relstylesheet typetext/css href/site-resources/pandoc.css>/head>body>div classbanner>P> a href/Home.html>Home/a> | a href/About.html>About/a> | a href/RecentChanges.html>Recent Changes/a> | a href/Documentation.html>Documentation/a> | a href/Community.html>Community/a>/div>div classpagecontainer>div classpagesection>div idpagenote>P> August24: Kamaelia is in maintenance mode and will recieve periodic updates, about twice a year, primarily targeted around Python 3 and ecosystem compatibility. a hrefhttps://github.com/sparkslabs/kamaelia/pulls>PRs/a> are always welcome. Latest Release: a hrefhttps://github.com/sparkslabs/kamaelia/releases/tag/v1.14.32>1.14.32 (2024/3/24)/a>/p>/div>div classpagesection>p>img src/site-resources/cat-trans-medium.png idlogo />/p>div idpagebanner>h1 idkamaelia---concurrency-made-useful-fun>Kamaelia - Concurrencymade useful, fun/h1>p>In Kamaelia you build systems from strong>simple components thattalk to each other/strong>. This speeds development, massively aidsmaintenance and also means you strong>build naturally concurrentsoftware/strong>. Its intended to be accessible bystrong>any/strong> developer, including novices. It also makes it fun:)/p>p>What sort of systems? Network servers, clients, desktop applications,pygame based games, transcode systems and pipelines, digital TV systems,a href/KamaeliaGrey.html>spam eradicators/a>, ahref/SpeakAndWrite.html>teaching tools/a>, and a fair amount more:)/p>p>Current Release: ahrefhttps://github.com/sparkslabs/kamaelia/releases/tag/v1.14.32>1.14.32(2024/3/24)/a>/p>/div>/div>hr />div classpagesection>div classcolumn>h2 iduse>Use/h2>h3 idkamaelia-based-systems>Kamaelia based systems/h3>p>Theres quite a few Kamaelia systems as example applications in ahrefhttps://github.com/sparkslabs/kamaelia/tree/master/Code/Python/Apps>therepository on github/a>. Some sample apps:/p>h3 idkamaelia-grey>a href/KamaeliaGrey.html>KamaeliaGrey/a>/h3>p>Spam reduction through greylisting. Kamaelia Grey is a SMTP proxy foryour inbound email, rejecting email likely to be spam. Mail likely tonot be spam is forwarded to your normal mail server./p>h3 idbatch-transcoder>a href/ActiveFileProcessor.html>BatchTranscoder/a>/h3>p>This watches directories for new images and videos to transcode toformats suitable for the web. You can think of it as the backend neededfor a youtube/flickr type site. PDF support is likely to be addedsoon./p>h3 idwhiteboard>ahref/Developers/Projects/Whiteboard.html>Whiteboard/a>/h3>p>A collaborative whiteboard. 2 or more machines share a display youcan write on - either can be a server. Whiteboards are paginated, andtherefore can also be used for remote presentations. Really cool with atablet./p>h3 idmacro>a href/KamaeliaMacro.html>Macro/a>/h3>p>Records and transcodes digital TV for later viewing (ietimeshifting). It can do this for as many channels at once as you haveCPU power and tuners available for it./p>/div>div classcolumn>h2 idkamaelia-documentation>Kamaelia Documentation/h2>h3 idbuild-improve-kamaelia-based-systems>Build & improveKamaelia based systems/h3>h3 iddocumentation>Documentation/h3>p>Documentation is a core asset in Kamaelia. As of March 2024, this isnow being significantly updated./p>p>While this is done you are invited to look at the ahref/Components.html>Component Reference/a> for an indication of thescope of components, and the a href/Cookbook.html>Cookbook/a> forsmall examples./p>h3 idbooks>Books/h3>p>Two major pieces of Kamaelia documentation are booksized PDFs:/p>ul>li>ahref/downloads/20090619.KamaeliaPragmaticConcurrencyEuropython09.Final.pdf>TheKamaelia Europython tutorial/a>. This is an 84 page book teaching youthe ideas behind Kamaelia, building your own core, building componentsand systems./li>li>a href/downloads/AxonKamaelia_docs.pdf>A newer >400 page APIreference book/a>, which documentation autogenerated & extractedfrom the codebase - covering both Axon and Kamaelia. (This is new as ofJan 2024 and a bit rough around the edges!)/li>/ul>h3 idcookbook>a href/Cookbook.html>Cookbook/a>/h3>p>This section contains a number of recipes showing how to build avariety of different types of Kamaelia systems. Sections include:/p>ul>li>Linking components together/li>li>Building Network systems, clients, servers, IM, etc/li>li>Building Digital TV systems/li>li>Building Multimedia systems/li>li>Using Kamaelia components & subsystems in non-kamaeliasystems./li>/ul>p>strong>More recipes always welcome./strong>/p>h3 idcomponent-reference>a href/Components.html>ComponentReference/a>/h3>p>Full component reference./p>h3 idaxon-reference>a href/Docs/Axon/Axon.html>AxonReference/a>/h3>p>Full reference for Axon - the core of Kamaelia./p>h3 idtutorials>a href/Tutorials.html>Tutorials/a>/h3>ul>li>Dive into a href/Tutorials.html>Kamaelia tutorials from avariety of perspectives/a>/li>li>See the a href/Presentations.html>presentations givenpublicly/a>/li>/ul>/div>div classcolumn>h2 idcommunity>Community/h2>h3 idkamaelia-is-open-source-help-us-improve-it>Kamaelia is opensource, help us improve it!/h3>h3 idsource>a href/Repository.html>Source/a>/h3>p>Kamaelias source is hosted on ahrefhttps://github.com/sparkslabs/kamaelia/>Github/a>./p>h3 idrelease>a href/Releases.html>Release/a>/h3>p>The first release of the Kamaelia refresh project has beenmade:/p>ul>li>Github: ahrefhttps://github.com/sparkslabs/kamaelia/releases/tag/v1.14.32>1.14.32(2024/3/24)/a>/li>li>PyPI - 2 packages ahrefhttps://pypi.org/project/kamaelia-axon/>kamaelia-axon/a> and ahrefhttps://pypi.org/project/kamaelia/>kamaelia/a>/li>/ul>p>These assume Python 3 only. This should be considered an alpharelease. The older python2.7 releases are no longer supported withimmediate effect./p>h3 idget-help-contact>a href/Contact.html>Get Help(Contact)/a>/h3>p>For now, please contact us by ahrefhttps://github.com/sparkslabs/kamaelia/issues>opening a githubissue/a> on the project repo./p>h3 idsummer-of-code>a href/SummerOfCode.html>Summer ofCode/a>/h3>p>Weve were involved with GSOC some time ago. We did this for 3 yearsrunning in 2006, 2007 and 2008. It generated a wealth of components,documentation and ideas that may still be of interest and are linked tohere. More than anything it proved that Kamaelia was accessible tonovice developers. This content is likely to move and be updated toreflect the modern ecosystem, but is likely interesting in themeantime./p>h3 idcommunity-console>a href/Developers/>CommunityConsole/a>/h3>p>i>(Please note - this section is somewhat out of date as of 2024,and will be updated. However, it does accurately reflect how Kamaelia’sprimary development phase was managed)/i>/p>p>Interested in helping out? Youre more than welcome! In this areayoull find some pages which cover some areas of interest for ongoingdev, our general development process, project management process,guidelines on contributing (eg smart questions, through to code, andcontributor agreements)/p>!--The latest release issomewhat out of data at this point and is to be used (with caution) withPython 2.7. That release is the 1.0.12.0release(/release/MonthlyReleases/Kamaelia-1.0.12.0.tar.gz). (Y.Y.M.r).Some apps(/release/) are also available in the release directory.**Note:** That release is being retired as part of the 2024 update, andwill be replaced with a python 3 compatible version instead. (Much ofKamaelia has worked with python 3 for a number of years now)### DownloadsPlease note that these are somewhat out of date, and to be used withcaution with Python 2.7. As of Jan 2024, this site and the codebase arebeing updated, and this process is being tracked in Kamaelia\s issues.In the mean time:Current Release 1.0.12.0 (December 30th 2010)(/release/MonthlyReleases/Kamaelia-1.0.12.0.tar.gz)See also getting started(/GetKamaelia.html))Other releases(/release/) and downloads(/downloads/).-->/div>/div>section ida-quick-overview classpagesection>h1>A quick overview/h1>div classboxright>p>There is a ahrefhttps://www.bbc.co.uk/rd/publications/whitepaper113>BBC R&DWhitepaper on Kamaelia/a>./p>p>The project grew significantly after this whitepaper was written, butits useful to give the original context:/p>p>strong>ahrefhttps://www.bbc.co.uk/rd/publications/whitepaper113>WHP 113:Kamaelia: highly concurrent and network systems tamed(2005)/a>/strong>/p>p>em>Kamaelia is a project aimed at building large scale online mediadelivery systems for the long term. ... A key aim of Kamaelia is toenable even novice programmers to create scalable and safe concurrentsystems, quickly and easily./em>/p>/div>p>a href/Home.html>Kamaelia/a> is a Python library by ahrefhttps://www.bbc.co.uk/rd>BBC Research/a> for concurrentprogramming using a simple pattern of components that send and receivedata from each other. The following is an example of a system made bypiping the output of one component into another:/p>blockquote>div classsourceCode idcb1>preclasssourceCode python>code classsourceCode python>span idcb1-1>a href#cb1-1 aria-hiddentrue tabindex-1>/a>span classim>from/span> Kamaelia.Chassis.Pipeline span classim>import/span> Pipeline/span>span idcb1-2>a href#cb1-2 aria-hiddentrue tabindex-1>/a>span classim>from/span> Kamaelia.Util.Console span classim>import/span> ConsoleReader, ConsoleEchoer/span>span idcb1-3>a href#cb1-3 aria-hiddentrue tabindex-1>/a>/span>span idcb1-4>a href#cb1-4 aria-hiddentrue tabindex-1>/a>Pipeline(/span>span idcb1-5>a href#cb1-5 aria-hiddentrue tabindex-1>/a> ConsoleReader(),/span>span idcb1-6>a href#cb1-6 aria-hiddentrue tabindex-1>/a> ConsoleEchoer(),/span>span idcb1-7>a href#cb1-7 aria-hiddentrue tabindex-1>/a>).run()/span>/code>/pre>/div>/blockquote>p>Or maybe you want to build a presentation tool? (imports & setupexcluded here - a href/Examples/SimplestPresentationTool.html>fullexample/a>)/p>blockquote>div classsourceCode idcb2>preclasssourceCode python>code classsourceCode python>span idcb2-1>a href#cb2-1 aria-hiddentrue tabindex-1>/a>Graphline(/span>span idcb2-2>a href#cb2-2 aria-hiddentrue tabindex-1>/a> CHOOSER span classop>/span> Chooser(items span classop>/span> files),/span>span idcb2-3>a href#cb2-3 aria-hiddentrue tabindex-1>/a> IMAGE span classop>/span> Image(sizespan classop>/span>(span classdv>800/span>,span classdv>600/span>), positionspan classop>/span>(span classdv>8/span>,span classdv>48/span>)),/span>span idcb2-4>a href#cb2-4 aria-hiddentrue tabindex-1>/a> NEXT span classop>/span> Button(captionspan classop>/span>span classst>"Next"/span>, msgspan classop>/span>span classst>"NEXT"/span>, positionspan classop>/span>(span classdv>72/span>,span classdv>8/span>)),/span>span idcb2-5>a href#cb2-5 aria-hiddentrue tabindex-1>/a> PREVIOUS span classop>/span> Button(captionspan classop>/span>span classst>"Previous"/span>, msgspan classop>/span>span classst>"PREV"/span>,positionspan classop>/span>(span classdv>8/span>,span classdv>8/span>)),/span>span idcb2-6>a href#cb2-6 aria-hiddentrue tabindex-1>/a> FIRST span classop>/span> Button(captionspan classop>/span>span classst>"First"/span>, msgspan classop>/span>span classst>"FIRST"/span>,positionspan classop>/span>(span classdv>256/span>,span classdv>8/span>)),/span>span idcb2-7>a href#cb2-7 aria-hiddentrue tabindex-1>/a> LAST span classop>/span> Button(captionspan classop>/span>span classst>"Last"/span>, msgspan classop>/span>span classst>"LAST"/span>,positionspan classop>/span>(span classdv>320/span>,span classdv>8/span>)),/span>span idcb2-8>a href#cb2-8 aria-hiddentrue tabindex-1>/a> linkages span classop>/span> {/span>span idcb2-9>a href#cb2-9 aria-hiddentrue tabindex-1>/a> (span classst>"NEXT"/span>,span classst>"outbox"/span>) : (span classst>"CHOOSER"/span>,span classst>"inbox"/span>),/span>span idcb2-10>a href#cb2-10 aria-hiddentrue tabindex-1>/a> (span classst>"PREVIOUS"/span>,span classst>"outbox"/span>) : (span classst>"CHOOSER"/span>,span classst>"inbox"/span>),/span>span idcb2-11>a href#cb2-11 aria-hiddentrue tabindex-1>/a> (span classst>"FIRST"/span>,span classst>"outbox"/span>) : (span classst>"CHOOSER"/span>,span classst>"inbox"/span>),/span>span idcb2-12>a href#cb2-12 aria-hiddentrue tabindex-1>/a> (span classst>"LAST"/span>,span classst>"outbox"/span>) : (span classst>"CHOOSER"/span>,span classst>"inbox"/span>),/span>span idcb2-13>a href#cb2-13 aria-hiddentrue tabindex-1>/a> (span classst>"CHOOSER"/span>,span classst>"outbox"/span>) : (span classst>"IMAGE"/span>,span classst>"inbox"/span>),/span>span idcb2-14>a href#cb2-14 aria-hiddentrue tabindex-1>/a> }/span>span idcb2-15>a href#cb2-15 aria-hiddentrue tabindex-1>/a>).run()/span>/code>/pre>/div>/blockquote>p>Thats all well and good, but how is a component written? Whatsinside it?br />/p>blockquote>div classsourceCode idcb3>preclasssourceCode python>code classsourceCode python>span idcb3-1>a href#cb3-1 aria-hiddentrue tabindex-1>/a>span classim>from/span> Axon.Component span classim>import/span> component/span>span idcb3-2>a href#cb3-2 aria-hiddentrue tabindex-1>/a>span classim>from/span> Axon.Ipc span classim>import/span> shutdownMicroprocess, producerFinished/span>span idcb3-3>a href#cb3-3 aria-hiddentrue tabindex-1>/a>/span>span idcb3-4>a href#cb3-4 aria-hiddentrue tabindex-1>/a>span classkw>class/span> MyComponent(component):/span>span idcb3-5>a href#cb3-5 aria-hiddentrue tabindex-1>/a> Inboxes span classop>/span> {span classst>"inbox"/span> : span classst>"some data in"/span>,/span>span idcb3-6>a href#cb3-6 aria-hiddentrue tabindex-1>/a> span classst>"control"/span> : span classst>"stops the component"/span>}/span>span idcb3-7>a href#cb3-7 aria-hiddentrue tabindex-1>/a> Outboxes span classop>/span> {span classst>"outbox"/span> : span classst>"some data out"/span>,/span>span idcb3-8>a href#cb3-8 aria-hiddentrue tabindex-1>/a> span classst>"signal"/span> : span classst>"Shutdown signal"/span>}/span>span idcb3-9>a href#cb3-9 aria-hiddentrue tabindex-1>/a>/span>span idcb3-10>a href#cb3-10 aria-hiddentrue tabindex-1>/a> span classkw>def/span> span classfu>__init__/span>(span classva>self/span>, span classop>**/span>argd):/span>span idcb3-11>a href#cb3-11 aria-hiddentrue tabindex-1>/a> span classbu>super/span>(MyComponent, span classva>self/span>).span classfu>__init__/span>(span classop>**/span>argd)/span>span idcb3-12>a href#cb3-12 aria-hiddentrue tabindex-1>/a>/span>span idcb3-13>a href#cb3-13 aria-hiddentrue tabindex-1>/a> span classkw>def/span> main(span classva>self/span>):/span>span idcb3-14>a href#cb3-14 aria-hiddentrue tabindex-1>/a> span classcf>while/span> span classkw>not/span> span classva>self/span>.doShutdown():/span>span idcb3-15>a href#cb3-15 aria-hiddentrue tabindex-1>/a> span classcf>if/span> span classva>self/span>.dataReady(span classst>"inbox"/span>):/span>span idcb3-16>a href#cb3-16 aria-hiddentrue tabindex-1>/a> data span classop>/span> span classva>self/span>.recv(span classst>"inbox"/span>)/span>span idcb3-17>a href#cb3-17 aria-hiddentrue tabindex-1>/a> span classco># let's echo what we received.../span>/span>span idcb3-18>a href#cb3-18 aria-hiddentrue tabindex-1>/a> span classva>self/span>.send(data, span classst>"outbox"/span>)/span>span idcb3-19>a href#cb3-19 aria-hiddentrue tabindex-1>/a>/span>span idcb3-20>a href#cb3-20 aria-hiddentrue tabindex-1>/a> span classcf>if/span> span classkw>not/span> span classva>self/span>.anyReady():/span>span idcb3-21>a href#cb3-21 aria-hiddentrue tabindex-1>/a> span classva>self/span>.pause()/span>span idcb3-22>a href#cb3-22 aria-hiddentrue tabindex-1>/a>/span>span idcb3-23>a href#cb3-23 aria-hiddentrue tabindex-1>/a> span classcf>yield/span> span classdv>1/span>/span>span idcb3-24>a href#cb3-24 aria-hiddentrue tabindex-1>/a>/span>span idcb3-25>a href#cb3-25 aria-hiddentrue tabindex-1>/a> span classkw>def/span> doShutdown(span classva>self/span>):/span>span idcb3-26>a href#cb3-26 aria-hiddentrue tabindex-1>/a> span classcf>if/span> span classva>self/span>.dataReady(span classst>"control"/span>):/span>span idcb3-27>a href#cb3-27 aria-hiddentrue tabindex-1>/a> mes span classop>/span> span classva>self/span>.recv(span classst>"control"/span>)/span>span idcb3-28>a href#cb3-28 aria-hiddentrue tabindex-1>/a> span classcf>if/span> span classbu>isinstance/span>(mes, shutdownMicroprocess) span classkw>or/span> span classbu>isinstance/span>(mes, producerFinished):/span>span idcb3-29>a href#cb3-29 aria-hiddentrue tabindex-1>/a> span classva>self/span>.send(producerFinished(), span classst>"signal"/span>)/span>span idcb3-30>a href#cb3-30 aria-hiddentrue tabindex-1>/a> span classcf>return/span> span classva>True/span>/span>span idcb3-31>a href#cb3-31 aria-hiddentrue tabindex-1>/a> span classcf>return/span> span classva>False/span>/span>/code>/pre>/div>/blockquote>p>This is the simplest form a component can take. A component:/p>ul>li>is a class that inherits fromcode>Axon.Component.component/code>/li>li>has inboxes and outboxes/li>/ul>p>By inheriting from code>Axon.Component.component/code> you makeyour class usable by the a href/MiniAxon.html>Axon/a> library whichis at the core of the Kamaelia library. It allows for your class to beused with other components./p>p>Inboxes and outboxes allow your component to be linked to and from byother components./p>p>Then your class defines a main method that simple loop until aspecific kind of message is put into the control inbox of thecomponent. During the looping it checks for any inboxes and process dataread from them. Eventually it yields to the Axon scheduler that goes tothe next available component. By using a generator we allow thescheduler to come back to the components loop eventually./p>p>Note that inboxes and outboxes are pure Python dictionary hence theyallow for any Python objects and are not limited to strings. Thecomponent described above is simple, complex components have manyinboxes and outboxes to link to and from./p>h2 idkamaelia>Kamaelia/h2>p>Kamaelia is a library of components for ahref/Components.html>all kind of tasks and topics/a>:/p>p>For example taking the previous example we could write:/p>blockquote>div classsourceCode idcb4>preclasssourceCode python>code classsourceCode python>span idcb4-1>a href#cb4-1 aria-hiddentrue tabindex-1>/a>span classim>from/span> Kamaelia.Chassis.Pipeline span classim>import/span> Pipeline/span>span idcb4-2>a href#cb4-2 aria-hiddentrue tabindex-1>/a>span classim>from/span> Kamaelia.Util.Consoleimport ConsoleReader, ConsoleEchoer/span>span idcb4-3>a href#cb4-3 aria-hiddentrue tabindex-1>/a>/span>span idcb4-4>a href#cb4-4 aria-hiddentrue tabindex-1>/a>Pipeline(/span>span idcb4-5>a href#cb4-5 aria-hiddentrue tabindex-1>/a> ConsoleReader(),/span>span idcb4-6>a href#cb4-6 aria-hiddentrue tabindex-1>/a> MyComponent(),/span>span idcb4-7>a href#cb4-7 aria-hiddentrue tabindex-1>/a> ConsoleEchoer(),/span>span idcb4-8>a href#cb4-8 aria-hiddentrue tabindex-1>/a>).run()/span>/code>/pre>/div>/blockquote>p>ahref/Components/pydoc/Kamaelia.Experimental.Chassis.Pipeline.html>Pipeline/a>is component that automatically links outboxes to inboxes of eachprovided component. The console components allow for reading and writingdata from and to the command line. Because code>Pipeline/code> is alsoa component itself it could in turns be used in another component./p>p>Note that calling the code>run()/code> method on a component blocksthe process until it is killed. You can also simply activate a componentwhich will then be in an active state but will run only when eventuallycode>run/code> is called on another component./p>p>Now that you have the basics of Kamaelia you should dive into the ahref/Cookbook.html>documentation/a> and have fun with thislibrary./p>/section>/div> !-- end section -->/div> !-- end page container -->div classbanner>a hrefhttps://www.bbc.co.uk/rd>img src/site-resources/BBCRD_Logo.jpg>/a>P idmini> Kamaelia is an open source project originated from and guidedby a hrefhttps://www.bbc.co.uk/rd>BBC Research./a> For more informationbrowse the site or get in contact.br>This is an ongoing community based development site. As a result thecontents of this page is the opinions of the contributors of the pagesinvolved not the organisations involved. Specificially, this page maycontain personal views which are not the views of the BBC.br>(C) Copyright 2004-2024 Kamaelia Contributors, including the BritishBroadcasting Corporation, All Rights Reserved./div>/body>/html>
Subdomains
Date
Domain
IP
bucket.kamaelia.org
2026-01-02
3.163.24.43
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]