Wednesday, June 9, 2010

The clues are out there. Become a forensic scientist.

Become an expert in forensics
To stop further mailing, visit here or write:
PinpointMediaServices, 4255 E. Charleston Blvd. Suite D-345, Las Vegas, NV 89104
Please find attached a use case from Document Engineering Services Ltd (and from SystML's and the The freebXML Foundation's freeb-ubl project) (- not yet uploaded to SET TC document site) -- Stephen D. Green Document Engineering Services Ltd .. and voice 2008/12/5 < asu ... @ >: The document named Use case template... (OASIS.SET.TC.UseCaseTemplate.doc) has been submitted by Ms. Asuman Dogac* to the OASIS Semantic Support for Electronic Business Document Interoperability (SET) TC document repository. Document Description: A Template for developing use cases View Document Details: Download Document: PLEASE NOTE: If the above links do not work for you, your email application may be breaking the link into two pieces. You may be able to copy and paste the entire link address into the address field of your web browser. -OASIS Open Administration --------------------------------------------------------------------- To unsubscribe from this mail list, you must leave the OASIS TC that generates this mail. Follow this link to all your TCs in OASIS at: The HTML Working Group will have its usual weekly teleconference on 2009-09-24 for 60 minutes from 16:00Z to 17:00Z. Tokyo 01:00+1, Amsterdam/Oslo 18:00, London/Dublin 17:00, New Jersey/York 12 noon, Kansas City 11:00, Seattle/San Francisco 09:00. < > (See the end of this email for dial-in and IRC info.) == Executive Summary == 0. Scribe for this meeting 1. Review of due and overdue action items a. ISSUE-35/ACTION-138: Produce a matrix based on Henri's work [Steve Faulkner] b. ACTION-143: Get co-chairs to bring forward a concrete proposal for a testing task force (including scope) [Paul Cotton ] c. Other overdue ACTIONS for discussion 2. Review of action items pending review a. ISSUE-54/ACTION-103: Register about: URI scheme [Lachlan Hunt] b. ISSUE-56/ACTION-137: Update IRI spec based on comments to Public-IRI [Larry Masinter] c. Other ACTIONs pending review. 3. New issues this week: NONE. 4. Review of issues proposed to be closed: NONE. 5. Status of Call For Consensus emails a. CfC: declare WebSockets out of scope [Maciej Stachowiak] b. CfC: Publish HTML+RDFa as First Public Working Draft [Maciej Stachowiak] 6. Joint HTML and PF WG Accessibility Task Force 7. HTML WG Testing Task Force 8. Scribe for next meeting 9. Adjournment == Details == 0. Topic Scribe for this meeting 1. Topic Review of due and overdue action items a. Topic ISSUE-35/ACTION-138: Produce a matrix based on Henri's work [Steve Faulkner] ISSUE-35: Need to define processing requirements for aria states and properties when used in html ACTION-138: Produce a matrix based on Henri's work [Steve Faulkner] b. Topic ACTION-143: Get co-chairs to bring forward a concrete proposal for a testing task force (including scope) [Paul Cotton ] ACTION-143: Get co-chairs to bring forward a concrete proposal for a testing task force (including scope) [Paul Cotton ] Testing Task Force proposal: c. Topic Other overdue ACTIONS for discussion 2. Topic Review of action items pending review a. Topic ISSUE-54/ACTION-103: Register about: URI scheme [Lachlan Hunt] ISSUE-54 ACTION-103 b. Topic ISSUE-56/ACTION-137: Update IRI spec based on comments to Public-IRI [Larry Masinter] ISSUE-56 ACTION-137 c. Topic Other ACTIONs pending review. 3. Topic New issues this week: NONE. 4. Topic Review of issues proposed to be closed: NONE. 5. Topic Status of Call For Consensus emails a. Topic CfC: declare WebSockets out of scope [Maciej Stachowiak] Status: Responses due Sep 17. No negative responses. b. Topic CfC: Publish HTML+RDFa as First Public Working Draft [Maciej Stachowiak] Status: Responses due Sep 24. Ongoing discussion. Unclear if responses are negative. 6. Topic Joint HTML and PF WG Accessibility Task Force Original proposal: Revised proposal: 7. Topic HTML WG Testing Task Force See discussion of ACTION-143 above. 8. Topic Scribe for next meeting 9. Topic Adjournment == Dial-in and IRC Details == Zakim teleconference bridge +1.617.761.6200, +33.4.89.06.34.99, +44.117.370.6152 code: HTML (4865) Supplementary IRC chat (logged) #html-wg on port 6665 or port 80 /paulc Paul Cotton , Microsoft Canada 17 Eleanor Drive, Ottawa, Ontario K2E 6A3 Tel: (425) 705-9596 Fax: (425) 936-7329 I'm proud to announce that #ruby-pro will be holding its first gathering on Friday. #ruby-pro is an IRC channel[1] on where experienced and advanced Ruby coders can meet and talk, and where less experienced Rubyists can watch and learn. One of #ruby-pro's aims is to spread knowledge. To that end we hold gatherings where several topics are presented, each by a host and each in the format the host of that topic considers best. The topics of the June 27 gathering will be: - BreezeForms: a library to deal with webforms - Treetop: Parse anything from configuration files to programming languages - git: tutorial, walkthrough and demo through the distributed revision control software - EventMachine: general walkthrough, some example apps, and a sampling of the Â"really fastÂ" stuff Planned time for the topics is 45 minutes total. If we should exceed one hour, subsequent topics can be postponed to the next gathering to allow us to give them full and fair treatment. Since this is the first gathering it has the touch of the experimental. We don't know yet how it will work out. But we invite everybody wholeheartedly to join, listen and discuss afterwards. To join the gathering , join #ruby-pro- gathering on at 23:00 UTC. If you're new to IRC, the wikipedia entry lists some software for different platforms. More information about #ruby-pro is available on Regards Stefan Rusterholz ("apeiros") 1: Internet Relay Chat (IRC) is a form of real-time Internet chat or synchronous conferencing. It is mainly designed for group communication in discussion forums called channels, but also allows one-to-one communication via private message, as well as chat and data transfers via Direct Client-to-Client. For more information, see -- Posted via . Hi, I've seen android phone with custom notification areas, e.g. LG have one with a wifi + bluetooth switcher built into the top of the notification area. I would like to do something similar with my app, I've build a custom notification that can sit in the notification area, however despite putting buttons on that selecting the notification simply selects the whole notification and sends me to my Activity, rather than allowing me to select specific buttons from the View. Is is possible to have a notification with individual buttons that can be pressed? And if so does anyone know how to do it? Alternatively, is it possible to customize the top of the notification area, or is that something that LG have done by customizing their android install, and so isn't possible from an app? Cheers,

Tuesday, June 8, 2010

Avoid Retail Markup

Access to Thousands of Products
To stop further mailing, visit here or write:
DlRECTBUY, PO Box 1572, Boulder, Colorado 80306
On Saturday 05 December 2009 20:09:21 Luke Plant wrote: I'm not likely to able to look at this before Tuesday. If anyone wants to look at it, I think the right approach is something like the following: (without the globals, obviously, they can be converted to instance variables/methods). Cancel that - I unexpectedly had free time this evening, and I implemented this. It's a nice replacement I think (credit to Vaughan Pratt and Fredrik Lundh for the basic approach and Python implementation respectively). The new implementation is pretty much the same length as the old one, and hopefully easier to read, with a much smaller core parser. Precedence is specified directly, rather than implicitly, so it's much easier to check that it's the same as Python's. Latest patch attached to this e-mail. Regards, Luke -- "Idiocy: Never underestimate the power of stupid people in large groups." () Luke Plant || diff -r 70e75e8cd224 django/template/defaulttags.py --- a/django/template/defaulttags.py Thu Dec 03 15:11:14 2009 +0000 +++ b/django/template/defaulttags.py Sun Dec 06 01:04:04 2009 +0000 @@ -11,6 +11,7 @@ from django.template import Node, NodeList, Template, Context, Variable from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END from django.template import get_library, Library, InvalidTemplateLibrary +from django.template.smartif import IfParser, Literal from django.conf import settings from django.utils.encoding import smart_str, smart_unicode from django.utils.itercompat import groupby @@ -227,10 +228,9 @@ return self.nodelist_false.render(context) class IfNode(Node): - def __init__(self, bool_exprs, nodelist_true, nodelist_false, link_type): - self.bool_exprs = bool_exprs + def __init__(self, var, nodelist_true, nodelist_false=None): self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false - self.link_type = link_type + self.var = var def __repr__(self): return "" @@ -250,28 +250,11 @@ return nodes def render(self, context): - if self.link_type == IfNode.LinkTypes.or_: - for ifnot, bool_expr in self.bool_exprs: - try: - value = bool_expr.resolve(context, True) - except VariableDoesNotExist: - value = None - if (value and not ifnot) or (ifnot and not value): - return self.nodelist_true.render(context) + if self.var.resolve(context): + return self.nodelist_true.render(context) + if self.nodelist_false: return self.nodelist_false.render(context) - else: - for ifnot, bool_expr in self.bool_exprs: - try: - value = bool_expr.resolve(context, True) - except VariableDoesNotExist: - value = None - if not ((value and not ifnot) or (ifnot and not value)): - return self.nodelist_false.render(context) - return self.nodelist_true.render(context) - - class LinkTypes: - and_ = 0, - or_ = 1 + return '' class RegroupNode(Node): def __init__(self, target, expression, var_name): @@ -761,6 +744,27 @@ return do_ifequal(parser, token, True) ifnotequal = register.tag(ifnotequal) +class TemplateLiteral(Literal): + def __init__(self, value, text): + self.value = value + self.text = text # for better error messages + + def display(self): + return self.text + + def resolve(self, context): + return self.value.resolve(context, ignore_failures=True) + +class TemplateIfParser(IfParser): + error_class = TemplateSyntaxError + + def __init__(self, parser, *args, **kwargs): + self.template_parser = parser + return super(TemplateIfParser, self).__init__(*args, **kwargs) + + def create_var(self, value): + return TemplateLiteral(self.template_parser.compile_filter(value), value) + #...@register.tag(name="if") def do_if(parser, token): """ @@ -805,47 +809,21 @@ There are some athletes and absolutely no coaches. {% endif %} - ``if`` tags do not allow ``and`` and ``or`` clauses with the same tag, - because the order of logic would be ambigous. For example, this is - invalid:: + Comparison operators are also available, and the use of filters is also + allowed, for example: - {% if athlete_list and coach_list or cheerleader_list %} + {% if articles|length >= 5 %}...{% endif %} - If you need to combine ``and`` and ``or`` to do advanced logic, just use - nested if tags. For example:: + Arguments and operators _must_ have a space between them, so + ``{% if 1>2 %}`` is not a valid if tag. - {% if athlete_list %} - {% if coach_list or cheerleader_list %} - We have athletes, and either coaches or cheerleaders! - {% endif %} - {% endif %} + All supported operators are: ``or``, ``and``, ``in``, ``=`` (or ``==``), + ``!=``, ``>``, ``>=``, ``<`` and ``<=``. + + Operator precedence follows Python. """ - bits = token.contents.split() - del bits[0] - if not bits: - raise TemplateSyntaxError("'if' statement requires at least one argument") - # Bits now looks something like this: ['a', 'or', 'not', 'b', 'or', 'c.d'] - bitstr = ' '.join(bits) - boolpairs = bitstr.split(' and ') - boolvars = [] - if len(boolpairs) == 1: - link_type = IfNode.LinkTypes.or_ - boolpairs = bitstr.split(' or ') - else: - link_type = IfNode.LinkTypes.and_ - if ' or ' in bitstr: - raise TemplateSyntaxError, "'if' tags can't mix 'and' and 'or'" - for boolpair in boolpairs: - if ' ' in boolpair: - try: - not_, boolvar = boolpair.split() - except ValueError: - raise TemplateSyntaxError, "'if' statement improperly formatted" - if not_ != 'not': - raise TemplateSyntaxError, "Expected 'not' in if statement" - boolvars.append((True, parser.compile_filter(boolvar))) - else: - boolvars.append((False, parser.compile_filter(boolpair))) + bits = token.split_contents()[1:] + var = TemplateIfParser(parser, bits).parse() nodelist_true = parser.parse(('else', 'endif')) token = parser.next_token() if token.contents == 'else': @@ -853,7 +831,7 @@ parser.delete_first_token() else: nodelist_false = NodeList() - return IfNode(boolvars, nodelist_true, nodelist_false, link_type) + return IfNode(var, nodelist_true, nodelist_false) do_if = register.tag("if", do_if) #...@register.tag diff -r 70e75e8cd224 django/template/smartif.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/django/template/smartif.py Sun Dec 06 01:04:04 2009 +0000 @@ -0,0 +1,181 @@ +""" +Parser and utilities for the smart 'if' tag +""" + +# Using a simple top down parser, as described here: +# . +# 'led' = left denotation +# 'nud' = null denotation +# 'bp' = binding power (left = lbp, right = rbp) + +class TokenBase(object): + """ + Base class for operators and literals, mainly for debugging and for throwing + syntax errors. + """ + id = None # node/token type name + value = None # used by literals + first = second = None # used by tree nodes + + def nud(self, parser): + # Null denotation - called in prefix context + raise parser.error_class( + "Not expecting '%s' in this position in if tag." % selfid + ) + + def led(self, left, parser): + # Left denotation - called in infix context + raise parser.error_class( + "Not expecting '%s' as infix operator in if tag." % selfid + ) + + def display(self): + """ + What to display in error messages for this node + """ + return selfid + + def __repr__(self): + if selfid == "literal": + return "(%s %r)" % (selfid, self.value) + out = [selfid, self.first, self.second] + out = map(str, filter(None, out)) + return "(" + " ".join(out) + ")" + + +def infix(bp, func): + """ + Create an infix operator, given a binding power and a function that + evaluates the node + """ + class Operator(TokenBase): + lbp = bp + + def led(self, left, parser): + self.first = left + self.second = parser.expression(bp) + return self + + def resolve(self, context): + return func(self.first.resolve(context), self.second.resolve(context)) + + return Operator + + +def prefix(bp, func): + """ + Create a prefix operator, given a binding power and a function that + evaluates the node. + """ + class Operator(TokenBase): + lbp = bp + + def nud(self, parser): + self.first = parser.expression(bp) + self.second = None + return self + + def resolve(self, context): + return func(self.first.resolve(context)) + + return Operator + + +# Operator precedence follows Python. +# NB - we can get slightly more accurate syntax error messages by not using the +# same object for '==' and '='. + +OPERATORS = { + 'or': infix(6, lambda x, y: x or y), + 'and': infix(7, lambda x, y: x and y), + 'not': prefix(8, lambda x: not x), + 'in': infix(9, lambda x, y: y is not None and x in y), + '=': infix(10, lambda x, y: x == y), + '==': infix(10, lambda x, y: x == y), + '!=': infix(10, lambda x, y: x != y), + '>': infix(10, lambda x, y: x > y), + '>=': infix(10, lambda x, y: x >= y), + '<': infix(10, lambda x, y: x < y), + '<=': infix(10, lambda x, y: x <= y), +} + +# Assign 'id' to each: +for key, op in OPERATORS.items(): + opid = key + + +class Literal(TokenBase): + """ + A basic self-resolvable object similar to a Django template variable. + """ + # IfParser uses Literal in create_var, but TemplateIfParser overrides + # create_var so that a proper implementation that actually resolves + # variables, filters etc are used. + id = "literal" + lbp = 0 + def __init__(self, value): + self.value = value + + def display(self): + return repr(self.value) + + def nud(self, parser): + return self + + def resolve(self, context): + return self.value + + +class EndToken(TokenBase): + lbp = 0 + + def nud(self, parser): + raise parser.error_class("Unexpected end of expression in if tag.") + +EndToken = EndToken() + + +class IfParser(object): + error_class = ValueError + + def __init__(self, tokens): + self.tokens = map(self.translate_tokens, tokens) + self.pos = 0 + self.current_token = self.next() + + def translate_tokens(self, token): + try: + op = OPERATORS[token] + except (KeyError, TypeError): + return self.create_var(token) + else: + return op() + + def next(self): + if self.pos >= len(self.tokens): + return EndToken + else: + retval = self.tokens[self.pos] + self.pos += 1 + return retval + + def parse(self): + retval = self.expression() + # Check that we have exhausted all the tokens + if self.current_token is not EndToken: + raise self.error_class("Unused '%s' at end of if expression." % + self.current_token.display()) + return retval + + def expression(self, rbp=0): + t = self.current_token + self.current_token = self.next() + left = t.nud(self) + while rbp < self.current_token.lbp: + t = self.current_token + self.current_token = self.next() + left = t.led(left, self) + return left + + def create_var(self, value): + return Literal(value) diff -r 70e75e8cd224 docs/ref/templates/builtins.txt --- a/docs/ref/templates/builtins.txt Thu Dec 03 15:11:14 2009 +0000 +++ b/docs/ref/templates/builtins.txt Sun Dec 06 01:04:04 2009 +0000 @@ -313,6 +313,9 @@ As you can see, the ``if`` tag can take an optional ``{% else %}`` clause that will be displayed if the test fails. +Boolean operators +^^^^^^^^^^^^^^^^^ + ``if`` tags may use ``and``, ``or`` or ``not`` to test a number of variables or to negate a given variable:: @@ -338,24 +341,153 @@ There are some athletes and absolutely no coaches. {% endif %} -``if`` tags don't allow ``and`` and ``or`` clauses within the same tag, because -the order of logic would be ambiguous. For example, this is invalid:: +.. versionchanged:: 1.2 + +If you use ``and`` and ``or`` clauses within the same tag, it is interpreted +left to right, e.g.:: {% if athlete_list and coach_list or cheerleader_list %} -If you need to combine ``and`` and ``or`` to do advanced logic, just use nested -``if`` tags. For example:: +will be interpreted like: - {% if athlete_list %} - {% if coach_list or cheerleader_list %} - We have athletes, and either coaches or cheerleaders! - {% endif %} +.. code-block:: python + + if (athlete_list and coach_list) or cheerleader_list + +Use of actual brackets in the ``if`` tag is invalid syntax. If you need them to +indicate precedence, you should use nested ``if`` tags. + +.. versionadded:: 1.2 + + +``if`` tags may also use the operators ``==``, ``!=``, ``<``, ``>``, +``<=``, ``>=`` and ``in`` which work as follows: + + +``==`` operator +^^^^^^^^^^^^^^^ + +Equality. Example:: + + {% if somevar == "x" %} + This appears if variable somevar equals the string "x" {% endif %} -Multiple uses of the same logical operator are fine, as long as you use the -same operator. For example, this is valid:: +``!=`` operator +^^^^^^^^^^^^^^^ - {% if athlete_list or coach_list or parent_list or teacher_list %} +Inequality. Example:: + + {% if somevar != "x" %} + This appears if variable somevar does not equal the string "x", + or if somevar is not found in the context + {% endif %} + +``<`` operator +^^^^^^^^^^^^^^ + +Less than. Example:: + + {% if somevar < 100 %} + This appears if variable somevar is less than 100. + {% endif %} + +``>`` operator +^^^^^^^^^^^^^^ + +Greater than. Example:: + + {% if somevar > 0 %} + This appears if variable somevar is greater than 0. + {% endif %} + +``<=`` operator +^^^^^^^^^^^^^^^ + +Less than or equal to. Example:: + + {% if somevar <= 100 %} + This appears if variable somevar is less than 100 or equal to 100. + {% endif %} + +``>=`` operator +^^^^^^^^^^^^^^^ + +Greater than or equal to. Example:: + + {% if somevar >= 1 %} + This appears if variable somevar is greater than 1 or equal to 1. + {% endif %} + +``in`` operator +^^^^^^^^^^^^^^^ + +Contained within. This operator is supported by many Python containers to test +whether the given value is in the container. The following are some examples of +how ``x in y`` will be interpreted:: + + {% if "bc" in "abcdef" %} + This appears since "bc" is a substring of "abcdef" + {% endif %} + + {% if "hello" in greetings %} + If greetings is a list or set, one element of which is the string + "hello", this will appear. + {% endif %} + + {% if user in users %} + If users is a QuerySet, this will appear if user is an + instance that belongs to the QuerySet. + {% endif %} + + +The comparison operators cannot be 'chained' like in Python or in mathematical +notation. For example, instead of using:: + + {% if a > b > c %} (WRONG) + +you should use:: + + {% if a > b and b > c %} + + +Filters +^^^^^^^ + +You can also use filters in the ``if`` expression. For example:: + + {% if messages|length >= 100 %} + You have lots of messages today! + {% endif %} + +Complex expressions +^^^^^^^^^^^^^^^^^^^ + +All of the above can be combined to form complex expressions. For such +expressions, it can be important to know how the operators are grouped when the +expression is evaluated - that is, the precedence rules. The precedence of the +operators, from lowest to highest, is as follows: + + * ``or`` + * ``and`` + * ``not`` + * ``in`` + * ``==``, ``!=``, ``<``, ``>``,``<=``, ``>=`` + +(This follows Python exactly). So, for example, the following complex if tag: + + {% if a == b or c == d and e %} + +...will be interpreted as: + +.. code-block:: python + + (a == b) or ((c == d) and e) + +If you need different precedence, you will need to use nested if tags. Sometimes +that is better for clarity anyway, for the sake of those who do not know the +precedence rules. + .. templatetag:: ifchanged @@ -427,6 +559,9 @@ ``False``. If you need to test if something is true or false, use the ``if`` tag instead. +.. versionadded:: 1.2 + An alternative to the ``ifequal`` tag is to use the :ttag:`if` tag and the ``==`` operator. + .. templatetag:: ifnotequal ifnotequal @@ -434,6 +569,9 @@ Just like ``ifequal``, except it tests that the two arguments are not equal. +.. versionadded:: 1.2 + An alternative to the ``ifnotequal`` tag is to use the :ttag:`if` tag and the ``!=`` operator. + .. templatetag:: include include diff -r 70e75e8cd224 docs/releases/1.2.txt --- a/docs/releases/1.2.txt Thu Dec 03 15:11:14 2009 +0000 +++ b/docs/releases/1.2.txt Sun Dec 06 01:04:04 2009 +0000 @@ -42,6 +42,15 @@ * All of the CSRF has moved from contrib to core (with backwards compatible imports in the old locations, which are deprecated). +:ttag:`if` tag changes +---------------------- + +Due to new features in the :ttag:`if` template tag, it no longer accepts 'and', +'or' and 'not' as valid **variable** names. Previously that worked in some +cases even though these strings were normally treated as keywords. Now, the +keyword status is always enforced, and template code like ``{% if not %}`` or +``{% if and %}`` will throw a TemplateSyntaxError. + ``LazyObject`` -------------- @@ -155,3 +164,36 @@ :ref:`memory` - you can even configure all e-mail to be :ref:`thrown away`. +'Smart' if tag +-------------- + +The :ttag:`if` tag has been upgraded to be much more powerful. First, support +for comparison operators has been added. No longer will you have to type: + +.. code-block:: html+django + + {% ifnotequal a b %} + ... + {% endifnotequal %} + +...as you can now do: + +.. code-block:: html+django + + {% if a != b %} + ... + {% endif %} + +The operators supported are ``==``, ``!=``, ``<``, ``>``, ``<=``, ``>=`` and +``in``, all of which work like the Python operators, in addition to ``and``, +``or`` and ``not`` which were already supported. + +Also, filters may now be used in the ``if`` expression. For example: + +.. code-block:: html+django + + {{ message }} # diff -r 70e75e8cd224 docs/topics/templates.txt --- a/docs/topics/templates.txt Thu Dec 03 15:11:14 2009 +0000 +++ b/docs/topics/templates.txt Sun Dec 06 01:04:04 2009 +0000 @@ -187,8 +187,8 @@ {{ athletename }} {% endfor %} - - :ttag:`if` and :ttag:`else` + + :ttag:`if` and ``else`` Evaluates a variable, and if that variable is "true" the contents of the block are displayed:: @@ -200,20 +200,15 @@ In the above, if ``athlete_list`` is not empty, the number of athletes will be displayed by the ``{{ athlete_list|length }}`` variable. - - :ttag:`ifequal` and :ttag:`ifnotequal` - Display some contents if two arguments are or are not equal. For example:: - {% ifequal athletename coachname %} - ... - {% endifequal %} + You can also use filters and various operators in the ``if`` tag:: - Or:: + {% if athlete_list|length > 1 %} + Team: {% for athlete in athlete_list %} ... {% endfor %} + {% else %} + Athlete: {{ athlete_list.0name }} + {% endif %} - {% ifnotequal athletename "Joe" %} - ... - {% endifnotequal %} - :ttag:`block` and :ttag:`extends` Set up `template inheritance`_ (see below), a powerful way of cutting down on "boilerplate" in templates. diff -r 70e75e8cd224 tests/regressiontests/templates/smartif.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/regressiontests/templates/smartif.py Sun Dec 06 01:04:04 2009 +0000 @@ -0,0 +1,46 @@ +import unittest +from django.template.smartif import IfParser, Literal + +class SmartIfTests(unittest.TestCase): + + def assertCalcEqual(self, expected, tokens): + self.assertEqual(expected, IfParser(tokens).parse().resolve({})) + + # We only test things here that are difficult to test elsewhere + # Many other tests are found in the main tests for builtin template tags + # Test parsing via the printed parse tree + def test_not(self): + var = IfParser(["not", False]).parse() + self.assertEqual("(not (literal False))", repr(var)) + self.assert_(var.resolve({})) + + self.assertFalse(IfParser(["not", True]).parse().resolve({})) + + def test_or(self): + var = IfParser([True, "or", False]).parse() + self.assertEqual("(or (literal True) (literal False))", repr(var)) + self.assert_(var.resolve({})) + + def test_in(self): + list_ = [1,2,3] + self.assertCalcEqual(True, [1, 'in', list_]) + self.assertCalcEqual(False, [1, 'in', None]) + self.assertCalcEqual(False, [None, 'in', list_]) + + def test_precedence(self): + # (False and False) or True == True <- we want this one, like Python + # False and (False or True) == False + self.assertCalcEqual(True, [False, 'and', False, 'or', True]) + + # True or (False and False) == True <- we want this one, like Python + # (True or False) and False == False + self.assertCalcEqual(True, [True, 'or', False, 'and', False]) + + # (1 or 1) == 2 -> False + # 1 or (1 == 2) -> True <- we want this one + self.assertCalcEqual(True, [1, 'or', 1, '==', 2]) + + self.assertCalcEqual(True, [True, '==', True, 'or', True, '==', False]) + + self.assertEqual("(or (and (== (literal 1) (literal 2)) (literal 3)) (literal 4))", + repr(IfParser([1, '==', 2, 'and', 3, 'or', 4]).parse())) diff -r 70e75e8cd224 tests/regressiontests/templates/tests.py --- a/tests/regressiontests/templates/tests.py Thu Dec 03 15:11:14 2009 +0000 +++ b/tests/regressiontests/templates/tests.py Sun Dec 06 01:04:04 2009 +0000 @@ -24,6 +24,7 @@ from custom import custom_filters from parser import filter_parsing, variable_parsing from unicode import unicode_tests +from smartif import * try: from loaders import * @@ -534,6 +535,27 @@ 'if-tag02': ("{% if foo %}yes{% else %}no{% endif %}", {"foo": False}, "no"), 'if-tag03': ("{% if foo %}yes{% else %}no{% endif %}", {}, "no"), + # Filters + 'if-tag-filter01': ("{% if foo|length == 5 %}yes{% else %}no{% endif %}", {'foo': 'abcde'}, "yes"), + 'if-tag-filter02': ("{% if foo|upper == 'ABC' %}yes{% else %}no{% endif %}", {}, "no"), + + # Equality + 'if-tag-eq01': ("{% if foo == bar %}yes{% else %}no{% endif %}", {}, "yes"), + 'if-tag-eq02': ("{% if foo == bar %}yes{% else %}no{% endif %}", {'foo': 1}, "no"), + 'if-tag-eq03': ("{% if foo == bar %}yes{% else %}no{% endif %}", {'foo': 1, 'bar': 1}, "yes"), + 'if-tag-eq04': ("{% if foo == bar %}yes{% else %}no{% endif %}", {'foo': 1, 'bar': 2}, "no"), + 'if-tag-eq05': ("{% if foo == '' %}yes{% else %}no{% endif %}", {}, "no"), + + # Comparison + 'if-tag-gt-01': ("{% if 2 > 1 %}yes{% else %}no{% endif %}", {}, "yes"), + 'if-tag-gt-02': ("{% if 1 > 1 %}yes{% else %}no{% endif %}", {}, "no"), + 'if-tag-gte-01': ("{% if 1 >= 1 %}yes{% else %}no{% endif %}", {}, "yes"), + 'if-tag-gte-02': ("{% if 1 >= 2 %}yes{% else %}no{% endif %}", {}, "no"), + 'if-tag-lt-01': ("{% if 1 < 2 %}yes{% else %}no{% endif %}", {}, "yes"), + 'if-tag-lt-02': ("{% if 1 < 1 %}yes{% else %}no{% endif %}", {}, "no"), + 'if-tag-lte-01': ("{% if 1 <= 1 %}yes{% else %}no{% endif %}", {}, "yes"), + 'if-tag-lte-02': ("{% if 2 <= 1 %}yes{% else %}no{% endif %}", {}, "no"), + # AND 'if-tag-and01': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'yes'), 'if-tag-and02': ("{% if foo and bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': False}, 'no'), @@ -554,14 +576,13 @@ 'if-tag-or07': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'foo': True}, 'yes'), 'if-tag-or08': ("{% if foo or bar %}yes{% else %}no{% endif %}", {'bar': True}, 'yes'), - # TODO: multiple ORs + # multiple ORs + 'if-tag-or09': ("{% if foo or bar or baz %}yes{% else %}no{% endif %}", {'baz': True}, 'yes'), # NOT 'if-tag-not01': ("{% if not foo %}no{% else %}yes{% endif %}", {'foo': True}, 'yes'), - 'if-tag-not02': ("{% if not %}yes{% else %}no{% endif %}", {'foo': True}, 'no'), - 'if-tag-not03': ("{% if not %}yes{% else %}no{% endif %}", {'not': True}, 'yes'), - 'if-tag-not04': ("{% if not not %}no{% else %}yes{% endif %}", {'not': True}, 'yes'), - 'if-tag-not05': ("{% if not not %}no{% else %}yes{% endif %}", {}, 'no'), + 'if-tag-not02': ("{% if not not foo %}no{% else %}yes{% endif %}", {'foo': True}, 'no'), + # not03 to not05 removed, now TemplateSyntaxErrors 'if-tag-not06': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {}, 'no'), 'if-tag-not07': ("{% if foo and not bar %}yes{% else %}no{% endif %}", {'foo': True, 'bar': True}, 'no'), @@ -599,12 +620,21 @@ 'if-tag-not34': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': True}, 'yes'), 'if-tag-not35': ("{% if not foo or not bar %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, 'yes'), - # AND and OR raises a TemplateSyntaxError - 'if-tag-error01': ("{% if foo or bar and baz %}yes{% else %}no{% endif %}", {'foo': False, 'bar': False}, template.TemplateSyntaxError), + # Various syntax errors + 'if-tag-error01': ("{% if %}yes{% endif %}", {}, template.TemplateSyntaxError), 'if-tag-error02': ("{% if foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError), 'if-tag-error03': ("{% if foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError), 'if-tag-error04': ("{% if not foo and %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError), 'if-tag-error05': ("{% if not foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError), + 'if-tag-error06': ("{% if abc def %}yes{% endif %}", {}, template.TemplateSyntaxError), + 'if-tag-error07': ("{% if not %}yes{% endif %}", {}, template.TemplateSyntaxError), + 'if-tag-error08': ("{% if and %}yes{% endif %}", {}, template.TemplateSyntaxError), + 'if-tag-error09': ("{% if or %}yes{% endif %}", {}, template.TemplateSyntaxError), + 'if-tag-error10': ("{% if == %}yes{% endif %}", {}, template.TemplateSyntaxError), + 'if-tag-error11': ("{% if 1 == %}yes{% endif %}", {}, template.TemplateSyntaxError), + 'if-tag-error12': ("{% if a not b %}yes{% endif %}", {}, template.TemplateSyntaxError), + + # Additional, more precise parsing tests are in SmartIfTests ### IFCHANGED TAG ######################################################### 'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,2,3)}, '123'), On Mon, Jan 19, 2009 at 01:39:51PM +0000, Daniel P. Berrange wrote: + vm->stdout_fd = vm->stderr_fd = vm->logfile; If nothing is actaully using the stdout/err FDs anymore we can just leave them at -1. Fixed in the attached patch. -- Guido From 88002890116720af5dc4c331af6c2b7e90670639 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?Guido=20G=C3=BCnther?= < ag ... @ > Date: Sun, 18 Jan 2009 19:15:21 +0100 Subject: [PATCH] read saved vm status on libvirtd startup and connect back to running vms changes since last time: * reconnect: don't use stdin_fd, stdout_fd anymore --- src/qemu_driver.c | 110 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 94 insertions(+), 16 deletions(-) diff --git a/src/qemu_driver.c b/src/qemu_driver.c index deffb3f..cde65a9 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -297,6 +297,84 @@ cleanup: } +static int qemudOpenMonitor(virConnectPtr conn, + struct qemud_driver* driver, + virDomainObjPtr vm, + const char *monitor, + int reconnect); + +/** + * qemudReconnectVMs + * + * Reconnect running vms to the daemon process + */ +static int +qemudReconnectVMs(struct qemud_driver *driver) +{ + int i; + + for (i = 0 ; i < driver->domains.count ; i++) { + virDomainObjPtr vm = driver->domains.objs[i]; + qemudDomainStatusPtr status = NULL; + char *config = NULL; + int rc; + + virDomainObjLock(vm); + if ((rc = virFileReadPid(driver->stateDir, vm->def->name, &vm->pid)) == 0) + DEBUG("Found pid %d for '%s'", vm->pid, vm->def->name); + else + goto next; + + if ((config = virDomainConfigFile(NULL, + driver->stateDir, + vm->def->name)) == NULL) { + qemudLog(QEMUD_ERR, _("Failed to read domain status for %s\n"), + vm->def->name); + goto next_error; + } + + status = qemudDomainStatusParseFile(NULL, driver->caps, config, 0); + if (status) { + vm->newDef = vm->def; + vm->def = status->def; + } else { + qemudLog(QEMUD_ERR, _("Failed to parse domain status for %s\n"), + vm->def->name); + goto next_error; + } + + if ((rc = qemudOpenMonitor(NULL, driver, vm, status->monitorpath, 1)) != 0) { + qemudLog(QEMUD_ERR, _("Failed to reconnect monitor for %s: %d\n"), + vm->def->name, rc); + goto next_error; + } else + vm->monitorpath = status->monitorpath; + + if((vm->logfile = qemudLogFD(NULL, driver->logDir, vm->def->name)) < 0) + return -1; + + if (vm->def->id >= driver->nextvmid) + driver->nextvmid = vm->def->id + 1; + + vm->state = status->state; + goto next; + +next_error: + /* we failed to reconnect the vm so remove it's traces */ + vm->def->id = -1; + qemudRemoveDomainStatus(NULL, driver, vm); + virDomainDefFree(vm->def); + vm->def = vm->newDef; + vm->newDef = NULL; +next: + virDomainObjUnlock(vm); + VIR_FREE(status); + VIR_FREE(config); + } + return 0; +} + + /** * qemudStartup: * @@ -396,6 +474,7 @@ qemudStartup(void) { qemu_driver->autostartDir, NULL, NULL) < 0) goto error; + qemudReconnectVMs(qemu_driver); qemudAutostartConfigs(qemu_driver); qemuDriverUnlock(qemu_driver); @@ -488,7 +567,6 @@ qemudActive(void) { */ static int qemudShutdown(void) { - unsigned int i; if (!qemu_driver) return -1; @@ -496,15 +574,6 @@ qemudShutdown(void) { qemuDriverLock(qemu_driver); virCapabilitiesFree(qemu_driver->caps); - /* shutdown active VMs */ - for (i = 0 ; i < qemu_driver->domains.count ; i++) { - virDomainObjPtr dom = qemu_driver->domains.objs[i]; - virDomainObjLock(dom); - if (virDomainIsActive(dom)) - qemudShutdownVMDaemon(NULL, qemu_driver, dom); - virDomainObjUnlock(dom); - } - virDomainObjListFree(&qemu_driver->domains); VIR_FREE(qemu_driver->logDir); @@ -621,7 +690,8 @@ qemudCheckMonitorPrompt(virConnectPtr conn ATTRIBUTE_UNUSED, static int qemudOpenMonitor(virConnectPtr conn, struct qemud_driver* driver, virDomainObjPtr vm, - const char *monitor) { + const char *monitor, + int reconnect) { int monfd; char buf[1024]; int ret = -1; @@ -642,11 +712,19 @@ static int qemudOpenMonitor(virConnectPtr conn, goto error; } - ret = qemudReadMonitorOutput(conn, - vm, monfd, - buf, sizeof(buf), - qemudCheckMonitorPrompt, - "monitor", 10000); + if (!reconnect) { + ret = qemudReadMonitorOutput(conn, + vm, monfd, + buf, sizeof(buf), + qemudCheckMonitorPrompt, + "monitor", 10000); + } else { + vm->monitor = monfd; + ret = 0; + } + + if (ret != 0) + goto error; if (!(vm->monitorpath = strdup(monitor))) { qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, -- 1.6.0.6 -- Libvir-list mailing list Libv ... @ Hi everyone I'm looking for some inspiration because I am drawing a complete blank! A few years ago I set up my company's squid boxes - a pair of servers both identically configured and using LDAP authentication against an Active Directory domain. It took quite some time to get it all working properly but eventually it all got going and ran smoothly. I then left the company for a spell and now find myself back and detailed with rebuilding the squid servers onto newer boxes because the hardware is a little long in the tooth and now the software is too - the original servers were on RHEL 3 boxes and the subscriptions to get updates were never renewed. One of the servers failed and has been replaced with a newer box which I have built, as instructed, with CentOS 5. All seems okay but when I transplant the config file from the (now very hard-working) live machine I am getting an LDAP error with the lookup. Clearly I either missed installing something fundamental when I built the server (the idiot scenario) or something has changed syntactically with the options but I have searched diligently through the man pages and can't find any reason why what did work no longer works. Here is the line from squid.conf working on the live box (2.5.STABLE3): auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=cs-plc,dc=salvesen,dc=com" -D "cn=Ldap User,ou=users,ou=ND House (slh / wel),ou=UK,dc=cs-plc,dc=salvesen,dc=com" -w (password) -f "(&(sAMAccountName=%s)(memberOf=CN=InternetUsers,OU=Groups,OU=ND House (slh / wel),OU=UK,DC=cs-plc,DC=salvesen,DC=com))" -h 10.1.2.1 -p 3268 The new box where this doesn't work is at 2.6.STABLE6. Attempts to authenticate result in the logfile showing: squid_ldap_auth: WARNING, LDAP search error 'Bad search filter' Has anybody got any insight? At present I've cut back the filter to -f "sAMAccountName=%s" which is at least forcing authentication but not checking the group membership. Ian Large Please consider your environmental responsibility: Before printing this e-mail or any other document, ask yourself whether you need a hard copy. -------------------------------------------------------------------------------- For information on Norbert Dentressangle visit our website at . The information contained in this e-mail is strictly confidential and for the use of the addressee only; it may also be legally privileged and / or price sensitive. Notice is hereby given that any disclosure, use or copying of the information by anyone other than the intended recipient is prohibited and may be illegal. If you have received this message in error, please notify the sender immediately by return e-mail. We have taken every reasonable precaution to ensure that any attachment to this e-mail has been swept for viruses. However, we cannot accept liability for any damage sustained as a result of software viruses and would advise that you carry out your own virus checks before opening any attachment. Groupe Norbert Dentressangle SA (RCS Romans 309 645 539 00037) is the ultimate holding company within the Norbert Dentressangle group of companies, whose registered office is at Les Pierrelles BP98 - Beausemblant 26241 Saint-Vallier-sur-Rhone Cedex, France. On Friday, January 1, 2010, Diego Moya wrote: Ok, now I've installed it and used it to play some MIDI files. Some comments: - First, my usage for a MIDI tool like this is as a media player - I won't use it to control MIDI instruments, just to play MIDI files. Totem can do this, but it doesn't give control over pitch, tempo or individual channels. KMID2 can be a good alternative for these use cases. Yes, this is a good point, and there is a recent post of A.Seigo [1] about general audience vs. advanced audience. KMid2 is intended for advanced audiences, wanting to control the MIDI rendering details. Probably using it as a tool for studying music, or learning songs, or something like that. KMid can be used as a simple player for general audience, of course. But in this case, I would prefer to add a good MIDI rendering feature to Phonon backends, using Amarok as the player frontend. This is the approach of Totem, using the timidity ugly (or evil, I don't remember) plugin for GStreamer. You can also try the VLC player and VLC Phonon backend: it can be optionally compiled linking the fluidsynth library providing good MIDI rendering to VLC. - Said that, the setup can be a bit too hard. Both MIDI devices at my Ubuntu 9.10 box recommended at startup (Midi Through:0 and OSS sequencer:0) produce no sound - I couldn't play any music until I installed Timidity through a different software channel, I would like to complain towards your distribution, starting the ALSA sequencer with those two clients activated by default. They can be disabled at ALSA compile time, or even better: installed without activating them until the user requests the functionality. Midi Through is a very advanced function, that most people will never need at all (I seldom use it). The OSS sequencer emulation is only useful for people using hardware MIDI ports with ancient OSS MIDI software, uncommon these days. I've blogged recently about this: MIDI on Linux is not easy [2]. At least, you could install and setup TiMidity. and changed it through Settings -> Configure Shortcuts -> Configure Toolbars -> Configure kmid2-> MIDI (a really hard to find option). This would be a showstopper for a "naive" user. Yes, I agree. I will try to explain it in the initial connections dialog, as you already suggested. I could filter the list of MIDI ports in the initial dialog, discarding the more advanced ones (and perhaps adding a switch in the configuration dialog for the people who needs them). What do you think? KMID2 would benefit from a tighter integration with a MIDI player (for example having Timidity linked by default with KMID2 in the installation package) and having it configured by default to play sound. The "select MIDI device at startup" scenario has no place in a usable application - things should "just work". Of course all this would be easier to program if KMid2 was already integrated in a Linux distro. I don't know if you have tried VanBasco in Windows, and after that in your Linux distro (with the help of Wine, of course). This would probably show you an interesting perspective. And yes, in windows it "just works". Timidity has a very weird architecture, and it is not very actively maintained (the last release was in 2004). It is a monolithic program, that loads the GUI interfaces as plugins. This makes it hard to integrate it into another program. It expects that other programs integrate under its own rules. But the good news is that there is another soft synth: FluidSynth. It is actively maintained: last release was two weeks ago. It is a dynamic library, that makes it easy to integrate on different programs. It has several bindings and interfaces: CLI program, QSynth based on Qt4, and several others. It is modular and multiplatform. My plan is to make a KMid backend based on this library, for several operating systems, without losing any functionality. This is already in the TODO list. But returning again to the advanced audience: users of hardware external synths, common among musicians and aficionados probably want support for their equipment instead of soft synths. This is already done for Linux, but it requires native MIDI backends for Windows and Mac OSX, which are also in my TODO list. - Music reproduction works fine, but I couldn't figure out how to use the "karaoke" functions. There's a difficulty - conceptually, music and lyrics are a single thing (a song) but they're handled through different files: a MID file for the sound, and a txt for the lyrics. No. For MP3 and other digital audio formats, that is true: two files, one with the music and another file providing the lyrics. Karaoke files (*.kar) have the lyrics included, embedded into the file. There are four .kar files included in the source KMid2 tarball. MIDI files (*.mid) may have lyrics or not. The two examples included in the KMid2 distribution ( and installed, maybe in /usr/share/kde4/apps/kmid2 ) have lyrics, but this is an optional feature of the MIDI files, ignored by many authors. There should be a way to show that distinction. At least, if there's no text present then the "text encoding" and "save lyrics" options should be disabled to avoid confusion. Added to my TODO list, thanks! I don't know whether mid files can have text integrated or if it's always a separate file. Anyway, I found at the web a .mid file that didn't have words included but the same webpage displayed the lyrics. I tried to copy that text into the application and synchronize it, but I couldn't find out how this could be done. No, this can't be done. It is required a MIDI editor like Rosegarden to modify the MIDI file and include the lyrics at the right times. You usually need to transcribe a sheet music reference. [1] [2] Regards, Pedro _______________________________________________ kde-usability mailing list kde- ... @

Thursday, June 3, 2010

arbcombo -- Save the date for a Public Workshop on Cost Containment and Offsets in the California Greenhouse Gas Cap-and-Trade Program

Please save the date for a public meeting on June 22, 2010, to
discuss cost containment and offsets in a California
cap-and-trade program.

On June 22, 2010, the staff of the Air Resources Board and the
Nicholas Institute for Environmental Policy Solutions at Duke
University will host a public meeting to discuss cost
containment, including offsets and other mechanisms, in a
California cap-and-trade program. Materials and additional
information will be available at:
http://www.arb.ca.gov/cc/capandtrade/meetings/meetings.htm

DATE: Tuesday, June 22, 2010
TIME: 8:30 am - 5:00 pm
LOCATION: Building and Room TBD (Details will follow)
Sacramento, California

TENTATIVE AGENDA: Cost Containment--AM
Offsets--PM

More information can be found on the California Air Resources
Board's Cap-and-Trade website at:
http://www.arb.ca.gov/cc/capandtrade/capandtrade.htm

The meeting will be webcast with details to follow.

To join the cap-and-trade listserv please go to:
http://www.arb.ca.gov/listserv/listserv_ind.php?listname=capandtrade


You are receiving this single arbcombo email because you are a
subscriber to or have made a public comment to one or more of the
following lists: capandtrade, cc.

======================================================================
You are subscribed to one of the lists aggregated to make this
particular ARB combination listserve broadcast. To UNSUBSCRIBE:
Please go to http://www.arb.ca.gov/listserv/listserv.php and enter
your email address and click on the button "Display Email Lists."
To unsubscribe, please click inside the appropriate box to uncheck it
and go to the bottom of the screen to submit your request. You will
receive an automatic email message confirming that you have
successfully unsubscribed. Also, please read our listserve disclaimer
at http://www.arb.ca.gov/listserv/disclaim.htm .

The energy challenge facing California is real. Every Californian
needs to take immediate action to reduce energy consumption. For
a list of simple ways you can reduce demand and cut your energy
costs, visit the Flex Your Power website at www.fypower.org .
======================================================================

Learn to operate ultrasound equipment

Learn to operate ultrasound equipment
To stop further mailing, visit here or write:
PinpointMediaServices, 4255 E. Charleston Blvd. Suite D-345, Las Vegas, NV 89104
Wayne Its working for me. If that still fails you can try this instead: Thanks Paul Wayne Sheppard wrote: Downloads do not appear to be working this morning? -----Original Message----- From: esb- ... @ [mailto: esb- ... @ ] On Behalf Of Ruwan Linton Sent: Wednesday, December 24, 2008 5:11 AM To: WSO2 ESB User Mailing list; esb; carb ... @ Subject: [esb-java-user] [ANN] WSO2 ESB 2.0 beta2 released! The WSO2 ESB team is pleased to announce the release of version 2.0-beta2 of the Open Source Enterprise Service Bus (ESB). WSO2 ESB is a lightweight and easy-to-use Open Source Enterprise Service Bus (ESB) available under the Apache Software License v2.0. WSO2 ESB allows administrators to simply and easily configure message routing, intermediation, transformation, logging, task scheduling, etc.. The runtime has been designed to be completely asynchronous, non-blocking and streaming based on the Apache Synapse core. WSO2 ESB 2.0-beta2 is developed on top of the revolutionary Carbon platform (Middleware a la carte'), and is based on the OSGi framework to achieve the better modularity for your SOA architecture. This also contains a lots of new features and many other optional components to customize the behavior of the server. All these components Further, if you do not want any of the built in features, you can uninstall those features without any trouble. In other words, this ESB can be customized to your SOA needs. You can download this distribution from [1] and give it a try. _*How to Run*_ 1. Extract the downloaded zip 2. Go to the bin directory in the extracted folder 3. Run the wso2server.sh or wso2server.bat as appropriate 4. Point you browser to the URL 5. Use "admin", "admin" as the username and password to login as an admin and create a user account. 6. Assign the required permissions to the user through a role 7. If you need to start the OSGi console with the server use the property -DosgiConsole when starting the server 8. Samples configurations can be specified by passing the property -Desb.sample=${SAMPLE_NUMBER} _*New Features of this release includes;*_ 1. Based on the OSGi based WSO2 Carbon platform. This is a unification of all Java based products from WSO2. 2. Enhanced fully internationalized User Interface 3. Separable frontend & backend - a single frontend server can be used to administer several cluster of backend servers 4. EDA support with WS-Eventing 5. Graphical user management, role management and user permissions 6. Graphical keystore management support 7. Graphical data sources editor for the DB mediators 8. Graphical event sources editor 9. Transport management 10. Enhanced integrated registry 11. Enhanced statistics, tracing and logging support 12. Server management integrated to the user interface (Graceful Shutdown/Restart) 13. Enhanced task, proxy service sequence and endpoint editors 14. Try-It tool integrated to the user interface 15. Now you can optionally have features from the web service application server WSO2 WSAS and BPEL running on your ESB instance seamlessly integrated onto ESB. All the known issues has been reported to [2], and you are more than welcome to report any issues to shape up the final release. [1] - [2] - Thanks, The WSO2 ESB Team. _______________________________________________ Esb-java-user mailing list Esb- ... @ _______________________________________________ Esb-java-user mailing list Esb- ... @ -- Paul Fremantle CTO and Co-Founder, WSO2 OASIS WS-RX TC Co-chair VP, Apache Synapse Office: +44 844 484 8143 Cell: +44 798 447 4618 blog: pa ... @ "Oxygenating the Web Service Platform", _______________________________________________ Carbon -dev mailing list Carb ... @

cc -- Presentations posted from the June 2 - California Carbon Capture and Storage Review Panel Meeting

Presentations from the June 2, 2010, California Carbon Capture
and Storage Review Panel Meeting are now available on the
California Climate Change Portal website.

For more information:
http://www.climatechange.ca.gov/carbon_capture_review_panel/meetings/


======================================================================
You are subscribed to the cc mailing list. To UNSUBSCRIBE:
Please go to http://www.arb.ca.gov/listserv/listserv.php and enter
your email address and click on the button "Display Email Lists."
To unsubscribe, please click inside the appropriate box to uncheck it
and go to the bottom of the screen to submit your request. You will
receive an automatic email message confirming that you have
successfully unsubscribed. Also, please read our listserve disclaimer
at http://www.arb.ca.gov/listserv/disclaim.htm .

The energy challenge facing California is real. Every Californian
needs to take immediate action to reduce energy consumption. For
a list of simple ways you can reduce demand and cut your energy
costs, see our website at www.arb.ca.gov.
======================================================================

arbcombo -- Public Workshops to Discuss Off-Road, Truck and Bus, and Tractor-Trailer GHG Regulation Amendments

The California Air Resources Board (ARB) invites you to plan to
participate in a series of public workshops to discuss proposed
amendments to the Regulation for In-Use Off-Road Diesel Fueled
Fleets (off-road regulation), the In-Use Heavy-Duty Diesel-Fueled
Vehicles Regulation (truck and bus regulation), and the
Heavy-Duty Vehicle Greenhouse Gas Emission Reduction Regulation
(tractor-trailer GHG regulation).

The workshops will be held on the following dates at the
following locations:
June 23, 2010, Fresno;
June 28, 2010, Sacramento;
July 1, 2010, El Monte; and
July 6, 2010, San Diego.

The Sacramento workshop will be webcast, and live video feed has
been setup for alternative locations to telecast the Fresno
workshop. ARB staff plans to present the same information at
each of these four workshops.

For more information on these workshops, including times and
locations, please see the workshop notice which is available at:
http://www.arb.ca.gov/msprog/onrdiesel/workshops.htm

In May of 2010, staff held a series of three workshops to
discuss general proposals to amend the off-road regulation and
truck and bus regulation and the emission inventories underlying
both regulations.

This next set of workshops will provide further detail regarding
proposed amendments to the off-road regulation and the truck and
bus regulation and an update on the emission inventories. At
each workshop, staff will also discuss proposed amendments to the
tractor-trailer GHG regulation to allow additional flexibility in
meeting the GHG reduction goals of the regulation and to clarify
requirements.

For general information on the off-road, truck and bus, or
tractor-trailer GHG regulations, please contact ARB's Diesel
Hotline at 866-6DIESEL (866-634-3735), or by email at
8666DIESEL@arb.ca.gov.


You are receiving this single arbcombo email because you are a
subscriber to or have made a public comment to one or more of the
following lists: hdghg, onrdiesel, ordiesel.

======================================================================
You are subscribed to one of the lists aggregated to make this
particular ARB combination listserve broadcast. To UNSUBSCRIBE:
Please go to http://www.arb.ca.gov/listserv/listserv.php and enter
your email address and click on the button "Display Email Lists."
To unsubscribe, please click inside the appropriate box to uncheck it
and go to the bottom of the screen to submit your request. You will
receive an automatic email message confirming that you have
successfully unsubscribed. Also, please read our listserve disclaimer
at http://www.arb.ca.gov/listserv/disclaim.htm .

The energy challenge facing California is real. Every Californian
needs to take immediate action to reduce energy consumption. For
a list of simple ways you can reduce demand and cut your energy
costs, visit the Flex Your Power website at www.fypower.org .
======================================================================

Wednesday, June 2, 2010

Save on Trusted Brands

Avoid Retail Markup
If you don't want to receive any more information from us, please visit here to unsubscribe. you may also write to use at DirectBuy, PO Box 1572, Boulder, CO 80306
To stop further mailing, visit here or write:
SupOffers, 9 Retail Road, Ste 8-402, Dayton, NV 89403
After rereading document 3 times in the last 4 days here is my version of the outline . I was cutting and pasting, so chapters and page numbers and irrelevant The information contained in this communication may be CONFIDENTIAL and is intended only for the use of the recipient(s) named above. If you are not the intended recipient, you are hereby notified that any dissemination, distribution, or copying of this communication, or any of its contents, is strictly prohibited. If you have received this communication in error, please notify the sender and delete/destroy the original message and any copy of it from your computer or paper files. --------------------------------------------------------------------- To unsubscribe from this mail list, you must leave the OASIS TC that generates this mail. Follow this link to all your TCs in OASIS at: Signed-off-by: Joel Holdsworth < jo ... @ > --- programs /taskmgr/Makefile.in | 3 + programs /taskmgr/taskmgr.ico | Bin 1078 -> 25214 bytes programs /taskmgr/taskmgr.svg | 269 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 272 insertions(+), 0 deletions(-) create mode 100644 programs /taskmgr/taskmgr.svg diff --git a/ programs /taskmgr/Makefile.in b/ programs /taskmgr/Makefile.in index 6e6a761..58ea4bd 100644 --- a/ programs /taskmgr/Makefile.in +++ b/ programs /taskmgr/Makefile.in @@ -48,4 +48,7 @@ RC_SRCS = \ Zh.rc \ taskmgr.rc +SVG_SRCS = \ + taskmgr.svg + @MAKE_PROG_RULES@ diff --git a/ programs /taskmgr/taskmgr.ico b/ programs /taskmgr/taskmgr.ico index 727ad7be44d6829f5f1dae2807cbbfeb2842c35c..82b86d50ed3c589739f9e5b95923d587fd692e0f 100644 GIT binary patch literal 25214 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 literal 1078 zcmcIjJ5Izf5PiuaB}##F15&|i&p^SE(%Ib(G;v2s8>K=tdxac@k}{&ncIJ(pNGTQx zt;Fm;&pgj3lZg#v$k8-4RK9ZHp1Q6R-)F$>4%l>}3%;=@ChaD@}~! zNUe?#{|G@Xf%CI)u2ah=cjBU+B+*~`B;1zp=r^& zTfTAq!CV^IC>+N}+=;T$p%mn57Dlp;9 f#( + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Am 11.02.2010 21:58, schrieb Matt Riddell: On 12/02/10 8:10 AM, Tilghman Lesher wrote: It is however reasonable to expect php to protect itself and it does. No variable or array element can cause code to be injected in php. I wonder whether the php team would issue a best practice document if it was found that, when passed to a function, a string containing for example: mystring");exec("poweroff"); caused the host to poweroff . I am hopeful that they would issue a security alert with mitigation advice but that they would also fix php. On the contrary, this is more akin to a PHP programmer including input text from a random user on his page, without defanging any potential embedded Javascript. This is not a vulnerability that the PHP language can fix, but the PHP programmer is responsible for taking action. I'd much rather see '&' being disallowed in a request by default with an option to allow it. I wonder why anybody talkes about & only. What about , | / ... Isn't it that all characters which are used by Asterisk commands or functions are potentially harmful? In this case all such characters which are used by Asterisk apps/funcs needs to be escaped. For external applications (SQL, exec, AGI ...) the script writer has to take itself. regards klaus The problem is recoding thousands of lines of dialplan code. The other option would be a switch in asterisk.conf which changes the wildcard to only match a-z, A-Z, 0-9. That way you could mitigate most issues straight away with a one line change, and those people who need to accept $#%^%$^@ could deal with the FILTER function. Although this has always been here, it seems to me to be the same as a newly introduced feature (discovered). If one were to add a feature to 1.4 that required everyone to rewrite their dialplan it would be frowned upon. If it was a feature, surely it would be suggested that the one line change, defaulting to on in asterisk.conf would be preferred. -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: Thanks for the reply. Here is my code if it can help anybody else. # public class Home extends WebPage { static private ButtonTemplate s_buttonTemplate = new VistafarianButton(); public Home() { Image myImage = ButtonResource.getImage("switButtonImage", s_buttonTemplate, "Swit Button"); Link switTestButton = new Link("switTestButton") { @Override public void onClick() { setResponsePage(new SwitTest("")); } }; switTestButton.add(myImage); add(switTestButton); } } rrmlwt wrote: rmattler wrote: It is not clear to me how you add the onClick event to the button since the ButtonResource is an image. Anybody want to point that out to me. You have to use a standard html image or button, and associate it to the ResourceReference+ValueMap provided by the ButtonResource class. For instance, to create an ImageButton: Html: Java: new ImageButton("submit", ButtonResource.getReference(), ButtonResource.getValueMap(buttonTemplate, "SOMETEXT")); For an image, it's exactly the same. Just put the image in a link tag and that's it. Rodrigo --------------------------------------------------------------------- To unsubscribe, e-mail: user ... @ For additional commands, e-mail: user ... @ -- View this message in context: Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user ... @ For additional commands, e-mail: user ... @ On Fri, 2010-02-26 at 14:35 +0800, walt ... @ wrote: Hi, I'm seeking some technical assistance and John Terpstra kindly suggested that I should post my problem to this list. We operate a mixture of Apple X-Serves (Intel and G5) running OS X (10.6.x and 10.5.y), Windows 2003 servers and XP x32 and XP x64 client PCs (Mac Pros and MacBook Pros) in a domain environment. The X-Serves provide Directory Services (Open Directory Master), online storage X-SAN and domain services using Apple's samba build (3.0.28a-apple). We are in the *slow* process of migrating the servers to 2008R2 (x64) and the clients to Win 7 (x32 and x64). The immediate issue is making the 2008R2 server a domain member (I have) but I've uncovered what I believe is the "trust problem" addressed by samba 3.4.4 - SIDs aren't resolving back to their actual names. I relied upon to make the 2008R2 server a domain member. Apple's website provides a link to samba (source) which I'm attempting to compile so that I can use it on our X-Serves. I'm obviously missing something though and need assistance. Just to repeat this isn't a standalone instance of samba on OS X (I have found earlier references to running samba on older versions of OS X and on iPhones) as it must integrated with Apple's LDAP implantation which forms the basis of Open Directory serices. So, in short, you want to update the Samba on OSX from 3.0 to 3.5, while keeping it's hooks to Open Directory. Yes. Apple don't appear to be too punctual in updating their enclosed samba implementation. I have experienced an annoying range of other issues with Apple SAMBA that have well and truly been fixed in later samba releases. Example: (1) 64bit XP integration - Some users could log in but others could not. (2) Unable to see samba groups (as opposed to users) from XP computers which was required to apply permissions. It isn't trivial porting Apple's modified Samba 3.0 release to Samba 3.5, but it should be possible - I'm sure Apple has complied with their GPL obligations and all the tools you need are present. It will be hard work however, but if you do take it on, I'm sure you can post questions here about the details. The main task would be to adapt their passdb and auth modules to the later Samba releases. I don't think those interfaces have changed much, but it won't be just a matter of recompiling. I hope this helps, Andrew Bartlett -- Andrew Bartlett Authentication Developer, Samba Team Samba Developer, Cisco Inc. *************************************************************************************************** IMPORTANT: * This transmission is intended for the use of the addressee only and might contain sensitive or legally privileged information. If you are NOT the intended recipient, you are notified that any use or dissemination of this communication is strictly prohibited. If you receive this transmission in error, please notify the author immediately by telephone and delete all copies of this transmission together with any attachments. * The Australian Customs and Border Protection Service DOES NOT AUTHORISE the recipient to further disclose this email or its contents without permission of the originator. * Unsolicited commercial emails MUST NOT be forwarded to the originator of this transmission unless prior consent has been given. *************************************************************************************************** Brock, Please see inline. Brock Pytlik wrote: Tom Mueller (pkg- discuss ) wrote: Brock Pytlik wrote: Tom Mueller (pkg- discuss ) wrote: Brock, Please consider these comments of a more general nature (looks like Shawn got the detailed ones). Please change the API to be more object oriented: - The term "PkgClient" doesn't represent what the thing is that is being manipulated here. The object here is an Image. If a client is going to manipulate multiple images at the same time, it would need multiple of these objects, but there is still only one client. I agree. I'm open to better suggestions. I would suggest Image. Since we already have an Image, how about ImageInterface? We don't have a pkg.Image or a pkg.client.Image. The problem with ImageInterface is the same as having a module named "api". From the perspective of the user of an API, the API is all that there is. So using "Interface" or "api" in the names is redundant. - The PkgClient.describe method returns a PlanDescription, so it would seem that the thing being described in a "Plan" but there isn't any "Plan" object in the API. Why would there be a plan object in the API that the outside world should know about? You tell the API to make a plan. If you want to, you can ask for a description of what that plan will do (which gives the PlanDescription). Hiding the plan is one way we're refactoring the interfaces to present a consistent and simple interface to the client. If you can present an example where the client needs to modify the plan, I'd be very interested to hear it. A typical operation for a GUI is: - make a plan - get some information from the plan and query the user, e.g., -- confirm that the dependencies should be installed too? -- confirm the license? - execute the plan If the plan is a first class object in the interface, then the first step is an operation on the Image that returns a Plan, and then the remaining steps are operations on the Plan. In the internal API, these are separated into the Image object and the ImagePlan object. Merging all of this into a single class doesn't necessarily make things consistent and simple - it just makes a single class with more methods. And if a Plan is a first class object, then we when reimplement the plan, which a piece of code that changes fairly rapidly as we add backtracking, make evaluation less memory intensive and faster, etc..., then we have to carefully coordinate what we're doing with clients. Coordination is required only if the interface to the object changes. We can reimplement all we want inside any of the modules. And if adding backtracking, for example, is something that the client app needs to know about, then the interface is going to have to change anyway. So the existence of a Plan object, or any other object that the client really has to know about anyway, does really effect reimplementation. Everything you've described can be done currently with the API as it's written. All a client should need to know (at least this is my opinon until I'm given a convincing counterpoint) is which packages are changing, what way they're changing, and enough information about those packages to answer questions the user may have. I believe the API provides exactly that, and, if it's deficient, can be expanded. This is definitely a question of aesthetics. Just because it is possible with the API doesn't mean that it is simple and easy to understand for users and easy to extent when needed. I have yet to see a Python library that has a module called "api". Can you provide an example of another Python library that uses this pattern? As a counter-example, consider the CherryPy and PyOpenSSL libraries that we use. CherryPy exposes the cherrypy and cherrypy.wsgiserver modules as public interfaces. PyOpenSSL exposes the OpenSSL and OpenSSL.crypto modules. Even for a large Python system like mercurial, there is no "api" module. One just uses "from mercurial import hg" when writing an extension to mercurial. Please rename the "api" module to represent what interface is actually being used. I'd suggest "pkg.client.image", but that is already taken. ;-) Maybe these classes could be moved into pkg/client/__init__.py in such a way that a programmer would just do "import pkg.client". Is this an objection to the naming of "api.py"? yes. If so, I'd happily take suggestions. I'm mildly against moving things into __init__.py as I think it's a fairly python specific construction which provides a needless barrier to entry to others coming to use our code, something I'd suggest is something an API should avoid where possible. Moving it into __init__.py makes it so that the only interface the users need to know about is "import pkg.client". Seems pretty simple. I don't know why this would be a barrier to entry, assuming that there is appropriate documentation with the API. It's a barrier to entry because __init__.py exactly obviously a class module. It's certainly not the first place anyone would go looking for an api if they downloaded the gate. Why would anyone wanting to use the API download the gate? When you use any other python module, do you download the source code for that module? One of the primary parts of having an API is that it should be documented. We need to have python manual-like documentation for the pkg(5) API. If I'm a newbie to python, I'd go look for the client.py file in pkg directory, and immediately hit a brick wall, cause, wait, there's no file named that there. This something that python does that many languages don't (C, C++, Java, OCaml, I feel fairly certain don't have a similar, commonly used organization. With less certainly, I'd add scheme, ML, Perl and Prolog to that list.). It's the same reason I'd avoid having the API return generator functions for example. I believe we'd like the API to be accessible to programmers from all backgrounds, not just Python wizards. The solution to that is documentation. Also, the argument that others don't do this isn't, by itself tremendously convincing to me. Certainly, I'll take another look at how those programs are structured, but because CherryPy or PyOpenSSL do things one way doesn't mean it's the right way for us to do it. When I do something that is different from every other example I see, it's either because I've come up with something no one else has thought of, or it's because that thing has already been rejected by everyone else. For me, I usually assume it is the latter. Or it could be because we have a different set of requirements, uses, design, or beliefs in what good design/interface is. I also believe smart people can look at the same problem and come up with different solutions, each with different strengths and weaknesses. Choosing between is a matter of priority, not correctness. There is insufficient encapsulation in the API. - the PackageInfo object exposes version.DotSequence objects. Is that intentional? i.e., is version.DotSequence part of the external API? The decision about how to expose Fmris, Versions, and Dot sequencies hasn't been made yet. Mostly because I don't have a strong feeling yet about what the right answer is. As answer to this and many of your subsequent questions: this is an API in developement, really, an intermediate API. Things will change. Things that are exposed may become hidden, and things that are hidden may become exposed as I discover information insufficiencies in the API. (For example, refresh currently returns an actual image. It does this because, given the other functions implemented, there would be no way for the GUI to update it's information after a refresh without rereading from disk, something that seemed silly to do since that information was already in memory. So, for now, it returns the image, a clear violation of the spirit of the API, and something that will be changed once it's more fully functional.) I'm confused then. CR 3443 says that the purpose is to provide a "stable" API. But yet this is an intermediate API that is going to change. I understand that this has to be evolutionary, but it seems that there has to be a certain amount of stability before this is first used. My reason for bringing up these issues is that it doesn't seem this minimal level of stability is there yet. Ok, let me try to be as clear as I can be. When the API is done, it will be "stable" (note that I don't mean ARC "stable", I'm not sure which term would apply currently) which means that changes to it will be made carefully, in coordination with client code to prevent breakage. Once we've settled in with it, I would suggest we look at upgrading the interface to ARC "stable", once we're satisfied it meets the needs of clients. I could off and spent 2 months putting together an entire API. That didn't meet the time constraints provided. It didn't meed the need of getting the CLI and the GUI following the same code paths on critical operations. Lastly, it's entirely possible I would've come back and found out the API was deficient in ways I hadn't imagined. Creating this API is going to be a rolling process, as everything else we do on this project has been. Given this, the existing API (pkg.client.image.Image, etc.) is the most stable API that we have right now. It is certainly the most expedient means to achieve the desired result. - the PkgClient class requires a ProgressTracker object. So is this API making ProgressTracker a public interface? Also, if one wants to use different progress trackers for different operations, how does one do that? (for example, different progress trackers for loading the catalogs vs. making the install plan in the plan_install method.) Yes, as I've said previously in email here, the ProgressTracker is part of the API. Is there a document that lists what classes and methods are all part of the API, similar to what we see in the Python manual for each module? Nope, I've been more focused on actually making the thing work. But, the list, as I know it today, is everything in api.py, api_errors.py, progress.py, and bits and pieces of misc.py (which I hope to get removed eventually, but I lost that battle recently, and I'll focus on other things before returning to that issue again). and fmri.py and parts of version.py (DotSequence). I recommend making it a high priority to document this list. Can you present a use case for A) Why you'd want to switch progress trackers partway through an operation B) Why you couldn't just make your own hybrid of the progress tracker which does what you want it to? The updatetool GUI uses a QuietProgressTracker to load the catalogs and then uses a custom-defined progress tracker that implements a progress bar dialog for evaluating and executing the install plan. One could certainly implement a hybrid - that seems like a reasonable option. I'm also not opposed to adding a "set_progress_tracker" method, should it be desperately needed. [snip] All exceptions should return data that can be extracted by the client. VersionException and several others are good examples of this. But ProblematicPermissionsIndexException doesn't do this. What data would you like it to return? When I first read this, I didn't realize the "cause" is already available. So the data is the cause (with a clarification of what this is - it appears to be a string that is a pathname). There needs to be documentation for each exception saying what data is available with the exception. In Java, this would be done with accessor methods and private data. Since accessor methods and private data is not generally the norm in Python, this has to be done with documentation. Otherwise, how does the user of the exception know what data is available? Again, once the API is done, there will be documentation. For now, unless I decide to spend my time adding that instead of, say, preventing the depot from falling over when sent a certain path, it'll just have to wait for a bit and people can do exactly what they've been doing up to now: looking at the exception to see what data it provides. But at least now, there's a single location with the exceptions, instead of sending them grepping through the code base to find where the exception is defined. What is the intent of the __activity_lock functionality? We eventually need to have locking that prevents multiple clients (in separate processes) from modifying an image concurrently. Once we have that, the same functionality will also work for different threads in a single process. So thread-based locking is not really useful here. It's also not clear to me that this API layer should be responsible for locking, as that may not provide sufficient granularity. The point of locking is so that, for example, multiple GUI threads can't start planning an install, an uninstall, and an image_update all at the same time on the same PkgClient object, for example. Can this become more finely grained in the future? Probably. But for now, they help make the code thread safe, something that's important for the GUI. When we have the more general mechanism, perhaps, and only perhaps, it can replace the mechanisms here. IMHO, cross process concurrency is a bigger issue. And solving that problem would solve the thread one too. I agree, but, that's not THIS problem. If and when we solve that issue, the locking code in api can poof (probably). This API is not going to fix all problems with our code. It's supposed to fix a select few. Cross-process concurrency is not in that set. Of course, if someone has a ready solution, by all means give me the patch, either to the gate or on top of my API, and I'll integrate it into my putback happily. My point is that I don't see anything in issue 3443 that says the API has to fix the cross-thread problem either (except maybe for the word "safe" in the summary, but the description doesn't say anything about it). The introduction of locking into the API seems to be feature creep. At what point would you expect the imports of the other pkg.client.* and pkg.* modules to be removed from client.py? When the API is complete, and not in development. (before or after the first checkin of this API?) After, since I foresee at least 2 stages of commits, and probably 3 I'd like to at least see a plan for how complicated this api module will get in order to be able to remove those imports, so that the true expense of this option will be understood before the team has to live with it. So, what you'd like is for me to do all the work needed to completely analyze what the final API would look like (which basically means creating and implementing the final API since, at least for me, that's the only way to be certain I've gotten things correct). That's fine, but there's little chance that can be finished in time for the GUI team to move to it for the november release. Until I receive firm direction that we've changed our schedule on this, I'm going to proceed as I've planned. I'll make one other point, if this option, once it's fully in place, is truly so terrible that we as a team "can't live with it", then we can blow it up and someone else can try again. All that we'll have lost is the time I've spent on it (and the amount of time we've spent kvetching about it). In a previous message[1], Stephen outlined three general options for introducing a stable API. It seems like you've picked option 1 without even considering option 2 or 3. In fact, you've started to write the code for option 1 without having looked at what a design for options 2 or 3 would even look like (at least I haven't seen such a design sent to the pkg- discuss alias, maybe options 2 and 3 were discarded having never made it that far). Since this started, I've just been asking that there be a reasonable evaluation of these various options. This isn't a question of trying one thing and then having someone else try another thing. If the various major design options are considered and then compared side by side, then an appropriate design can be selected. And if option 1 is selected, I can support that (as I've tried to do by providing these comments). No, I've considered 2 and 3, just because I haven't put them out to the group doesn't mean I didn't think about them. (I'll group them together as I believe they're essentially isomorphic transformations of the code. While the details might differ, the overall structure would be similar.) I viewed my job as to look at the various options, and provide a solution to the problem. Had there been two options which seemed to be reasonable alternatives, then I would've turned to the group for guidance. Since, in my opinion, the choice was clear, I moved ahead. I'd suggest that 2 or 3 is what you and some others have proposed previously, so it's certainly been considered. I feel like I've done the best I can to explain why I don't believe those are adequate solutions to our problems. Did I miss that explanation? I'm sorry if I passed that by. I'd like to take another look at the explanation for why #3 would not solve the problems. The very first message I saw on the API is here: . And this doesn't say anything about why the #3 approach wouldn't solve the problems. Tom I get that you disagree. If you'd like, you can put together an API which follows options 2 or 3, and we as a group can choose between them. I'm not going to spend my time doing that because I've done it internally, and found them lacking for our problems. You can also continue to try to convince me that you're right, but please understand that until I am convinced, I'm going to plow ahead because we have deadlines to meet and other things to do. Tom [1] Thanks. Tom Brock Pytlik wrote: Here's the link: I haven't done as much cleanup as I usually try to do, but since I'm ooto tomorrow, I thought it would be better to get this out now, rather than next Monday. Other things that I know need to be improved, but that I think can wait for another round of revisions: API Exception organization More complete functionality Automated testing of cancellation (I hope to work with the GUI team to test this by hand in the interim) Versioning of the Progress tracker (perhaps) More Documentation Figure out the future approach to testing we'll take Thanks, Brock _______________________________________________ pkg- discuss mailing list pkg- discuss at _______________________________________________ pkg- discuss mailing list pkg- discuss at _______________________________________________ pkg- discuss mailing list pkg- discuss at