text:
Standards, Stepanov, Stroustrup, and Stevens
Bjarne Stroustrup's recent "Concepts" setback with the C++ standards committee, got me thinking about standards in general and C++ in particular, and Stroustrup's tireless role in evolving the language. Back in 1995, DDJ's resident C/C++ columnist Al Stevens talked with STL designer Alexander Stepanov about many great programming topics -- among them, Stroustrup's integral part in getting STL into the standard and an early discussion of the notion of "Concepts."
C PROGRAMMING: Alexander Stepanov and STL
by Al Stevens
I am taking a break from the current "C Programming" project to present an interview with Alexander Stepanov, the creator of the Standard Template Library (STL), which ANSI/ISO has approved as a part of Standard C++. Alex heads the Generic Programming Project at Hewlett-Packard Research Laboratories in Palo Alto, California, and STL is the product of the research being conducted by his team.
STL is an important addition to the evolution of Standard C++, not only for the rich library of container classes that it provides, but also for its insight into "generic programming," a different approach to designing and developing code. You C++ programmers should pay close attention to these developments, which will surely influence your methods and techniques. I will discuss STL and generic programming in more detail next month.
We met in a conference room in the main building of the HP Labs complex. I wanted to learn more about generic programming and about how STL, a significant body of code and a radical departure from conventional class-library design, had won the overwhelming approval of the usually conservative and cautious committee.
DDJ: Tell us something about your long-term interest in generic programming.
AS: I started thinking about generic programming in the late '70s when I observed that some algorithms depended, not on some particular implementation of a data structure, but only on a few fundamental semantic properties of the structure. I started going through many different algorithms, and I found that most algorithms can be abstracted away from a particular implementation in such a way that efficiency is not lost. Efficiency is a fundamental concern of mine. It is silly to abstract an algorithm in such a way that when you instantiate it back, it becomes inefficient.
At that time, I thought that the right way of doing this kind of research was to develop a programming language, which is what I started doing with two of my friends: Deepak Kapur, who at present is a professor at State University of New York, Albany; and David Musser, professor at Rensselaer Polytechnic Institute. At that time the three of us worked at the General Electric Research Center at Schenectady, New York. We started working on a language called "Tecton," which would allow people to describe algorithms associated with what we called "generic structures," which is just a collection of formal types and properties of these types. Sort of mathematical stuff. We realized that one can define an algebra of operations on these structures, refine them, enrich them, and do all sorts of things.
There were some interesting ideas, but the research didn't lead to practical results because Tecton was functional. We believed Backus's idea that we should liberate programming from the von Neumann style, and we didn't want to have side effects. That limited our ability to handle very many algorithms that require the notions of "state" and "side effects."
The interesting thing about Tecton, which I realized sometime in the late '70s, was that there was a fundamental limitation in the accepted notion of an abstract data type. People usually viewed abstract data types as something which tells you only about the behavior of an object and the implementation is totally hidden. It was commonly assumed that the complexity of an operation is part of implementation and that abstraction ignores complexity. One of the things that is central to generic programming as I understand it now, is that complexity, or at least some general notion of complexity, has to be associated with an operation.
Let's take an example. Consider an abstract data-type stack. It's not enough to have Push and Pop connected with the axiom wherein you push something onto the stack and, after you pop the stack, you get the same thing back. It is of paramount importance that pushing the stack is a constant-time operation, regardless of the size of the stack. If I implement the stack so that every time I push it becomes slower and slower, no one will want to use this stack.
We need to separate the implementation from the interface but not at the cost of totally ignoring complexity. Complexity has to be and is a part of the unwritten contract between the module and its user. The reason for introducing the notion of abstract data types was to allow interchangeable software modules. You cannot have interchangeable modules unless these modules share similar complexity behavior. If I replace one module with another module with the same functional behavior but with different complexity trade-offs, the user of this code will be unpleasantly surprised. I could tell him anything I like about data abstraction, and he still would not want to use the code. Complexity assertions have to be part of the interface.
Around 1983, I moved from GE Research to the faculty of the Polytechnic University, formerly known as Brooklyn Polytechnic, in New York. I started working on graph algorithms. My principal collaborator was Aaron Kershenbaum, now at IBM Yorktown Heights. He was an expert in graph and network algorithms, and I convinced him that some of the ideas of high order and generic programming were applicable to graph algorithms. He had some grants and provided me with support to start working with him to apply these ideas to real network algorithms. He was interested in building a toolbox of high-order generic components so that some of these algorithms could be implemented, because some of the network algorithms are so complex that they are theoretically analyzed, but never implemented. I decided to use a dialect of Lisp called "Scheme" to build such a toolbox. Aaron and I developed a large library of components in Scheme demonstrating all kinds of programming techniques. Network algorithms were the primary target. Later, Dave Musser, who was still at GE Research, joined us, and we developed even more components, a fairly large library. The library was used at the university by graduate students, but was never used commercially. I realized during this activity that side effects are important, because you cannot really do graph operations without side effects. You cannot replicate a graph every time you want to modify a vertex. Therefore, the insight at that time was that you can combine high-order techniques when building generic algorithms with disciplined use of side effects. Side effects are not necessarily bad; they are bad only when they are misused.
In the summer of 1985, I was invited back to GE Research to teach a course on high-order programming. I demonstrated how you can construct complex algorithms using this technique. One of the people who attended was Art Chen, then the manager of the Information Systems Laboratory. He was sufficiently impressed to ask me if I could produce an industrial-strength library using these techniques in Ada, provided that I would get support. Being a poor assistant professor, I said yes, even though I didn't know any Ada at the time. I collaborated with Dave Musser in building this Ada library. It was an important undertaking, because switching from a dynamically typed language such as Scheme, to a strongly typed language such as Ada allowed me to realize the importance of strong typing. Everybody realizes that strong typing helps in catching errors. I discovered that strong typing, in the context of Ada generics, was also an instrument of capturing designs. It was not just a tool to catch bugs; it was also a tool to think. That work led to the idea of orthogonal decomposition of a component space. I realized that software components belong to different categories. Object-oriented programming aficionados think that everything is an object. When I was working on the Ada generic library, I realized that this wasn't so. There are things that are objects: Things that have state and change their state are objects. And then there are things that are not objects. A binary search is not an object. It is an algorithm. Moreover, I realized that by decomposing the component space into several orthogonal dimensions, we can reduce the number of components, and, more importantly, we can provide a conceptual framework of how to design things.
Then I was offered a job at Bell Laboratories working in the C++ group on C++ libraries. They asked me whether I could do it in C++. Of course, I didn't know C++ and, of course, I said I could. But I couldn't do it in C++, because in 1987 C++ didn't have templates, which are essential for enabling this style of programming. Inheritance was the only mechanism to obtain genericity, and it was not sufficient.
Even now, C++ inheritance is not of much use for generic programming. Let's discuss why. Many people have attempted to use inheritance to implement data structures and container classes. As we know now, there were few, if any, successful attempts. C++ inheritance and the programming style associated with it are dramatically limited. It is impossible to implement a design which includes as trivial a thing as equality using it. If you start with a base class X at the root of your hierarchy and define a virtual-equality operator on this class, which takes an argument of the type X, then derive class Y from class X. What is the interface of the equality? It has equality which compares Y with X. Using animals as an example (object-oriented people love animals), define mammal and derive giraffe from mammal. Then define a member function mate, where animal mates with animal and returns an animal. Then you derive giraffe from animal and, of course, it has a function mate, where giraffe mates with animal and returns an animal. It's definitely not what you want. While mating may not be very important for C++ programmers, equality is. I do not know a single algorithm where equality of some kind is not used.
You need templates to deal with such problems. You can have template class animal, which has member function mate, which takes animal and returns animal. When you instantiate giraffe, mate will do the right thing. The template is a more powerful mechanism in that respect.
However, I was able to build a rather large library of algorithms, which later became part of the Unix System Laboratory Standard Component Library. I learned a lot at Bell Labs by talking to people like Andy Koenig and Bjarne Stroustrup about programming. I realized that C/C++ is an important programming language with some fundamental paradigms that cannot be ignored. In particular, I learned that pointers are very good. I don't mean dangling pointers. I don't mean pointers to the stack. But I mean that the general notion of pointer is a powerful tool. The notion of address is universally used. It is incorrectly believed that pointers make our thinking sequential. That is not so. Without some kind of address, we cannot describe any parallel algorithm. If you attempt to describe an addition of n numbers in parallel, you cannot do it unless you can talk about the first number being added to the second number, while the third number is added to the fourth number. You need some kind of indexing. You need some kind of address to describe any kind of algorithm, sequential or parallel. The notion of an "address" or a "location" is fundamental in our conceptualizing computational processes--algorithms.
Let's consider now why C is a great language. It is commonly believed that C is a hack which was successful because UNIX was written in it. I disagree. Over a long period of time computer architectures evolved, not because of some clever people figuring how to evolve architectures--as a matter of fact, clever people were pushing tagged architectures during that period of time--but because of the demands of different programmers to solve real problems. Computers that were able to deal just with numbers evolved into computers with byte-addressable memory, flat address spaces, and pointers. This was a natural evolution, reflecting the growing set of problems that people were solving. C, reflecting the genius of Dennis Ritchie, provided a minimal model of the computer that had evolved over 30 years. C was not a quick hack. As computers evolved to handle all kinds of problems, C, being the minimal model of such a computer, became a very powerful language to solve all kinds of problems in different domains very effectively. This is the secret of C's portability: It is the best representation of an abstract computer that we have. Of course, the abstraction is done over the set of real computers, not some imaginary computational devices. Moreover, people could understand the machine model behind C. It is much easier for an average engineer to understand the machine model behind C than the machine model behind Ada or even Scheme. C succeeded because it was doing the right thing, not because of AT&T promoting it or UNIX being written with it.
C++ is successful because instead of trying to come up with some machine model invented by just contemplating one's navel, Bjarne started with C and tried to evolve C further, allowing more general programming techniques, but within the framework of this machine model. The machine model of C is very simple. You have the memory where things reside. You have pointers to the consecutive elements of the memory. It's very easy to understand. C++ keeps this model, but makes things that reside in the memory more extensive than in the C machine, because C has a limited set of data types. It has structures that allow a sort of extensible type system, but it does not allow you to define operations on structures. This limits the extensibility of the type system. C++ moved C's machine model much further toward a truly extensible type system.
In 1988, I moved to HP Labs, where I was hired to work on generic libraries. For several years, instead of doing that, I worked on disk drives, which was exciting but was totally orthogonal to this area of research. I returned to generic-library development in 1992, when Bill Worley, who was my lab director, established an algorithms project with me as its manager. C++ had templates by then. I discovered that Bjarne had done a marvelous job at designing templates. I had participated in several discussions early on at Bell Labs about designing templates and argued rather violently with Bjarne that he should make C++ templates as close to Ada generics as possible. I think that I argued so violently that he decided against that. I realized the importance of having template functions in C++ and not just template classes, as some people believed. I thought, however, that template functions should work like Ada generics, that is, that they should be explicitly instantiated. Bjarne did not listen to me, and he designed a template-function mechanism where templates are instantiated implicitly using an overloading mechanism. This particular technique became crucial for my work because I discovered that it allowed me to do many things that were not possible in Ada. I view this particular design by Bjarne as a marvelous piece of work, and I'm very happy that he didn't follow my advice.
DDJ: When did you first conceive of the STL, and what was its original purpose?
AS: In 1992, when the project was formed, there were eight people in it. Gradually the group diminished, eventually becoming two people: me and Meng Lee. While Meng was new to the area--she was doing compilers for most of her professional life--she accepted the overall vision of generic-programming research and believed that it could lead to changing software development at the point when very few people shared this belief. I do not think that I would have been able to build STL without her help (after all, STL stands for STepanov and Lee_). We wrote a huge library--a lot of code with a lot of data structures and algorithms, function objects, adaptors, and so on. There was a lot of code, but no documentation. Our work was viewed as a research project with the goal of demonstrating that you can have algorithms defined as generically as possible and still be extremely efficient. We spent a lot of time taking measurements, and we found that we can make these algorithms as generic as they can be and still be as efficient as handwritten code. There is no performance penalty for this style of programming! The library was growing, but it wasn't clear where it was heading as a project. It took several fortunate events to lead it toward STL.
DDJ: When and why did you decide to propose STL as part of the ANSI/ISO Standard C++ definition?
AS: During the summer of 1993, Andy Koenig came to teach a C++ course at Stanford. I showed him some of our stuff, and I think he was genuinely excited about it. He arranged an invitation for me to give a talk at the November meeting of the ANSI/ISO C++ Standards Committee in San Jose. I gave a talk entitled, "The Science of C++ Programming." The talk was rather theoretical. The main point was that there are fundamental laws connecting basic operations on elements of C++, which have to be obeyed. I showed a set of laws that connect very primitive operations such as constructors, assignment, and equality. C++ as a language does not impose any constraints. You can define your equality operator to do multiplication. But equality should be equality, and it should be a reflexive operation. A should be equal to A. It should be symmetric. If A is equal to B, then B should be equal to A. And it should be transitive. Standard mathematical axioms. Equality is essential for other operations. There are axioms that connect constructors and equality. If you construct an object with a copy constructor out of another object, the two objects should be equal. C++ does not mandate this, but this is one of the fundamental laws that we must obey. Assignment has to create equal objects. So I presented a bunch of axioms that connected these basic operations. I talked a little bit about axioms of iterators and showed some of the generic algorithms working on iterators. It was a two-hour talk and, I thought, rather dry. However, it was very well received. I didn't think at that time about using this thing as a part of the standard because it was commonly perceived that this was some kind of advanced programming technique which would not be used in the "real world." I thought there was no interest at all in any of this work by practical people.
I gave this talk in November, and I didn't think about ANSI at all until January. On January 6, I got a mail message from Andy Koenig, who is the project editor of the standard document, saying that if I wanted to make my library a part of the standard, I should submit a proposal by January 25. My answer was, "Andy, are you crazy?" to which he answered, "Well, yes I am crazy, but why not try it?"
At that point there was a lot of code but there was no documentation, much less a formal proposal. Meng and I spent 80-hour weeks to come up with a proposal in time for the mailing deadline. During that time the only person who knew it was coming was Andy. He was the only supporter, and he did help a lot during this period. We sent the proposal out and waited. While doing the proposal we defined a lot of things. When you write things down, especially when you propose them as a standard, you discover all kinds of flaws with your design. We had to reimplement every single piece of code in the library--several hundred components--between the January mailing and the next meeting in March in San Diego. Then we had to revise the proposal, because while writing the code, we discovered many flaws.
DDJ: Can you characterize the discussions and debate in the committee following the proposal? Was there immediate support? Opposition?
AS: We did not believe that anything would come out of it. I gave a talk, which was very well received. There were a lot of objections, most of which took this form: This is a huge proposal, it's way too late, a resolution had been passed at the previous meeting not to accept any major proposals, and here is this enormous thing, the largest proposal ever, with a lot of totally new things. The vote was taken, and, interestingly enough, an overwhelming majority voted to review the proposal at the next meeting and put it to a vote at the next meeting in Waterloo, Ontario.
Bjarne Stroustrup became a strong supporter of STL. A lot of people helped with suggestions, modifications, and revisions. Bjarne came here for a week to work with us. Andy helped constantly. C++ is a complex language, so it is not always clear what a given construct means. Almost daily I called Andy or Bjarne to ask whether such-and-such was doable in C++. I should give Andy special credit. He conceived of STL as part of the standard library. Bjarne became the main pusher of STL on the committee. There were other people who were helpful: Mike Vilot, the head of the library group, Nathan Myers of Rogue Wave, Larry Podmolik of Andersen Consulting. There were many others.
The STL as we proposed it in San Diego was written in present C++. We were asked to rewrite it using the new ANSI/ISO language features, some of which are not implemented. There was an enormous demand on Bjarne and Andy's time trying to verify that we were using these nonimplemented features correctly.
People wanted containers independent of the memory model, which was somewhat excessive because the language doesn't include memory models. People wanted the library to provide some mechanism for abstracting memory models. Earlier versions of STL assumed that the size of the container is expressible as an integer of type size_t and that the distance between two iterators is of type ptrdiff_t. And now we were told, why don't you abstract from that? It's a tall order because the language does not abstract from that; C and C++ arrays are not parameterized by these types. We invented a mechanism called "allocator," which encapsulates information about the memory model. That caused grave consequences for every component in the library. You might wonder what memory models have to do with algorithms or the container interfaces. If you cannot use things like size_t, you also cannot use things like T* because of different pointer types (T*, T huge *, and so on). Then you cannot use references because with different memory models you have different reference types. There were tremendous ramifications on the library.
The second major thing was to extend our original set of data structures with associative data structures. That was easier, but coming up with a standard is always hard because we needed something which people would use for years to come for their containers. STL has, from the point of view of containers, a very clean dichotomy. It provides two fundamental kinds of container classes: sequences and associative containers. They are like regular memory and content-addressable memory. It has a clean semantics explaining what these containers do. We needed to implement associative data structures in a short period of time, and Dave Musser came up with a robust implementation. Dave contributed in diverse and sundry ways to all aspects of STL.
When I arrived at Waterloo, Bjarne spent a lot of time explaining to me that I shouldn't be concerned, that most likely it was going to fail, but that we did our best, we tried, and we should be brave. The level of expectation was low. We expected major opposition. There was some opposition but it was minor. When the vote was taken in Waterloo, it was totally surprising because it was maybe 80 percent in favor and 20 percent against. Everybody expected a battle, everybody expected controversy. There was a battle, but the vote was overwhelming.
DDJ: What effect does STL have on the class libraries published in the ANSI/ISO February 1994 working paper?
AS: STL was incorporated into the working paper in Waterloo. The STL document is split apart, and put in different places of the library parts of the working paper. Mike Vilot is responsible for doing that. I do not take an active part in the editorial activities. I am not a member of the committee but every time an STL-related change is proposed, it is run by me. The committee is very considerate.
DDJ: Several template changes have been accepted by the committee. Which ones have impact on STL?
AS: Prior to the acceptance of STL, there were two changes that were used by the revised STL. One is the ability to have template member functions. STL uses them extensively to allow you to construct any kind of a container from any other kind of a container. There is a single constructor that allows you to construct vectors out of lists or out of other containers. There is a templatized constructor which is templatized on the iterator, so if you give a pair of iterators to a container constructor, the container is constructed out of the elements which are specified by this range. A range is a set of elements specified by a pair of iterators, generalized pointers, or addresses. The second significant new feature used in STL was template arguments, which are templates themselves, and that's how allocators, as originally proposed, were done.
DDJ: Did the requirements of STL influence any of the proposed template changes?
AS: In Valley Forge, Bjarne proposed a significant addition to templates called "partial specialization," which would allow many of the algorithms and classes to be much more efficient and which would address a problem of code size. I worked with Bjarne on the proposal, and it was driven by the need of making STL even more efficient. Let me explain what partial specialization is. At present, you can have a template function parameterized by class T called swap(T&, T&). This is the most generic possible swap. If you want to specialize swap and do something different for a particular type, you can have a function swap(int&, int&), which does integer swapping in some different way. However, it was not possible to have an intermediate partial specialization, that is, to provide a template function of the form template void swap(vector&, vector&);. This form provides a special way to swap vectors. This is an important problem from an efficiency point of view. If you swap vectors with the most generic swap, which uses three assignments, vectors are copied three times, which takes linear time. However, if we have this partial specialization of swap for vectors that swap two vectors, then you can have a fast, constant time operation that moves a couple of pointers in the vector headers. That would allow sort, for example, to work on vectors of vectors much faster. With the present STL, without partial specialization, the only way to make it work faster is for any particular kind of vector, such as vector, to define its own swap, which can be done, but which puts a burden on the programmer. In very many cases, partial specialization would allow algorithms to be more effective on some generic classes. You can have the most generic swap, a less generic swap, an even less generic swap, and a totally specific swap. You can do partial specialization, and the compiler will find the closest match. Another example is copy. At present, the copy algorithm just goes through a sequence of elements defined by iterators and copies them one by one. However, with partial specialization, we can define a template function template T ** copy (T**, T**, T** );. This will efficiently copy a range of pointers by using memcpy, because when we're copying pointers, we don't have to worry about construction and destruction and we can just move bits with memcpy. That can be done once and for all in the library, and the user doesn't need to be concerned. We can have particular specializations of algorithms for some of the types. That was a very important change, and as far as I know it was favorably received in Valley Forge and will be part of the Standard.
DDJ: What kinds of applications beyond the standard class libraries are best served by STL?
AS: I have hopes that STL will introduce a style of programming called "generic programming." I believe that this style is applicable to any kind of application, that is, trying to write algorithms and data structures in the most generic way. Specifying families or categories of such structures satisfying common semantic requirements is a universal paradigm applicable to anything. It will take a long time before the technology is understood and developed. STL is a starting point for this type of programming.
Eventually, we will have standard catalogs of generic components with well-defined interfaces, with well-defined complexities. Programmers will stop programming at the micro level. You will never need to write a binary-search routine again. Even now, STL provides several binary-search algorithms written in the most generic way. Anything that is binary-searchable can be searched by those algorithms. The minimum requirements that the algorithm assumes are the only requirements that the code uses. I hope that the same thing will happen for all software components. We will have standard catalogs, and people will stop writing these things.
That was Doug McIlroy's dream when he published a famous paper talking about component factories in 1969. STL is an example of the programming technology which will enable such component factories. Of course, a major effort is needed, not just research effort, but industrial effort to provide programmers with such catalogs, to have tools which will allow people to find the components they need, to glue the components together, and to verify that their complexity assumptions are met.
DDJ: STL does not implement a persistent-object-container model. The map and multimap containers are particularly good candidates for persistent-storage containers as inverted indexes into persistent-object databases. Have you done any work in that direction or can you comment on such implementations?
AS: This point was noticed by many people. STL does not implement persistence for a good reason. STL is as large as was conceivable at that time. I don't think that any larger set of components would have passed through the standards committee. But persistence is something that several people thought about. During the design of STL, and especially during the design of the allocator component, Bjarne observed that allocators, which encapsulate memory models, could be used to encapsulate a persistent memory model. The insight was Bjarne's, and it is an important and interesting insight. Several object-database companies are looking at that. In October 1994 I attended a meeting of the Object Database Management Group. I gave a talk on STL, and there was strong interest there to make the containers within their emerging interface to conform to STL. They were not looking at the allocators as such. Some of the members of the Group are, however, investigating whether allocators can be used to implement persistency. I expect that there will be persistent object stores with STL-conforming interfaces fitting into the STL framework within the next year.
DDJ: Set, multiset, map, and multimap are implemented with a red-black-tree data structure. Have you experimented with other structures such as B*trees?
AS: I don't think that would be quite right for in-memory data structures, but this is something that needs to be done. The same interfaces defined by STL need to be implemented with other data structures--skip lists, splay trees, half-balanced trees, and so on. It's a major research activity that needs to be done because STL provides us with a framework where we can compare the performance of these structures. The interface is fixed. The basic complexity requirements are fixed. Now we can have meaningful experiments comparing different data structures to each other. There were a lot of people from the data-structure community coming up with all kinds of data structures for that kind of interface. I hope that they would implement them as generic data structures within the STL framework.
DDJ: Are compiler vendors working with you to implement STL into their products?
AS: Yes. I get a lot of calls from compiler vendors. Pete Becker of Borland was extremely helpful. He helped by writing some code so that we could implement allocators for all the memory models of Borland compilers. Symantec is going to release an STL implementation for its Macintosh compiler. Edison Design Group has been very helpful. We have had a lot of support from most compiler vendors.
DDJ: STL includes templates that support memory models of 16-bit MS-DOS compilers. With the current emphasis on 32-bit, flat-model compilers and operating systems, do you think that the memory-model orientation will continue to be valid?
AS: Irrespective of Intel architecture, memory model is an object, which encapsulates the information about what a pointer is, what integer sizes and difference types are associated with this pointer, what reference type is associated with this pointer, and so on. Abstracting that is important if we introduce other kinds of memory such as persistent memory, shared memory, and so on. A nice feature of STL is that the only place that mentions the machine-related types in STL--something that refers to real pointer, real reference--is encapsulated within roughly 16 lines of code. Everything else--all the containers, all the algorithms--is built abstractly without mentioning anything which relates to the machine. From the point of view of portability, all the machine-specific things which relate to the notion of address, pointer, and so on, are encapsulated within a tiny, well-understood mechanism. Allocators, however, are not essential to STL, not as essential as the decomposition of fundamental data structures and algorithms.
DDJ: The ANSI/ISO C Standards committee treated platform-specific issues such as memory models as implementation details and did not attempt to codify them. Will the C++ committee be taking a different view of these issues? If so, why?
AS: I think that STL is ahead of the C++ standard from the point of view of memory models. But there is a significant difference between C and C++. C++ has constructors and operator new, which deal with memory model and which are part of the language. It might be important now to look at generalizing things like operator new to be able to take allocators the way STL containers take allocators. It is not as important now as it was before STL was accepted, because STL data structures will eliminate the majority of the needs for using new. Most people should not allocate arrays because STL does an effective job in doing so. I never need to use new in my code, and I pay great attention to efficiency. The code tends to be more efficient than if I were to use new. With the acceptance of STL, new will sort of fade away. STL also solves the problem of deleting because, for example, in the case of a vector, the destructor will destroy it on the exit from the block. You don't need to worry about releasing the storage as you do when you use new. STL can dramatically minimize the demand for garbage collection. Disciplined use of containers allows you to do whatever you need to do without automatic memory management. The STL constructors and destructors do allocation properly.
DDJ: The C++ Standard Library subcommittee is defining standard namespaces and conventions for exception handling. Will STL classes have namespaces and throw exceptions?
AS: Yes, they will. Members of the committee are dealing with that, and they are doing a great job.
DDJ: How different from the current STL definition will the eventual standard definition be? Will the committee influence changes, or is the design under tighter control?
AS: It seems to be a consensus that there should not be any major changes to STL.
DDJ: How can programmers gain an early experience with STL in anticipation of it becoming a standard?
AS: They can download the STL header files from butler.hpl.hp.com under /stl and use it with Borland or IBM compilers, or with any other compiler powerful enough to handle STL. The only way to learn a style of programming is by programming. They need to look at examples and write programs in this style.
DDJ: You are collaborating with P.J. (Bill) Plauger to write a book about STL. What will be the emphasis of the book, and when is it scheduled to be published?
AS: It is scheduled to be published in the summer of 1995 and is going to be an annotated STL implementation. It will be similar to Bill's books on the Standard C Library and the Draft Standard C++ Library. He is taking the lead on the book, which will serve as a standard reference document on the use of the STL. I hope to write a paper with Bjarne that will address language/library interactions in the context of C++/STL. It might lead to another book.
A lot more work needs to be done. For STL to become a success, people should do research and experiment with this style of programming. More books and articles need to be written explaining how to program in this style. Courses need to be developed. Tutorials need to be written. Tools need to be built which help people navigate through libraries. STL is a framework, and it would be nice to have a tool with which to browse through this framework.
DDJ: What is the relationship between generic programming and object-oriented programming?
AS: In one sense, generic programming is a natural continuation of the fundamental ideas of object-oriented programming--separating the interface and implementation and polymorphic behavior of the components. However, there is a radical difference. Object-oriented programming emphasizes the syntax of linguistic elements of the program construction. You have to use inheritance, you have to use classes, you have to use objects, objects send messages. Generic programming does not start with the notion of whether you use inheritance or you don't use inheritance. It starts with an attempt to classify or produce a taxonomy of what kinds of things there are and how they behave. That is, what does it mean that two things are equal? What is the right way to define equality? Not just actions of equality. You can analyze equality deeper and discover that there is a generic notion of equality, wherein two objects are equal if their parts--or at least their essential parts--are equal. We can have a generic recipe for an equality operation. We can discuss what kinds of objects there are. There are sequences. There are operations on sequences. What are the semantics of these operations? What types of sequences from the point of view of complexity trade-offs should we offer the user? What kinds of algorithms are there on sequences? What kinds of different sorting functions do we need? And only after we develop that, after we have the conceptual taxonomy of the components, do we address the issue of how to implement them. Do we use templates? Do we use inheritance? Do we use macros? What kind of language technology do we use?
The fundamental idea of generic programming is to classify abstract software components and their behavior and come up with a standard taxonomy. The starting point is with real, efficient algorithms and data structures and not with the language. Of course, it is always embodied in the language. You cannot have generic programming outside of a language. STL is done in C++. You could implement it in Ada. You could implement it in other languages. They would be slightly different, but there are some fundamental things that would be there. Binary search has to be everywhere. Sort has to be everywhere. That's what people do. There will be some modifications on the semantics of the containers, slight modifications imposed by the language. In some languages you can use inheritance more, in some languages you have to use templates. But the fundamental difference is precisely that generic programming starts with semantics and semantic decomposition. For example, we decide that we need a component called "swap." Then we figure out how this particular component will work in different languages.
The emphasis is on the semantics and semantic classification, while object-orientedness, especially as it has evolved, places a much stronger emphasis, and, I think, too much of an emphasis, on precisely how to develop things, that is, using class hierarchies. OOP tells you how to build class hierarchies, but it doesn't tell you what should be inside those class hierarchies.
DDJ: What do you see as the future of STL and generic programming?
AS: I mentioned before, the dream of programmers having standard repositories of abstract components with interfaces that are well understood and that conform to common paradigms. To do that, there needs to be a lot more effort to develop the scientific underpinnings of this style of programming. STL starts it to some degree by classifying the semantics of some fundamental components. We need to work more on that. The goal is to transform software engineering from a craft to an engineering discipline. It needs a taxonomy of fundamental concepts and some laws that govern those concepts, which are well understood, which can be taught, which every programmer knows even if he cannot state them correctly. Many people know arithmetic even if they never heard of commutativity. Everybody who graduated from high school knows that 2+5 is equal to 5+2. Not all of them know that it is a commutative property of addition. I hope that most programmers will learn the fundamental semantic properties of fundamental operations. What does "assignment" mean? What does "equality" mean? How to construct data structures.
At present, C++ is the best vehicle for this style of programming. I have tried different languages and I think that C++ allows this marvelous combination of abstractness and efficiency. However, I think that it is possible to design a language based on C and on many of the insights that C++ brought into the world, a language which is more suitable to this style of programming, which lacks some of the deficiencies of C++, in particular its enormous size. STL deals with things called "concepts." What is an iterator? Not a class. Not a type. It is a concept. (Or, if we want to be more formal, it is what Bourbaki calls a structure "type," what logicians call a "theory," or what type-theory people call a "sort.") It is something which doesn't have a linguistic incarnation in C++. But it could. You could have a language where you could talk about concepts, refine them, and then finally form them in a very programmatic kind of way into classes. (There are, of course, languages that deal with sorts, but they are not of much use if you want to sort.) We could have a language where we could define something called "forward iterator," which is just defined as a concept in STL--it doesn't have a C++ incarnation. Then we can refine forward iterator into bidirectional iterator. Then random iterator can be refined from that. It is possible to design a language which would enable even far greater ease for this style of programming. I am fully convinced that it has to be as efficient and as close to the machine as are C and C++. And I do believe that it is possible to construct a language that allows close approximation to the machine on the one hand, and has the ability to deal with very abstract entities on the other hand. I think that abstractness can be even greater than it is in C++ without creating a gap between underlying machines. I think that generic programming can influence language research and that we will have practical languages, which are easy to use and are well suited for that style of programming. From that you can deduce what I am planning to work on next.


text: "I had expected it to be glamorous and fun, but it wasn't like that at all. One day I was put in a line-up with 12 models. We were all naked apart from flesh-coloured thongs, standing in front of a panel of casting directors. They basically went through us and said 'yes', 'no', 'yes', 'no', depending on whether we were thin enough. If you weren't thin enough you were sent out of the room immediately. I was sent out." — Georgina Wilkin, a former Prada model, now recovering from anorexia.

subset: commoncrawl


text:
Google spent $1.02 billion on data centers and other infrastructure in the last part of 2012, according to the company's quarterly report.
Google's spending is on the rise and hit a two-year high, according to GigaOM. However, Google's pinnacle of spending was $2 billion in late 2010 for a data center and office in New York City. Still, there's been some speculation on where the latest $1 billion was spent, including Google Fiber and competing with Apple, Facebook, Yelp and Amazon.
GigaOM suggests that Google is spending much of the cash on data centers in different countries to meet demand. Facebook, after all, has spent considerably more on expanding its footprint -- about a third of its revenue.
U.S. & World
Looking at Google's report, we see that Google's $9.83 billion net revenue surpassed the $9.6 billion analyst average forecast, according to Reuters. While Google did lose 6 percent of cost-per-click because their business is increasingly more mobile, it's no longer hemorrhaging cash as it was last quarter. And now that the search titan has sold off Motorola Mobility's set-top business for $14.42 billion, last quarter's loss of $353 million seems inconsequential. In short, Google's looking pretty good to Wall Street.


text:
Multiple award-winning singer Guy Penrod, formerly of Bill Gaither's "Vocal Band," will appear at 6 p.m. Sunday at McAlister Auditorium at Furman University, 3300 Poinsett Highway, Greenville, S.C.
Singer Guy Penrod to perform Sunday in Greenville, SC
Multiple award-winning singer Guy Penrod, formerly of Bill Gaither's "Vocal Band," will appear at 6 p.m. Sunday at McAlister Auditorium at Furman University, 3300 Poinsett Highway, Greenville, S.C.
Special guest Buddy Jewell also will perform.
Penrod was named the NQC Soloist of the Year in 2013 on the heels of receiving an award for the No. 1 selling Southern Gospel Album of 2012. His show will include songs from this award-winning CD as well as "Breath Deep," his best-selling release in Southern Gospel of 2010.
Penrod made the decision to pursue a solo career in 2010 after many years with the Gaither Vocal Band.
The country side of gospel is where gold record-winning artist Buddy Jewell finds himself on his latest CD "I Surrender All." His No. 1 song "Somebody Who Would Die For You" earned him titles as Crossover Artist of the Year and Entertainer of the Year in 2011. He was the first winner on 2003 Nashville Star on USA.
Tickets are $19-$26. Call 864-294-3097 or visit www.ticketmaster.com for tickets.
Holiday festival fundraiser at St. James
The parish hall at St. James Episcopal Church in Hendersonville will be transformed into an international market this weekend for the Gifts of Hope Holiday Fair featuring Ten Thousand Villages.
This annual event sponsored by the St. James Outreach Commission offers shoppers meaningful and alternative choices for the gift-giving season.
The fair will be open from 10 a.m. to 4 p.m. Saturday and 10 a.m. to 2 p.m. Sunday. There is no admission fee.
The fair will also include a food sale featuring a variety of baked goods and Sisters' Sister salad dressing. The Garden of Eatin' Caf� will have homemade soups for sale, and tamales and enchiladas will be sold at the La Capilla de Santa Maria booth.
Handcrafted items from around the globe will be for sale from Ten Thousand Villages, a fair-trade retailer of artisan-crafted gifts, home d�cor, jewelry and personal accessories. Ten Thousands Villages works with artisan groups in more than 38 countries in Africa, Asia and Latin America. For more information, visit www.tenthousandvillages.com.
Gifts of Hope participants are Blue Ridge Humane Society, Heifer Project International, Hendersonville Rescue Mission, La Capilla de Santa Maria, Our Little Roses in Honduras and St. Paul's AME Zion. Donations to a specific agency may be made at the individual booths, where information about the organization will be available, and gift and donation cards may be purchased in honor of a friend or family member.
St. James Episcopal Church is at 766 N. Main St., Hendersonville. For more information, call 828-693-7458.
'Modern Mind-Ancient Soul' at Lutheridge
The "Modern Mind-Ancient Soul" experience begins Thursday and continues through Nov. 10 at Lutheridge Conference Center, 28 Spruce Drive, Arden.
The heart of the event will be spirited conversations sparked by Lauren Winter, Christian spirituality professor at Duke Divinity School, and the Rev. Jerry Wright, a Jungian analyst, pilgrimage leader and Presbyterian minister. They both speak with integrity, wisdom, vulnerability, humor and honesty about our lives as a spiritual journey.
Brian Prior, Bishop of the Episcopal Diocese of Minnesota, will be the chaplain for the event, weaving the experience together throughout the weekend with storytelling and worship. Certified Spiritual Director Diana McKendree will guide participants into deep, meaningful conversation.
Music will be performed by Fran McKendree, Lindsey Blount, River Guerguerian and Charles Milling.
Registration is required. Call 828-684-2361 or 865-414-8509 to register.
UU Fellowship to host Musicke Antiqua
Early music consort Musicke Antiqua will perform at 7 p.m. Nov. 9 at the Unitarian Universalist Fellowship on Kanuga Road in Hendersonville.
During the past 12 years, the ensemble has received rave reviews. Ted McIrvine, a reviewer for the Classical Voice of North Carolina, stated, "In Western North Carolina, we are blessed with our very own, very professional, early music consort, Musicke Antiqua." The group seeks to enrich cultural life through exciting, historically-informed live performances and educational programs to inspire a new appreciation of music before the 1600s. Their music is centered on music from the Medieval and Renaissance period. You will see them in period costumes, playing a wide variety of early music instruments, including recorders, double-reed, strings and percussion.
Doors open at 6:30 p.m. Home-baked goodies are available during intermission. Tickets may be obtained at the door for a suggested donation of $15.
Proceeds benefit the fellowship's ongoing programs and projects.
World relief trade fair at Grace Lutheran Nov. 17
Grace Lutheran Church on the corner of Blythe Street and Sixth Avenue will host a Lutheran World Relief (LWR) Fair Trade Gift Market from 9 a.m. to noon Nov. 17.
Visitors will find a wide assortment of unusual fair trade items handcrafted by artisans in developing regions from around the world.
Also featured will be a Gift Tribute Card ministry, which will directly support many local nonprofit agencies. Visitors at the event will be able to make a gift to local agencies of their choice and for every minimum donation of $10 receive a Gift Tribute Card. The Tribute Card can then be personalized and given to the individual or family in whose honor or memory the donation was made.
Agencies involved with this project include Interfaith Assistance Ministry, Hendersonville Rescue Mission, Mainstay, The Free Clinics, and Council on Aging, among others.
The purchase of these high-quality handcrafts directly helps to improve the lives of the crafters and their families, since all items are fair trade and crafters receive adequate compensation for their work.
The public is invited to participate in the event. Call 828-693-4890 for more information.
Adult forums underway at First Congregational
Adult forums continue on Sunday mornings at 9:15 a.m. at First Congregational United Church of Christ, 1735 Fifth Ave. West and White Pine Drive, in the Felix Building.
A list of forums follows:
Nov. 10: Alan Ostmann will present "Spirits in Nature revealed in Photography." He says, "As most of us are aware, the universe is a complex multidimensional place. Within these many dimensions are a variety of seen and unseen beings. My love of photography has blended with my spiritual path and love of nature to reveal the faces of many of these spirits."
Nov. 17: "Walking the Labyrinth" with Sam Richardson. There will be a portable labyrinth (made of cloth, 18 feet in diameter) laid out on the floor for walking, prayer and meditation. Walking a labyrinth is a personal and individual experience.
Nov. 24: Romella Hart-O'Keefe will coordinate "A Rampage of Appreciation: Poetry for Thanksgiving." Bring a favorite poem for the Thanksgiving session.
Dec. 1: Luther Dowdy will present "Which Side Of The Hill Do You Live On?" One can live on the mean side of the hill and be threatened by those who have shadows, but have chosen to celebrate the light. Another person may choose to live on the kind side of the hill with their shadows, but have chosen to celebrate the darkness. The souls of both need food and have a right to be wherever they find themselves. Prayer is an essential food for both. The goal is self-renewal and food for the soul of those who attend.
There is no charge for the sessions. Call 828-692-8630 for more information.


text:
How I got a medal from the Army for writing code
In 2005 my National Guard unit was deployed to Iraq as part of Operation Iraqi Freedom. My MOS (Military Occupational Specialty) in the Army was 92A, which is basically a logistics and supplies specialist. My job was to order parts for mechanics, pick them up, return old parts, manage HAZMAT, dispatch/return vehicles from missions, and handle licenses. I also did a few other things that I don't remember right now. Anyway, at the time, the heart of this system was a tool called ULLS-G (Unit Level Logistics System – Ground). I say "at the time", because shortly after we came back, ULLS-G was replaced by SAMS-E (Standard Army Maintenance System – Enhanced), which incidentally uses Oracle as a back-end database. Compared to SAMS-E, ULLS-G was a dinosaur. I had used it quite a bit, of course, having been in the Army for about 4 years by the time I was deployed. It was a complete pain to use it. ULLS-G was a DOS application (yes, MS-DOS) and most of the computers I used it on at the armory were only running DOS (this was circa early 2000's so it wasn't too uncommon to still see DOS systems around). By the time I was deployed most computers were running WinXP/2K or something like that, and so you could run ULLS-G in "MS-DOS compatibility mode".


text:
In this episode, Lesley Kelley and Rob Sharkey are talking about how city folk and farm folk view their pets.
Join us for #FCGchat Monday nights at 7pm central.
We'll be asking you to share your opinions
Join us on Twitter for #FRANHappyHour chats
Enter your email address to subscribe to receive notifications of new podcast episodes by email.
Join 5,585 other subscribers
Email Address
Created and maintained by Leaning Pine Design
Content owned by Farm and Rural Ag Network


text:
United States Military Academy
United States Military Academy, at West Point, N.Y.; for training young men and women to be officers in the U.S. army; founded and opened in 1802. The original act provided that the Corps of Engineers stationed at West Point should constitute a military academy, but the growing threat of war with England in 1812 resulted in congressional action to increase the corps and to expand the academy's facilities. Changes in curriculum and organization made by Sylvanus Thayer, superintendent from 1817 to 1833, earned him the title Father of the Military Academy. In the 19th cent. the military academy was one of the nation's major sources of civil engineers, and its graduates made excellent records in the Mexican War and especially in the Civil War. After 1866 the academy was no longer formally related to the Corps of Engineers. The academy is now under the general direction and supervision of the Dept. of the Army. Its enrollment has greatly expanded since its founding and at present is about 4,300 cadets. The curriculum, too, has been greatly modernized, notably under Douglas MacArthur, its superintendent from 1919 to 1922.
An applicant must obtain a nomination to be considered for an appointment to the academy. The sources of nomination are the President of the United States; the Vice President; U.S. Senators and Representatives; and the representatives of the District of Columbia and the U.S. territories. Special appointment categories include children of deceased and disabled veterans or of career military personnel, foreign students, regular U.S. army, U.S. army reserve, honor graduates of military and naval schools and ROTC, and children of Medal of Honor recipients. Candidates must be between the ages of 17 and 22 and must meet physical and educational qualifications.
Cadets undergo a four-year course of instruction on full scholarship, with summers devoted to practical military training, and are paid a monthly salary. Graduating cadets receive a bachelor's degree and a commission as a second lieutenant. Women have been admitted since 1975 and, in the 1990s, they constituted more than 10% of the academy's 4,000 cadets. The West Point Museum contains ordnance and military trophies of historical interest. It is one of the most important college museums in the United States. George W. Cullum compiled a valuable biographical register of West Point cadets.
See T. J. Fleming, West Point (1969); J. Ellis and R. Moore, School for Soldiers (1974).


text:
Yeah, I failed at changing my theme.. Actually, I was upgrading my theme to a newer version of the SAME theme and well, there is something wrong with it. So, I switched back.. So much for that. For a couple of hours, if you came to my blog.. All you saw was a White Screen. It might have been only slightly more informative than my usual blog posts, so, really, no harm done, right? 😛
Anyway. I actually do have a little more to tell you than that. If you didn't notice, there was an announcement by Blizzard that the Blizzcon 2010 tickets are going on sale on June 2 and June 5. If you are interested in going, make sure you have your battle.net account all setup correctly and your blizzard store settings ready. I'm planning on heading out there for the big show this year again. If you are too, let me know!
I did get to raid a little this weekend.. But not with Fimlys.. Nor with Fyra. I did the weekly raid (Razorscale) with my Priest.. Yeah, I was one of 2 healers in the 10man Ulduar run. It was very interesting. I've really not used the priest in quite a while now so getting back into the swing of things took a couple of seconds. Thankfully the fight is a joke now.. But my priest got himself some sweet emblems in the deal, so he's happy.
My first week of back to back nights of Podcasting went as well as could be expected. As well as could be expected while continuing the trend of my allergies deciding now was a great time to assert themselves. Hopefully too much of my hacking and sneezing doesn't make it onto the show. But now my voice is really wrecked.. Gotta rest it now.. *sigh*


text:
10.00 - 19.00
To Estonia and Lithuania For orders over 300 €
For two years
Order Online Now !
No products
There are no products available in this category.
Copyright © 2010 - 2020 MUZ PRO. All rights reserved.
This website uses cookies. By continuing to browse the site, you are agreeing to our use of cookies.


text:
|the Rod Rack Rod Builder's Forum
|Thread Tools
|Search this Thread
|Rate Thread
|Display Modes
Preformed handle or indiv cork rings?
I am also building a rod this winter and have a Q: What are the advantages of preformed handles verses individual cork rings? I suppose if each ring is custom reamed the overall fit would be better (?)
Preformed sounds pretty simple and quick though.
FWIW - I went preformed thinking it would be one less thing to worry about. The reaming process was not easy with the one piece handle. I think rings would give you a much better contact with the blank (less epoxy) and you could custom turn the grip to your liking. I plan on going individual burled cork rings on the next rod. I'm curious as to the adhesive people are using to glue the rings together. I'm still not comfortable with the idea of turning the grip on the blank itself so I plan to drill out the rings, glue them up using a threaded rod and turn it on the threaded rod.
Jim, how are you going to shape a cork handle with a tapered center hole, on a straight shafted, threaded mandrel? you'll need a tapered mandrel - a dowel rod or other, if you don't use the blank.
Based on my limited experience recently gluing up rings for a fighting butt, my humble opinion is that a preformed grip takes less time to assemble.
Jim, use a length of drill rod (non theaded) to glue the grip on. It's a pain to get the threaded rod out of the grip when they are bonded together. You may even want to wax the rod to make it release easier. I used a urethane glue (Gorrilla)to glue the rings, but have heard that a very thin coat of epoxy is better. Bonding the grip to the blank I do use epoxy. Somewhere on the web Bob Petti has a very good description of how to glue and form a grip.
Also Dave has a very good point that I completely neglected when I first posted this message.
John Desjardins
Last edited by John Desjardins; 01-22-2002 at 02:38 PM.
Dave, Good point. I really hadn't thought that far ahead yet. I do know that I like the look and feel of the burled cork even if it is a bit heavier. One thought that comes to mind is masking tape like when you build up the blank under the reel seat. Looks like a little experimentation is in order. Anyone have any other ideas?
John, Thanks for the tips. I'll dig around for that site.
Linesides, Good thread.
I bet Todd may have some insight into how the master goes about it. Can you share it with us Todd or has Smitty sworn you to secrecy?
Handles and Seats
My sugestion for the fit of the handle is whether you use a preformed grip [ NO ALTERNATIVE] or glued up series of rings that you develop the fit after you have finished developing the profile or adjusting the preformed piece. It is a matter of using a round rat tailed file and [OR] sand paper on a split dowel and lots of dry fiting. Rings of narow masking tape are quit acceptable if you find that you had to open up the bottom end of the handle further than you wanted to for the final fit and position.
There is usually not to much of a problem with the fit of the reel seat as you are able to mount it from the bottom end of the blank.
------ My .02 saltRon
The preformed grip is the easiest way. I have done it both ways. Glueing cork rings is quite time consuming. I you waterproof Elmers glue to glue them together. I have tried putting them on threaded rod, and turned the grip in a lathe, and in a drill press, but you will never get as good a looking handle as the preformed one. I have also mounted the rings dirrectly on the rod blank, chucked the blank in a latheput some tape on the blank about the size of the collet you have available, and put a live center in the bottom end of the rod blank, then turned, and sanded the blank to the desired shape, works good, but still the handle doesn't look as nice as the preformed grip. Just my dime.
The most difficult thing about rod building is the cork work (followed by a professional looking finish). It requires the proper equipment and something of an artistic touch or feel. I've seen alot of basement rods that were soundly constructed but had some bizzarre looking handles.
In my opinion, while the preformed handles do look like they are easier, they often get tricky. The 1st rod I built I put individual corks on and shaped it by hand - a pleasing, vaguely familiar repetative action, but not really that effective. The next 2 or 3 grips were pre-formed, I didn't like the quality of the cork and it was difficult to get a satisfactory fit. even using the recommended tapered reamer (a section of rod blank coated in glue and rolled in quite rough grit) which I found was very effective on individual corks. Eventually I made my own rod lathe based on a drill and a custom designed roller assembly. If I get really motivated I'll try to put some pictures up here so you can see. For my money you cannot beat the individual corks glued to the blank and turned on a lathe.
As for glue, I've always used 5 minute epoxy and never had problems. For those who don't have access to a lathe there is another option. You can take your glued handle assembly to a custom rod builder and have him turn it to your specs - a very effective and relatively cheap option. To find one of these guys check with your local flyshop - I know Michael and Young has at least a couple of custom builders.
Tight lines - tyler.
Still Living Large!
I started into a very lengthy dissertation on grip tapering and sizing the other day, only to be told I wasn't logged into a thread when I went to post it. The mechanics of forming and fitting a grip with home based tools and techniques is very easy, yet time consuming, in a wordsmith way. In my SPARE TIME TODAY:eyecrazy: I'll try to put it together and post it. Meanwhile, find a golf club you don't mind taking the head off the shaft; that'll be step 1.
If your dial-up connection times out that will happen.
Hit the back button and highlight the text, then right mouse -> copy the text. Either paste it into a notepad window or just re-connect and paste it in a new message window.
In any case, you can salvage your typing by hitting back, then copying the typing into a notepad window.
Sorry, admin - this only seems to take a minute or less to happen. It doesn't matter if it's lengthy or short - it'll probably happen with this one as I post it, and I've already figured out the copy/paste part to salvage the stuff. I just don't get the aggressive cookie thing Sean mentioned a while ago.
Yup, I was right - it did it just like I said.
Smitty took us through the entire cork grip process at last Sunday's class - from gluing up the cork rings, to shaping the grip on the blank. Don't think he'll mind if I pass along some of his comments and "shop secrets" :
· Creating the grip
· Use flex coat rod building epoxy (long cure, not 5 minute);
· Grip "form" consists of a threaded mandrel, w/ wingnuts & washers at either end;
· Smitty's process is straightforward: stack the requisite number of cork rings on the mandrel (e.g. for a typical 7" fly rod grip, 14 rings), gluing up one side of each ring, taking care not to get epoxy on the mandrel. Fasten down the washers & wingnuts & let dry.
· Afixing the grip to the blank
· Good deal of trial & testing involved. Smitty uses a combination of drill & rattail file to ream out the hole. (As Dfix and others have mentioned here, I don't think it much matters if you use a preformed grip or a build your own. Either way you have to ream out the inner hole to get it to fit the blank). Smitty went slowly here & tested the fit repeatedly.
· Once rough fit is established, if necessary use masking tape liberally to build up/even out fit.
· Use flex coat epoxy to glue the unfinished grip to the blank. Smitty did this PRIOR to shaping the grip. (As others have already posted, I imagine that once you've established the grip/blank fit, you could remove the grip, mount in on a threaded mandrel, shape it, then attach it to the blank)
· Shaping the grip
· Smitty has utilitarian set up: a craftsman drill, mounted upside down in a lathe-type adapter, with the power cord running into a foot pedal (as used on a sewing machine). Process is slow and deliberate. Uses 60-80 grit sandpaper to start, & keeps a close eye on how much he's taking off. Once general shape is established, move to higher grits to finish up the cork.
Not surprisingly, Smitty's grips came out beautifully. Very attractive, very solid looking.
For the record, I opted to go with a pre-formed Full Wells grip on my 1st rod. Decided that the primary advantage of building my own (namely, being able to create a 'custom' fit) is more than outweighed by time & dust-savings offered by a pre-formed grip. Maybe next time
Okay - let's do this - see all notes as listed above by Tod.
First. Glue rings on threaded rod, compress, dry - FlexCoat.
Second. Shape grip BEFORE removing from threaded mandrel; leave enough end cork to trim to length after fitting to blank.
(this is the windy part I mentioned earlier)
Third. Measure blank diameter at bottom and top of finished grip position. Transfer measurements to equivalent (approximate) positions on club shaft, figuring in enough difference in thickness (translation: width, diameter) to accommodate next step.
Cross-wind double faced tape on shaft. Spiral mount rough grit (60 to 120 grit) Emery Cloth over double faced tape, in opposite direction to rotation of shaft. Chuck shaft in turner. Slide grip over smaller tapered end. Support small shaft end with live center, vee brace, etc.
Power up turner. Begin inside tapering of grip with gentle side motion, ascending along taper toward bottom measurement. Don't hesitate to back grip down shaft and occasionally clear cork dust. Continue until inside taper agrees with markings, as compensated for with emery cloth. NOTE: - In truth, the emery cloth shouldn't add more than .032 +/- to the total diameter of the mandrel; you'll put this on the rod blank with two turns of tape, anyway.
Remove and fine fit to blank. Cut grip to finish length. Cross-wrap blank with double faced grip tape; epoxy and position.
I suppose a tapered file chucked in a drill is as convenient for whomever.
rings versus pre-formed
Rings versus Pre-Formed?
it is a matter of what the fisherman likes.If he likes any of the pre formed grips then buy a flor grade preformed grip for it is quality and the mess is not there as it is with the Individual rings.However if you have huge hands or a deformity or something else that effects the grip on the rods I would build the grip to fit a customers hand.I once built a rod for a two fingered man and the grip he chose was rings sanded and sealed to fit his hand.I only recommend 2 ton 2 part epoxy as it holds up too 30 below and 120 degrees which is within the range of all fishing applications as well it does not cure and crack over time as the 5 minute epoxy does.Plus it gives great time to work a reel seat if you are only working one rod at a time.So if you don't like the shapes of pre-formed go with rings and shape it down.but when using rings remember too wipe all excess epoxy from out side the rings/Use clamps for smashing the rings together and get all excess epoxy from the outside of the rings using acetone in a rag.you do not want to be sanding through all of those high build epoxy spots.Lrods OK I HAVE TO EDIT SO HERE IT GOES:
How many of you have had a Lamiglass rod or G.Loomis rod that the reel seat has come loose on or the cork grip?Do not tell me that it has not happened because I live in there back yard and I repair hundreds of there rods each year.AND THE REASON? Very Poor epoxy Habits and or Glue(Lamiglas) Once again these rods are designed to fail after 3 years of moderate use.We knock out close to 3000 rods per year and we believe in Devcon 2 ton epoxy as we buy it in the 40 pound tube from the factory.overruns and drips etc are easy cleaning with a bit of acetone as we sand and seal all cork before the rod ships out.Remember happy customers always come back.....
Last edited by lrods; 01-26-2002 at 02:10 PM.
Here I go talking about epoxy again. Check out Devcon packaging if you don't believe me. On their 5 Minute Epoxy, resists Water, Yes. On their 2 ton, Waterproof, Yes. At one time I had problems with flies I made using 5 minute. I contacted Devcon, and they told me 5 minute is not waterproof, and to use their 2 ton. At that time I told them about a site that had a discussion about epoxy, when they saw how many people was using their 5 minute, they told me to keep out of it, let everyone use what they want.:eyecrazy: On the other hand Ducco 5 minute is waterproof. I have used just about all glues to hold handles on rods, and haven't had one loosen up yet. To glue cork rings together I use Elmers Waterproof, using epoxy, and if you get it on the cork it is tough to get it off.
|Thread Tools
|Search this Thread
|Display Modes
|Rate This Thread
Linear Mode
|Similar Threads
|Thread Starter
|Last Post
|cleaning your cork handle?
|Gear Talk - Fly Stuff Spoken Here
|Epoxy for the handle...
|the Rod Rack
|Top of the handle...
|the Rod Rack


text:
Obama could not stop this pipeline if he wanted to. This leg of the pipeline from Oklahoma to Texas was in the works. He doesn't have the authority to stop it.... He's just glomming onto it. It's like trying to be present when the Ten Commandments are given at the burning bush and claiming you wrote 'em.Note: The burning bush and the 10 Commandments are separate events in the Bible. Back to Rush:
I'm almost speechless here with the absolute brazenness of this. I wouldn't be surprised if Obama says, "I've laid more pipe than any president except Bill Clinton." That's where we're heading with this. The guy who steadfastly opposes drilling for oil and has not issued any permits to speak of, particularly since Gulf oil drilling moratorium -- the guy who has made his name opposing the Keystone pipeline -- is now out taking credit for it....Several paragraphs later:
And that's why I think it isn't gonna be long before Obama starts bragging about how much pipe he's laid. He'll start comparing himself to other presidents. "I've laid more pipe than any president except Bill Clinton." He's gotta throw Clinton in there for credibility.See? That's a scripted joke. Said twice, word for word the same. There's no question "laid pipe" is slang for having sexual intercourse. It's not unusual for Rush to throw sexual double entendre into his monologues. He has a way of saying things very clearly and pausing so that listeners who enjoy that kind of thing can laugh and his more puritanical listeners can not notice or pretend they don't notice.
Now, I don't really have a problem with him saying this, and I don't think it's like using an inaccurate prostitute metaphor over and over to make fun of a student who isn't much of a public figure. I think we should make fun of Presidents, and the joke is straightforward hilarity, not a component of a confusing argument about health care insurance. So it's funny, and it's against not one but 2 Presidents, and I always appreciate reminders of the way Bill Clinton treated women. In fact, I think Rush's joke may be a salvo in the much-vaunted "war on women": You think I'm bad to women? Remember how awful Bill Clinton was!
The trouble with that is it's very hard to say anything negative about Barack Obama's interaction with women. (Remember when Christina Romer tried? (She got her double entendre wrong!)) If you have to dredge up Bill Clinton, maybe it's not worth doing. But there is a larger, significant enough, point: The Democratic Party wants women to think it's all about women's interests, but they will subordinate these interests to their political interests whenever the interests diverge. That was the horrifying spectacle of the Lewinsky scandal.


text:
Adorable, absolutely adorable! Happy DOTD to you sweetie!
Dog of the Day
Cat of the Day
Pet of the Day
Adorable, absolutely adorable! Happy DOTD to you sweetie!
HI Master Chief! If I saw you I would want to adopt you also! Happy DOTD!!
Adopt a shelter pet, Save a life!
Hi Master Chief! Happy Husky Dog of the Day to you, sweet baby boy! Oh, what a precious pupper you are, Chief, beautiful beyond description (those eyes), and just as smart and sweet and loving as you are gorgeous! How lucky your Mommy is to have a "mama's boy" in you! And as for forever humans? You hit the jackpot! What a heavenly match you and your proud Mama make, what happy times you and your family will be sharing, what happy memories you'll be making over the many years to come! You're one very special boy, Chief, a beauty inside and out, and so very deserving of your Dog of the Day crown! Wear it proudly, sweetheart, and have a very happy, extra special day of celebration, being spoiled rotten! Lots of love, hugs and kisses to you, precious Chief!
Star,Tigg'r , Mollie and the10 Gallon Gang!
And my Rainbow Bridge Furangels...Jingles, Cody, Fritz, Chessa, Satin, Buddy, Lizzie, Oliver, Squeaker, Moonbeam, Rosie, Ruby~
Oh, Master Chief! I'd have been all over you at Petsmart, too! Who wouldn't want to meet and pet a puppy as precious as you?! I agree with what my friend tatsxxx11 has said -- you are sweet, smart and loving! Your eyes are absolutely beautiful -- and so is the rest of you! I would have a very hard time being away from you too. Please have your mom or dad give you some extra petting and hugs for me today, precious Master Chief! Happy Dog of the Day to you!
I've been Boo'd ... right off the stage!
Aaahh, I have been defrosted! Thank you, Bonny and Asiel!
Brrrr, I've been Frosted! Thank you, Asiel and Pomtzu!
"That's the power of kittens (and puppies too, of course): They can reduce us to quivering masses of Jell-O in about two seconds flat and make us like it. Good thing they don't have opposable thumbs or they'd surely have taken over the world by now." -- Paul Lukas
"We consume our tomorrows fretting about our yesterdays." -- Persius, first century Roman poet
Cassie's Catster page: http://www.catster.com/cats/448678
You're adorable Chief!!! Congrats on being DOTD!
Forever in my heart...
Sorry for the late reply but I would like to say thanks to everyone! I was so happy to see Chief on DOTD. He is about 10 months old now and doing great! He has learned so much more. I never imagined I'd love a dog so much, he brings me joy every day! He is the first dog I've ever had that is completely mine. My boyfriend and I love him like a child. We take him every where, on almost every car ride, family events, and friend's houses. As he has grown he's only gotten more beautiful!
Here's a few photos of him now. He's getting to be quite the little model, especially because I love photography as a hobby. He makes quite the beautiful model!
Awww, such a handsome boy, and still growing! You should start a thread of his pictures in Dog General, so you can keep updating us from time to time! We know he's only gonna get bigger and better!
I've Been Frosted
Copyright © 2001-2013 Pet of the Day.com


text:
One of the most common trial objections is "Objection, non-responsive," an objection which is often followed up by a motion to strike or to instruct the jury to disregard. Yet, conspicuously absent from the Texas Rules of Evidence is any rule providing that non-responsive answers are inadmissible or subject to exclusion.
The fact is, many non-responsive answers may be properly received into evidence, and when a court declines to exclude or strike a non-responsive answer, oftentimes no error is committed. Because there is no wholesale bar to admissibility of non-responsive answers, one must look to other rules for guidance to determine admissibility in specific circumstances.
Texas Evidence Rule 402 provides that relevant evidence is generally admissible. Rule 103(a)(1) provides that if the ground for objection is not apparent from the context, an attorney has the duty to enlighten the court as to why it is inadmissible. Reading the two rules together suggests that a court may allow non-responsive testimony into evidence if it is relevant and no other objection is lodged or apparent from the context. However, TRE 611(a) confers authority to the court to exclude that evidence as well:
"The court shall exercise reasonable control over the mode and order of interrogating a witness and presenting evidence so as to (1) make the interrogation and presentation effective for the ascertainment of the truth, (2) avoid needless consumption of time, and (3) protect witnesses from harassment or undue embarrassment."
Provided the court's exercise of control is "reasonable," in the quest for truth, efficiency and fairness, whether to admit or exclude non-responsive answers is left to the discretion of the trial court when no other ground of objection is lodged or apparent from the context.
In practical terms, when an attorney makes a "non-responsive" objection to evidence which otherwise appears to be admissible, the trial court has several permissible options. If an answer is completely non-responsive to the question posed, then a judge is very likely to sustain the objection. After all, attorneys are entitled to receive answers to questions properly propounded.
However, the outcome becomes less predictable if, after responding to the question, the testimony takes a non-responsive turn. In that situation, a judge might sustain a non-responsive objection on the basis that the additional testimony is repetitious. An objection might also be sustained to avoid a rabbit trail which the judge believes would result in ineffective presentation of the evidence. But a judge might also overrule the objection, especially if the testimony, albeit non-responsive, serves to clarify, explain or provide further details about the responsive portion of the answer in an effective and efficient manner. Finally, there is nothing to prevent a judge from applying a very rigid approach, requiring strict adherence to responsive answers in Q & A form at all times, sustaining all valid non-responsive objections raised. All of these approaches are well within the discretion of the trial court.
For that reason, a trial attorney should not rely on a "non-responsive" objection, especially when considering the preservation of error. Instead, attorneys should focus on whether non-responsive answers are objectionable on other grounds. Assuming other grounds exist to exclude the evidence, then the trial court's discretion to admit or exclude the non-responsive answer can be substantially limited by combining another valid objection with the non-responsive objection.
If a non-responsive answer contains hearsay, for example, then a hearsay objection should be included, e.g., "Objection — non-responsive, hearsay," or simply "Objection — hearsay." Either objection will apprise the court of the true reason why the answer should not be admitted into evidence, i.e., that it is objectionable hearsay. By so doing, the court's attention is focused toward a particular rule which would require, as opposed to simply permit, exclusion under the circumstances.
What does this mean for trial testimony? There is nothing inappropriate about making a non-responsive objection. It's a great objection when an attorney wants the court to rein in a witness who is either evading questions or simply won't shut up. But the court is not bound to do so. If the real problem is what is being said, as opposed to when it is being said, then the objection needs to identify that ground of objection, e.g., "Objection — irrelevant," "Objection — hearsay," "Objection — best evidence," etc. By so doing, the court is forced to make an evidentiary ruling which carries with it far less discretion on review.
What does this mean for deposition testimony? Ironically, the only objection permitted to deposition answers under Texas Rules of Civil Procedure 199.5(3)(e) is "Objection, non-responsive." Nonetheless, since non-responsive deposition answers, if otherwise admissible, may be received into evidence, an attorney cannot rely on the "non-responsive" objection alone as a basis for exclusion of the testimony at the time of trial. At the time of challenge to the admissibility of deposition testimony for use at trial, the attorney should focus on the substantive objection. As with live testimony, such an objection will serve to both apprise the court as to why the evidence needs to be excluded and preserve error for later review.
– Judge Bonnie Sudderth, 352nd District Court of Tarrant County, Texas


text:
World premiere of "Hat City Sonata" at Western
A lot of good chemistry between Belgian composer Piet Swerts and the Department of Music at Western Connecticut State University resulted in some remarkable events this week.
In addition to the world premiere of "Hat City Sonata for Alto Saxophone and Piano" and the U.S. premiere of his "Piano Concerto No. 6," Swerts gave an informative lecture the day before the phenomenal recital on Thursday.
Much more than a composer, Swerts conducts, arranges and performs piano with an eclectic style that has immediate appeal. His beautiful composition "Klonos" has quickly become standard repertoire for saxophones worldwide. Perhaps there's some influence from his fellow Belgian, Adolph Sax, who invented the saxophone.
The sax was in the capable hands of Dan Goble, dean of the School of Visual and Performing Arts at Western. Swerts has developed a good rapport with Goble and pianist Russell Hirshfield, a professor of music at Western. Following Swerts' visit here three years ago, Goble and Hirshfield commissioned him to compose a new piano concerto and "Hat City Sonata."
The recital opened with Hirshfield performing "Ten Enigmatic Waltzes for Piano." With alternating fast and slow passages, Swerts paid tribute to many familiar composers, including Bach, Chopin, Vivaldi, and Copland.
Swerts was ingenious in creating cerebral microcosms of major works, developing variations on familiar quotations and musical styles. He revamped passages of Beethoven's "Pastoral Symphony" with unusual phrasing, and slowed the tempo giving Brahms' "Hungarian Dance No. 1" a totally different feeling. Hirshfield was impeccable throughout the delightful set of waltzes.
"Hat City Sonata" was dedicated to and performed by Goble and Hirshfield. The piece began with relaxed legato sax, picking up the pace until notes were flying off the page, backed by a steady stream of strong chords from the piano.
The second movement, "Night Song," had a haunting blend of darkness and suspense, as dissonance combined with lyrical expression. Sounding spontaneous while maintaining control, Goble was awesome. Sax and piano were spectacular in the difficult contrapuntal "Free Fall" section at the finale.
Following intermission, Hirshfield performed another homage, this time to Debussy. Impressionistic splashes of tone colors were modernized up with gorgeous fluidity.
The piano concerto was arranged as a duet, with Hirshfield as the soloist, and Swerts playing an orchestral reduction for piano. The first movement, "Indian Summer," had a rhapsodic progression that was almost romantic. The structural form of the work was the dialogue of major and minor thirds throughout, and most readily seen in the second movement. This conversational motif was developed with jazzy variations in the finale.
Swerts and Hirshfield had some fun with a bright and bouncy ragtime encore. In his visit to Western, Swerts gave music students and the community a wonderful opportunity to experience the creative process at work.
Jan Stribula is a freelance writer in Connecticut; firstname.lastname@example.com.


text:
20,001 Kitchen Secrets
Bader, Dr. Myles H.
AbeBooks Seller Since June 8, 2003Quantity Available: 1
AbeBooks Seller Since June 8, 2003Quantity Available: 1
About this Item
Bibliographic Details
Title: 20,001 Kitchen Secrets
Publisher: Allstar Marketing
Publication Date: 2005
Binding: Glossy Soft Cover
Book Condition: Fine
Edition: Presumed First Edition
Store Description
We accept MasterCard, VISA, and Discover credit cards, Money Orders, and checks written in US Dollars on US banks accounts. Checks must clear before we will ship the item.
Chris Gardner LLC DBA First Choice Books
8981 West Patrick, Coeur d'Alene, ID 83814
Contact: Gretchen Gardner
Email: firstname.lastname@example.com
Telephone: 208.773.5304
Shipping costs are based on books weighing 2.2 LB, or 1 KG. If your book order is heavy or oversized, we may contact you to let you know extra shipping is required.
Payment Methods
accepted by seller
Direct Debit (Personally Authorized Payment) Check Money Order Cash Bank Draft


text:
Johnson faces detailed process under NFL concussion protocol
When Texans receiver Andre Johnson disappeared from the playing field Sunday at Reliant Stadium, he entered the mysterious world of the NFL's "concussion protocol," which includes several layers of tests and exams that players must pass before they can return to play - and even then, only after they are cleared to do so by an independent neurological professional.
There are some new elements this year, and they begin with the system used to monitor players during games and the manner in which they are assessed for possible concussions, said Dr. Kenneth Podell, a neuropsychologist who is co-director of the Methodist Concussion Center.
Watching from above
At each game, Dr. Podell said, there is now an "eye in the sky" observer who scans the field looking for players who may require assessment for a concussion.
"Did somebody stumble when they got up, or is there something about their behavior on the sideline?" he said. "The observer can send an FYI down to the team, or they can send a video clip to the sideline in real time to be checked out."
In cases such as the hit Sunday by Titans safety Bernard Pollard on Johnson, teams don't require an observer to tell them a player needs assessment. Beginning this year, players in those cases are assessed by an independent neurological observer. There is one on each sideline, assigned by the league but not affiliated with the team.
"The NFL has a formal document called the Sideline Concussions Assessment Tool, which has been modified to focus on orientation, memory, concentration, balance and symptoms," Dr. Podell said. "They will do a neurological exam, and if a concussion is determined, the player will be removed from competition."
The SCAT, a copy of which is available at NFLEvolution.com, informs professionals that a "conservative, safety-first approach should be adopted" in such exams. Exams, which require 10 to 15 minutes, can be administered on the field or in a quieter location, and results are compared with each player's preseason baseline test.
Any of six physical criteria, including loss of consciousness, amnesia and confusion, can result in a player's being barred from further play. Five additional questions are designed to help determine if a player has suffered more serious brain trauma.
Players also are administered a 65-point exam that includes the month, date and year, the venue, who scored the most recent touchdown, the team's previous opponent and the outcome of that game. One test requires a player to recall a list of words, and another requires him to repeat a list of numbers. He also must answer a list of symptoms, including "don't feel right" and feeling "in a fog."
Any player diagnosed with a concussion must be escorted to the locker room or training room for observation and cannot return to the field under any circumstances under league rules. After the game, it is determined whether he can return home and under what circumstances.
Long path to field
The return-to-play path can begin one to two days after the game. Players are evaluated using elements of the SCAT and monitored to determine when they are back to normal without return of symptoms, followed by another round of cognitive tests.
According to guidelines from the NFL's head, neck and spine committee, "Once symptoms have subsided, players submit once again to the standard baseline testing, plus the 30-45 minutes required to complete more advanced versions. Sometimes there is additional testing with the neuropsychologist. Even then, there are no pass-fail grades, only additional data for doctors to interpret."
Physical tests as well
If a player shows progress on his tests, he can be cleared for return to physical activity.
"It's a gradual increase in exercise intensity," Dr. Podell said. "We start with cardio, advance to intense cardio with weight lifting and position-specific drills. If athletes continue to be symptom-free, they advance to the next stage."
NFL regulations, he said, allow a player to complete up to two stages each day. A player might be allowed light cardio activity in the morning, for example, and moderate activity that afternoon.
Further stages include a return to non-contact drills, contact drills and, eventually, a return to the playing field. But even after a player is cleared by the team doctor, he must be evaluated by an independent concussion expert approved by the NFL and NFL Players Association.


text:
Trevor Ariza Destroys Grant Hill (Facial Jam) - 12/25/07
Trevor Ariza gives the Lakers fans, worldwide, a special Christmas day NASTY JAM!!!&IP=220.127.116.11
Please click the "Report" button below if the video on this page is not working properly.
Comments will only be displayed by verified emails. No Spamming or Racism.


text:
We are proud to offer a sensational opportunity in a sought-after and fast growing township, these excellent allotments range from 450m2. New home owners will be rewarded with an enviable lifestyle with a vast range of amenities while being positioned in an exclusive elevated estate.
- Located in the prestige estate of CUMBRIA
- Excellent parcels ranging in size from 450m2
- Cleared level & elevated blocks making easy access for building
- Endless possibilities to create your dream home
- A few minutes drive to the thriving township of Thirlmere, Train works, Sports ground & tennis courts
- Local grocers, restaurants, scenic parks & walking tracks
- Easy access to parks and indoor/outdoor sports clubs
The thriving township of Thirlmere is located just minutes from Picton and Tahmoor considered the commercial hubs of the Wollondilly district. Centrally located with shops, schools and rail close by; growth is a key factor to consider here. This offering guarantees you that peaceful, rural lifestyle you seek yet with all of the city conveniences not far away.
With plenty of charm & character on offer this new land release is well worth the inspection.
Disclaimer: Whilst every effort is taken to ensure accuracy of this listing, we accept no responsibility for errors or omissions. We encourage you to seek your own independent legal and / or financial advice prior to making any commitment or decision.
See also
sold date : 2016-12-09
Property Information
- Street Address Lot 28 Rita Street
- Type Residential Sale
- State NSW
- Region Southern Highlands
- Suburb Thirlmere
- Property Type Land


text:
3371-Alpha wrote:Welcome to our community! I'll admit, we aren't as big as the Doom/Quake community but were still here none the less. We've got bugfixes, advanced rendering technologies and plenty of scenarios full of cool sci-fi shit. You'll fit in perfectly in this community so long as you can handle cursing/swearing and some member being occasional assholes (don't take it personal, it's how they make friends).
TIP: although we allow posting pictures of dog shit and gamers t-baging each other, we do not allow posting porno pics. The dudes in the Pigeon Lounge learned this the hard way.
eisnerguy1 wrote:Awesome Happy Mac avatar!
3371-Alpha wrote:Since Marathon originated on the Mac the majority of us on the Pfhorums are Mac users.
treellama wrote:What? No.
treellama wrote:You made a thread for yourself--why don't you stay in it?
treellama wrote:So sorry a newbie is giving heartfelt advice about the harsh reality of the Pfhorums
treellama wrote:You don't have your machine specs in your sig, so I think you'll do fine.
eisnerguy1 wrote: longtime lurker
treellama wrote:You made a thread for yourself--why don't you stay in it?
3371-Alpha wrote:treellama wrote:What? No.
I'm a Mac user, Crater Creator's a Mac user, Philtron's a Mac user.
Users browsing this forum: No registered users


text:
Are you like me? Do you love the look of stuff made out of trash? If so, feast your eyes on today's Spellirium Minute episode, which reveals a little more of the source material that i provided to the game's artists to achieve that junky-fab trashpunk aesthetic.
The Mystic's house and the city of New Mound are two locations where this look really shines through. Later in the game, you explore a dilapidated shanty town on a polluted and an Ewok-esque treehouse village. If you like what you've seen in the Spellirium screenshots, rest assured there's a lot more where that came from!
Subscribe Por Favor
If you love Spellirium, it would help me out a lot if you upvoted it on the Steam Greenlight page? Or check out the growing Spellirium Minute playlist, and subscribe to our YouTube channel so you don't miss a thing!


text:
In Stock
Add to Cart
Euphoria F/M is a liquid herbal extraction formulated for men and women. The ingredients in the formula are known to be helpful as a general tonic and used throughout the world for aphrodisiac effects. Sexually restorative to both sexes.
Euphoria F/M by PHS is available in a 2 oz size liquid environmentally protected glass bottle and in 90 capsule size.
PHS's proprietary CSE™ (Conductive Stabilization Extraction) technique, insures the potency and purity of all PHS manufactured liquid formulations.
PHS's cGMP guideline compliance, ensures the quality and potency of our raw materials and manufacturing process.
©PHS (Pacific Health Sciences) All Rights Reserved
Write Review
A magnificent herbal expectorant...
Copyright 2016 Pacific Health Sciences. All Rights Reserved. Information provided is from historical use, common professional knowledge and current research.