text:
User talk:Linda Lightbourne

Knowledge has a shelf life! It is not enough to say that you have a Bachelor's degree. The knowledge you gained twenty years ago has lost its shelf life. People who are functioning well have done so on their own, outside of the degree, and gone on to build their knowledge base through experience and soft skills or emotional intelligence. Those who have tried to counteract this problem have created training sessions that have been a waste of money because of the single-loop learning that has taken place. Consequently, billions of dollars have been lost in ineffective training programs.

Organizational Learning: processes
Knowledge has a shelf life! It is not enough to say that you have a Bachelor's degree. The knowledge you gained twenty years ago has lost its shelf life. People who are functioning well have done so on their own, outside of the degree, and gone on to build their knowledge base through experience and soft skills or emotional intelligence. Those who have tried to counteract this problem have created training sessions that have been a waste of money because of the single-loop learning that has taken place. Consequently, billions of dollars have been lost in ineffective training programs.

Retrieved from "http://en.wikibooks.org/wiki/User_talk:Linda_Lightbourne"

Knowledge Management Processes
In his article entitled Research and the Creation of Training Intelligence, Irving H. Buchen asserts that “Research is like innovation. Both optimize. In particular, research drives business to be not just knowledge based but also knowledge creating, not just research users but research providers. It compels the next step, the road not taken, the inquiry not pursued. Increasingly, before savvy professionals embark on any new venture, they ask four related questions: 1)	What do we know? 2) What does the research show? 3) Who in our industry is doing what? And 4) Does the problem and the solution have a future? (Buchen, 2006, p. 1). In the last decade or so, these industry-wide questions are being asked of researchers and consultants. If the specific industry is not getting the answers to any part of these four questions, then they are resorting to doing their own R&D instead of depending on universities and consultants to do their R&D. Knowledge Management: Leadership Learning is good for business. Jack Welch, in one of his letters to customers, shareholders and employees said: “The most significant change in GE has been its transformation into Learning Company”. In his white paper, Joe Dougherty, the President of Thomson NETg said: Corporate learning matters to the Board for two fundamental reasons: 1) The Board’s responsibility is to protect the health and grow the value of the corporation. Directors must also take a long term view of corporate performance and assets, paying constant attention to the organization’s ability to learn and change. 2) Making the cultural change to embrace learning requires genuine leadership. Business leaders must take the time to make it happen. But senior executives are often under severe short-term performance pressures. They may not have the time or resources to devote to a perceived “soft” issue like learning. The Board has to promote it as a priority – and lead on the issue. (Dougherty, 2005, p. 3). Knowledge Management: Processes There are many critical processes that an organization has to go through in order to determine their profitability where corporate learning is concerned. One of these processes is the development of an organizational portfolio. Sue Todd, President of Corporate University Exchange explains that “Portfolio management is a process that will quickly make its way into the hands of L & D organizations that want to make good strategic decisions with the organizations investments in corporate learning. Those who are seeking the optimum path to achieving alignment between learning and business performance will begin to make portfolio management a key and critical process in developing the actual enterprise learning strategy.” (Linnehan & Todd, 2005, p. 8) There are three critical questions that each crisis or issue should address: 1) What is the significance of the event? Will this require monumental change or will the organization have to just be aware of the issue?  2) What is its impact? Who does it affect? Will consequences be felt internally at the top of the organization, middle, bottom or all three? 3) What action is required? Does it require immediate action? Does the issue warrant building a case for change? Does the issue just require that we develop awareness of the topic? These questions are monumental in making sure that we keep first things first.  Failing to address these questions can have leadership spinning their wheels, putting out the latest fire or catering to the squeakiest wheel.

Knowledge Management: Change
Knowledge Management: Change In their article, "Four essential ingredients for transforming culture", D’Aprix and Tyler lay out a situation in an automotive industry where Asian part-makers have over taken their American counterparts in offering a competitive product at a superior price. The company is saddled with exorbitant health care and pension costs that have made this company non-competitive against other global car manufacturers. In an attempt to change the culture, the first thing they came up with was a “Winning Together” campaign initiative that issued wallet cards to each employee, showing the new company values. Because of the lack of trust and low morale within the company, the campaign was not successful. It came across to the workers as just one more thing to do. D’Aprix and Tyler suggest four things that will make a difference in transforming the culture in the face of a crisis. Instead of just implementing changes, explain to the workforce why change is necessary. “The driving force of culture change is the market place.”(D'Aprix & Tyler, 2006, p. 23). Sometimes, senior management resist communicating openly because of the underlying belief that employees are not capable of fully understanding the external market realities or that an honest disclosure of the full case for change would cause undue panic, the loss of key talent, or loss in productivity. Typically, such organizations are suffering from all these symptoms already. Senior management has not acknowledged the symptoms. So disclosing the full reality of the situation may be the key to transforming the culture.

Knowledge Management: Leadership
Learning is good for business. Jack Welch, in one of his letters to customers, shareholders and employees said: “The most significant change in GE has been its transformation into Learning Company”. In his white paper, Joe Dougherty, the President of Thomson NETg said: Corporate learning matters to the Board for two fundamental reasons: 1) The Board’s responsibility is to protect the health and grow the value of the corporation. Directors must also take a long term view of corporate performance and assets, paying constant attention to the organization’s ability to learn and change. 2) Making the cultural change to embrace learning requires genuine leadership. Business leaders must take the time to make it happen. But senior executives are often under severe short-term performance pressures. They may not have the time or resources to devote to a perceived “soft” issue like learning. The Board has to promote it as a priority – and lead on the issue. (Dougherty, 2005, p. 3).

Knowledge Management: Challenges
Knowledge Management: Challenges One of the challenges of knowledge management is the brain drain that comes from people retiring or moving on to other organizations and taking all their knowledge with them. It is imperative that knowledge sharing become part of the culture. Specific and codified v. diffuse and implicit knowledge is worth mentioning here because countries where the good of the community is placed above the good of the individual, more community knowledge sharing takes place and so expectations and new knowledge is readily made available from generation to generation, from employee to employee, from employer to employee, and from one department to the next. If the good of the individual is placed above the good of the community, then the one who has knowledge has a choice of either codifying it by writing it in a procedures manual or using it as a weapon of force, threat or superiority.

Organizational Learning: processes:Contributions by Discipline
There are many similarities between organizational learning and the discipline of fine arts. As it relates to music as it is in business, you begin with the end in mind. You have a vision of a full orchestra playing the finished work. There is a need to write the mission statement and procedures manual in different ways, because different instruments have different key signatures and have limitations on how high they can go or how low they can go. When a trumpet and a clarinet sound a Bb, that sound is equivalent to a C on the violin or an F on the Trombone. Just as it is necessary to use the manuscript to make these adjustments to the different instruments, so it is necessary to use the vision and procedures statements to write the role of different key players in a business. The lower sounding instruments have to have parts written for them based on the mission statement, vision statement, the function of the whole but appropriate to their personality, ability and purpose. The higher sounding instruments need to have parts written for them, based on their purpose, personality and abilities also, but they are radically different from the purpose, personality and abilities of the lower sounding instruments. The function of the conductor and the section leaders is to ensure that their part of the whole is executed correctly and that the instruments in their section are working well inside of the ability of the instruments of their particular section. This is a function of leadership. No tuba is happy playing the role of a flute! The parts written have to be embedded in the activities of the instrument and therefore make the activities purpose driven. The purpose is embedded in the original manuscript. The leadership has to teach the players, not how to play their instruments, that is a function outside of the orchestra rehearsal setting, but to use their instruments to buy into the vision; to teach different functions of the whole; to keep the big picture in mind at all times, to work in teams, to compliment each other and share information with each other, to be aware of the functions of different “departments” and work in tandem with each team. We have all heard an orchestra warming up. Each player is playing the right part, according to the manuscript, the mission and procedures manual, but if they are all doing the right thing on their own, in silos, whether it is an individual silo, or departmental silo, the manuscript is still not being played in a way that benefits all the participants or the hearers, the management, the customers or the stockholders. Like many businesses, all the players are but part of the whole and many are operating in silos. They are doing a lot of right things and executing difficult things well, but they are not being done in a way that benefits the big picture or the vision of the company. The end result is the same chaos that you hear when you hear an orchestra warming up and practicing before a performance. It takes a knowledgeable leadership team and dedicated players to make the chaos of an orchestra warming up to turn the manuscript into a living, breathing document, where all of the activities of the individual instruments are in line and in time with the articulated and demonstrated vision of the leadership. If all the parts made up the whole and the organization followed its mandate in tandem what we would have is beautiful music and a level five learning organization!

Organizational Learning: processes:Contributions by Discipline
Organizational Learning: Contributions by Discipline There are many similarities between organizational learning and the discipline of fine arts. As it relates to music as it is in business, you begin with the end in mind. You have a vision of a full orchestra playing the finished work. There is a need to write the mission statement and procedures manual in different ways, because different instruments have different key signatures and have limitations on how high they can go or how low they can go. When a trumpet and a clarinet sound a Bb, that sound is equivalent to a C on the violin or an F on the Trombone. Just as it is necessary to use the manuscript to make these adjustments to the different instruments, so it is necessary to use the vision and procedures statements to write the role of different key players in a business. The lower sounding instruments have to have parts written for them based on the mission statement, vision statement, the function of the whole but appropriate to their personality, ability and purpose. The higher sounding instruments need to have parts written for them, based on their purpose, personality and abilities also, but they are radically different from the purpose, personality and abilities of the lower sounding instruments. The function of the conductor and the section leaders is to ensure that their part of the whole is executed correctly and that the instruments in their section are working well inside of the ability of the instruments of their particular section. This is a function of leadership. No tuba is happy playing the role of a flute! The parts written have to be embedded in the activities of the instrument and therefore make the activities purpose driven. The purpose is embedded in the original manuscript. The leadership has to teach the players, not how to play their instruments, that is a function outside of the orchestra rehearsal setting, but to use their instruments to buy into the vision; to teach different functions of the whole; to keep the big picture in mind at all times, to work in teams, to compliment each other and share information with each other, to be aware of the functions of different “departments” and work in tandem with each team. We have all heard an orchestra warming up. Each player is playing the right part, according to the manuscript, the mission and procedures manual, but if they are all doing the right thing on their own, in silos, whether it is an individual silo, or departmental silo, the manuscript is still not being played in a way that benefits all the participants or the hearers, the management, the customers or the stockholders. Like many businesses, all the players are but part of the whole and many are operating in silos. They are doing a lot of right things and executing difficult things well, but they are not being done in a way that benefits the big picture or the vision of the company. The end result is the same chaos that you hear when you hear an orchestra warming up and practicing before a performance. It takes a knowledgeable leadership team and dedicated players to make the chaos of an orchestra warming up to turn the manuscript into a living, breathing document, where all of the activities of the individual instruments are in line and in time with the articulated and demonstrated vision of the leadership. If all the parts made up the whole and the organization followed its mandate in tandem what we would have is beautiful music and a level five learning organization!

Organizational Learning:Agents
(Lim & Chan, 2004, p. 106) assert that “as organizational learning is increasingly recognized to be an important paradigm for contemporary organizations’ survival and success, a better understanding of the theories and frameworks is critical.” In their article “Development and Application of an Organizational Learning Matrix”, they refer to Argyris’s major types of learning; however I’m using Lim and Chan’s version, because they clink it to a matrix. Single loop learning, which is the same as non-strategic learning, does very little to change behavior. It may help in reacting to a problem, but it does not go far enough to solve the problem. If  a company just wants to maintain its existing processes, single loop learning might, in some circumstances, be sufficient. For example, a business whose environment is characterized by low volatility can get away with single-loop learning. Typically this kind of organization is not equipped to handle a crisis. They engage in shock learning and respond with knee-jerk reactions to deal with a situation that would threaten their ability to be competitive. It is the belief of the author of this article, that if an organization that is operating a highly volatile business environment is “stuck” in single-loop learning, they are destined to failure. Double loop learning is required for complex and non-programmable issues. (Lim & Chan, 2004, p. 101). The term double-looping is also referred to as high-level learning, generative learning or strategic learning. This kind of learning occurs when the organization is willing to question long-held assumptions and behaviors. This kind of learning is transformational in that assumptions, and ways of thinking and doing things, even if they stay the same, have been challenged and validated. Double-loop learning provides opportunity for organizations to improve. However, sustainable competitive advantage requires deutero-learning. In the book, Handbook of Organizational Learning and Knowledge, the authors offer a definition of deutero-learning by saying that deutero-learning is an even higher level of reflexivity that is said to occur when the learning process itself is examined anew. (Berthoin Antal, Dierkes, Child, & Nonaka, 2001, p. 924).

Behavioralist Theories
The General Assumptions of Behaviorist Theories are as follows: 1) Principles of learning apply equally to different behaviors and to different species of animals. 2) Learning processes can be studied most objectively when the focus of the study is on stimuli and responses. 3) Internal cognitive processes are largely excluded from scientific study 4) Learning involves a behavior change. 5) Learning is largely the result of environmental events. Students should be active respondents; people are most likely to learn when they actually have a chance to behave.  Also, student learning must be evaluated; only measurable behavior changes can confirm that learning has taken place. Many theorists emphasize the importance of rewards or reinforcements for learning. A good example of measuring behavior is seen in all of the sports arenas.  In the last two decades, the Corporate University has been using the measurable behavior as an indicator of learning in the workplace.  It is paying off handsomely for the individual and for the corporations who use this means of measuring learning.

Remarkably, people can learn from the moment of birth. Learning can and should be a lifelong process. Learning shouldn't be defined by what happened early in life, only at school. We constantly make sense of our experiences and consistently search for meaning. In essence, we continue to learn. Though humans like the familiar and are often uncomfortable with change, the brain searches for and will respond to novelty. "Ah-ha!" you may think. "That's why I hated freshman English. No novelty!" Rote learning frustrates us because the brain resists meaningless stimuli. When we invoke the brain's natural capacity to integrate information, however, we can assimilate boundless amounts. This may explain why sometimes a tough class, one you never thought you would get through, was one of your all-time favorites. Western society once believed adults didn't learn. Even today, if you ask a group why adults cannot learn, it may surprise you how many begin answering the question without challenging the premise. Unfortunately, many adults deny themselves what should be one of the most enriching parts of life because they assume they can't learn. We can learn from everything the mind perceives (at any age). Our brains build and strengthen neural pathways no matter where we are, no matter what the subject or the context. In today's business environment, finding better ways to learn will propel organizations forward. Strong minds fuel strong organizations. We must capitalize on our natural styles and then build systems to satisfy needs. Only through an individual learning process can we re-create our environments and ourselves.

Adult Learning Theories
Remarkably, people can learn from the moment of birth. Learning can and should be a lifelong process. Learning shouldn't be defined by what happened early in life, only at school. We constantly make sense of our experiences and consistently search for meaning. In essence, we continue to learn. Though humans like the familiar and are often uncomfortable with change, the brain searches for and will respond to novelty. "Ah-ha!" you may think. "That's why I hated freshman English. No novelty!" Rote learning frustrates us because the brain resists meaningless stimuli. When we invoke the brain's natural capacity to integrate information, however, we can assimilate boundless amounts. This may explain why sometimes a tough class, one you never thought you would get through, was one of your all-time favorites. Western society once believed adults didn't learn. Even today, if you ask a group why adults cannot learn, it may surprise you how many begin answering the question without challenging the premise. Unfortunately, many adults deny themselves what should be one of the most enriching parts of life because they assume they can't learn. We can learn from everything the mind perceives (at any age). Our brains build and strengthen neural pathways no matter where we are, no matter what the subject or the context. In today's business environment, finding better ways to learn will propel organizations forward. Strong minds fuel strong organizations. We must capitalize on our natural styles and then build systems to satisfy needs. Only through an individual learning process can we re-create our environments and ourselves.

Organizational Learning:Triggers
In order for an organization to make a change there is more often than not, a trigger that sets the learning in motion. Unfortunately, single loop learning can get in the way of progress in such a situation. Different kinds of organizational learning have to drive the decisions made in such times. A trigger is an event that demands an immediate change from what is business as usual. It usually is a crisis that creates need for a change in thought pattern and behavior. It could be as serious as a law suit that is threatening to bring the company under, or something as different as State regulations changing, creating a need for licensing of workers every two years instead of once at the beginning of practice, as is the case with architects in the State of Indiana. The crisis usually calls for a culture change or a knowledge base change. Some organizations meet resistance from workers when they try to implement changes. The resistance comes most strongly when workers are not given reasons for the changes or when their input is not valued, or when leadership fails to articulate the reasons for the change because it thinks that workers are not capable of understanding the present crisis event or events. Triggers properly handled can strengthen an organization. On the contrary, triggers handled poorly can become another nail in the organization’s coffin.

Organizational Learning: Interorganizational
How knowledge is managed is different in every organization, and indeed in every department within every organization. In CISCO, an organization that I spent some time studying, they came to the same conclusion as Rosenberg in writings that people are much more likely to adopt knowledge management when they believe that both they and the organization will benefit. (Rosenberg, 2004, p. 241) In the case of Universal versus Particular knowledge, CISCO changed their culture from one where people showed up for work and went home at the end of the day, to one where knowledge sharing was valued and made safe from C-level management. Specific and codified v. diffuse and implicit knowledge. In countries where the good of the community is placed above the good of the individual, more community knowledge sharing takes place and so expectations and new knowledge is readily made available from generation to generation. If the good of the individual is placed above the good of the community, then the one who has knowledge has a choice of either codifying it by writing it in a procedures manual or using it as a weapon of force or superiority. Top-down v. bottom up-knowledge. CISCO found that it was futile for top management to be so far removed from the front line and middle management needed to be involved in deciding what kind of training would benefit the organization as well as the bottom line, as well as the individual acquiring the new knowledge. (Trompenaars & Hampden-Turner, 2004, p. 13-16) Inside-out to outside in knowledge. In order to be balanced, it is necessary to educate not only your employees, but your suppliers as well as your customers. CISCO discovered that and it turned their failing business into a knowledge-rich one, enjoying the confidence from their suppliers, customers and employees in just five years.

Organizational Learning: Practice
“A learning organization is an organization skilled at creating, acquiring, and transferring knowledge, and at modifying its behavior to reflect new knowledge and insights. (Garvin, 1993, p. 80). Organizations are effective at creating and acquiring new knowledge but they are less successful in applying that knowledge to their activities. Learning organizations are skilled at five main activities: systematic problem solving – Deming calls this the “Plan, Do, Check, Act” cycle; experimentation with new approaches; learning from their own experience and past history; learning from the experiences and best practices of others, and transferring knowledge quickly and efficiently  throughout the organization (Garvin, 1993, p. 81). Mark Allen defines a corporate university as an educational organization that is part of another organization whose primary purpose is something other than education. (Allen, 1999, p. 12). While “training focuses on skills that are necessary for specific tasks, “development” refers to education designed to modify “core parts of the executive and his/her behavior” (Allen, 1999, p. 13).

Organizational Learning: Changes
The andragogical model of instruction, described by Knowles, is the best-known learner-centered or learner-directed model of instruction. (Merriam & Caffarella, 1999, p. 37)  In addition to diagnosing learning needs, formulating objectives, designing a pattern of learning needs, formulating objectives, designing a pattern of learning experiences, and evaluating results, which a lot of other models actually do, what sets this model apart is that the learner is viewed as a mutual partner, or when learning in natural settings, as the primary designer of the learning activities. In the teacher-directed model, learners lack commitment and confidence (according to the teacher). In the learner-directed model, are capable of providing their own direction and support and they are willing and able to take responsibility for all instructional functions (Merriam & Caffarella, 1999, p. 38).

Post Modern Theories
The role of research in postmodern thought is not that of ‘discovering the truth’ but of challenging the conventional wisdom, routines, static meanings, and axioms of ‘normal’ science, thereby exposing knowledge to non-dogmatic forms of thought (Berthoin Antal, Dierkes, Child, & Nonaka, 2001, p. 44). According to postmodern traditions, the relationship between knowledge and power, the central importance of language and discourse, and fragmented identity are crucial. (Midgley, 2004, p. 52) states the premises of post-modernism. 1) Post modernism cannot accept the possibility of objective knowledge. It refuses the language of ‘truth’ on the grounds that all statements are relative to the contexts in which they are spoken. 2) Post-modernism assumes tat ‘realities are socially constructed, and language plays a key role in this. 3) Post-modernism says that language is purely self-referential, and does not reflect a real world. Validity claims are made and challenged. 4) Some authors seek to overcome dualism by stressing the socio-linguistic construction of both mind and matter. 5) The concept of rationality has important limitations. 6) As all reality is socially constructed, terms like “objective”, “normative” and subjective” lose their meaning. 7) Science is a limited discourse. Its development should be noted, but it should not be taken too seriously. 8) Science, ethics and art can be appreciated as separate discourses, but they all contribute to producing a great variety of stories. 9) Power is not ‘owned’ by any single person or group. It is constituted by knowledge that is communicated through discourse, and it is this knowledge that frames our experiences.  10) Post modern theories welcome contradictions and do not seek to resolve them. Where none are seen to exist, they are sought in the belief that greater variety will undermine certainties about what is ‘true’ or legitimate’.

Reference Midgley, G. (2004). Five stetches of postmodernism:implications for systems thinking and operational research. Journal of Organizational Transformation and Social Change, 1(1), 47-62.

title: User talk:Linda Lightbourne


text:
WebObjects/Web Applications/Development/Direct Actions

Overview
Direct Actions are action methods that can be called without a WOSession. As opposed to Component Actions, where a WOSession is required and various form values are bound as objects, Direct Actions perform much more like traditional web frameworks where the form values are accessed via WORequest's formValues dictionary and cookies. Direct Actions are very useful for building stateless, high-performing websites, though you lose some of the easy-of-development that WebObjects provides with Component Actions.

Pages are still generated in the usual way, but if you want the links generated in the page to employ Direct Actions when clicked, ie. to create Direct Action URLs, you must make appropriate bindings.

Direct Actions can be used in conjunction with Sessions if desired, in much the same way that Sessions work with other web technologies - the correct Session object will be located automatically from information in the URL or in a cookie, and state can be obtained and altered in it.

Among other things, Direct Actions are typically used if no Session whatsoever is desired (uses less resource), or if bookmarkable or easily created URLs are required. DirectActions are also often used to provide multiple entry points to your application, each with it's own URL---but then subsequently returning components that use the ordinary Component Actions.

Direct Actions would also be good to use if you don't need the additional convenience of the Component Actions, simply because they come without any of its disadvantages. However, it's quite difficult to create a whole WO application without creating a WOSession and most of the time, you're going to need it anyway.

David LeBer's Articles
David LeBer has a great series of articles on using Direct Actions:

 * 1) Using WebObjects DirectActions pt. 1
 * 2) Using WebObjects DirectActions pt. 2
 * 3) Calling a DirectAction with values from a form
 * 4) Calling a DirectAction with values from a WOHyperlink
 * 5) Calling a DirectAction with values from a WORedirect

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
WebObjects/EOF/Using EOF/EOSharedEditingContext

Overview
EOSharedEditingContext, which should more appropriately be named EOReadOnlyEditingContext (or EOReadMostlyEditingContext), provides an editing context that can be used across your entire application for keeping globally shared EO's in memory. While it is possible to make changes to objects in a shared editing context, it is notoriously difficult to do so without creating problems such as a deadlocks. The best type of objects to put in a shared editing context are those that change very infrequently like enumerated type objects, for instance.

Performance Implications
There is a performance hit on your Application when EOSharedEditingContexts are enabled. If your application does not use them, you should call:

EOSharedEditingContext.setDefaultSharedEditingContext(null);

in your Application constructor. This will disable shared editing contexts completely, and you will no longer see any performance loss.

Art Isbell
If you haven't done so, consider reading Apple's Documentation.

''From the doc, it says 'Since shared editing contexts listen for ObjectsChangedInStoreNotifications, the shared editing context updates when it learns that an object was modified'. Does that also mean if the database records changed by other applications, the shared editing context will get the notification too.''

No.

If it is not, then how the application can detect something has been changed in external data store?

Only when a change has been made in the same process will a shared editing context and all other editing contexts in that process as well be notified. This is no different from the behavior of all editing contexts.

Does the SharedEditingContext only work with the fetchSpecifications which are pointed by either 'Share all objects' or 'Share objects fetched with' options in Shared Object Inspector OR it can work with any regular fetchSpecifications?

A shared editing context can use any fetch specification programmatically, but those entities designated in an eomodel to "Share all objects" or "Share objects fetched with" will be fetched automatically into the default shared editing context.

After shared EO objects are loaded into sharedEditingContext at Application level, how can we retrieve the data that is already in sharedEditingContext at each page ?

The EOSharedEditingContext JavaDoc states:

"Objects can be fetched into a shared context using objectsWithFetchSpecification and bindObjectsWithFetchSpecification. The latter method makes it easier to access result sets, using objectsByEntityNameAndFetchSpecificationName."

objectsByEntityName can also be used. Or you can store them in Application instance variables accessed by public Application methods. If you do so, a resource is being shared among sessions, so accessor methods should be synchronized to make access thread-safe.

''Is that 'new EOEditingContext.sharedEditingContext' is same as 'EOSharedEditingContext.defaultSharedEditingContext'? If it is not, how can we get the same object of EOSharedEditingContext as in the application level, which will be used to get objects in each session or in each page?''

The shared editing context of all editing contexts is the default shared editing context. editingContext.sharedEditingContext and EOSharedEditingContext.defaultSharedEditingContext will return the same shared editing context unless you have explicitly set an editingContext's shared editing context to a different shared editing context.

Does anybody find any memory issue with using EOSharedEditingContext?

A shared editing context can use more memory if you fetch objects into it that aren't needed by your app. But if you're careful to fetch only those objects likely to be used by your app, the instantaneous memory usage might be less than that when no shared editing context were used because the same objects won't be fetched into multiple editing contexts. The average memory usage over the life of the process might be similar with a shared editing context because shared objects always exist. So I don't see memory usage as a shared object advantage or disadvantage, but I've never done a comparison.

Shared editing context advantages are reduced database access and no need to create local instances of shared objects in other editing contexts.

Only those objects that will never be source objects in relationships with unshared destination objects can be shared. Shared objects should be read-mostly as well because updating them requires a special procedure.

Jonathan Rochkind
[I personally have always been scared of using EOSharedEditingContexts, because there seemed such potential for problems. They are complex in how they work, not entirely well documented, and I suspected there would be Apple bugs.

Robert A Decker
''However, one user kindly provided his own guidelines he uses with EOSharedEditingContexts, and which he says results in no problems at all. I include his guidelines here.''

I haven't had problems, yet, with EOSharedEditingContext and objects that are changed rarely, as long as I follow some rules:

EOUtilities.localInstanceOfObject
 * NEVER fetch using the shared editing context yourself. Do all access to shared objects through the shared editing context's objectsByEntityNameAndFetchSpecificationName or objectsByEntityName methods, which return dictionaries containing the shared objects being held by the shared editing context. Repeat, DO NOT FETCH using the shared editing context.
 * When making changes to objects or deleting, you have to do it in an editing context without a sharedEC. I always make a new ec and set its sharedEc to null, then copy the object I'm going to edit into it using
 * When adding objects you have to tell the sharedEc to refresh its array of objects the type you just added. You use the bindObjectsWithFetchSpecificationName.

Again, do not fetch using the shared ec. Using this simple rule I haven't had any problems with objects that are changed rarely while the app is running. I've deleted and updated up to thousands of objects in separate threads using these rules without problems.

Robert A Decker
and on how the objects get in the shared ec in the first place, rob writes:

For each of my shared entities, I add a fetch spec named 'FetchAll' and in the EOModeler inspector I set that fetch spec to be the fetch that holds the shared instances. (click on entity, look at inspector third button, click on 'Shared objects fetched with' radio button for the FetchAll fetch specification).

You can keep your other fetch specs on those shared entities arountd, but you shouldn't really use them like you normally would - instead, only use them on doing in-memory fetching and sorting of the NSArrays you get back from the shared entity.

Then, in Application I have two methods:

public static void refreshSharedEntity(String entityName) throws MarvinGeneralException { Application.refreshSharedEntityForFetchSpecificationName(entityName,  "FetchAll"); } public static void refreshSharedEntityForFetchSpecificationName(String entityName, String fetchSpecName) throws MarvinGeneralException { EOModelGroup modelGroup = EOModelGroup.defaultGroup; EOSharedEditingContext sharedEC = EOSharedEditingContext.defaultSharedEditingContext; EOFetchSpecification fs = modelGroup.fetchSpecificationNamed(fetchSpecName, entityName); if (fs == null) { throw new MarvinGeneralException(Application.class.getName + ".refreshSharedEntityForFetchSpecificationName", entityName + "." + fetchSpecName + " doesn't exist"); } else { sharedEC.bindObjectsWithFetchSpecification(fs, fetchSpecName); } }

I use these methods for updating the shared editing context for a specific entity.

As an example for an entity, I have the methods:

public static NSArray enclosureMasters { NSDictionary objectsByEntityName = (NSDictionary)EOSharedEditingContext.defaultSharedEditingContext.objectsByEntityNameAndFetchSpecificationName; NSDictionary objectsForEnclosureMaster = (NSDictionary) objectsByEntityName.objectForKey("EnclosureMaster"); NSArray enclosureMasters = (NSArray) objectsForEnclosureMaster.objectForKey("FetchAll"); return enclosureMasters; } public static NSArray enclosureMasters(String fetchSpecName, NSDictionary bindings) { // filter in memory against all enclosure masters // EOQualifier.filteredArrayWithQualifier( NSArray objects, EOQualifier aQualifier) if (bindings == null) bindings = new NSDictionary; EOFetchSpecification fetchSpec = EOFetchSpecification.fetchSpecificationNamed(fetchSpecName, "EnclosureMaster"); EOQualifier boundQualifier = fetchSpec.qualifier.qualifierWithBindings(bindings, fetchSpec.requiresAllQualifierBindingVariables); if (boundQualifier == null) return EnclosureMaster.enclosureMasters; // return all - // otherwise the next call will give us an empty array NSArray results = EOQualifier.filteredArrayWithQualifier(EnclosureMaster.enclosureMasters, boundQualifier); // we should now use the fetchSpec's sort orderings to sort the results NSArray sortedResults = results; NSArray sortOrderings = fetchSpec.sortOrderings; if (sortOrderings != null) sortedResults = EOSortOrdering.sortedArrayUsingKeyOrderArray(results, sortOrderings); return sortedResults; }

These two methods let me fetch all objects of a certain type and, even better, let me use my other fetch specs on these objects.

All other static methods I would put on EnclosureMaster will go through these two methods. This way I never do any fetches myself and instead just use the objects that are already in memory and held by eosharededitingcontext.

Also, when the app launches it will automatically fetch the shared objects using the FetchAll fetch spec that you set earlier.

When you addd a new object you have to reload by calling, for example,

Application.refreshSharedEntity("EnclosureMaster";);

When you edit or delete a shared entity the SharedEditing context will take care of updating the objects it's holding.


text:
WebObjects/Web Applications/Deployment/WOStats

Chuck Hill
There is a typo in WebObjects 5.3 that prevents the login from being displayed. To fix:

sudo emacs /System/Library/Frameworks/JavaWOExtensions.framework/Resources/WOStatsPage.wo/WOStatsPage.html

Edit this line:

to read

(it is a case issue).

Also, don't forget to set a password when launching, e.g. -WOStatisticsPassword foo If you don't do this there is no password and access is disabled entirely.


text:
WebObjects/EOF/Using EOF

Jerry W. Walker
I was tempted to respond very much as Kieren did, but I understand how daunting WebObjects can be at the beginning. Kieren's advice is good, use it. But perhaps the following will also help.

''First: I need some serious help. Once I bring in a row of my database using the fetch command as an object, which works fine, how do I access the cells in the object?''

In early projects you will probably use EOUtilities with its shortcuts to do your fetching. But let me go back to the basics so you have the class names to look up in the API reference.

At the basic level, you need to define or reference 7 objects to get data from your relational database:
 * an EOModel that maps your relational tables, rows and columns to Java classes, instances and attributes. Use EOModeler to create this.
 * an Entity in the EOModel whose data you want to fetch (e.g. Customer) Again, this should be created by EOModeler.
 * an EOQualifier that defines the conditions for your fetch (e.g. all Customers in New York)
 * an EOSortOrdering that sets the criteria to order the results (e.g. by lastName, then firstName, then state)
 * an EOFetchSpecification that collects the criteria for the fetch, especially the previous 3 objects.
 * an EOEditingContext to manage your database data. For your early projects, use the default provided by your Session class.
 * an NSArray to hold the objects fetched (e.g. myCustomers)

In practice, you don't need all of these, but at minimum you need an EOModel, an Entity, an EOEditingContext and the NSArray to hold your data.

Going back to the basic level, I'll presume that you or someone else has created the EOModel to map your database tables to your Java classes. I'll also presume that someone has defined at least one Entity in that EOModel whose data you're interested in obtaining.

You can also avoid the EOSortOrderings, the EOQualifier and the EOFetchSpecification by using shortcuts in EOUtilities. However you do it, though, you should end up defining an NSArray and filling it with your fetch. For instance, the code for a typical fetch in a WebObjects Component might look like this:

EOEditingContext myEditingContext = session.defaultEditingContext; NSArray myCustomers = EOUtilities.objectsMatchingKeyAndValue(myEditingContext, "Customer", "state", "New York");

''In the row i have an int called userGroup. How to I get the value of that int from the object and put it into a variable? Basically what I am asking is how do I gain access to the data I bring in so I can use it in my program?''

The result of my code sample is an NSArray named myCustomers whose elements are instances of the Java class defined for the "Customer" Entity in your EOModel. (Typically, the Java class would also be named "Customer".)

The NSArray, myCustomers, is the array of Java objects corresponding to the rows that you retrieved from your database. Rather than rows, they have been converted by EOF to full fledged Java objects and can be manipulated as such. The first element of the array is the first row retrieved, the second element is the second row, etc.

''I have tried EOUtilities.objectMatchingKeyAndValue, but what exactly is the Key? I have also tried EOUtilitlies.objectMatchingValues, but how do i add data to the dictionary?''

In the sample code I provided, I used the EOUtilities.objectsMatchingKeyAndValue method. The signature for that method is:

NSArray EOUtilities.objectsMatchingKeyAndValue(EOEditingContext ec, String entityName, String key, Object value)

So from my sample, you can see that:

ec = myEditingContext entityName = "Customer" key = "state" value = "New York"

In particular, to answer your question, the keys are the EOModel attribute names for the Entity you're fetching. If you look closely at an EOModel, you'll notice that each Entity has three names, the Entity name, the name of the table representing that Entity in the database, and the name of the Java class representing that Entity in your program. Usually the latter two are identical, but don't confuse them.

By the same token, each Attribute for an Entity has a corresponding set of three names: the name of the Entities Attribute, the name of the column in the database representing that Entity Attribute, and the Java member (method or instance variable) representing that Entity Attribute in your Java class. Once again, usually the latter two are identical, but don't confuse them.

Rather than saying "Java member (method or instance variable)..." we just say "key". Object encapsulation should allow us to not care whether the value is represented by accessor methods or by an instance variable. An Apple proprietary technology called Key-Value-Coding (or KVC) allows us to reference the value without caring. Literally, we provide the key name and we can completely ignore whether the object provides the value by accessor method or by instance variable.

''Second: BLOBs. I have found almost nothing on blobs. How do I place them into the database, I know people don't like using BLOBs but my mentor want me to so I must, and how do I recall them latter in the program when I need them as input into another program called from my main program?''

Your EOModel defines the object-relational mapping so that any column of a given table can be mapped to a Java class method or iVar (key). The EOModel defines that mapping including not only the name correspondence, but also the property correspondence so that EOF can take any of the column values from a given row in the database table and convert it to the appropriate key value in the Java object.

Remember that the column value has a database property, such as integer or BLOB. By the same token, the key value in your Java object has a class or is a primitive value (such as NSData or int). If you've set up the EOModel mapping correctly, then you simply reference the key in your java object after it's been fetched into the array. From the above example, for instance, to obtain the data for a single customer:

Customer aCustomer = myCustomers.objectAtIndex(0);

You now have a single Customer object referenced by the variable, aCustomer. If that Customer object has an age property represented by an integer, you reference it as you would any Java object variable value:

int theAge = myCustomer.age; // presuming that there is an age accessor method, a fairly safe assumption for EOs.

If the object member you want is a picture of the customer, some people would store that picture in the database (for WO applications, I would drag my heels a good bit before doing so, but presume I'm forced). That is data that would typically be stored as a BLOB in the database and as an NSData object in your Java class. In that case, you could retrieve the picture as follows:

NSData customerPicture = aCustomer.picture;

title: WebObjects/EOF/Using EOF


text:
WebObjects/EOF/Using EOF/Raw Rows

Jerry W. Walker
Is there a better way to obtain just a single column from the database that is just the values and not the key/value pair?

Yes, use a SQL solution. So long as you're thinking in terms of columns in a relational database and their values, you're thinking in the terms around which SQL, as a language, is wrapped. I'll paraphrase a message I posted on another thread regarding this same issue.

The question is framed from the perspective of "I have a table of rows with which I want to do something, now how do I get WO to help me do that thing to my table in the same way I've always done these things with SQL?"

Experienced WO developers would think instead of the object graph that we are manipulating in our object oriented Java application rather than the rows we have stored in our relational database. Rephrasing the question, "I have a set of objects 'O' with an attribute 'a'. How do I obtain the value of that attribute for each of those objects?"

The obvious answer to your original question is dump WebObjects. It's a poor technology for doing pure SQL manipulation. Just issue a SQL "select myColumn from myTable;" and live with the rest of SQL's shortcomings as an enterprise application development technology.

On the other hand, if you want to use WebObjects, you'll find it much easier to think in the terms in which it frames the questions, namely classes, objects, object graphs and object oriented concepts. In these terms, the database is more appropriately thought of as an "object store", or place to hold my objects rather than a relational database. In these terms, you'll find it much easier to simply fetch the objects from the database and extract their values as you would the values of any other objects.

Perhaps those objects have already been cached and we don't need to fetch raw rows. That is, if they've already been fetched earlier for some other operation, their snapshots are already cached in memory and we would have been doing a redundant fetch rather than economizing.

Failing those possibilities, I would still write the fetch without referencing raw rows and get it to work. Then, if the result is clearly taking too long or requiring too much memory, I would profile where the delays are occurring or the memory is being consumed and, if in database fetches, then would start to consider raw rows. The point being that referencing raw rows is a last resort rather than a way to move into the comfort zone of old habits with result sets.

So what are the down sides to just moving immediately to raw rows?

 * a missed opportunitiy to get used to the WO way
 * the short circuiting of several elegant features built into WO to help one deal with objects rather than rows
 * potential extra database accesses to objects already cached in memory
 * the higher probability of weak object oriented design built up from this raw row decision

If you take the natural WebObjects route and stop trying to get a single value out of a table, the advice I gave in my earlier response still holds in general. Except, instead of dealing with NSDictionaries, you will be dealing with Enterprise Objects, or EOs. The code sample I supplied would look more like this, in that case:

Presume that myFetchSpec exists, that the class name for the EO that you've persisted in that table of the database is MyObject, that the name of the element of that class whose value you are interested in is myAttribute, and that you've fetched an array named myObjects as follows:

NSArray myObjects = myEditingContext.objectsWithFetchSpecification(myFetchSpec); // Fetches instances of MyObject NSDictionary anObject; // Iteration variable NSDictionary selectedObject; // used to hold selected element from WOPopUpButton

Now, set up your WOPopUpButton with the following bindings:

list = myObjects; item = anObject; displayString = anObject.myAttribute selection = selectedRow

You'll find this easier, in general, than working with the raw rows, because you can do the bindings visually and directly in WebObjects Builder rather than having to type them in as you would have to do with the NSDictionaries resulting from a raw rows fetch. The WOPopUpButton should display what you want.

title: WebObjects/EOF/Using EOF/Raw Rows


text:
User:CeramicReality~enwikibooks

This is my [Wikibooks|http://www.wikibooks.org] user page. You may want to see my [Wikipedia|http://www.wikipedia.org] [user page|http://en.wikipedia.org/wiki/User:CeramicReality].

title: User:CeramicReality~enwikibooks


text:
WebObjects/EOF/Modeling/Prototypes

Overview
Prototypes are EOF's mechanism for database-agnostic modeling. By including an EOModel that has an entity with the special name "EOJDBCDatabaseVendorPrototypes" (like EOJDBCFrontBasePrototypes, or EOJDBCOraclePrototypes), or the fallback general prototype "EOJDBCPrototypes," you can define reusable type definitions. For instance, you might declare a type definition "money" that maps to a floating point number with precision 32 and scale of 2, but different database have different names and syntaxes for this. With prototypes, your model simple refers to its prototype "money" for its type, and the prototype define the rest, and can we switched according to the database you are using.

Because prototypes centralize your type information, it also makes it much easier to make bulk changes to your types. For instance, if you declare an "address" type to be a varchar(50) and realize it's not enough, you can simply change your prototype to varchar(100) and all of your types inherit the change.

Chuck Hill
A model without prototypes is, um, dumb. A reusable framework without prototypes is not reusable. See Practical WebObjects pages 45 - 55 for a discussion of this and code. There is some very superficial discussion in the EOModeler docs.

Anjo Krank
[Project Wonder has] neat code that allows you to switch then based on properties and not on the mumbo-jumbo that normally gets used. And we allow you to actually support multiple types of DBs, which is not possible with the EOJDBCPrototypes. However, I'd advice prototypes only when you have either only one model or are very disciplined:

Gotchas
EOModeler is not without its faults. It is, in particular, quite finicky about prototypes. The minor pains are, however, worth it.

Framework? What Framework.
EOModeler must have a .pbproj or a .xcode build folder in the path that you open the model from, or it will not be able to load other frameworks (in particular, prototype frameworks).

The Brown Column of Death
If you ever change the prototype of a previously defined column, you might notice the column name in your EOModel turns brown. Any column that is brown in your model is going to be defined by the prototype, but you may have noticed you typically don't define column names in your prototype. As a result, when you save your model, it will BLANK your column name.

If a column DOES get blanked, it results in a TERRIBLY annoying and useless error message from inside of EOF. I believe you get a ClassCastException from SQL generation from a method that is named something about creating a comma separated list from an NSArray (I don't have the exception around offhand). So if you ever see a ClassCastException from way down in EOF, log this note away because it will save you much pain trying to debug it.

It is best to always select the prototype first, then fill in the rest of the column. It has the least potential for annoying EOModeler bugs in exchange for a small behavioral change. If the column turns brown, you will need to rename the column and then change it back to "unbrown" it.

title: WebObjects/EOF/Modeling/Prototypes


text:
Talk:A-level English/Wise Children/Understanding the complex family tree

Untitled
Unless I'm mistaken isn't Kitty Dora and Nora's mother and Grandma Chance adopts them?

I've added a bit about Peregine's suggestion that Grandma Chance had an affair but its all hypothetical isn't it?

p12 "she was no blood relation at all" (oragne covered edition)

P35   "she was a mystery was Grandma Chance"

The line triumph of nature over nurture refers to the fact that Dora and Nora became more like GC because they were raised by her, not that GC was actually their mother although Peregrine suggests this at the end of the novel.


text:
WebObjects/Project WONDER/Frameworks/WOOgnl

WebObjects WikiBooks pages considered deprecated
Go to http://wiki.objectstyle.org/confluence/display/WO/Project+WONDER-Frameworks-WOOgnl instead.

Overview
OGNL stands for "Object Graph Navigation Language", and it defines an entire family of key-value coding-like abilities. As Jonathan Rentzsch put it in his CAWUG presentation on Project WOnder, "Think: Key-Value Coding on Steroids". You can get more information on the specifics on OGNL at the official OGNL website.

WOOgnl provides a framework that integrates the OGNL syntax into WO's standard binding resolution. By simply including the WOOgnl framework on your build path and preceding your binding value with a "~", it will be interpreted by WOOgnl.

Provided your html markup is well-formed, you can also put ognl expressions in standard html tags if you set the following property:

ognl.parseStandardTags=true

Here are some examples that demonstrate just a tiny bit of the really cool things you can do:

 * value="~\"Hello Mr.\" + session.user.firstName";
 * value="~name.length.(#this>100?2*#this:20+#this)";
 * value="~#A=new NSMutableArray,#A.addObject(name),#A";

Here are some examples provided by Max Muller, WOOgnl's original author:

// Calling methods with arguments Repetition1: WORepetition { item = arrayItem; list = "~sort(anArray, \"name\")"; }

// Calling static methods Repetition2: WORepetition { item = arrayItem; list = "~@er.extensions.ERXArrayUtilities@sortedArraySortedWithKey(anArray, \"name\")"; }

// Accessing static ivars String1: WOString { value = "~@ognl.webobjects.WOOgnl@OgnlSpecialCharacters"; }

// Use of conditionals, note that every previous value of the. is // pushed into the ivar #this String2: WOString { value = "~name.length.(#this > 100? 2*#this : 20+#this)"; }

// String concat String3: WOString { value = "~\"Hello Max \" + name"; }

// Use of set operator in. can also use in against NSArray and NSSet objects String4: WOString { value = "~name in {\"Main\", \"Something\"} ? \"Yes\" : \"No\""; }

// Variable declaration. Note that commas allow multiple actions // per expression. String5: WOString { value = "~#A=new com.webobjects.foundation.NSMutableArray,#A.addObject(name), #A.addObjectsFromArray(session.languages), #A"; }


text:
Talk:Italian/About the book

Untitled
I will try to add to this when I have time. However, since I am still studying Italian, I will only update simple things, such as vocabulary and verb conjugations and such.

title: Talk:Italian/About the book


text:
WebObjects/Web Applications/Development/WO Adaptor

Overview
The WOAdaptor layer of WebObjects can be thought of as a broker of requests and responses. Its role in the framework is to:

 * 1) Receive incoming requests of some type (typically HTTP)
 * 2) It checks for the configuration file where(host) the requset should be send
 * 3) opens TCP/IP socket for destination host
 * 4) Package them into a WORequest
 * 5) Dispatch the WORequest to the WOApplication
 * 6) Receive the WOResponse back from the WOApplication
 * 7) Send the response back across whatever protocol the adaptor handles

In most cases, you will be dealing with WODefaultAdaptor, which is provides support for HTTP. However, adaptors could receive requests from any number of sources. As an example, Project WOnder includes ERIMAdaptor, which provides support for requests and responses over Instant Messaging networks.


text:
WebObjects/Project WONDER/Frameworks/WOPaypal

Travis Cripps
I guess the first question we should cover is if you're using PayPal's Instant Payment Notification service to receive the notification from PayPal that your user has completed some type of PayPal transaction. If you're not using that, but will instead log into PayPal's site every day and process the transactions, then you don't need to worry about the Listener and the delegates, nor indeed the whole process of getting the request parameters from PayPal. You could then just use the button or link components to either start a transaction for a single item or add the item to a PayPal shopping cart. You could also pretty much skip the rest of this email. ;)

However, if you are interested in processing the transactions through PayPal's IPN (instant payment notification) mechanism, you can look at the ipnAction method in PayPalAction.java source code in the WOPayPal framework to see exactly how I receive their request (notification) and validate it by echo-ing their transaction key back to PayPal. After receiving the verification, PayPal will send the real message. That's the content you need to handle. There are several return codes they'll give, and you'll need to be able to handle them properly, but it sounds as though you're prepared to do so.

If I might offer my opinion, you may find it advantageous to use the existing code rather than rewrite your own request handling. You could do this by copying my ipnAction and adapting it to your needs, or by creating your own delegate class that implements a few methods and assigning your delegate to handle the various response codes returned by PayPal. Don't be thrown off by the assignment of the delegate as you mentioned above. Specifically, the PayPalNotificationLogger is a just a simple class that I created as a sample delegate. All it does is "log" the messages it receives to the System.out using NSLog. In your application, you'd create your own delegate class implementation that would do something more useful.

Let me briefly try to convince you of the benefits of notifications and delegates...

A Success Story
Imagine a small one-man company named ACME. ACME takes orders from its customers and sends them along to its supplier, ZYX. The supplier then phones ACME to confirm that the order was received and give some details about when ACME can expect its shipment. As the company grows, the CEO gets too many responsibilities to continue to interface with the ZYX and handle all the order management, so he hires an assistant and installs a PBX switchboard to route calls from ZYX to his assistant. The CEO teaches his new assistant the responsibilities of order management and assigns the assistant to "handle" those responsibilities. As a result of its new efficiency, ACME grows, all the employees gets rich from their stock options, and everyone lives happily ever after.

Decoding the Story
The above (fairly contrived) example demonstrates the general idea of notifications and delegates. You could say that the callback from supplier ZYX is analogous to the PayPal IPN. The switchboard in this case is the equivalent of an NSNotificationCenter; it detects an incoming call and then directs the call (the NSNotification message) to the appropriate listener. In this case, the switchboard is programmed to detect a call from company ZYX and forward it to the assistant who has been assigned, or "delegated," the responsibility of handling calls from ZYX. Once the assistant, (the delegate) receives the call, it does one of the things it knows how to do with the call, depending on the type of message it receives.

Basic Definitions
Back to reality... Notifications and delegates are simple design patterns that you'll see scattered throughout Cocoa and WebObjects. They're very useful, and not really too complicated.

Basically, a notification is a way to pass messages around without having to know the details of the class that will receive them. Notifications are "broadcasted" by the NSNotificationCenter, a controller object which handles sending the notification messages to the appropriate recipient(s). You "subscribe" to the notification center by asking it to send notifications of a certain type to the subscriber object. Typically, you ask for a notification by name. You can also send a message to the notification center to tell it to broadcast a notification message to all interested parties.

Similarly, a delegate is a way to pass the responsibility for processing certain off to another class. Using delegates allows you to "loosely couple" classes together and customize behavior by assigning the delegate class you need in a particular instance. The delegate need only implement a certain set of methods so that it can handle the messages you're going to pass to it. You could even have multiple delegates with different behavior and swap them as necessary at runtime.

How It Relates to WOPayPal
I use a notification mechanism to broadcast the message to handle different conditions of the PayPal notification to the "listener" (subscribed to receive certain notifications) which then forwards the message to the assigned "delegate." In the case of WOPayPal, the delegate just has to implement the methods to handle the PayPal messages that you're interested in. There are 5 methods in the delegate interface:

 * public void processDeniedPaypalTransaction(WORequest aRequest);
 * public void processFailedPaypalTransaction(WORequest aRequest);
 * public void processInvalidPaypalTransaction(WORequest aRequest);
 * public void processPendingPaypalTransaction(WORequest aRequest);
 * public void processValidPaypalTransaction(WORequest aRequest);

So, basically, all you need to do to get the framework to work for you is:

 * Define a class that contains any of the above methods. This class is your delegate class to process the messages about PayPal notifications.

 * Tell the listener (the object subscribed to the notifications) to use your delegate rather than the simple default delegate that only logs the request to the System.out. I do this in my Application class' constructor method.  Just call the static method on PayPalNotificationListener, passing an instance of your delegate class as the argument.

PayPalNotificationListener.setDelegate(new myPayPalDelegate);

SuccessfulPayPalTransactionComponent = MySuccessPage CancelledPayPalTransactionComponent = MyCancelledTransactionPage
 * If you want to return a custom component after a successful or a cancelled transaction, set a property for each in the launch arguments or the Properties file of your application.

These pages will be returned by the DirectAction methods that PayPal will call in the case of a successful transaction or a cancelled transaction. To use these values, set the returnURL and cancelURL values in the various hyperlink and button components to the url of the PayPalAction DirectActions in your application, e.g. http://yoursite.com/cgi-bin/WebObjects/YourApp.woa/wa/PayPalAction/return or http://yoursite.com/cgi-bin/WebObjects/YourApp.woa/wa/PayPalAction/cancel.

http://yoursite.com/cgi-bin/WebObjects/YourApp.woa/wa/PayPalAction/ipn
 * Tell PayPal how to find your application and where to send the IPN messages in your IPN preferences.

Conclusion
That's pretty much the story of WOPayPal. I hope that this helps clarify what's going on in the framework, and how you can easily leverage it. At the very least, if you have a copy of the source code, you can copy out the relevant portions of the DirectAction class. Please let me know if you have further questions. I promise not to be so long-winded in the future.


text:
WebObjects/Project WONDER/Frameworks/ERExtensions/ERXArrayUtilities

Overview
ERXArrayUtilities provides convenience methods and tools for manipulating NSArrays. Many of the methods are self explanatory. For a full list please see the api (http://webobjects.mdimension.com/wonder/api/er/extensions/foundation/ERXArrayUtilities.html).

NSArray operators
WebObjects provides @sum, @avg, etc array operators. ERXArrayUtilities adds quite a few more:

SortOperator: Define an NSArray.Operator for the key sort.

This allows for key value paths like:

myArray.valueForKey("@sort.firstName");

myArray.valueForKey("@sort.lastName,firstName");

Which in the first case would return myArray sorted ascending by first name and the second case by lastName and then by firstName.

Other sort operators registered are: @sortAsc, @sortDesc, @sortInsensitiveAsc, @sortInsensitiveDesc

FetchSpecOperator: Define an NSArray.Operator for the key fetchSpec.

This allows for key value paths like:

myArray.valueForKey("@fetchSpec.fetchUsers");

Which in this case would return myArray filtered and sorted by the EOFetchSpecification named "fetchUsers" which must be a model-based fetchspec in the first object's entity.

FlattenOperator: Define an NSArray.Operator for the key flatten.

This allows for key value paths like:

myArray.valueForKey("@flatten");

Which in this case would return myArray flattened if myArray is an NSArray of NSArrays (of NSArrays etc).

IsEmptyOperator: Define an NSArray.Operator for the key isEmpty.

This allows for key value paths like:

myArray.valueForKey("@isEmpty");

SubarrayWithRangeOperator: Define an NSArray.Operator for the key subarrayWithRange.

This allows for key value paths like:

myArray.valueForKey("@subarrayWithRange.3-20");

UniqueOperator: Define an NSArray.Operator for the key unique.

This allows for key value paths like:

myArray.valueForKeyPath("@unique.someOtherPath");

Which in this case would return only those objects which are unique in myArray.

RemoveNullValuesOperator: Define an NSArray.Operator for the key removeNullValues.

This allows for key value paths like:

myArray.valueForKeyPath("@removeNullValues.someOtherPath");

Which in this case would return myArray without the occurrences of NSKeyValueCoding.Null.

ObjectAtIndexOperator: Define an NSArray.Operator for the key objectAtIndex.

This allows for key value paths like:

myArray.valueForKey("@objectAtIndex.3.firstName");

AvgNonNullOperator: Define an NSArray.Operator for the key avgNonNull.

This allows for key value paths like:

myArray.valueForKey("@avgNonNull.revenue");

which will sum up all values and divide by the number of nun-null entries.

ReverseOperator: Define an NSArray.Operator for the key reverse.

This allows for key value paths like:

myArray.valueForKey("@reverse.someMorePath");

which return a reversed result as to you would normally get.

MedianOperator: Define an NSArray.Operator for the key median.

This allows for key value paths like:

myArray.valueForKey("@median.someMorePath");

which return the median of the array elements at the given key path. The median is the value for which half of the elements are above and half the elements are below. As such, an array sort is needed and this might be very costly depending of the size of the array.


text:
WebObjects/EOF/Using EOF/Bulk Operations

Overview
The standard techniques for using EOF can potentially break down when you are dealing with extremely large datasets. The techniques described here are useful for taking advantage of EOF's benefits while not at the same time running out of memory.

There is quite a bit of overlap between this topic and the Memory Management section. It is recommended that you review the general memory management methodologies prior to reading this.

Chuck Hill
Call unlock then dispose on the ec, then set the reference to null, then force garbage collection with: http://java.sun.com/docs/books/tutorial/essential/system/garbage.html

You will need to do this often with a large database, maybe more than once per entity. I don't know if that would work while maintaining the object graph.

Pierce T Wetter III
There used to be an EOUtil that could do something like this. Does that still exists?

Otherwise, it depends on how the ER relationship chart works. In our case, we have a set of objects that would more or less "own" all the other objects in the ER tree. So the code would look something like this:

get master editing context

fetch copies of all the master objects into the master ec (not that many, so ok)

for each master object:

make a local ec    copy the master object into the local ec (localInstanceOfObject) do stuff with master object (i.e. copy them into the sink model) toss local ec

Using the local EC is the key.

If you have a large number of master objects enough that you can't load all of them into memory at once, then it gets trickier. One way is to just fetch a list of primary keys using raw rows, then use objectWithPrimaryKeyValue to build the objects in the local editing context.

If your ER tree is more complex (there is no "owner" object, then YMMV).

EOImportExportApplication from Cassini
Cassini is available at Sourceforge.

Anjo Krank
There is some stuff in Wonder's ERXJDBCUtilities that should be able to copy from one DB to another. I never tried it, but maybe it gives you some hints. There is no real need to use EOs anyway as you just want to copy the data.

David Teran
Hmpf! 'that should be able to copy from one DB to another.' NoNo, Anjo, that is not fair ;-)

In fact it works perfectly -if- the JDBC driver is not buggy. Here is a quick documentation:

OK, you need to use ERExtensions and ERJars. Not a big deal, drop me a line and i'll send a demo app to you.

Then you need this code here, the example takes data from frontbase and saves it to a postgres database:

NSMutableDictionary sourceDict = new NSMutableDictionary; sourceDict.setObjectForKey("", "password"); sourceDict.setObjectForKey("_SYSTEM", "username"); sourceDict.setObjectForKey("jdbc:FrontBase://195.135.143.205/merces/user=_system", "url"); sourceDict.setObjectForKey("com.frontbase.jdbc.FBJDriver", "driver"); sourceDict.setObjectForKey(Boolean.FALSE, "autoCommit"); sourceDict.setObjectForKey(Boolean.TRUE, "readOnly"); NSMutableDictionary destDict = sourceDict.mutableClone; destDict.setObjectForKey("jdbc:postgresql://195.135.143.205/merces", "url"); destDict.setObjectForKey("dev", "password"); destDict.setObjectForKey("dev", "username"); destDict.setObjectForKey("org.postgresql.Driver", "driver"); destDict.setObjectForKey(Boolean.FALSE, "autoCommit"); destDict.setObjectForKey(Boolean.FALSE, "readOnly"); EOModel yourModel = EOModelGroup.defaultGroup.modelNamed("YourEOModelName"); ERXJDBCUtilities.copyDatabaseDefinedByEOModelAndConnectionDictionaryToDatabaseWithConnectionDictionary(yourModel,     sourceDict, destDict);

Thas all!

BulkMover from 360works
BulkMover provides these capabilities, though it is a ProjectBuilder project.


text:
Mac OS X Tiger/Meet the Applications

Your Applications folder comes stocked with a library of Apple applications. Each is a leader in its class and exhibits the same attention to detail that Apple applies to the rest of its products. This chapter covers each and every included application, except Apple's "iLife" apps, which come with new Macs but not with Tiger itself. For information on these, please see the iLife book.

To make this mega-chapter load over a dial-up connection, it's been split into sub-chapters, one for each application.

Contents

 * 1) /Address Book/
 * Address Book is a simple application for storing Names, Phone Numbers, E-Mail addresses, etc. for everyone you know.
 * 1) /Automator/
 * Automator helps you quickly perform boring, repetitive tasks like renaming large groups of files.
 * 1) /Calculator/
 * The digital version of everyone's favorite math machine.
 * 1) /Chess/
 * Chess is the famous strategy game digitized and played on a virtual 3D board.
 * 1) /Dashboard/
 * Dashboard lets you quickly access information and controls from anywhere in Mac OS X.
 * 1) /Dictionary/
 * Dictionary is the New Oxford American Dictionary’s digital counterpart.
 * 1) /DVD Player/
 * DVD Player lets you view standard-issue movie DVDs right on your Mac.
 * 1) Font Book
 * Font Book, designed primarily for graphic artists, lets you manage your collection of fonts.
 * 1) /iCal/
 * A digital calendar app, iCal lets you manage appointments and your to-do list.
 * 1) /iChat/
 * iChat is multifunction internet communication app, allowing you to use instant messaging, audio-conferencing, and video-conferencing.
 * 1) /Image Capture/
 * Image Capture is like a standalone version of iPhoto's "Import" function, used to suck up photos from a digital camera and put them on your computer. It also is the software you will use with your scanner.
 * 1) /Internet Connect/
 * If you have a modem, Internet Connect will dial your modem and connect you to the Internet.
 * 1) Internet Exporer
 * Internet Explorer used to be the de facto standard for Mac web browsing, but has been replaced by Apple's Safari, and is no longer updated. It is not covered in this wikibook.
 * 1) /iSync/
 * iSync is used to send your contacts and calendars to your mobile phone or Palm-powered handheld.
 * 1) /Mail/
 * If you use .Mac mail or an eMail service that supports POP or IMAP, you can read your mail without a web browser with Mail.
 * 1) /Photo Booth/
 * Although it doesn't come with Tiger, Photo Booth is included with all Macs with iSight cameras. It lets you take pictures of yourself, with or without special effects, and then send them to iPhoto or to your friends.
 * 1) /Preview/
 * Preview is used to quickly view images and PDF files.
 * 1) /QuickTime/
 * Covering both the "Player" and "Pro" varieties, this chapter explains Apple's popular media player application.
 * 1) /Safari/
 * Safari, Apple's web browser, is the most popular Mac browser in the world.
 * 1) Sherlock
 * Sherlock is a legacy application designed to let computer novices get information from the internet, but it was so limited and got so little 3rd party support that it is now generally considered obsolete. Its functionality has largely been superseded by Dashboard. Sherlock is not covered in this wikibook.
 * 1) /Stickies/
 * Stickies lets you plaster your desktop with virtual Post-It notes.
 * 1) System Preferences
 * System Preferences contains your user and administrator preferences. Everything from your Desktop picture to your Apache setup is covered. It has so many options, that we could spend an entire chapter on it. In fact, we did. See Chapter 8 for information on System Preferences.
 * 1) /TextEdit/
 * A basic text editor mainly used for viewing Read-Me files and other very simple documents.

title: Mac OS X Tiger/Meet the Applications


text:
User:Corduroybutterfly

Beginning programmer. I've been programming in several languages for years, but never anything substantial. Aspirations toward cybernetics. Also interested in sewing, carpentry, and all things DIY.

title: User:Corduroybutterfly


text:
TI-Basic Z80 Programming/List of Commands/Lbl

Lbl is used with the commands ../Goto/ and ../Menu/. When a Goto command is issued, the program will branch from the Goto to the proper Lbl. :Goto WB : : :Lbl WB In the above example, the program would branch from Goto WB and move to Lbl WB. The WB on the Goto and Lbl tells the program what label to goto. The naming convention for labels: RIGHT: :Lbl ΘΘ WRONG: :Lbl ?? RIGHT: :Lbl 9X RIGHT: :Lbl WB WRONG: :Lbl WikiBooks
 * The name must be made up of any combination of numbers, uppercase letters, and/or theta(s).
 * The name must not exceed two characters in length.

Lbl must be the first command after a colon: RIGHT: :X+10→X:Lbl 10

WRONG: :X+10→XLbl 10

Using Lbl with Other Commands
Lbl is useless without use of the Goto command, or the Menu command. As explained above, Goto will branch the program to the corresponding Lbl. If you were to have multiple Lbls, then the calculator goes to the first Lbl it finds in the program, starting from the top. This rather defeats having multiple Lbls. RIGHT: :Goto 78 :commands :commands :commands :Lbl 78 :commands
 * You can have multiple Goto commands, but...
 * You cannot have multiple Lbl commands.

:commands :commands :Goto 78 Using Lbl and Goto, you can create a loop. This practice has been greatly depreciated, and you should instead use commands such as Repeat, If-Then, etc.
 * Lbl and Goto should only be widely used for menus, where they are required. Otherwise, try and use alternate commands.

Menu and Lbl
Menus also utilize labels. When a user selects an option from the menu, they are taken to the corresponding label. Syntax is as follows: (note that this merely shows where the proper values should be inserted) :Menu("Menu Name,"Option Name",Label Name) A working example: :Menu("MENU NAME","OPTION 1",L1,"OPTION 2",L2) :Lbl L1 :commands :commands :Lbl L2 :commands In the above example, if the user selects OPTION 1, then they would be taken to Lbl L1.

In order to understand Lbl completely, you should also read:
 * ../Goto/
 * ../Menu/


text:
Talk:Python Programming/Strings

How do I split a string into individual characters in a list

'hello' into  ['h','e','l','l','o']

Answer:

str = 'hello' list( str )

from http://www.faqts.com/knowledge_base/view.phtml/aid/39575/fid/480

How do you deal with contractions when using title case?

For example '.title("saint john's")' yields "Saint John'S" instead of "Saint John's"

Changed "isalnum returns True if the string is entirely composed of alphabetic or numeric characters (i.e. no punctuation)." to "isalnum returns True if the string is entirely composed of alphabetic and/or numeric characters (i.e. no punctuation)."

Only change is the addition of "and/" which removes the ambiguity, making it obvious that this is inclusive. Daemonax (talk) 05:25, 14 October 2009 (UTC)

title: Talk:Python Programming/Strings


text:
User talk:Aburda~enwikibooks

Welcome, !

Come introduce yourself at the new users page. If you have any questions, you can ask there or contact me personally. – Mike.lifeguard  | talk 04:37, 9 March 2008 (UTC)

Your account will be renamed
Hello,

The developer team at Wikimedia is making some changes to how accounts work, as part of our on-going efforts to provide new and better tools for our users like cross-wiki notifications. These changes will mean you have the same account name everywhere. This will let us give you new features that will help you edit and discuss better, and allow more flexible user permissions for tools. One of the side-effects of this is that user accounts will now have to be unique across all 900 Wikimedia wikis. See the announcement for more information.

Unfortunately, your account clashes with another account also called Aburda. To make sure that both of you can use all Wikimedia projects in future, we have reserved the name Aburda~enwikibooks that only you will have. If you like it, you don't have to do anything. If you do not like it, you can pick out a different name.

Your account will still work as before, and you will be credited for all your edits made so far, but you will have to use the new account name when you log in.

Sorry for the inconvenience.

Yours, Keegan Peterzell Community Liaison, Wikimedia Foundation 22:54, 17 March 2015 (UTC)

Renamed
 This account has been renamed as part of single-user login finalisation. If you own this account you can |log in using your previous username and password for more information. If you do not like this account's new name, you can choose your own using this form after logging in: . -- Keegan (WMF) (talk) 04:28, 19 April 2015 (UTC)

title: User talk:Aburda~enwikibooks


text:
Orthopaedic Surgery/Injury

../Trauma/

 * ../Motor Vehicle Accidents/
 * ../Interpersonal Violence/
 * ../Occupational Injury/

../Fractures and Dislocations/

 * Major Injuries
 * Principles of Fractures
 * Shoulder
 * Upper Arm and Elbow
 * Forearm and Wrist
 * Hand
 * Spine
 * Pelvis
 * Hip and Femur
 * Knee and Leg
 * Ankle and Foot

title: Orthopaedic Surgery/Injury


text:
Orthopaedic Surgery/Practice

../Office Practice/

 * ../Office Space/
 * ../Office Schedule/
 * ../Office staff/
 * ../Office Management/

title: Orthopaedic Surgery/Practice


text:
Orthopaedic Surgery/Preface

This is the combined effort of numerous contributors, editors and other volunteers from the wikibook community to build a text book on Orthopaedic Surgery. The book is in its infantile stage at the moment (June 17, 2006) but we hope it will soon be in a readable state. As with any wiki system the book and its contents grow exponentially with the increase in number of people involved. The contents become relevant, authentic, and more acceptable to the intended audience. We hope to grow in that direction. Until then help us build this book. If you have anything to contribute, please feel free to do so.

 * [[File:100%.svg]] Introduction
 * [[File:100%.svg]] Authors
 * [[File:100%.svg]] Acknowledgements
 * [[File:100%.svg]] Note To Authors

title: Orthopaedic Surgery/Preface


text:
Proteomics/Protein Identification - Mass Spectrometry/Databases

This Section:

Introduction
Mass Spectrometry databases are a unique challenge for maintaining the vast quantity of data generated from an MS experiment due to both size and complexity issues. While the actual data generated, primarily peak data discussed earlier in this chapter, is relatively linear, the extreme variations in technique which yielded the spectra introduces significant complexity in attempting to standardize the format a mass spectrometry experiment must be presented in. Although significant progress has been made in the standardization of these data types, there is still significant incongruence from one spectral database to another. This is due in part as a result of the many variations of the technique and the often varied degree of application dependency, with purpose driven mass spectrometry heavily dictating both the experimental design including equipment, protocol, and materials, as well as expected format of results. Thus while several standard data formats (XML based data types discussed previously) exist as well as a plethora of well established databases, there are significant challenges which persist in effect, purpose driven, spectral data mining

Database Examples
Perhaps the first effort to organize spectral data into a curated source, was put forth by the National Institute of Standards and Technology, in conjunction with the Environmental Protection Agency (EPA) and National Institutes of Health (NIH). Begun in 1970, the NIST standard reference database is a verbose collection of spectral data in a common data type, requiring both a minimal amount of data regarding the experiment as well as a standard format for the presentation of spectral data from a wide variety of MS applications. More focused repositories are much more common however, which serve to store and curate a specific subtype of spectra. One such example of this database type is the Mass Spectrometry Database Committee's comprehensive drug library, which contains spectral data for pharmaceutical substances, metabolites, and intermediate compounds. Other databases that contain proteomics data include:

 * Proteomics Identification Database (PRIDE)
 * http://www.ebi.ac.uk/pride/
 * Open Proteomics Database (OPD)
 * http://bioinformatics.icmb.utexas.edu/OPD/

Additional Resources
Table of common fragments : http://ull.chemistry.uakron.edu/gcms/

Compilation of databases : http://www.infochembio.ethz.ch/Links/en/spectrosc_mass.html

Spectral databases:http://www.chemlin.de/chemistry/spectral_database.htm

Table of spectrum data: http://www.lohninger.com/spectroscopy/dball.html

Mass spectrum information and profiling: http://www.dkfz.de/spec/glycosciences.de/sweetdb/start.php?action=form_profiling_search

Computerized spectrum databases: http://www.hellers.com/steve/resume/p125.html

Company databases: http://www.medibix.com/CompanySearch.jsp?cs_choice=c&clt_choice=t&treepath=15442&stype=i

The Proteomics Identifications database: 2010 update
Vizcaíno JA, Côté R, Reisinger F, Barsnes H, Foster JM, Rameseder J, Hermjakob H, Martens L. The Proteomics Identifications database: 2010 update. Nucleic Acids Res. 2010 Jan;38(Database issue):D736-42. Epub 2009 Nov 11.

Reviewer: Ben H.

Main Focus
This article seeks to highlight the recent advances and modifications in the Proteomics Identifications Database and to point out the vital role it plays in the collection and storage of mass spectrometry (MS) data. The data found in the database comes from a vast range of experiments and is stored in a format that allows for simple and complex querying in a common format. The database has been constantly growing and in the past two years between 2008 and 2010 it has exploded to contain over two and a half million protein IDs and eleven and a half million peptides. It also contains more than fifty million spectra. All of this data comes from approximately sixty different organisms. The data contained within is primarily protein and peptide IDs, MS mass spectra, and any related metadata.

New Terms

 * Proteomics Identification Database (PRIDE): A database that is centralized, public, and standards compliant and contains a variety of proteomics data. (http://www.ebi.ac.uk/pride/)
 * Ontology Lookup Service (OLS): A query interface for controlled vocabulary and ontology lookup. (http://www.ebi.ac.uk/ontology-lookup/)
 * Protein Identifier Cross-Reference System (PICR): A system designed to map protein sequences with protein IDs. (http://www.ebi.ac.uk/Tools/picr/implementation.do)
 * Database on Demand (DoD): A tool used to generate custom databases of FASTA sequences. (source: http://)
 * PRIDE Spectrum Viewer: A tool used to view spectra from within the Proteomics Identifications Database. (http://www.ebi.ac.uk/pride/viewSpectrumHelp.do)
 * PRIDE Converter: A tool used to convert a variety of proteomic data to PRIDE XML format to be submitted to PRIDE and to conform to submission standards. (http://code.google.com/p/pride-converter/#What_is_PRIDE_Converter?)
 * ProteomExchange: A consortium established to provide a common point of submission for a variety of proteomic repositories.  It also seeks to encourage sharing of information between repositories. (http://www.proteomexchange.org/)

Summary
The Proteomics Identification Database (PRIDE) was established in 2005 in response to the large amounts of proteomic data. This is not the only database that serves as a repository of proteomics data. Others include GPMDB, Proteinpedia, Peptide Atlas, and NCBI’s Peptidome. The data submitted to the PRIDE database can be anonymously shared with reviewers and editors through log-in accounts. This feature has made the PRIDE database the preferred placed to submit data for a variety of journals including Nature Biotechnology, Proteomics, and Nature Methods. There have been two tools that have had a very positive influence on the growth of the PRIDE database. These are the Ontology Lookup Service (OLS) and the Protein Identifier Cross-Reference System (PICR). Database on Demand (DoD) is a third tool that was added to increase the usefulness of the database.

The data contained within PRIDE is very diverse and is becoming more diverse as the years pass by. As of 2010, humans are represented the most in the database, covering about 38% of all protein data and 36% of all peptide data. Bacteria are the most diverse group of organisms with 20 different species being represented in the database. The largest experiment submitted to PRIDE is approximately 85GB related to the c. elegan genome. The largest experiment set currently in PRIDE is that of the rat’s secretory pathway. Surprisingly the database also contains data from a variety of extinct animals, most noticeably the Tyrannosaurus rex.

The primary improvement in the PRIDE web interface is the ability to submit fragment ion annotations. This data can then be visualized with the online “PRIDE Spectrum Viewer.” Another feature developed was the integration of the PICR mappings into a variety of tools. These tools include the venn diagram tool, queries, and the BioMart Interface. The “Identification Detail View” has also been modified to take into account the PICR mappings.

The submission process has been made much easier with the addition of the PRIDE Converter. This tool has caused an explosion in data submission. This is because the tool provides a simple wizard for converting various proteomics data formats to the PRIDE XML format to be submitted. In addition to converting the data, it is also now possible to submit very large data sets via FTP server. This has essentially removed all size limitations on data submissions.

The PRIDE BioMart interface is used for integrating information found within pride with other resources. The quantity of these resources is continuously growing. It is essential to our understanding of biology to be able to link together these resources to obtain a clearer picture of biology as a whole. Future goals include implanting a technique to allow sharing of proteomics data between all members of the community using PRIDE and NCBI as the primary points of submission. All data will be shared and publically available to ensure full exposure in the scientific community.

Relevance to a Traditional Proteomics Course
The field of proteomics has exploded in the past decade and the amount of information has jumped leaps and bounds. Mass spectrometry is just one technique that has generated a lot of data that now resides in PRIDE. It is important in any proteomics course to understand the importance of being able to store and share the data and the information derived from the data. Having a singular location for common access to shared data is immensely advantageous to anyone studying proteomics.