Karen Armstrong: Let’s revive the golden rule

Being told I have to stay at home and rest is always difficult for me, I get bored very easily, so I thought I’d lye in bed and catch up with some feeds – when I came across the above talk. I’ve written about Karen Armstrong and the Golden Rule before, it was heartwarming to listen to her talk, she has so much passion and faith and hope for a better world, which I find inspiring. I know some people will argue about the practicalities of the Charter for Compassion which Karen is talking about. For me though, as a sentiment, as an ideal, or even as a hope I think its a beautifully simple and wonderful idea.

But it requires a change in each of us, which makes me wonder whether I’m strong enough to make that change.

Beyond Web 2.0 – How RDFa can help democratise data on the web

Publishing to the web has never been easier, with the proliferation of content management systems, online blogging platforms, microblogging, and more. However, publishing data is either the preserve of organizations prepared to manage their own IT, or requires individuals to sign up for one web 2.0 service after another.

RDFa provides a straightforward means by which data can be published as easily as a web-page can, and the implications are enormous.

From large organizations to the individual blogger, anyone can now publish data by simply placing extra markup in their pages, putting individuals back in control of their own data.

Instead of burying their data in an ever growing array of online services, individuals will now simply publish once, and allow third-party services to consume their information — from profile information to items for sale, from film reviews to favorite recipes, your web-pages become your API.

By allowing everyone to have an API, RDFa creates the possibility of a new generation of applications that will operate across our data.

Dan Pink on the surprising science of motivation

Career analyst Dan Pink examines the puzzle of motivation, starting with a fact that social scientists know but most managers don’t: Traditional rewards aren’t always as effective as we think. Listen for illuminating stories — and maybe, a way forward.

A very useful and thought provoking talk, Dan does well in describing the difference between intrinsic and extrinsic motivation, and if nothing else it should force you pause and reflect for a moment on what actually motivates you.

Philip Zimbardo prescribes a healthy take on time

Psychologist Philip Zimbardo says happiness and success are rooted in a trait most of us disregard: the way we orient toward the past, present and future. He suggests we calibrate our outlook on time as a first step to improving our lives

Interestingly enough having recently re-read George Lakoff’s Metaphors We Live By , Zimbardo’s perspective seem’s to make a lot sense. Lakoff’s book also opens with a lengthy discussion of how the ways we talk about time influence the decisions that we make: time is money, time is a resource, time is moving, etc. he also goes on to discuss how much our mindset, which is shaped by culture, affects our decisions. Not entirely sure how comfortable I am with Zimbardo’s thesis on the optimal temporal mix, although at first glance it seems to make perfect sense:

So, very quickly, what is the optimal time profile? High on past-positive. Moderately high on future. And moderate on present-hedonism. And always low on past-negative and present-fatalism. So the optimal temporal mix is what you get from the past — past-positive give you roots. You connect your family, identity and your self. What you get from the future is wings to soar to new destinations, new challenges. What you get from the present hedonism is the energy, the energy to explore yourself, places, people, sensuality.
Any time perspective in excess has more negatives than positives. What do futures sacrifice for success? They sacrifice family time. They sacrifice friend time. They sacrifice fun time. They sacrifice personal indulgence. They sacrifice hobbies. And they sacrifice sleep. So it affects their health. And they live for work, achievement and control. I’m sure that resonates with some of the TEDsters.

Zimbardo seemed to be rushing along very fast which is probably why its taking time to fully appreciate his ideas, yet there is something that resonates deeply within me. What do others think?

Combining, minimising and distributing JavaScripts

I’ve spent some time recently writing ant scripts to generate documentation, combine and minimise multiple javascript files into a single download. I thought I’d share what I have, in case others find it useful or can suggest better ways of doing what I’m trying to accomplish.

Combining multiple JS files into a single file

Here’s a simple ant task that concatenates several files into a single file. The version.txt is a file that simple contains a version number in it i.e. ‘0.5’.

  1. <target name="combine">
  2.   <echo message="Concatenating Files" />
  3.   <concat destfile="./dist/uncompressed/mydistribution-${VERSION}.js">
  4.     <fileset dir="." includes="file1.js" />
  5.     <fileset dir="." includes="file2.js" />
  6.     <fileset dir="." includes="file3.js" />
  7.     <fileset dir="." includes="file4.js" />
  8.     <fileset dir="." includes="file5.js" />
  9.   </concat>
  10. </target>

Minimising using YUI Compressor

You’ll need to download the latest version of the YUI Compressor. All I’ve provided is a simple ant wrapper around it, and example of how to use it:

  1. <property name="LIB_DIR" value="./lib"/>
  2. <property name="YUI" value="${LIB_DIR}/yui-compressor/yuicompressor-2.4.2.jar" />
  3. <target name="minimiseJSFile">
  4.   <java jar="${YUI}" fork="true" failonerror="true">
  5.     <arg line="–type js" />
  6.     <arg line="-o ${outputFile}" />
  7.     <arg value="${inputFile}" />
  8.   </java>
  9. </target>
  10. <!– using the above –>
  11. <target name="minimise">
  12.   <antcall target="minimiseJSFile">
  13.     <param name="inputFile" value="./dist/uncompressed/mydistribution-${VERSION}.js" />
  14.     <param name="outputFile" value="./dist/minimised/mydistribution.min-${VERSION}.js" />
  15.    </antcall>
  16. </target>

It’s worth noting that by default the YUI Compressor both minimises and obfuscates code, this is because the process of obfuscation also significantly reduces the size of the script since it substitutes your nice variable names with single letter variables. If you do not want this behaviour then you can add the ‘–nomunge’ directive as an arg line above .

Generating JS Documention

For this to work you’ll need to download the latest version of JSDOC Toolkit. In the example below im enumerating each file I want documentation generated for, you could just as easily point it at a directory.

  1. <target name="doc" description="generates documentation for core rdfQuery">
  2.   <!– jsdoc-toolkit ant taks is currently broken, so we directly run –>
  3.   <echo message="Generating Documentation:"/>
  4.   <java jar="${JSDOC_TOOLKIT_DIR}/jsrun.jar" fork="true" failonerror="true">
  5.     <arg value="${JSDOC_TOOLKIT_DIR}/app/run.js"/>
  6.     <arg value="-t=${JSDOC_TOOLKIT_DIR}/templates/jsdoc"/>
  7.     <arg value="-d=./dist/documentation/"/>
  8.     <arg value="file1.js"/>
  9.     <arg value="file2.js"/>
  10.     <arg value="file3.js"/>
  11.   </java>
  12. </target>

Packaging a distribution

Here we want to simply create a single, easily downloadable zip file which contains the combined javascripts, a minimised version of this, and all the api documentation.

  2.   <target name="dist">      
  3.     <zip destfile="./dist/mydistribution-${VERSION}.zip">
  4.       <zipfileset dir="./dist/uncompressed/" includes="*.js" prefix="./dist/uncompressed/"/>
  5.       <zipfileset dir="./dist/minimised/" includes="*.js" prefix="./dist/minimised/"/>
  6.       <zipfileset dir="./dist/documentation/" includes="**/**" prefix="./dist/documentation/"/>
  7.     </zip>
  8.  </target>

Putting it altogether

Here’s a real example of how you can combine the above together. I’ve copied the build.xml that I added to the rdfQuery project below.:

  1. <?xml version="1.0"?>
  2. <project name="rdfquery" basedir="." default="all">    
  3.   <loadfile property="VERSION" srcfile="version.txt" description="Version to build" >
  4.     <filterchain>
  5.       <striplinebreaks/>
  6.     </filterchain>
  7.   </loadfile>
  9.   <property name="DOCS_DIR" value="./docs" description="API documentation"/>
  10.   <property name="DIST_DIR" value="./dist"/>
  11.   <property name="LIB_DIR" value="./lib"/>
  12.   <property name="JSDOC_TOOLKIT_DIR" value="${LIB_DIR}/jsdoc-toolkit/"/>
  13.   <property name="YUI" value="${LIB_DIR}/yui-compressor/yuicompressor-2.4.2.jar" />
  14.   <!– Names for output –>
  15.   <property name="JS" value="${DIST_DIR}/js/" />
  16.   <property name="JS_MIN" value="${DIST_DIR}/minimised/" />
  18.   <target name="all" depends="init, doc, dist"/>
  20.   <target name="doc" description="generates documentation for core rdfQuery">
  21.     <!– jsdoc-toolkit ant taks is currently broken, so we directly run –>
  22.     <echo message="Generating Documentation:"/>
  23.     <java jar="${JSDOC_TOOLKIT_DIR}/jsrun.jar" fork="true" failonerror="true">
  24.       <arg value="${JSDOC_TOOLKIT_DIR}/app/run.js"/>
  25.       <arg value="-t=${JSDOC_TOOLKIT_DIR}/templates/jsdoc"/>
  26.       <arg value="-d=${DOCS_DIR}"/>
  27.       <arg value="jquery.uri.js"/>
  28.       <arg value="jquery.xmlns.js"/>
  29.       <arg value="jquery.datatype.js"/>
  30.       <arg value="jquery.curie.js"/>
  31.       <arg value="jquery.rdf.js"/>
  32.       <arg value="jquery.rdfa.js"/>
  33.       <arg value="jquery.rules.js"/>
  34.     </java>
  35.   </target>
  37.   <target name="dist">
  38.     <antcall target="combine" />
  39.     <antcall target="minimise" />
  40.      <zip destfile="${DIST_DIR}/jquery.rdfquery-${VERSION}.zip">
  41.        <zipfileset dir="${JS}" includes="*.js" prefix="${JS}"/>
  42.        <zipfileset dir="${JS_MIN}" includes="*.js" prefix="${JS_MIN}"/>
  43.        <zipfileset dir="${DOCS_DIR}" includes="**/**" prefix="${DOCS_DIR}"/>
  44.      </zip>
  45.   </target>
  47.   <target name="combine" description="combines js files into three different files representing the three different packages for distribution">
  48.     <echo message="Building rdfQuery Core Distribution" />
  49.     <concat destfile="${JS}/jquery.rdfquery.core-${VERSION}.js">
  50.       <fileset dir="." includes="jquery.uri.js" />
  51.       <fileset dir="." includes="jquery.xmlns.js" />
  52.       <fileset dir="." includes="jquery.datatype.js" />
  53.       <fileset dir="." includes="jquery.curie.js" />
  54.       <fileset dir="." includes="jquery.rdf.js" />
  55.     </concat>
  57.     <echo message="Building rdfQuery RDFa Distribution" />
  58.     <concat destfile="${JS}/jquery.rdfquery.rdfa-${VERSION}.js">
  59.       <fileset dir="${JS}/" includes="jquery.rdfquery.core-${VERSION}.js" />
  60.       <fileset dir="." includes="jquery.rdfa.js" />            
  61.     </concat>
  63.     <echo message="Building rdfQuery Rules Distribution" />
  64.     <concat destfile="${JS}/jquery.rdfquery.rules-${VERSION}.js">
  65.       <fileset dir="${JS}/" includes="jquery.rdfquery.rdfa-${VERSION}.js" />
  66.       <fileset dir="." includes="jquery.rules.js" />            
  67.     </concat>
  68.   </target>
  70.   <target name="minimise">
  71.     <echo message="Minimising rdfQuery Core Distribution" />
  72.     <echo message="Minimising rdfQuery RDFa Distribution" />
  73.     <echo message="Minimising rdfQuery Rules Distribution" />
  75.     <antcall target="minimiseJSFile">
  76.       <param name="inputFile" value="${JS}/jquery.rdfquery.core-${VERSION}.js" />
  77.       <param name="outputFile" value="${JS_MIN}/jquery.rdfquery.core.min-${VERSION}.js" />
  78.     </antcall>        
  79.     <antcall target="minimiseJSFile">
  80.       <param name="inputFile" value="${JS}/jquery.rdfquery.rdfa-${VERSION}.js" />
  81.       <param name="outputFile" value="${JS_MIN}/jquery.rdfquery.rdfa.min-${VERSION}.js" />
  82.     </antcall>
  83.     <antcall target="minimiseJSFile">
  84.       <param name="inputFile" value="${JS}/jquery.rdfquery.rules-${VERSION}.js" />
  85.       <param name="outputFile" value="${JS_MIN}/jquery.rdfquery.rules.min-${VERSION}.js" />
  86.     </antcall>
  87.   </target>
  89.   <target name="minimiseJSFile">
  90.     <java jar="${YUI}" fork="true" failonerror="true">
  91.       <arg line="–type js" />
  92.       <arg line="-o ${outputFile}" />
  93.       <arg value="${inputFile}" />
  94.     </java>
  95.   </target>
  97.   <target name="clean" description="">
  98.     <echo message="Deleting distribution and API documentation"/>
  99.     <delete dir="${DIST_DIR}"/>
  100.     <delete dir="${DOCS_DIR}"/>
  101.   </target>
  103.   <target name="init" depends="clean">
  104.     <mkdir dir="${DIST_DIR}" />
  105.     <mkdir dir="${DIST_DIR}/js" />
  106.     <mkdir dir="${DIST_DIR}/minimised" />
  107.     <mkdir dir="${DOCS_DIR}" />
  108.   </target>
  109. </project>


I hope others find this useful. There are a number of obivious improvements that can be made but I hope it serves to illustrate the general principles. Let me know you all think

rdfQuery 1.0 released

I travelled down to Oxford last weekend to attend the rdfQuery Dazzle event. Fairly early on we decided that one of the things we wanted to achieve was to get v1.0 of rdfQuery released. This involved a fair bit work, not only did we need to get unit tests working across all the major browsers, but we also wanted to fix some of the existing bugs and get documentation written. I spent the bulk of the weekend restructuring the unit test suite so the 1100 unit tests we have could be run together. I also introduced an ant script to make it easy to generate documentation, as well as create distributions. Jeni and Kal managed to get all the api documentation written, and got rdfQuery working in IE7, IE8, Firefox and Safari. It was a great effort by everyone involved.

We also spent time talking about some of the Ontology support that Jeni is thinking of adding to rdfQuery, which could be very useful. We also wanted to get some closer integration with the Talis Platform, so I’ve also been working on adding Changeset support. All in all it was a great weekend.

You can download and learn more about rdfQuery here.

We’re hiring …

We are currently recruiting for a number of different positions at Talis, amongst these are several openings to join our development teams. Rob has already discussed the Web Application Technical Lead role, and I’ll like to mention that we are also looking for Senior Developers to join both our Platform and Education divisions.

Senior Software Developer Education

It is the vision of our Education Division to connect faculties, students and educators together using technology, with the aim of creating joined up learning environments and providing seamless access to education resources and pedagogical expertise. We are currently working on delivering Talis Aspire into a number of Higher Education institutions here in the UK and abroad. Aspire is built entirely upon our semantic web platform, and is one of the few truly native linked data applications. Whilst the underlying technology is important, we have to balance this with an excellent user experience. If you are interested in being an early part of publishing large amounts of data on the semantic web? And building truly compelling software that provides an excellent user experience for millions of users, then you might be interested in applying. The job spec provides more details, we only ask that when applying you try to answer two of three questions below:

  1. Discuss the different types of automated testing that are needed to maintain high quality
    software. What kinds of programming language are best suited to each type of testing? What
    automated techniques could be used to test web based applications and user interfaces? And
    how can code design and refactoring be affected by choice of language?
  2. When working with data that you do not own, there are no guarantees about the cardinality of
    fields or the presence of data you might want to consider mandatory. Traditional approaches to
    working with data from elsewhere have relied on cleaning, validating and then importing data
    into an application’s own database. The Semantic Web allows data to be shared at runtime.
    What techniques or strategies could be employed within an application to handle unreliable or
    unexpected data when sharing databases with other applications at runtime?
  3. Web applications are often composed of multiple interoperating systems, connected by APIs or
    other endpoints, and deployed across multiple environments. As usage patterns change, the
    application may need to scale rapidly, whilst maintaining performance and reliability levels.
    How can applications be designed to allow for such scaling?

Senior Platform Developer

Our Platform division is always looking for experienced developers to join the team. The job spec for this role provides far more details but when applying we ask that you try and answer at least two of the following three questions:

  1. The Web can be modelled as a network of nodes labelled with URLs and connected by directed arcs. Suppose we want to find all the URLs linked to and from any given URL, and all the URLs that are linked from any two given URLs. What kind of data structures might be suitable for representing and querying a network with 10^8 nodes each having between 10 and 50 arcs?
  2. Discuss the different types of automated testing that are needed to maintain high quality software. What kinds of programming language are best suited to each type of testing? What techniques could be used for testing asynchronous processes and for processes that operate over large volumes of data? Are there any situations that you wouldn’t test?
  3. Large-scale systems composed of many cooperating application servers often need to share and cache configuration. Suppose any server can initiate changes that need to be reflected in real time to the other application servers in the cluster. What strategies could you use for coordinating this kind of behaviour and how are they tolerant to various failure conditions?

Finally I think Rob summed it up best when he said: All in all though, we’re looking for great people to come and help us do great stuff. Get in touch!


Faster than a speeding bullet! Easier to maintain than something that’s really easy to maintain! Reliable! That’s what we want from our tests, but how do we get there? This presentation covers key strategies and patterns for writing test suites using WebDriver, a developer focused tool for web application testing similar in spirit to Selenium RC. We’ll cover why it was written, the problems it addresses and how to integrate it into your projects and testing process.

This talk presented by Simon Stewart, creator of WebDriver, still serves as a useful introduction to the tool, even though the talk itself is a couple of years old and WebDriver has moved on since then.

I’ve been experimenting with WebDriver as an alternative to Selenium/Selenium RC, although it is worth bearing in mind that both projects are merging. I’m enjoying getting to grips with WebDriver and am finding that the tight integration between WebDriver and each of the browsers it automates is much faster than Selenium, since it uses the mechanism most appropriate for controlling that browser. For example in Firefox, WebDriver is implemented as an extension, whereas in IE, WebDriver makes use of IE’s Automation controls. In addition to Firefox and IE, WebDriver also supports the following:

  • Safari 3 on OSX
  • iPhone
  • Selenium Emulation

It’s the Selenium Emulation I’d like to touch upon here, what this basically means is that the Java version of WebDriver provides an implementation of the existing Selenium API, and therefore can an be dropped in as a substitute for the Selenium Driver. Here’s an example of how you’d do this:

  2. // You may use any WebDriver implementation. Firefox is used here as an example
  3. // A "base url", used by selenium to resolve relative URLs
  4. "http://www.google.com";
  6. // Create the Selenium implementation
  7. // Perform actions with selenium
  8. selenium.open("http://www.google.com");
  9. selenium.type("name=q", "cheese");
  10. selenium.click("name=btnG");
  12. // And get the underlying WebDriver implementation back. This will refer to the
  13. // same WebDriver instance as the "driver" variable above.

This allows for WebDriver and Selenium to live side-by-side, and provides developers with a simple mechanism for a managed migration from the existing Selenium API to WebDriver. I’m still experimenting with it but I have to admit I really like it simplicity.

Yusuf Islam, the Cat of Old

You ever had one of those days when you get home from work, your tired, but you carry on working because there always seems far more to do than time to do it in? you feel like you want to find a way of picking yourself up out of whatever temporary rut you feel yourself in? Well yesterday was like that I think I must have stopped around 11ish. Rather than hit the sack I made myself some tea ( courtesy of Zach ), and started to flick through channels. I’ve noticed that I have a tendency to do that, a lot! there’s nothing you actually want to watch, so you just flick through until something vaguely interesting catches your eye. And something did, I stopped on BBC Four and caught the last few minutes of Alan Yentob’s Interview with Yusuf Islam (formerly known as Cat Stevens), from 2006.

I’d never seen the full interview before, and yet the image I was confronted with on the screen, of this bearded man playing this acoustic guitar and singing in this beautifully melodic voice just made me want to listen (at the 45 minute mark). It was curious I suppose that I’d tuned in just in time to listen to Alan Yentob ask him the question”:

“After all those years of resistance you’ve now picked up the guitar again. Do you think you have allowed yourself to sort of take a position you didnt feel this literalism about Islam which a lot of people find difficult to accept. Some people might say to that extent you’ve been brainwashed perhaps?”

Yusuf Islam:
“The positions that I took previously, I held fast to them because I believed them to be true. However, one only has to look at history, it wasn’t long ago when we discover, guess what, the guitar was probably introduced to Europe, through Spain by the Muslims. Now I’m saying, hang on, What? you know… and thats a reality. When I learned something better I moved, and that’s what you’ve got to do. I think we must not, ever, take the position that we know it all. God may show you something you never knew yesterday,we’ve got to be ready for that” …

Alan Yentob:
“Is there a message in these songs as you pick up this guitar again?”

Yusuf Islam:
“There is certainly a change in the wind and the way in which there is now a chance for a new understanding of the moderate middle path of Islam because the extremes have been exposed. A lot of people have missed the whole point, including some Muslims, who have gone off on some kind of..their own..strategy of trying to improve the world through some kind of devious means that has nothing to do with Islam, and yet is supposed to be in the name of Islam. The word Islam itself comes from the word ‘peace’ now that is the heart and soul of this religion. I discovered that, I’ve done that journey and perhaps I can help others to feel a bit more assured that in fact a lot of Muslims in this world, the vast majority just want to live a happy life and be at peace with the rest of the world”

I think there’s something wonderfully uplifting in his words, and in his music. His sentiments are nothing new to many muslims yet sadly social the perception of Islam and Muslims seems to be growing more and more negative as the actions of an extremist minority are used to label all Muslims are radicals. In fact I remember storming off in a rage as I watched the European election results and listened to Nick Griffin, the leader of the BNP, explain that stopping the spread of radical Islam was one of the reasons people had voted for him.

After the interview ended the BBC aired a hour long ‘BBC Four Session’ featuring Yusuf singing a number of his songs, both old and new, from a concert in Porchester Hall several years ago. I stayed up and watched the show and found myself being moved more and more by his songs and their message. I even ended up downloading several of his recent albums on iTunes as I watched the performance on tv – although I’m not sure if my colleagues appreciated that since I was humming, and singing along to them as I worked in the office today 🙂

Rather than pick up the laptop and work this evening, I decided to see if I could find that interview and watch it all, sadly BBC iPlayer doesn’t have it, however it does still have the ‘BBC Four Session – Yusuf Islam‘ which is available to watch – it’s a wonderful concert, an inspired performance which I certainly recommend.

After searching on Google I did eventually find the Interview, there’s a copy hosted on Google Video ( disclaimer: it’s hosted by an organisation called ‘Turn To Islam’. I have no idea what this organisation is, I simply wanted to link to the video). I’m glad I watched it all Yusuf describes his early life, his celebrity status, his, his conversion to islam, and his return to performing. Perhaps the most moving part of the interview is when he describes his battle with tuberculosis – which will resonate with anyone who has ever found themselves lying in a hospital bed reflecting on their life, and where they are headed, particularly when he says “.. in that hospital I developed some insights which then later fed into my music … into my journey” … a poignant sentiment that touched me deeply given my own experience.

Yusuf Islam is an amazing man, who truly inspires.

Jin-Roh: The Wolf Brigade

It’s not often I watch an anime, or any movie, that not only moves me but forces me to ask questions about society and our shared humanity. Jin-Roh is a title that has hovered around my awareness for years but I’ve never gotten around to watching it, at least not until today. It’s an exquisite work that transcends genre.

The story is complex and full of depth and some strong characterization, this a very serious movie; so for those who Ilike your robots and bikini girls, with hyper-guns and the whoosh of rapid-fire manga, this is probably not for you! This movie is thoughtful and contemplative … and will leave you feeling introspective.

The story is set in an alternate reality in which Japan has emerged from the second world war as Totalitarian society… The population riots, a group called the Sect creates havoc, and the armored Special Unit of the Capitol Police Organization (CAPO) plots to acquire more power. A soldier named Fuse, who was once one of the most formidable men in the Special Unit, agonizes over the death of a young girl who worked for the Sect and in doing so he becomes a neurotic mess intent on befriending the dead girl’s sister.

The opening ten minutes of the movie hooks you, it begins with a chase under the streets of a rioting city in whic two groups, Sect and the CAPO, which represent two diametrically opposed points of view come into violent conflict. Away from the riots, and killing, a heavily armed trooper hunts and corners a mule, a young girl carrying explosives for use against the police forces. The rest of movie is revolves entirely around the question of why the soldier does not shoot her, its a question that occupies the lead character, his co-workers and us as the audience as we watch him and wonder we can’t let go of her self imposed death. This is a slow serious story, about suicide bombings, and blindly following orders, and humanity’s growth or lack of growth.

What surprised me the most was how much this story borrowed heavily from the tale of Little Red Riding Hood, it’s difficult to go into examples with ruining the rest of the story, however the female terrorists who carry bombs for the Sect are known as “Red Riding Hoods,” and Kei, reads a bloody version of the tale to Fuse throughout the film. The dialogue is fully of ethical question and moralistic observations, consantly question what it means to be human, for example when Fuse superior observes:

“We aren’t men disguised as dogs. We’re wolves disguised as men.”

and he also when another of his superiors makes observation with regards to society:

.”.. apparently some animals when they dominate a group kill all the offspring of the other males under them, sometimes organisations do the same”

In my opinion Jin-Roh is a true masterpiece, and anyone who watches it will not be disappointed.