comp.lang.ada
 help / color / mirror / Atom feed
* How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
@ 2016-04-05 17:09 danielnorberto
  2016-04-05 17:39 ` Jeffrey R. Carter
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: danielnorberto @ 2016-04-05 17:09 UTC (permalink / raw)



I have a generic package with a buffer functionality encapsulated using Ravenscar pragma profile.

This buffer has also a protected procedures an entries for multitasking.

I need to instantiate several of this packages. In this moment the code is working in this way:

package buffer1 is new buffer(configuration_1);

package buffer2 is new buffer(configuration_2);

.....

package bufferN is new buffer(configuration_N);

The problem is that  i will need a quantity up to 500 or 1000 independent buffers packages, so i'm trying to think in other way to instantiate this generics packages than fill 500 or 1000 lines of instances.

To make this thing more difficult, Ravenscar pragma profile obligates to define everything is posible in compilation time.

I was looking to do something like a "constrained generics package array" but i don't know how this language can manage this situation.

Does anybody knows a better approach to his problem? 
Thanks in advance

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-05 17:09 How to do multiple instances of a generic packages in automated way. (using ravenscar profile) danielnorberto
@ 2016-04-05 17:39 ` Jeffrey R. Carter
  2016-04-05 19:39   ` Simon Wright
  2016-04-07 12:05 ` danielnorberto
  2016-05-05 21:01 ` rieachus
  2 siblings, 1 reply; 17+ messages in thread
From: Jeffrey R. Carter @ 2016-04-05 17:39 UTC (permalink / raw)


On 04/05/2016 10:09 AM, danielnorberto@gmail.com wrote:
>
> I have a generic package with a buffer functionality encapsulated using
> Ravenscar pragma profile.
>
> This buffer has also a protected procedures an entries for multitasking.
>
> I need to instantiate several of this packages. In this moment the code is
> working in this way:
>
> The problem is that  i will need a quantity up to 500 or 1000 independent
> buffers packages, so i'm trying to think in other way to instantiate this
> generics packages than fill 500 or 1000 lines of instances.

Without knowing more about your hundreds of buffers, what purpose(s) they serve, 
how they're similar and how they differ, I can't provide any useful advice. I 
won't let that stop me, though.

Typically, task-safe buffers are used to allow asynchronous communications 
between tasks. Typically the buffer is a protected type, and once instantiated 
for the type of information passed in the buffer, multiple objects of the type 
can be declared (in an array, for example).

If you're using Ada 12, then the standard synchronized-queue containers can 
serve this purpose (assuming they meet all your requirements, including the 
Ravenscar restrictions). If you're using an earlier version of the language, 
then you could use something like PragmARC.Queue_Unbounded_Blocking.

The synchronized queues are described in ARM A.18.27-29

http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-A-18-27.html

The PragmAda Reusable Components are available at

https://pragmada.x10hosting.com/pragmarc.htm

or through the copy at GitHub

https://github.com/jrcarter/PragmARC

If neither of these is suitable for your needs, nor gives you an insight into a 
way to meet your needs, then you can provide more information, including your 
generic pkg spec and the details of some of the actual generic parameters used 
to instantiate a couple of the instances, and perhaps we can see an alternative 
approach.

-- 
Jeff Carter
"Nobody expects the Spanish Inquisition!"
Monty Python's Flying Circus
22

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-05 17:39 ` Jeffrey R. Carter
@ 2016-04-05 19:39   ` Simon Wright
  0 siblings, 0 replies; 17+ messages in thread
From: Simon Wright @ 2016-04-05 19:39 UTC (permalink / raw)


"Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> writes:

> If you're using Ada 12, then the standard synchronized-queue
> containers can serve this purpose (assuming they meet all your
> requirements, including the Ravenscar restrictions).

This depends on the actual runtime, which typically imposes further
restrictions; for example, AdaCore's ravenscar-sfp-stm32f4 has

   pragma Restrictions (No_Exception_Propagation);
   --  Only local exception handling is supported in this profile

   pragma Restrictions (No_Exception_Registration);
   --  Disable exception name registration. This capability is not used
   --  because it is only required by exception stream attributes which
   --  are not supported in this run time.

   pragma Restrictions (No_Implicit_Dynamic_Code);
   --  Pointers to nested subprograms are not allowed in this run time,
   --  in order to prevent the compiler from building "trampolines".

   pragma Restrictions (No_Finalization);
   --  Controlled types are not supported in this run time

and the first and last preclude the standard containers (not sure about
synchronized queues, but seems pretty unlikely).


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-05 17:09 How to do multiple instances of a generic packages in automated way. (using ravenscar profile) danielnorberto
  2016-04-05 17:39 ` Jeffrey R. Carter
@ 2016-04-07 12:05 ` danielnorberto
  2016-04-07 12:36   ` G.B.
  2016-05-05 21:01 ` rieachus
  2 siblings, 1 reply; 17+ messages in thread
From: danielnorberto @ 2016-04-07 12:05 UTC (permalink / raw)


Thank you for your answer Jeff,
Every buffer needs different configuration in the worst case. The most important part of this configuration is the buffer size.
Im using ada12, but i can't use synchronized-queue containers with ravenscar profile.
I tried sometime ago and several violations raised: "No_Implicit_Heap_Allocations" and "No_Local_Protected objects". That's why i've decided  to build my own queue system.
Thank you very much for the library you provided me.
I tried to use pragmarc.queue_bounded_unprotected but it raises other violation of Ravenscar: "Max_Protected_Entries = 1"
So after that i don't have so much options to go on.

I will reduce everything to explain the problem better:

generic
	Size_bytes : integer;
package buffer is
protected 
	put(msg: string);
	Entry get(msg : out string);
Private
	Content : string(1..size_bytes);
end buffer;

i will need several buffer instances (up to 1000) with different configuration each one (let say only sizes).
I don't know how to do it. I already have 1000 sizes configuration in one array to assign to each buffer. Let's say i have the next variable already filled with all the configurations:
Configuration_array : array (1..1000) of integer;
Now i need to instance every buffer with each one of the element of that array:
Package buffer1 is new (configuration_array(1));
Package buffer2 is new (configuration_array(2));
...
Package buffer1000 is new (configuration_array(1000));

but i need to do it without fill 1000 lines of code.
¿Any ideas?
Thanks for your help in advance.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-07 12:05 ` danielnorberto
@ 2016-04-07 12:36   ` G.B.
  2016-04-11  9:14     ` Daniel Norber
  0 siblings, 1 reply; 17+ messages in thread
From: G.B. @ 2016-04-07 12:36 UTC (permalink / raw)


On 07.04.16 14:05, danielnorberto@gmail.com wrote:
> I will reduce everything to explain the problem better:
>
> generic
> 	Size_bytes : integer;
> package buffer is
> protected
> 	put(msg: string);
> 	Entry get(msg : out string);
> Private
> 	Content : string(1..size_bytes);
> end buffer;

It might assist us in isolating issues if you let the
compiler check the reduced source text above, or we might
incorrectly assume things, including that you might first
want to seize the opportunity and get a firm grip of Ada. :-)

That being said, with profile Ravenscar active, is there
a reason why you can't start from a protected type with
a Size discriminant instead of a generic parameter? Is
it to do with some version of RavenSPARK in the end?

    protected type Buffer (Size : Size_In_Characters) is
       procedure Put (Msg : String);
       entry Get (Msg : out String);
    private
       content : String (1 .. Size);
    end Buffer;

Also note that every String parameter is still allowed to have
an unspecified number of characters, whereas content has
a maximum number of them, and also that Get has no way to inform
its caller about the part of Msg actually filled.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-07 12:36   ` G.B.
@ 2016-04-11  9:14     ` Daniel Norber
  2016-04-11 13:04       ` Shark8
                         ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Daniel Norber @ 2016-04-11  9:14 UTC (permalink / raw)


> 
> It might assist us in isolating issues if you let the
> compiler check the reduced source text above, or we might
> incorrectly assume things, including that you might first
> want to seize the opportunity and get a firm grip of Ada. :-)
> 
> That being said, with profile Ravenscar active, is there
> a reason why you can't start from a protected type with
> a Size discriminant instead of a generic parameter? Is
> it to do with some version of RavenSPARK in the end?
> 
>     protected type Buffer (Size : Size_In_Characters) is
>        procedure Put (Msg : String);
>        entry Get (Msg : out String);
>     private
>        content : String (1 .. Size);
>     end Buffer;
> 
> Also note that every String parameter is still allowed to have
> an unspecified number of characters, whereas content has
> a maximum number of them, and also that Get has no way to inform
> its caller about the part of Msg actually filled.

I was trying your approach, but maybe there is something im missing because the GNAT ADA compiler says:
"discriminant part not allowed in protected body"

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11  9:14     ` Daniel Norber
@ 2016-04-11 13:04       ` Shark8
  2016-04-11 17:25         ` Daniel Norber
  2016-04-11 15:58       ` Anh Vo
  2016-04-11 16:59       ` Jeffrey R. Carter
  2 siblings, 1 reply; 17+ messages in thread
From: Shark8 @ 2016-04-11 13:04 UTC (permalink / raw)


On Monday, April 11, 2016 at 3:14:15 AM UTC-6, Daniel Norber wrote:
> 
> I was trying your approach, but maybe there is something im missing because the GNAT ADA compiler says:
> "discriminant part not allowed in protected body"

Try making a Protected Interface w/ a discriminant, then using a protected type (or perhaps Task type) that implements it. Then, for populating these, yo can try the Ada.Containers.Formal_Indefinite_Vector.

Hope that helps.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11  9:14     ` Daniel Norber
  2016-04-11 13:04       ` Shark8
@ 2016-04-11 15:58       ` Anh Vo
  2016-04-11 17:21         ` Daniel Norber
  2016-04-11 16:59       ` Jeffrey R. Carter
  2 siblings, 1 reply; 17+ messages in thread
From: Anh Vo @ 2016-04-11 15:58 UTC (permalink / raw)


On Monday, April 11, 2016 at 2:14:15 AM UTC-7, Daniel Norber wrote:
> > 
> > It might assist us in isolating issues if you let the
> > compiler check the reduced source text above, or we might
> > incorrectly assume things, including that you might first
> > want to seize the opportunity and get a firm grip of Ada. :-)
> > 
> > That being said, with profile Ravenscar active, is there
> > a reason why you can't start from a protected type with
> > a Size discriminant instead of a generic parameter? Is
> > it to do with some version of RavenSPARK in the end?
> > 
> >     protected type Buffer (Size : Size_In_Characters) is
> >        procedure Put (Msg : String);
> >        entry Get (Msg : out String);
> >     private
> >        content : String (1 .. Size);
> >     end Buffer;
> > 
> > Also note that every String parameter is still allowed to have
> > an unspecified number of characters, whereas content has
> > a maximum number of them, and also that Get has no way to inform
> > its caller about the part of Msg actually filled.
> 
> I was trying your approach, but maybe there is something im missing because the GNAT ADA compiler says:
> "discriminant part not allowed in protected body"

Indeed, discriminant is allowed in the protected specification only. Since you put it in the protected body, you violated the syntax rule.

Anh Vo


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11  9:14     ` Daniel Norber
  2016-04-11 13:04       ` Shark8
  2016-04-11 15:58       ` Anh Vo
@ 2016-04-11 16:59       ` Jeffrey R. Carter
  2016-04-11 17:23         ` Daniel Norber
  2 siblings, 1 reply; 17+ messages in thread
From: Jeffrey R. Carter @ 2016-04-11 16:59 UTC (permalink / raw)


On 04/11/2016 02:14 AM, Daniel Norber wrote:
>>
>>      protected type Buffer (Size : Size_In_Characters) is
>>         procedure Put (Msg : String);
>>         entry Get (Msg : out String);
>>      private
>>         content : String (1 .. Size);
>>      end Buffer;
>
> I was trying your approach, but maybe there is something im missing because the GNAT ADA compiler says:
> "discriminant part not allowed in protected body"

What was presented is a protected type specification. You had to provide the 
body, and clearly you made an error in so doing. The error msg gives you the 
information you need to correct this error.

-- 
Jeff Carter
"It is the German who is so uncourteous to his verbs."
A Scandal in Bohemia
122


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11 15:58       ` Anh Vo
@ 2016-04-11 17:21         ` Daniel Norber
  2016-04-11 17:26           ` Anh Vo
  0 siblings, 1 reply; 17+ messages in thread
From: Daniel Norber @ 2016-04-11 17:21 UTC (permalink / raw)



> Indeed, discriminant is allowed in the protected specification only. Since you put it in the protected body, you violated the syntax rule.
> 
> Anh Vo
Thanks, i tried without using it in body.

but i think this approach fails to fullfill Ravenscar profile.

Compiler says:
warning: creation of protected object of type "buffer" with non-static discriminants  will violate restriction "No_Implicit_Heap_Allocation"

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11 16:59       ` Jeffrey R. Carter
@ 2016-04-11 17:23         ` Daniel Norber
  2016-04-11 17:27           ` Jeffrey R. Carter
  2016-04-12  5:19           ` Brad Moore
  0 siblings, 2 replies; 17+ messages in thread
From: Daniel Norber @ 2016-04-11 17:23 UTC (permalink / raw)



> What was presented is a protected type specification. You had to provide the 
> body, and clearly you made an error in so doing. The error msg gives you the 
> information you need to correct this error.
> 
> -- 
> Jeff Carter
> "It is the German who is so uncourteous to his verbs."
> A Scandal in Bohemia
> 122
Thank you for your help.
I tried to provide a body without errors, but compiler doesn't like this approach using Ravenscar profile. It says:

warning: creation of protected object of type "buffer" with non-static discriminants  will violate restriction No_Implicit_Heap_Allocation


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11 13:04       ` Shark8
@ 2016-04-11 17:25         ` Daniel Norber
  0 siblings, 0 replies; 17+ messages in thread
From: Daniel Norber @ 2016-04-11 17:25 UTC (permalink / raw)


El lunes, 11 de abril de 2016, 15:04:44 (UTC+2), Shark8  escribió:
> On Monday, April 11, 2016 at 3:14:15 AM UTC-6, Daniel Norber wrote:
> > 
> > I was trying your approach, but maybe there is something im missing because the GNAT ADA compiler says:
> > "discriminant part not allowed in protected body"
> 
> Try making a Protected Interface w/ a discriminant, then using a protected type (or perhaps Task type) that implements it. Then, for populating these, yo can try the Ada.Containers.Formal_Indefinite_Vector.
> 
> Hope that helps.

Thank you for your help. It seems that protected type with discriminant its not allowed using ravenscar profile restrictions.
Compiler says: 

warning: creation of protected object of type "buffer" with non-static discriminants  will violate restriction No_Implicit_Heap_Allocation

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11 17:21         ` Daniel Norber
@ 2016-04-11 17:26           ` Anh Vo
  0 siblings, 0 replies; 17+ messages in thread
From: Anh Vo @ 2016-04-11 17:26 UTC (permalink / raw)


On Monday, April 11, 2016 at 10:21:17 AM UTC-7, Daniel Norber wrote:
> > Indeed, discriminant is allowed in the protected specification only. Since you put it in the protected body, you violated the syntax rule.
> > 
> > Anh Vo
> Thanks, i tried without using it in body.
> 
> but i think this approach fails to fullfill Ravenscar profile.
> 
> Compiler says:
> warning: creation of protected object of type "buffer" with non-static discriminants  will violate restriction "No_Implicit_Heap_Allocation"

Do your requirements really need access protected type implementation? If not, regular protected type does just fine.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11 17:23         ` Daniel Norber
@ 2016-04-11 17:27           ` Jeffrey R. Carter
  2016-04-12  5:19           ` Brad Moore
  1 sibling, 0 replies; 17+ messages in thread
From: Jeffrey R. Carter @ 2016-04-11 17:27 UTC (permalink / raw)


On 04/11/2016 10:23 AM, Daniel Norber wrote:
>
> I tried to provide a body without errors, but compiler doesn't like this approach using Ravenscar profile. It says:
>
> warning: creation of protected object of type "buffer" with non-static discriminants  will violate restriction No_Implicit_Heap_Allocation

Can you avoid creating any objects of the type with non-static discriminants?

-- 
Jeff Carter
"It is the German who is so uncourteous to his verbs."
A Scandal in Bohemia
122

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-11 17:23         ` Daniel Norber
  2016-04-11 17:27           ` Jeffrey R. Carter
@ 2016-04-12  5:19           ` Brad Moore
  2016-04-26 15:08             ` Daniel Norber
  1 sibling, 1 reply; 17+ messages in thread
From: Brad Moore @ 2016-04-12  5:19 UTC (permalink / raw)


On Monday, April 11, 2016 at 11:23:46 AM UTC-6, Daniel Norber wrote:
> > What was presented is a protected type specification. You had to provide the 
> > body, and clearly you made an error in so doing. The error msg gives you the 
> > information you need to correct this error.

You might want to also have a look at the Dequesterity Buffers.

https://sourceforge.net/projects/dequesterity/

The buffer types are composable, meaning you can use lower level implementations to create higher level buffer types.

In the Ravenscar buffers, the size of the buffer is a discriminant for a protected type, so it sounds like what you are trying to do.

Basically, you only need to instantiate the generics once, but can then
create as many objects of that instance as you need.

I have implemented various forms of buffers, including different Ravenscar generic buffers. Some of the Ravenscar specific buffer generics include; 
(Ravenscar_Bounded, 
 Ravenscar_Persistent, 
 Ravenscar_Segmented, 
 Ravenscar_Unbounded,
 Ravenscar_Bounded (Indefinite),
 Ravenscar_Unbounded (Indefinite),
 Ravenscar_Bounded_Priority, 
 Ravenscar_Persistent_Priority, 
 Ravenscar_Segmented_Priority, 
 Ravenscar_Unbounded_Priority
 Ravenscar_Bounded_Priority (Indefinite),
 Ravenscar_Unbounded_Priority (Indefinite),
 Ravenscar_Bounded Stream Buffer,
 Ravenscar_Unbounded Stream Buffer,
 Ravenscar_Persistent Stream Buffer,
 Ravenscar_Segmented Stream Buffer)

Brad

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-12  5:19           ` Brad Moore
@ 2016-04-26 15:08             ` Daniel Norber
  0 siblings, 0 replies; 17+ messages in thread
From: Daniel Norber @ 2016-04-26 15:08 UTC (permalink / raw)


Big Big thanks Brad,
I'm studying it in order to see how i can overcome my problem.
Thank you very much for that nice code.

Daniel.

El martes, 12 de abril de 2016, 7:19:51 (UTC+2), Brad Moore  escribió:
> On Monday, April 11, 2016 at 11:23:46 AM UTC-6, Daniel Norber wrote:
> > > What was presented is a protected type specification. You had to provide the 
> > > body, and clearly you made an error in so doing. The error msg gives you the 
> > > information you need to correct this error.
> 
> You might want to also have a look at the Dequesterity Buffers.
> 
> https://sourceforge.net/projects/dequesterity/
> 
> The buffer types are composable, meaning you can use lower level implementations to create higher level buffer types.
> 
> In the Ravenscar buffers, the size of the buffer is a discriminant for a protected type, so it sounds like what you are trying to do.
> 
> Basically, you only need to instantiate the generics once, but can then
> create as many objects of that instance as you need.
> 
> I have implemented various forms of buffers, including different Ravenscar generic buffers. Some of the Ravenscar specific buffer generics include; 
> (Ravenscar_Bounded, 
>  Ravenscar_Persistent, 
>  Ravenscar_Segmented, 
>  Ravenscar_Unbounded,
>  Ravenscar_Bounded (Indefinite),
>  Ravenscar_Unbounded (Indefinite),
>  Ravenscar_Bounded_Priority, 
>  Ravenscar_Persistent_Priority, 
>  Ravenscar_Segmented_Priority, 
>  Ravenscar_Unbounded_Priority
>  Ravenscar_Bounded_Priority (Indefinite),
>  Ravenscar_Unbounded_Priority (Indefinite),
>  Ravenscar_Bounded Stream Buffer,
>  Ravenscar_Unbounded Stream Buffer,
>  Ravenscar_Persistent Stream Buffer,
>  Ravenscar_Segmented Stream Buffer)
> 
> Brad


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: How to do multiple instances of a generic packages in automated way. (using ravenscar profile)
  2016-04-05 17:09 How to do multiple instances of a generic packages in automated way. (using ravenscar profile) danielnorberto
  2016-04-05 17:39 ` Jeffrey R. Carter
  2016-04-07 12:05 ` danielnorberto
@ 2016-05-05 21:01 ` rieachus
  2 siblings, 0 replies; 17+ messages in thread
From: rieachus @ 2016-05-05 21:01 UTC (permalink / raw)


On Tuesday, April 5, 2016 at 1:09:46 PM UTC-4, Daniel Norber wrote:
> I have a generic package with a buffer functionality encapsulated using Ravenscar pragma profile.

I'm not sure of what you are really driving at--you probably aren't sure yourself.  The solution you are looking for may be an array of tasks inside a single package.  Task discriminants were added to allow such arrays to discover their identity during elaboration, and do what is necessarily different from members of the array at that time.

This should all happen during elaboration of the containing package.   I'm not sure if the Ravenscar pragmas will allow this.  You will probably want to have the real parameters for creating the buffers in an array, and the Ravenscar pragmas may object to that.  (Yes, we know that the array is static, but Ada only recognizes static scalars and strings.  Putting the data in a single huge String  would be ugly.)

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-05-05 21:01 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-05 17:09 How to do multiple instances of a generic packages in automated way. (using ravenscar profile) danielnorberto
2016-04-05 17:39 ` Jeffrey R. Carter
2016-04-05 19:39   ` Simon Wright
2016-04-07 12:05 ` danielnorberto
2016-04-07 12:36   ` G.B.
2016-04-11  9:14     ` Daniel Norber
2016-04-11 13:04       ` Shark8
2016-04-11 17:25         ` Daniel Norber
2016-04-11 15:58       ` Anh Vo
2016-04-11 17:21         ` Daniel Norber
2016-04-11 17:26           ` Anh Vo
2016-04-11 16:59       ` Jeffrey R. Carter
2016-04-11 17:23         ` Daniel Norber
2016-04-11 17:27           ` Jeffrey R. Carter
2016-04-12  5:19           ` Brad Moore
2016-04-26 15:08             ` Daniel Norber
2016-05-05 21:01 ` rieachus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox