Re: [rt-users] Problem in searching date

2014-09-03 Thread Chrilly Cheng
Hi Alex,

Thanks a lot for your explanation. I've done that config  to set
$AmbiguousDayInPast
to 1, but the query still not work. I changed it a little bit:

Queue = 'ChangeRequest' AND (  Status = 'InProgress' Or Status =
'WaitingforApproval' ) AND 'CF.{Proposed Start Time(GMT)}' > 'midnight
Sunday' AND 'CF.{Proposed Start Time(GMT)}' < 'midnight next Sunday'

This query needs to be executed every Wednesday to send out dashboard
report. It will search for tickets whose "Proposed Start Time" is between
last Sunday and this Sunday.

 And unfortunately, I cant find any log about this query. I'm using it on
the New Search page, does there have any other way to test query?

Many Thanks!

Br
Vodar


On Tue, Sep 2, 2014 at 7:43 PM, Alex Peters  wrote:

> Your first debug line indicates that "Sunday" alone is not being parsed
> into a meaningful time value.  This can be corrected by setting RT config
> option $AmbiguousDayInPast to 1.
>
> Your second debug line indicates that "last Sunday" is resolving to the
> immediately previous Sunday, not the Sunday before the immediately previous
> Sunday (which I suspect you want).  The Examples section of the
> documentation for the most recent version (2013.1113 right now) of
> Time::ParseDate[1] lists "Sunday before last" as valid input.  This might
> come closer to achieving your desired outcome.
>
> These times will not resolve to a date boundary, like midnight—they will
> have the correct day, but use the current time.  This is probably not what
> you want.  Consider prefixing "midnight" to each of your search values,
> i.e. "midnight Sunday" and "midnight Sunday before last".
>
> If you can't get the search to work as desired, you could simplify the
> search to return matches between the current time and "1 week ago" and run
> it weekly at midnight on Sunday via a dashboard email subscription.
>
> [1] https://metacpan.org/pod/Time::ParseDate#EXAMPLES
>
>
> On 2 September 2014 21:27, Chrilly Cheng  wrote:
>
>> Hi Alex,
>>
>> Thanks for replying.
>>
>> I found logs below, but no more details about it.
>>
>> [Tue Sep  2 10:55:32 2014] [debug]: RT::Date used Time::ParseDate to make
>> 'Sunday' 0 (/usr/share/request-tracker4/lib/RT/Date.pm:222)
>> [Tue Sep  2 10:55:32 2014] [debug]: RT::Date used Time::ParseDate to make
>> 'last Sunday' 1409482532 (/usr/share/request-tracker4/lib/RT/Date.pm:222)
>> [Tue Sep  2 10:55:32 2014] [debug]: RT::Date used Time::ParseDate to make
>> 'Sunday' 0 (/usr/share/request-tracker4/lib/RT/Date.pm:222)
>> [Tue Sep  2 10:55:32 2014] [debug]: RT::Date used Time::ParseDate to make
>> 'last Sunday' 1409482532 (/usr/share/request-tracker4/lib/RT/Date.pm:222)
>>
>> And thanks for your reminding, I'm also aware of this, but our manager
>> prefer that label, which is hard to config with the built-in attribute in
>> RT.
>>
>>
>> Br
>> Vodar
>>
>>
>> On Tue, Sep 2, 2014 at 6:35 PM, Alex Peters  wrote:
>>
>>> What does the debug log say when you run the search?
>>>
>>> There are some config options relevant to relative dates, but it's worth
>>> verifying first that the two dates are being parsed at all.
>>>
>>> P.S.  I believe that the built-in Starts ticket attribute is intended to
>>> function as a proposed start time.
>>> On 02/09/2014 8:25 pm, "Chrilly Cheng"  wrote:
>>>
  Do I need to do any setting of the week on server?


 On Tue, Sep 2, 2014 at 3:59 PM, Chrilly Cheng 
 wrote:

> Hi Guys,
>
> I was trying to create a qeury which returns all open tickets whose
> "Proposed Start Date" are in this week, from specific queue. I tried with
> some build-in variables in searching as showing below:
>
> Queue = 'ChangeRequest' AND (  Status != 'rejected' AND Status !=
> 'resolved' ) AND 'CF.{Proposed Start Time}' > 'last Sunday' AND
> 'CF.{Proposed Start Time}' < 'Sunday'
>
> but this query returns nothing. BTW, "Proposed Start Time" is a
> datetime custom field applied to this queue.
>
> Can you please help to check on this, see whether it doesn't work?
> Many thanks.
>
>
> Br
> Vodar
>
>
>

 --
 RT Training - Boston, September 9-10
 http://bestpractical.com/training

>>>
>>
>
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

[rt-users] ACL not removed ???

2014-09-03 Thread Eric Maisonobe
Hello,

I've upgraded from 4.0 to 4.2.6 last week (but i don't know if that
matter...).

I've discovered today that some access right are very strange.

The facts :
-> access right are ONLY on groups (never on users),
-> 2 users are member of the same groups : GroupId 1663 and 4777
-> user1 is older than user2.
-> the 2 users are privilegied, but Not admin,
-> user1 have restricted access to some queues (Ok)
-> user2 have full acces to ALL queues (Not Ok )

So i've tried to disabled groups : the problem occur on groupId 4777 : when
it is disabled, all access are ok, and resctrict access working.

So i've removed ALL right to this group : that's make no changes : when the
group is un-disabled, user1 has his normal and restricted access, but user2
have full access to all queues.
One more time, when i disable the groupId 4777 , all goes right.

So  i'm a bit lost ..
Have you any idea ?

Thanks in advance.
Eric
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

[rt-users] Disable SelfService UI

2014-09-03 Thread Oriol Soriano
Is it possible to disable SelfService UI?

We are currently running RT version 4.2.2


Thanks in advance!

Oriol Soriano Vila
Software Engineer
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

[rt-users] Help!! RT::Authen::ExternalAuth -- can't create Privileged users

2014-09-03 Thread Al Joslin
I installed and configured: RT::Authen::ExternalAuth 

I've got  the login via LDAP working ok -- but it won't create Privileged users

I had to turn on: AutoCreateNonExternalUsers -- which seemed odd as I 
want to create only those users who are SUCCESSFULLY authenticated via LDAP

I added a:  Set( $UserAutocreateDefaultsOnLogin, { Privileged => 1 } );
-- but i think that's ignored as it's from another [conflicting] plugin
-- -- and anyway I grepped the code and it's in there 

hrm...

I need these users to be Privileged

this is my config for that extension

Plugin( "RT::Authen::ExternalAuth" );

Set( $ExternalAuthPriority,  [ 'My_LDAP' ]);

Set( $ExternalInfoPriority,  [ 'My_LDAP' ]);


Set( $ExternalSettings, {
My_LDAP => {
'type'  =>  'ldap',

'server'=>  'freeipa02.epc-instore.com',
'user'  =>  '',
'pass'  =>  '',

'base'  =>  
'cn=users,cn=accounts,dc=epc-instore,dc=com',
'filter'=>  '(objectClass=*)',
'd_filter'  =>  '(FILTER_STRING)',

'group' =>  '',
'group_attr'=>  '',

'tls'   =>  0,
'ssl_version'   =>  3,

'net_ldap_args' => [version =>  3   ],

'attr_match_list' => [
'uid',
]
,
'attr_map' => {
'Name' => 'uid',
'EmailAddress' => 'mail',
'Gecos' => 'mail',
'RealName' => 'displayName',
'ExternalAuthId' => 'uid'
},
},
} );

Set( $UserAutocreateDefaultsOnLogin, { Privileged => 1 } );
Set( $AutoCreateNonExternalUsers, 1);





-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training


Re: [rt-users] Can't resolve in-progress ticket?

2014-09-03 Thread Rezty Felty
OK, in case anyone else runs into this, we had custom status’ for inprogress, 
pending and pend-close in our prior version of RT, and below are the lines we 
had to add to RT4 to get these status’ to work in the new lifecycles method, 
you will have to change for your situation but I thought this might be helpful 
to others:

Set(%Lifecycles,
default => {
initial => [ 'new' ],
active  => [ 'open', 'stalled', 'pending', 'pend-close', 
'project', 'inprogress' ],
inactive=> [ 'resolved', 'rejected', 'deleted' ],

defaults => {
on_create => 'new',
on_merge  => 'resolved',
approved  => 'open',
denied=> 'rejected',
reminder_on_open => 'open',
reminder_on_resolve  => 'resolved',
},

transitions => {
''   => [qw(new open resolved)],

# from   => [ to list ],
new  => [qw(open stalled resolved rejected deleted project 
inprogress pend-close pending)],
open => [qw(new stalled resolved rejected deleted project 
inprogress pend-close pending)],
stalled  => [qw(new open rejected resolved deleted project 
inprogress pend-close pending)],
resolved => [qw(new open stalled rejected deleted project 
inprogress pend-close pending)],
rejected => [qw(new open stalled resolved deleted project 
inprogress pend-close  pending)],
deleted  => [qw(new open stalled rejected resolved project 
inprogress pend-close pending)],
"pend-close"  => [qw(new open stalled rejected resolved project 
inprogress pending)],
project  => [qw(new open stalled rejected resolved inprogress 
pend-close pending)],
inprogress  => [qw(new open stalled rejected resolved project 
pend-close pending)],
pending  => [qw(new open stalled rejected resolved project 
pend-close inprogress)],
},
rights => {
'* -> deleted'  => 'DeleteTicket',
'* -> *'=> 'ModifyTicket',
},
actions => [
'new -> open'  => {
label  => 'Open It', # loc
update => 'Respond',
},
'new -> resolved'  => {
label  => 'Resolve', # loc
update => 'Comment',
},
'new -> rejected'  => {
label  => 'Reject', # loc
update => 'Respond',
},
'new -> deleted'   => {
label  => 'Delete', # loc
},
'new -> pend-close'   => {
label  => 'Pend-close', # loc
},
'new -> inprogress'   => {
label  => 'Inprogress', # loc
},
'new -> pending'   => {
label  => 'Pending', # loc
},
'open -> stalled'  => {
label  => 'Stall', # loc
update => 'Comment',
},
'open -> resolved' => {
label  => 'Resolve', # loc
update => 'Comment',
},
'open -> rejected' => {
label  => 'Reject', # loc
update => 'Respond',
},
'open -> pend-close'   => {
label  => 'Pend-close', # loc
},
'open -> inprogress'   => {
label  => 'Inprogress', # loc
},
'open -> pending'   => {
label  => 'Pending', # loc
},
'stalled -> open'  => {
label  => 'Open It', # loc
},
'resolved -> open' => {
label  => 'Re-open', # loc
update => 'Comment',
},
'rejected -> open' => {
label  => 'Re-open', # loc
update => 'Comment',
},
'deleted -> open'  => {
label  => 'Undelete', # loc
},
'deleted -> pend-close'   => {
label  => 'Pend-close', # loc
},
'deleted -> inprogress'   => {
label  => 'Inprogress', # loc
},
'deleted -> pending'   => {
label  => 'Pending', # loc
},
'pend-close -> open'  => {
label  => 'Open It', # loc
update => 'Respond',
},
'pend-close -> resolved'  => {
label  => 'Resolve', # loc
update => 'Comment',
},
'pend-close -> rejected'  => {
label  => 'Reject', # loc
update => 'Respond',
},
'pend-close -> deleted'   => {
label  => 'Delete', # loc
},
'pend-close -> inprogress'   => {
label  => 'Inprogress', # loc
},
'pend-close -> p

Re: [rt-users] Tickets from other Ticketsystem

2014-09-03 Thread Kevin Falcone
On Mon, Aug 25, 2014 at 08:27:00AM +, Eierschmalz, Bernhard wrote:
> Hello Kevin,
> 
> I already thought about creating a scrip like
> Condition:
> Transaction obj = "create"
> Subject contains "[plus ticket#"
> 
> Action:
> Search tickets with same plus-ticket no.
> If one exists, combine
> 
> What do you think about this solution? Or would you prefer the strongly 
> modified plugin?
> 

Scrip runs after the second ticket is created and sends email.  You
then Merge it.
The plugin never allows the second ticket to be created.

-kevin

> 
> 
> -Ursprüngliche Nachricht-
> Von: rt-users [mailto:rt-users-boun...@lists.bestpractical.com] Im Auftrag 
> von Kevin Falcone
> Gesendet: Freitag, 22. August 2014 16:01
> An: rt-users@lists.bestpractical.com
> Betreff: Re: [rt-users] Tickets from other Ticketsystem
> 
> On Tue, Aug 19, 2014 at 05:36:04AM +, Eierschmalz, Bernhard wrote:
> > we have one customer using its own ticket system. This customer sends 
> > us mails with an information about his own ticket in the subject.
> > 
> > i.e. [PLUS.DE Ticket#PD077994]
> > 
> > sometimes when this customer answers, he doesn’t send our ticket 
> > number in subject, so he opens a new ticket.
> > 
> > Is it possible to identify a mail by this PLUS ticket number and add 
> > to our already opened ticket instead of open a new one?
> 
> Look at the code in
> https://github.com/bestpractical/rt-extension-repliestoresolved
> 
> The function it hooks can be used to lie to RT and return a ticket id of the 
> existing ticket (as opposed to what this extension does, which is suppress 
> the ticket id so that a new ticket will be created).
> 
> -kevin
> -- 
> RT Training - Boston, September 9-10
> http://bestpractical.com/training


pgpcd1u6T0stv.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] RT Extension installation on Centos 6

2014-09-03 Thread Kevin Falcone
On Fri, Aug 29, 2014 at 01:57:42PM +0200, Christian Loos wrote:
> So the extension mason components are installed in
> RT::MasonComponentRoot which I think is total wrong.
> 
> As the user says that there is no RT::LocalPluginPath I would think
> there is something wrong with the RT package in Cenos.
> 
> Maybe someone who installed RT from the Centos package and use RT
> extensions can share their knowledge with me.

That looks like the package is totally busted for plugins honestly.

Someone is going to need to reach out to the CentOS packagers because
they've never been responsive to us.

It'd be interesting to get a lib/RT/Generated.pm for that package
since it would point more at why it's installing more like an RT 3.6
package instead of the way we've been doing plugins for 6+ years now.


-kevin


pgpP9qmULQ_Mq.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] User Question for RT4/RSS

2014-09-03 Thread Kevin Falcone
On Mon, Sep 01, 2014 at 04:16:37AM -0500, Collin Wynne wrote:
> What did was install feeddemon the other day and put in RSS feed URLs from RT
> for Me, and each other guy and RSS for the full queue. Set up all kinds of
> feeds. Here is what I was hoping it would do: browse the Queue list and and
> mark a ticket as RESOLVED and then it disappear from that Queue (The queue was
> for Open/New Tickets) or assigning the ticket and it moving into the other 
> RSS.
> Currently if I check a queue and it downloads all in that queue, then when I
> change the queue something is in the rss does nto adapt. it leaves the entry
> there and I have to Manually delete.

The RSS feed is generated as a result of your search (you don't say
what your search is) and should be refreshed when your reader reloads
it.  So, sounds like either a bug in your RSS reader or your searches.

-kevin


pgpkXBpcBmpGq.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] Trigger a scrip(t) in case of user creation

2014-09-03 Thread Kevin Falcone
On Tue, Sep 02, 2014 at 12:26:23PM -0600, Thierry Thelliez wrote:
> Is it possible to intercept user creation events?  As a scrip condition? 

Scrips currently only trigger on Ticket Transactions.

-kevin


pgpuFYl0QWwuV.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] Problem in searching date

2014-09-03 Thread Kevin Falcone
On Wed, Sep 03, 2014 at 04:40:04PM +0800, Chrilly Cheng wrote:
> Hi Alex,
>  
> Thanks a lot for your explanation. I've done that config  to set 
> $AmbiguousDayInPast to 1, but the query still not work. I changed it a little
> bit:
> 
> Queue = 'ChangeRequest' AND (  Status = 'InProgress' Or Status =
> 'WaitingforApproval' ) AND 'CF.{Proposed Start Time(GMT)}' > 'midnight Sunday'
> AND 'CF.{Proposed Start Time(GMT)}' < 'midnight next Sunday' 
> 
> This query needs to be executed every Wednesday to send out dashboard report.
> It will search for tickets whose "Proposed Start Time" is between last Sunday
> and this Sunday.
> 
>  And unfortunately, I cant find any log about this query. I'm using it on the
> New Search page, does there have any other way to test query?
> 

A few things

Your use of GMT in the CF name is... misleading, since Fields are set
in the User's Time Zone, this may not work out as you intend.
Additionally, relative dates are going to be calculated in the user's
time zone.  This means "midnight next sunday" will *actually* be
2014-09-07 04:00:00 when it goes and looks in the DB (since I'm four
hours behind GMT).  Keep in mind also, did you mean Midnight at the
start of sunday or midnight at the end of sunday?

You can get exact parsing of the query by running code on the command
line.  Save this in a file and run it.

use lib '/opt/rt4/lib/';
use RT -init;

my $t = RT::Tickets->new(RT->SystemUser);
$t->FromSQL("Your Query");
warn $t->BuildSelectQuery;

-kevin


pgp9yN9blxP1a.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] ACL not removed ???

2014-09-03 Thread Kevin Falcone
On Wed, Sep 03, 2014 at 11:12:49AM +0200, Eric Maisonobe wrote:
> So i've tried to disabled groups : the problem occur on groupId 4777 : when it
> is disabled, all access are ok, and resctrict access working.
> 
> So i've removed ALL right to this group : that's make no changes : when the

I have no idea what "removed ALL right to this group" means.

> group is un-disabled, user1 has his normal and restricted access, but user2
> have full access to all queues.
> One more time, when i disable the groupId 4777 , all goes right.
> 
> So  i'm a bit lost ..
> Have you any idea ?

This implies there are other rights you don't know about.
You can look in the ACL table for that rogue group.
You can also try the script from the RT-Extension-Utils package,
although I have no idea if it works on 4.2

https://metacpan.org/pod/distribution/RT-Extension-Utils/sbin/rt-check-user-right-on-ticket

-kevin


pgp1Hd8FG0U8y.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] Disable SelfService UI

2014-09-03 Thread Kevin Falcone
On Wed, Sep 03, 2014 at 01:38:26PM +, Oriol Soriano wrote:
> Is it possible to disable SelfService UI?
> We are currently running RT version 4.2.2

Self Service is served to Unprivileged users with a Password.
Don't give Unprivileged users passwords if you don't want them logging
in.

What are you actually trying to accomplish?

-kevin


pgp2I_0PFQBEe.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] Help!! RT::Authen::ExternalAuth -- can't create Privileged users

2014-09-03 Thread Kevin Falcone
On Wed, Sep 03, 2014 at 11:45:06AM -0400, Al Joslin wrote:
> I installed and configured: RT::Authen::ExternalAuth 
> 
> I've got  the login via LDAP working ok -- but it won't create Privileged 
> users
> 
>   I had to turn on: AutoCreateNonExternalUsers -- which seemed odd as I 
> want to create only those users who are SUCCESSFULLY authenticated via LDAP

This sounds wrong.

>   I added a:  Set( $UserAutocreateDefaultsOnLogin, { Privileged => 1 } );
>   -- but i think that's ignored as it's from another [conflicting] plugin
>   -- -- and anyway I grepped the code and it's in there 

What conflicting plugin?
That's a core config option.

Also, I wonder how you grepped the code, since while
RT-Authen-ExternalAuth documents that you should set the 4.2
compatible config variable, when those docs were added the code wasn't
updated to match.

A bug should be filed in the RT::Authen::ExternalAuth config.

Until then, you could set the antiquated $AutoCreate to {Privileged =>
1} and just ignore the warning and it should work.

-kevin


pgpCsKbBR_OG8.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] Can't resolve in-progress ticket?

2014-09-03 Thread Kevin Falcone
On Tue, Aug 26, 2014 at 02:16:28PM +, Rezty Felty wrote:
> Yes, we fixed it with lifecycle entries in the RT_SiteConfig.pm, I hadn’t
> realized that lifecycles had replaced status’.

4.0 used to warn, 4.2 doesn't warn anymore about 3.8 variables.
However, it's documented in the upgrading docs.

http://bestpractical.com/docs/rt/latest/UPGRADING-4.0.html#RT_SiteConfig.pm

-kevin


pgpfXg_JPgfL7.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

Re: [rt-users] search query returning unexpected results

2014-09-03 Thread Kevin Falcone
On Tue, Aug 26, 2014 at 02:05:41PM -0700, Chanel Wheeler wrote:
> This is the search query I have (built via the Query Builder):
> 
> Owner = 'cwheeler' AND (  Status = 'new' OR Status = 'open' ) AND Queue = 
> 'YLN'
> AND 'CF.{YLN Topic}' != 'Student Import System'
> 
> The search results *include* the tickets tagged with Student Import System. If
> I change the ‘not equal’ to ‘equal’ it limits the search as you’d expect it 
> to.
> Same thing happens with LIKE vs NOT LIKE. This is looking a lot like a bug but
> I’m wondering if manipulating custom fields in this way just isn’t allowed. 
> I’m on 4.2.6.

You neglected to tell us what kind of Custom Field YLN Topic is.

If I make a global CF called Foo and make it an enter one value and
have two tickets, one where Foo has no value and one where Foo has the
value foo and I ask for
CF.foo != 'foo'
I correctly get 1 ticket.

You can find the code I posted earlier today for seeing the SQL
generated by a query and run that and show us what you get for your !=
query.

-kevin


pgpwOHM73O4fV.pgp
Description: PGP signature
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training

[rt-users] How do you grant individual User rights ?

2014-09-03 Thread Al Joslin
Every time I (as Enoch Root) try to grant a right to a single [Staff] user (via 
Global -> User Rights -> Add A User) -- I get an error "Principal ## not found" 
(where ## == that users' id)

So how do you grant an individual User rights ?

thanks
Al;


-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training


Re: [rt-users] Cannot creat articles with content

2014-09-03 Thread k...@rice.edu
On Wed, Sep 03, 2014 at 04:13:22PM -0500, Donald Harper wrote:
> Hello, folks.
> 
> I am running RT 4.2.6 under FreeBSD 10.0-RELEASE, with perl5 5.16.3_11 
> and apache22 2.2.27_6 and I am trying to create articles either from a 
> ticket (Display ticket -> Actions -> Extract Article) or directly with a 
> new article (Articles -> Create), and I am not having much luck.
> 
> I have read 
> http://www.bestpractical.com/docs/rt/4.2/customizing/articles_introduction.html
>  
> but did not find anything to help me.
> 
> When I try to extract an article from a ticket, and select the Class and 
> the topic, the page called 'Extract article from ticket ## into class 
> foo', the drop down boxes on each field only has one value of '-'.  When 
> I click on 'Create', it will create an article without any content, but 
> the rest of the fields (Basics, Links, Topics) will have values.
> 
> When I create a new article from scratch via Articles -> Create -> Chose 
> Topic, the form which comes up  
> (https://example.com/rt/Articles/Article/Edit.html?Class=1) has editable 
> fields under Basics, Links, and Topics, but *not* Content.
> 
> I have debugging enabled, and I see no errors in the log during this 
> process.
> 
> Any pointers on where to look?  I have no extensions dealing with 
> articles installed.
> 
> Thanks!
> 
> Don
> 
Hi Don,

I have seen that happen when the user does not have the appropriate rights
to the custom field that is to hold the article content. Check those ACLs
in the RTFM configuration area.

Regards,
Ken
-- 
RT Training - Boston, September 9-10
http://bestpractical.com/training