Re: [XMLPipeDB-developer] GenMAPP multitaxon support - CMSI 486T
Brought to you by:
kdahlquist,
zugzugglug
|
From: Richard B. <rbr...@gm...> - 2011-08-02 07:31:38
|
Just committed some new code. Mainly adding the logic to append the
selected species with either generic or custom in the
speciesDescriptionTextArea and cleared out more old comments to keep me
focused.
Also read through the first part of the ExportToGenMAPP class to get a
handle on how it is sent the DatabaseProfile databaseProfile with a single
species packaged within. From that effort, I decided to start on
the databaseProfile.setSelectedSpeciesProfile method which would be modified
for a collection of SpeciesProfiles.
But I need to create that collection first back on ExportPanel1,
proceeding the JList selection/display code. I just need to wrap my head
around how to grab them and place them in a newly created SpeciesProfile []
selectedProfiles, which would then be used as the argument in
databaseProfile.setSelectedSpeciesProfiles( selectedProfiles );
We can discuss this further on our call tomorrow.
Richard
On Aug 1, 2011, at 11:13 AM, Kam Dahlquist <kda...@lm...> wrote:
Hi,
That works for me. Talk to you tomorrow,
Kam
At 11:04 AM 8/1/2011, you wrote:
Greetings,
No worries...for this week the best day turned out to be Tuesday; hope that
works well for you also. So, tomorrow at 9am unless setting else comes up.
John David N. Dionisio, PhD
Associate Professor, Computer Science
Loyola Marymount University
On Aug 1, 2011, at 10:46 AM, Kam Dahlquist <kda...@lm...> wrote:
Hi,
I'm so sorry, I was on my "staycation" last week and just completely forgot
about our scheduled phone call.
I'm back in the office--what are the plans for this week's call?
Thanks,
Kam
At 08:30 AM 7/28/2011, you wrote:
yes fri works for me. thank you!
richard
On Wed, Jul 27, 2011 at 9:42 PM, John David N. Dionisio <do...@lm...>
wrote: Greetings,
3pm Thursday won't work for me unfortunately. How about 9am Friday? I
can't stay too long even then but it will still be better than not talking
at all.
John David N. Dionisio, PhD Associate Professor, Computer Science Loyola
Marymount University
On Jul 27, 2011, at 7:42 PM, Richard Brous <rbr...@gm...> wrote:
Hi all, Sorry to fall out of touch but with finals and papers due this
week and and my mother in law back in the hospital, I'm about at my wits
end. That said, I was wondering if we could move our con call to tomorrow
afternoon if possible instead of 9am? ... Say 3pm 'ish? I don't want to miss
it as I would like to discuss a few things but I just can't make it at 9am
and then rushing to a 10am final exam. Sorry for the late notice but I
hope you both understand... smc classes will be over tomorrow and I can
focus much, much more on this afterwards. Richard
On Wed, Jul 20, 2011 at 10:38 PM, John David N. Dionisio <do...@lm...>
wrote: Hi Rich,
Congratulations! Welcome to the world of Swing GUI programming :) It has
its share of tics and idiosyncrasies, but with some practice one gets the
hang of it.
I've reviewed your new code and have interspersed commentary in the context
of your notes below. We don't have a lot of time tomorrow, so perhaps pick
and choose the ones that you feel will benefit the most from synchronous
discussion.
John David N. Dionisio, PhD Associate Professor, Computer Science Loyola
Marymount University
On Jul 20, 2011, at 9:22 PM, Richard Brous wrote:
> Hallelujah!!! - a list box with multiple species of which any combination
can be selected now exists!!! Thanks Dondi!! (see attachment) > > > OK, had
a chance to review the code corrections, other comments and think on the
next steps surrounding the selection of multiple species and their dynamic
text updating. Here is where I am at the moment: > > A. Dondis
corrections/additions to my last submission > > 1. Creating a private class
called SpeciesListModel which extended AbstractListModel > > As soon as I
saw your code I realized that I had sort of coded it backwards, thinking
about implementing an interface instead of just extending the abstract
object and adding methods... duh. My face turned a bit red on that one. > >
The idea still of creating a list model to manage the entries in the JList
still seems a bit complicated and foreign but I guess the more I work with
the java ui stuff, the better I will become with it.
Yes, it can be unwieldy in simple cases (like this one) and can sometimes
result in repetitive code. However, it is very flexible and truly
encapsulates the list data from the list presentation (for example, with
this approach, you can even create a ListModel that does not have a data
structure behind it; or perhaps one that queries for the list contents
dynamically).
> Additionally I did attempt to add a new method under this class called
clearSpeciesProfiles. This was meant to clear the JList of all species found
each time the export1 panel was opened instead of aggregating the species in
the list. It doesn't seem to be working though so I commented it out for
now. Please let me know if I'm adding this functionality in the wrong way
and/or in the incorrect location.
A couple of notes on this one. Observe how setSpeciesProfile *replaces* the
list of species profiles returned by the list model, and does not add to
it. Thus, I do not think that the duplication occurs at this level --- I
believe it occurs at the UniProtDatabaseProfile.checkRequirements method.
Follow the code from GenMAPPBuilder.doExportToGenMAPP and see if you spot
the issue. Remember that the symptom occurs when one tries to export more
than once. Thus, see what the code does to the relevant data structures
when GenMAPPBuilder.doExportToGenMAPP is called more than once.
> 2. SpringLayout > > I took a look at the website and got a feel for how to
adjust panel component locations. Seems like I can use those commands to
make the adjustment to the species label that you mentioned in comments. > >
Interesting how the leftPanel uses SpringUtilities.makeCompactGrid while the
rightPanel uses GridLayout... didn't realize you could combine both kinds on
content panel.
Yes, this is the power and complexity of Swing layout management --- you can
nest them as much as you like, and mix and match them as much as you like.
Powerful and flexible, yes; potentially complicated, yes also.
> B. further UI enhancements: > > 1. I dug into export1 design in regard to
the text description areas of both the Database and Species profiles. They
are both JTextAreas(3, 15) where 3 denotes rows and 15 denotes columns. I
changed both fields to be editable and compiled just so I could see how big
each text field really is. I was able to type in 23 characters across and 7
rows downward until the next row was cutoff by the bottom edge of the box. I
also changed the row and column arguments to JTextAreas(2, 15) and
JTextAreas(3, 10) and recompiled but didn't see any change in the volume of
text I could enter... must not understand it completely... are the arguments
only to manage components placed within the textArea maybe while loose text
just starts top left and word/line wraps? > > My reason for fooling with
this was to see what would happen of course but really I had the idea that I
would shrink the size of the database profileDescriptiontextArea to allow
for a larger speciesDescriptionTextArea below it. Also I had been thinking
of how to represent the species and its associated custom or default species
profile in a way that made the most sense. The species names are pretty long
so was going to suggest to simply use taxon id, profile type (custom or
default) since the user could cross reference in the JList just to the left.
This issue rests in some of the tricks behind Swing layout management.
Unlike conventional GUI design, where components are given fixed, absolute
coordinates and sizes, Swing tries to "compute" the layout dynamically,
based on a combination of rules, "preferred sizes," and min/max sizes. The
exact algorithm for determining the final layout is placed in the
LayoutManager class. The row/column settings given to JTextArea typically
pertain to *preferred* sizing, not final sizing. As in, the JTextArea
"asks" its containing panel that "if possible, I prefer to have this many
rows and columns." The rule of thumb is that a layout manager tries to give
its components their preferred sizes *or greater*, if available (the idea
being that most UI components wouldn't mind getting more space than they
originally asked for).
To exercise greater control over this, you'll need to get a better handle on
the behavior or the various layout managers. Certain layout managers *do*
cap a UI component's size to no greater than its preference. This takes
some practice, however, and some familiarity with the layout manager "zoo."
My suggestion: let's leave well enough alone here for now, get the
functionality done first, then come back to this later.
> 2. Dynamic insertion of desired species info into the
speciesDescriptionTextArea > > In thinking of how to solve this I went back
to code I had commented out in my last submission - the protected method
which detected a change in species choice occurred within the JComboBox:
speciesProfileSelected( Object selectedItem ) {
Yes, the fundamental change that you are making now is that *more than one
species profile may be active*. What you need to do, then, is to maintain
the selected species profiles as a collection, and not as a single value.
Then, all the code that used to assume that only a species profile gets
selected need to be modified so that they can accommodate a collection of
species profiles. Cases in point...
> I had been struggling with what that method really should be doing now
that we have a JList where multiple species could be selected. And after
some review and then walking away from it for a few, I think it only needs
to handle two things: > a. ensure that all the selected species are added to
the export dataset. (We then modify the export process itself to account for
and properly process multiple species.)
...This is the fundamental change that dominoes through the rest of the
export code. Instead of holding on to a single selected species profile,
you need to maintain a collection of them. Also...
> b. use the selected indices to populate/depopulate the
speciesDescriptionTextArea dynamically as a selection/deselection is made
within the JList. > I have some ideas but would like to talk them through
on the call tomorrow. I'll also submit my latest pass on the code for
review.
...This part requires some rewriting so that the generated descriptive text
can accommodate a collection of species profiles. The message generation
thus gets a little more complicated. But it's just additional logic,
iterating through the species profiles and incrementally appending a message
string until you've gone through all of the selected profiles. e.g., "This
export will use a customized profile for S. typhimurium, a general-purpose
profile for B. anthracis, and a customized species profile for H. pylori."
Hope you can see how that string can be computed via iteration through a
species profile collection.
OK, that would be my 2 cents...let's see what needs live discussion tomorrow
morning.
> Richard > > > > On Wed, Jul 20, 2011 at 9:00 AM, John David N. Dionisio <
do...@lm...> wrote: > Sounds good, talk to everyone Thursday 9am then :) >
> John David N. Dionisio, PhD > Associate Professor, Computer Science >
Loyola Marymount University > > > On Jul 20, 2011, at 8:47 AM, Kam Dahlquist
<kda...@lm...> wrote: > > > Hi, > > > > I'm OK for Thursday, too.
Sorry, I don't generally check my e-mail > > at night. Hope everything is
OK. In the future, don't hesitate to > > move things if I'm not responding,
I'll catch up eventually :) > > > > Best, > > Kam > > > > At 08:29 AM
7/20/2011, John David N. Dionisio wrote: > >> OK, acknowledged. Take care. >
>> > >> John David N. Dionisio, PhD > >> Associate Professor, Computer
Science > >> Loyola Marymount University > >> > >> > >> > >> On Jul 20,
2011, at 8:25 AM, Richard Brous wrote: > >> > >>> OK, I am forced to push to
tomorrow now because our nanny is > >> stuck in traffic, christina is back
at the hospital and I have to > >> drive my boys to MDR for their camp. >
>>> > >>> I'm sorry this is so crazy but all is upside down atm. > >>> > >>>
I already have a bunch of questions which I will lay out via > >> email
since they are more high level than can be placed in code > >> comments...
at least I think so atm. > >>> > >>> Either way come hell or high-water I'll
get another iteration on > >> this prior to a call. > >>> > >>> rb > >>> >
>>> On Tue, Jul 19, 2011 at 11:21 PM, John David N. Dionisio > >> <
do...@lm...> wrote: > >>> Hi Rich, > >>> > >>> Sorry to hear about your
mother-in-law. Hospital wait states are > >> never fun. > >>> > >>> I can
do Thursday morning at 9am if needed. Let's watch the > >> e-mail in the
morning to see if Kam can do that too; if so, then > >> Thursday it is, but
if not, then we can still push for Wednesday 9am. > >>> > >>> John David N.
Dionisio, PhD > >>> Associate Professor, Computer Science > >>> Loyola
Marymount University > >>> > >>> > >>> > >>> On Jul 19, 2011, at 10:26 PM,
Richard Brous wrote: > >>> > >>>> ok, can't get a break... sitting in the ER
after admitting my > >> mother in law at St. Johns in Santa Monica. We are
waiting to get > >> her a bed but not sure how long it will take. > >>>> >
>>>> Luckily I have my laptop with me so I was able to scan the new > >>
code with all the Dondi comments and compile a build which runs. I > >> will
review Dondi's changes as best I can from here but likely > >> won't be able
to do much with it by our call tomorrow. > >>>> > >>>> I'm happy to push our
call to Thursday morning instead of > >> tomorrow to allow more time... but
it is late so unless I hear > >> otherwise, tomorrow at 9am is still a go. >
>>>> > >>>> Richard > >>>> > >>>> On Tue, Jul 19, 2011 at 3:00 PM, Richard
Brous > >> <rbr...@gm...> wrote: > >>>> Thanks will review later this
afternoon. Sorry got hung up on > >> this but continuing forward comments in
code should speed this way up. > >>>> > >>>> Rb > >>>> > >>>> Sent from my
iPhone > >>>> > >>>> On Jul 19, 2011, at 12:04 AM, "John David N. Dionisio" >
>> <do...@lm...> wrote: > >>>> > >>>>> Greetings, > >>>>> > >>>>> OK, my
responses are committed. As noted in my "Dondi -" > >> comments, you were
fairly close. The main miss was how > >> AbstractListModel was to be used.
Give it a gander and holler if > >> anything else remains unclear. > >>>>> >
>>>>> At this point, you'll need to start managing what should > >> happen
as the user selects/deselects species. You'll also want > >> that little
informational panel on the right that summarizes (for > >> tech types)
whether the selected species will be using a customized > >> species profile
or the generic one. > >>>>> > >>>>> Carry on, see how this goes. :) > >>>>>
> >>>>> John David N. Dionisio, PhD > >>>>> Associate Professor, Computer
Science > >>>>> Loyola Marymount University > >>>>> > >>>>> > >>>>> On Jul
18, 2011, at 10:14 AM, Richard Brous wrote: > >>>>> > >>>>>> Ok , took the
code as far as I could and submitted export 1 > >> - unfortunately broken
code even though I made a point not to by > >> commenting out unfinished
blocks. Take a look at the commit comments for info. > >>>>>> > >>>>>> I
look forward to your comments which I'm sure will help > >> straighten this
out! > >>>>>> > >>>>>> Rb > >>>>>> > >>>>>> Sent from my iPhone > >>>>>> >
>>>>>> On Jul 12, 2011, at 6:35 PM, "John David N. Dionisio" > >> <
do...@lm...> wrote: > >>>>>> > >>>>>>> Hi there, > >>>>>>> > >>>>>>> A
code-oriented session is OK with me, though this > >> particular question I
can take a stab at via e-mail. > >>>>>>> > >>>>>>> The trick with full
control of a JList is to implement its > >> model (a ListModel). For this,
I usually create a subclass of > >> AbstractListModel and implement the
missing methods. This > >> AbstractListModel subclass should be able to see
the list of > >> species found. Then, the implementations of its missing
methods > >> would be based on that list of species. > >>>>>>> > >>>>>>>
With this ListModel class in hand, keeping the JList up to > >> date is a
matter of instantiating the JList with this model: > >>>>>>> > >>>>>>>
SpeciesListModel speciesListModel = new SpeciesListModel(); > >>>>>>>
speciesCheckList = new JList(speciesListModel); > >>>>>>> > >>>>>>> If the
species list changes, have the species list model > >> fire the appropriate
list change event (the JavaDoc API has a bunch > >> of fire* methods). To
keep things simple, there is a "full update" > >> event which just says
"rebuild the entire JList." That one should > >> be OK. There are
finer-grained ones like "something got inserted" > >> and "something got
removed," but that really is more for optimization purposes. > >>>>>>> >
>>>>>>> As for the text display, the simplest approach is to > >> implement
the toString method of the SpeciesProfile class so that > >> they return
something that is appropriate for a JList. Sometimes > >> that is too
limiting though. If you want greater flexibility, you > >> will want to
implement a ListCellRenderer. There is a class called > >>
DefaultListCellRenderer that you can extend. Typically the > >> subclass
would call the superclass's method, which returns a > >> JLabel. You can
then change the content of the JLabel according to > >> the list item that
you are trying to display. > >>>>>>> > >>>>>>> See if these leads are enough
to go on. If not, I can talk > >> you through them more during the call. >
>>>>>>> > >>>>>>> John David N. Dionisio, PhD > >>>>>>> Associate Professor,
Computer Science > >>>>>>> Loyola Marymount University > >>>>>>> > >>>>>>> >
>>>>>>> On Jul 12, 2011, at 6:00 PM, Richard Brous wrote: > >>>>>>> >
>>>>>>>> Update for tomorrow 7/13/11: > >>>>>>>> > >>>>>>>> Clear on what I
need to do but can't seem to figure out a > >> way to do it. I think the
best use of our time tomorrow is to make > >> it a code discussion session
(giving Dr. Dahlquist the opportunity > >> to bow out if so inclined) >
>>>>>>>> > >>>>>>>> 1. In regard to the JList, I have been working on the
best > >> way to implement it but am getting stuck on how to populate it and
> >> where to do so in the code. > >>>>>>>> > >>>>>>>> I'm currently working
in ExportPanel1.java and have done > >> the following so far: > >>>>>>>> >
>>>>>>>> imported JList; > >>>>>>>> imported javax.swing.event.*; > >>>>>>>>
> >>>>>>>> > >>>>>>>> public class ExportPanel1 extends JPanel { > >>>>>>>>
added: private JList speciesCheckList; > >>>>>>>> > >>>>>>>> private JPanel
getContentPanel () { > >>>>>>>> underneath the species combo box entry //
species | > >> JComboBox | speciesFound |JLabel | Description | ... >
>>>>>>>> > >>>>>>>> added: speciesCheckList = new JList (
speciesProfilesFound ); > >>>>>>>> > >>>>>>>> // registered the listeners >
>>>>>>>> speciesCheckList.addListSelectionListener ( new > >>
ListSelectionListener () { > >>>>>>>> // handle list selection > >>>>>>>>
public void valueChanged ( ListSelectionEvent e ) { > >>>>>>>> // get
selected indices > >>>>>>>> int [] indices =
speciesCheckList.getSelectedIndices (); > >>>>>>>> } > >>>>>>>> }); >
>>>>>>>> > >>>>>>>> added: //leftPanel.add ( speciesComboBox ); >
>>>>>>>> leftPanel.add ( speciesCheckList ); > >>>>>>>> > >>>>>>>> The
real issue here is how to populate the JList... I took > >> a look at the
constructors but can't determine a way to populate it > >> after
instantiation... maybe using abstract class somehow? > >>>>>>>> > >>>>>>>>
So instead I have been working to add the > >> speciesProfilesFound []
ArrayList as a constructor argument. Then I > >> can pre-populate it prior
to the contentPanel being > >> initialized???... or possibly similar to the
init() method which > >> pre-populates the Database profileComboBox? >
>>>>>>>> > >>>>>>>> Once the initital population of the JList is done we can
> >> modify it for the later methods which dynamically alter content in > >>
databaseProfileSelected() and speciesProfileSelected(). This will > >>
effect the selectedSpeciesProfile() method usage and its getter and setter. >
>>>>>>>> > >>>>>>>> Also we can then work on the text indication which > >>
dynamically shows the selected species and whether a custom or > >> generic
profile has been associated. > >>>>>>>> > >>>>>>>> Dondi - I'm looking
forward to your suggestions and assistance!!! > >>>>>>>> > >>>>>>>> Richard >
>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Wed, Jul 6, 2011 at 10:58 PM,
John David N. Dionisio > >> <do...@lm...> wrote: > >>>>>>>> Hi Rich, >
>>>>>>>> > >>>>>>>> OK, thanks for the discussion setup. We'll work through
> >> this during the call. > >>>>>>>> > >>>>>>>> John David N. Dionisio, PhD
> >>>>>>>> Associate Professor, Computer Science > >>>>>>>> Loyola Marymount
University > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Jul 6, 2011, at
7:37 PM, Richard Brous wrote: > >>>>>>>> > >>>>>>>>> Update on status: >
>>>>>>>>> > >>>>>>>>> Over the past two weeks I have spent time doing the
following: > >>>>>>>>> > >>>>>>>>> 1. Reviewed the taxon id code changes
which Don Murphy > >> coded and were merged to create version 2.0 b64 >
>>>>>>>>> 2. Reviewed the UniprotDatabaseProfile, > >>
UniprotSpeciesProfile, SpeciesProfile, Profile and DatabaseProfile files >
>>>>>>>>> 3. Reviewed and discussed the process by which GenMAPP > >>
matches single taxon ids found in a Postgres db with the known > >> species
profiles. > >>>>>>>>> > >>>>>>>>> Current actions: > >>>>>>>>> > >>>>>>>>>
During the last few days I have started coding in the > >> ability for the
species matching functionality to surface multiple > >> taxon ids from
within a Postgres db. > >>>>>>>>> > >>>>>>>>> The process being the
following steps: > >>>>>>>>> > >>>>>>>>> 1. Grab all the taxon ids from the
Postgres db > >>>>>>>>> The current iteration of the software already does
this. > >> In the checkRequirements method in UniprotDatabaseProfile.java, a
> >> query of the Postgres db acquires all taxon id's and stores them in >
>> ResultSet result variable. > >>>>>>>>> > >>>>>>>>> 2. Check to find match
between the taxon ids from > >> Postgres against existing species profiles
for known species. > >>>>>>>>> > >>>>>>>>> The current iteration compares
each taxon id in ResultSet > >> result variable. > >>>>>>>>> First taxon id
from result: > >>>>>>>>> If match was found, then that species profile with >
>> associated taxon id was added to the speciesProfilesFound arraylist. >
>>>>>>>>> If no match was found, a generic species profile > >> associated
with the current taxon id was added to the > >> speciesProfilesFound
arraylist. > >>>>>>>>> > >>>>>>>>> Next taxon id from result > >>>>>>>>> If
match was found, then that species profile with > >> associated taxon id was
added to the speciesProfilesFound arraylist. > >>>>>>>>> If no match was
found, a generic species profile > >> associated with the current taxon id
was added to the > >> speciesProfilesFound arraylist. > >>>>>>>>> >
>>>>>>>>> Repeat until no more taxon ids are found in ResultSet > >> result
variable. > >>>>>>>>> > >>>>>>>>> 3. Replace the JComboBox with a JList to
allow the user > >> to choose a selection of multiple species to export. >
>>>>>>>>> > >>>>>>>>> Use the getSelectedIndices method for JList to
determine > >> which species have been selected for export. > >>>>>>>>> >
>>>>>>>>> 4. Modify the export process to run a pass for each > >> species
selected to generate a multispecies gdb. > >>>>>>>>> details to be
determined. > >>>>>>>>> > >>>>>>>>> > >>
-----------------------------------------------------------------------------------------------------------------------------------------------------------
> >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Discussion for tomorrows call: >
>>>>>>>>> > >>>>>>>>> > >>>>>>>>> We previously discussed allowing user
input to manually > >> add taxon ids and associate them to the generic
profile. > >>>>>>>>> > >>>>>>>>> Unless I don't really understand the
reasoning behind > >> this, it seems to me that it is unnecessary. Why would
we add a > >> taxon id during the export process that isn't already in the
Postgres data? > >>>>>>>>> > >>>>>>>>> The current implementation already
captures every taxon > >> id in speciesProfilesFound regardless if its a
known species or > >> not. So it seems that we don't need to make any
modifications in > >> surfacing taxon ids from a Postgres db. > >>>>>>>>> >
>>>>>>>>> Then we can go directly to #3 above which I have mostly > >>
coded, but can't seem to figure out how and where to populate the > >>
JList. In reviewing constructor documentation it indicates 4 ways > >> to
instantiate. > >>>>>>>>> > >>>>>>>>> My first choice was to create an empty
JList [ JList () ] > >> and populate it later but I don't see a method to do
so such as > >> addItems or something similar. > >>>>>>>>> > >>>>>>>>> I
then tried to instantiate with speciesProfileFound as > >> an array
argument: JList ( SpeciesProfile[] speciesProfilesFound ) > >> but can't
resolve. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Anyway, I look forward to our
call at 9am tomorrow. > >>>>>>>>> > >>>>>>>>> Richard > >>>>>>>>>
<ATT00001..txt><ATT00002..txt> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>
------------------------------------------------------------------------------
> >>>>>>>> All of the data generated in your IT infrastructure is > >>
seriously valuable. > >>>>>>>> Why? It contains a definitive record of
application > >> performance, security > >>>>>>>> threats, fraudulent
activity, and more. Splunk takes this > >> data and makes > >>>>>>>> sense
of it. IT sense. And common sense. > >>>>>>>>
http://p.sf.net/sfu/splunk-d2d-c2 > >>>>>>>>
_______________________________________________ > >>>>>>>>
xmlpipedb-developer mailing list > >>>>>>>>
xml...@li... > >>>>>>>>
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >>>>>>>> >
>>>>>>>> <ATT00001..txt><ATT00002..txt> > >>>>>>> > >>>>>>> > >>>>>>> > >>
------------------------------------------------------------------------------
> >>>>>>> AppSumo Presents a FREE Video for the SourceForge Community by
Eric > >>>>>>> Ries, the creator of the Lean Startup Methodology on "Lean
Startup > >>>>>>> Secrets Revealed." This video shows you how to validate
your ideas, > >>>>>>> optimize your ideas and identify your business
strategy. > >>>>>>> http://p.sf.net/sfu/appsumosfdev2dev > >>>>>>>
_______________________________________________ > >>>>>>>
xmlpipedb-developer mailing list > >>>>>>>
xml...@li... > >>>>>>>
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >>>>>> >
>>>>>> > >>
------------------------------------------------------------------------------
> >>>>>> AppSumo Presents a FREE Video for the SourceForge Community by Eric
> >>>>>> Ries, the creator of the Lean Startup Methodology on "Lean Startup >
>>>>>> Secrets Revealed." This video shows you how to validate your ideas, >
>>>>>> optimize your ideas and identify your business strategy. > >>>>>>
http://p.sf.net/sfu/appsumosfdev2dev > >>>>>>
_______________________________________________ > >>>>>> xmlpipedb-developer
mailing list > >>>>>> xml...@li... > >>>>>>
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >>>>> >
>>>>> > >>>>> > >>
------------------------------------------------------------------------------
> >>>>> Magic Quadrant for Content-Aware Data Loss Prevention > >>>>>
Research study explores the data loss prevention market. > >> Includes
in-depth > >>>>> analysis on the changes within the DLP market, and the
criteria used to > >>>>> evaluate the strengths and weaknesses of these DLP
solutions. > >>>>> http://www.accelacomm.com/jaw/sfnl/114/51385063/ > >>>>>
_______________________________________________ > >>>>> xmlpipedb-developer
mailing list > >>>>> xml...@li... > >>>>>
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >>>> >
>>>> <ATT00001..txt><ATT00002..txt> > >>> > >>> > >>> > >>
------------------------------------------------------------------------------
> >>> 10 Tips for Better Web Security > >>> Learn 10 ways to better secure
your business today. Topics covered include: > >>> Web security, SSL, hacker
attacks & Denial of Service (DoS), private keys, > >>> security Microsoft
Exchange, secure Instant Messaging, and much more. > >>>
http://www.accelacomm.com/jaw/sfnl/114/51426210/ > >>>
_______________________________________________ > >>> xmlpipedb-developer
mailing list > >>> xml...@li... > >>>
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >>> > >>>
<ATT00001..txt><ATT00002..txt> > >> > >> > >>
------------------------------------------------------------------------------
> >> 10 Tips for Better Web Security > >> Learn 10 ways to better secure
your business today. Topics covered include: > >> Web security, SSL, hacker
attacks & Denial of Service (DoS), private keys, > >> security Microsoft
Exchange, secure Instant Messaging, and much more. > >>
http://www.accelacomm.com/jaw/sfnl/114/51426210/ > >>
_______________________________________________ > >> xmlpipedb-developer
mailing list > >> xml...@li... > >>
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > > > > > >
------------------------------------------------------------------------------
> > 10 Tips for Better Web Security > > Learn 10 ways to better secure your
business today. Topics covered include: > > Web security, SSL, hacker
attacks & Denial of Service (DoS), private keys, > > security Microsoft
Exchange, secure Instant Messaging, and much more. > >
http://www.accelacomm.com/jaw/sfnl/114/51426210/ > >
_______________________________________________ > > xmlpipedb-developer
mailing list > > xml...@li... > >
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >
------------------------------------------------------------------------------
> 10 Tips for Better Web Security > Learn 10 ways to better secure your
business today. Topics covered include: > Web security, SSL, hacker attacks
& Denial of Service (DoS), private keys, > security Microsoft Exchange,
secure Instant Messaging, and much more. >
http://www.accelacomm.com/jaw/sfnl/114/51426210/ >
_______________________________________________ > xmlpipedb-developer
mailing list > xml...@li... >
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer > >
<export1-crop.jpg><ATT00001..txt><ATT00002..txt>
------------------------------------------------------------------------------
5 Ways to Improve & Secure Unified Communications Unified Communications
promises greater efficiencies for business. UC can improve internal
communications as well as offer faster, more efficient ways to interact with
customers and streamline customer service. Learn more!
http://www.accelacomm.com/jaw/sfnl/114/51426253/
_______________________________________________
xmlpipedb-developer mailing list xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
------------------------------------------------------------------------------
Got Input? Slashdot Needs You. Take our quick survey online. Come on, we
don't ask for help often. Plus, you'll get a chance to win $100 to spend on
ThinkGeek. http://p.sf.net/sfu/slashdot-survey
_______________________________________________
xmlpipedb-developer mailing list xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
------------------------------------------------------------------------------
Got Input? Slashdot Needs You. Take our quick survey online. Come on, we
don't ask for help often. Plus, you'll get a chance to win $100 to spend on
ThinkGeek. http://p.sf.net/sfu/slashdot-survey
_______________________________________________
xmlpipedb-developer mailing list xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts.
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
xmlpipedb-developer mailing list
xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
The must-attend event for mobile developers. Connect with experts.
Get tools for creating Super Apps. See the latest technologies.
Sessions, hands-on labs, demos & much more. Register early & save!
http://p.sf.net/sfu/rim-blackberry-1
_______________________________________________
xmlpipedb-developer mailing list
xml...@li...
https://lists.sourceforge.net/lists/listinfo/xmlpipedb-developer
|