text:
OrganBench
A web site devoted to all who love the King of Instruments and its music
10 Pieces Op. 1-9
8 Pieces Op. 10-17
5 Preludes & Fugues
3 Postludes
Bach d minor T & F
Bach Passacaglia
Widor 5 Toccata
Purvis Toccata
Vierne Kyrie eleison
Recessional Op. 2
Baldwin C500 Specs
Nuttin' For Xmas
Postlude Op. 22
Blog/Archive
Photos 1: Bach Album
The Art of Fugue
Vierne's Life & Work
Vierne in St. Louis
Dedication Recitals
Design & History
Layout/Cautionaries
A Lesson From Nature
Composers Forum
Catalogue of Works
The Reality of God
Getting Started With Writing, Part XXXVIII / Ornaments
The Op. 30 Postlude in A Major is a stand alone 4-voice fugue written in quadruple counterpoint with 3 countersubjects maintained throughout (photo).
In this work the subject begins boldly on scale degree 3 and has, as it must, a tail which points strongly to the dominant key, thus a real answer in the dominant is supplied; the tail of this subject also has a trill on the final note which is realized with notes having precisely specified time values; the upper auxiliary note of this trill is also tied to the preceding note.
Here, in accordance with the general practice of music writing in the Contemporary era (c. 1900 -- present), the trill was not symbolized with a pictograph but written into the notation as ordinary notes and is omitted when the subject enters in the bass, since the pedal is not concerned with it.
When the note which is otherwise trilled enters in the bass the duration of the preceding note (which would have been tied to the upper auxiliary note of the trill) is lengthened by a unit of value (the most common note appearing in the composition -- in this case, an 8th note) to compensate for the missing trill and to avoid creating a disturbance in the rhythm.
In this densely contrapuntal work it was the composer's intention to realize this trill in accordance with Baroque performance practice which specifies at least 2 repercussions when a note is trilled (each upper appoggiatura, or auxiliary note, in a trill is called a "repercussion").
But here, since the trilled note is preceded by the previous upper 2nd in the subject's melodic outline, the trill necessarily starts on the note itself, i.e., the main note.
NOTE: This is an important point which has not always been given sufficient emphasis; the rule is, all ordinary trills in Baroque music start on the beat with the upper auxiliary note, thus providing a minimum of 2 repercussions in the realization -- BUT NOT ALWAYS, not 100 per cent of the time; when the main note of the trill is immediately preceded in the same voice by the upper auxiliary note, the dissonant note of the trill has already exerted itself, and the trill will start on the main note instead; also, in fast tempos where the trilled note is of short duration, the trill may have to start on the main note either to 1) maintain tempo or 2) avoid blurring the melodic or harmonic line, either of which would be sacrificed if, in such cases, the rule were strictly followed; it would in fact be justifiable practice to realize trills this way not only in the music of Bach and his school but with any new music having the same kind of independent voice leading and dense contrapuntal texture, however most musical ornaments have become obsolete today and are seldom, if ever, notated in the score as in former centuries -- contemporary composers simply write explicitly in ordinary notation the notes in the score which they wish to have played to indicate the trill's intended execution.
Returning to the Op. 30 Postlude, the entries proceed through all nearly related keys plus one unrelated key (G Major), and the subject and 3 countersubjects each take turns entering in the bass in the same chronological order as they do in the opening exposition.
In the episodes separating the entries the outer voices (soprano and bass) are silent as the inner voices (alto and tenor) carry the music forward; these episodes are all of uniform length and constructed using fragments of the subject, countersubjects, their inversions, or by means of sequences.
The final entry in the home key, following many examples left to us by J.S. Bach, places the subject in the bottom octave of the pedals.
A short coda rounds out the piece during which an additional voice (low tenor, or baritone) enters on the middle staff.
This music ends in 9 voices on a big tonic chord with a held 2nd and double pedal.
The trill in the tail of this fugue's subject is a type of ornament, just one of many such embellishments or sets of auxiliary notes composers have associated with a main note, evidence for which extends all the way back to the 14th century; ornaments make music more expressive by using these auxiliary noes to create a dissonant sound which resolves to the consonant sound of the main note, thus creating a sense of tension and release.
Ornaments are typically written into musical notation either as an auxiliary note in small print ahead of the main note, as a special sign over the main note, or as a series of additional notes in small print; these embellishments are like salt and pepper -- they add some seasoning to the musical recipe, and, as such, need to be inserted wisely and sparingly; too much of this salt and pepper can ruin a piece just like it will ruin a dish.
Save for the trill, ornaments have been realized the same way in all eras; ornaments, when present in the score, are a necessary and integral part of the music -- important thematic elements put there by the composer for good and sufficient reasons to be observed in performance just as much as any other notes written into the score whenever that score is a faithful copy of the autograph.
We should be very careful therefore, when the autograph is missing, about performing ornaments appearing in parentheses inserted by various editors based upon a single copy, or copies of copies, or maybe adorning the work ourselves with whatever additional ornamentation suits our fancy to the fullest extent possible; the performance of a very well known and famous work showered with a liberal sprinkling of ornaments foreign to the score can so distort the melodic contour of a melody as to make it unrecognizable and turn it into something the composer never intended.
When most, if not all, extant copies of an early work are traceable to and agree with a single copy, then the ornaments appearing in that single copy are to be regarded as the most correct, if not definitive, reading.
It's entirely possible for an otherwise outstanding recording of a well-known organ work on a period instrument to be spoiled by the well-meaning additions of ornaments or prolonged, florid cadenzas inserted under the smug guise of increasing its stylistic authenticity.
In recent years there has been renewed interest in Baroque performance practices including the license to contribute to the work almost as much as the composer; someone may want to put this writer in the pillory for saying so, but no matter how exciting, unique, or impressive the results of this may sound or how flamboyant the mannerisms, if any, in which an organist engages when exercising such liberties, this kind of tampering still places the performer, whether they are oblivious to it or not, on a very slippery slope.
We notice something of the same thing in writing or improvising codas; if the choice is between the longer or shorter of 2 versions, the shorter one is generally preferable; it's a case of less being more [See blog, Less Is More].
One of the best resources in print which may be recommended for working through this complex and interesting subject is "Ornamentation, A Question & Answer Manual, by Valery Lloyd-Watts and Carole L. Bigler, with the assistance of Willard A. Palmar" available from Alfred Publishing Co.; this well-known and well-written book explains essential ornaments clearly and concisely just as they are used in each of the style periods of Western music, why each ornament should be played as recommended as well as how it should be played, and provides all the necessary tools to school one's self in their performance.
Performers who are familiar with this book should be able to look at a piece of music and tell exactly what ornaments are appropriate for use in any given passage by any composer of any era and how they should be realized; the required knowledge for being able to do this follows specific rules which, thanks to this book, have been made much easier to grasp.
(con't in Part XXXIX)


Where Were You When the Lights Went Out, LA?
I spent about 15 hours at work yesterday, helping to deal with the mess. Still getting bitched at by people who think we should have done something to prevent the power from going out at all.
To any and all people who might drive the 330….
I'm Not Miss January on Where Were You When the Lights Went Out, LA?
Anne on What decade are you from?


Far too many times we are confronted with something going wrong with the car and usually it's because we ignore symptoms or just do not adopt a common sense approach to driving and maintaining our wheels.
Here are some common sense hints and tips for looking after your car and enjoying motoring without the stress.
Let the car cool down – before you check the radiator always allow the car to cool down; uncapping the radiator can lead to scalding from the hot steam or overflowing of the radiator itself both of which can be very dangerous to you personally.
Keep a disposable camera in the glove box – accidents are a fact of motoring life, it is very rare for a driver to go through a lifetime of motoring without encountering the odd mishap but in the event of an accident being able to take a photographic record of the scene is extremely helpful; make sure you also keep pen and paper too.
Seat covers and dash mats – help to keep your car interior in good shape and maintain the value of your vehicle so make sure they are fitted and are in good condition themselves.
Check your tire pressure - under-inflated tires are bad news because they reduce your fuel economy, increase the wear on your tires and affect your vehicle handling; always make sure you have the correct tire pressure which you will find in your driver manual or usually by the driver's door on a label from the manufacturer.
Battery terminals – need to be cleaned if there is a build-up of acid residue but you don't need anything fancier than plain, black tea and a cloth (but wear protective gloves). An alternative is bicarbonate of soda solution – use a teaspoon to one quart of water and apply to the terminals and clean the contacts as well. Keeping the connection clean will help fire up your engine and maintain battery life.
Air conditioning not keeping you cool – if you have the air conditioner on but it is not keeping the temperature as cool as you think it should be then you probably need the unit re-gassing; this can be done inexpensively at the garage but you should make sure you don't use the unit until it is refreshed as this simply burns gas or runs down the battery for no cause.
If you hear a screeching sound when you brake – then you need your brakes checked and even more seriously, if you hear a grinding sound then immediately take the car into the garage as this is more than simple brake pads needing to be replaced but actually the metal of the brake disks itself that is grinding against the wheel.
These are just a few hints and tips to keeping your car in top condition but you should also make sure you regularly service your vehicle. A regular service will go a long way to keeping your vehicle in excellent shape as well as reduce your overall motoring costs; even a fouled spark plug can reduce your fuel economy by as much as 35% or in other words, a third of the gas you pump is just wasted. It's not just the running costs you can save money on – a car that has been well maintained will also maintain its resale value and protect your investment in it.
Ryan Draving is the Vice President of Empire Covers, a leading supplier of car covers, truck covers, motorcycle covers, and other car cover accessories. Empire Covers can be found online at: http://www.empirecovers.com.


Functional organic and organometallic polymers and materialshave gained much attention as versatile materials for energy interconversions and optoelectronic/photonic applications, including electrical energy generation in photovoltaic cells and light generation in organic light-emitting diodes, as they offer a low cost, light weight and simple option for device fabrication.
Molecular Design and Applications of Photofunctional Polymers and Materials, presents a critical perspective of the current field, with emphasis on fundamental concepts and current applications in optoelectronics, electronics and nanotechnology.
The book also covers photochemically degradable polymers, electrochromic and photochromic materials, biosensing and bioimaging materials, and low- and high-refractive index materials. With contributions from leading experts in the field, this timely book will provide a valuable contribution to the community enabling new synthetic methods to be developed to produce new materials with specific functional roles.
Heavy-Metal Organometallic Complexes as Yellow and Orange Triplet Emitters for Organic Light-Emitting Diodes; Molecular Design and Synthesis of Photofunctional Materials; Hyperbranched Acetylenic Polymers from Metal-Free and Regioselective Polycyclotrimerization of Arylene Bipropiolates: Synthesis, Characterization, and Photonic Properties; Metal Acetylide Complexes, Oligomers and Polymers in Photofunctional Materials Chemistry; Photoactive Multi-nuclear Metal-containing Polymeric Systems; Photochemically Degradable Polymers; Synthesis of Polymers with Metal-Metal Bonds Along the Backbone Using Click Chemistry; Metal s–alkynyl Complexes as Molecular Wires and Devices: a Comparative Study of Electron Density and Delocalisation; Material Design and Applications of Rhenium(I)-Containing Macromolecules; Recent Developments in Metal-Containing Complexes with Azo Chromophore Functionalities; Organic Dyes for Dye-sensitized Solar Cells; Strategies Towards Enhancing Charge Collection in Polymer Photovoltaic Devices; White Light-Emitting Polymers and Devices; Conjugated Polymer Nanoparticles Applications in Optoelectronics, Bioimaging and Biosensing; Luminescent Transition Metal Complexes as Biomolecular and Cellular Probes; Novel Fluorene-based Functional "Click Polymers" for Dye-Sensitized Solar Cells.


For the past three years, we have worked with Congressman Ami Bera on his annual Brain Health Forum. We appreciate Congressman Bera's efforts to educate his constituents on important issues related to Alzheimer's disease and brain health.
The Congressman has also supported important legislation, such the Palliative Care and Hospice Education and Training Act and increased funding for Alzheimer's research. The focus of this year's Brain Health Forum, held on September 20, was palliative care.
Barbara Marquez is an Alzheimer's Association volunteer, serving on our advocacy team for Congressman Bera's district. She recently became a member of our Chapter Board.
At the Forum, Barbara told her family's story and talked about how palliative care could have helped her mother, Florence, when she was living with Alzheimer's. We'd like to share Barbara's remarks.
I am here today to share a little about my own experience with Alzheimer's, as a caregiver for my mother, Florence Marquez. My mom battled this disease for over ten years, a battle she eventually lost in January.
Alzheimer's killed her. It is the third leading cause of death in California.
During the last five years I was my mom's primary caregiver. As I look back, I am so glad that I was there for my mom. She had always been there for me and my siblings, the rest of our family and for so many others in our community.
In the 1950s, my parents bought their home off of Story Road in East San Jose. Both served as strong community activists on many fronts.
My father was an ordained deacon in the Roman Catholic Church. As the deacon's wife, my mother worked in many capacities to help meet community needs.
As an education advocate, Mom was elected as a trustee for the Mt. Pleasant School District. She served for many years and was a strong proponent of bilingual education.
My mother picketed alongside César Chávez to support the United Farmworkers Union.
She served as President/founding member of the Grail Development Corporation. They built a 35-unit affordable housing community in San Jose, complete with a licensed child care center and women's center.
Because of these works and her many other accomplishments, Mom was recognized as legislative Women of the Year by former State Senator John Vasconcellos.
Yes, my mother, Florence Marquez, was a bright, inspiring and giving light wherever she went.
Her last years were tough. I vividly remember the many challenges of caregiving. It is a hard job.
To my fellow caregivers in the audience, I am so glad that you are here. Please know that you are not alone. I hope that what you learn today about palliative care and other services will help you and your loved ones.
There are so many things I wish that I had known and done differently along the 10 year journey. This disease is multi-faceted, with different and ever-changing symptoms appearing on many fronts.
Alzheimer's impacts daily living, along with physical, financial, emotional and behavioral health.
There was so much to know and so much to do. I often felt overwhelmed and alone. I could only imagine how Mom felt.
As I look back, I could have definitely used more help and support. I wish my mom had had a palliative care team – a multi-disciplinary team of medical professionals to support us throughout the course of the disease.
At the end of her life, Mom had a hospice team who were incredibly helpful. They were just a hair shy of being angels on earth.
But what if she'd had a similar team to help her when she was living with Alzheimer's during the other nine and a half years? What if she'd had a team to support the medical efforts for this incredibly complex chronic disease? What if they'd focused on helping her enjoy her family and the activities that brought her so much happiness?
People often live with Alzheimer's for several years. It would have been so helpful to have a team to support us throughout the course of the disease.
I think of how a palliative team could have helped during some of the most frightening moments. One of those moments for us was when Mom was taken from her memory care day program to the emergency department (ED). She travelled alone by ambulance and was admitted to the ED without anyone being there to speak for her.
I was out of town that day for another family emergency. I had the most tearful drive along Highways 5 and 50, rushing to the hospital. Mom was released within a few hours without any new diagnosis or treatment.
Then there was Mom's last trip to the ED. Again, she was taken alone by ambulance from her memory care community. She was alone during the admission process. While Mom was released within a few hours, it took her weeks to recover from that episode.
My mother had a caring primary care doctor but there wasn't a coordinated team effort to back up the doctor. It is challenging for one provider to address the ever-changing conditions associated with this complex chronic disease.
Only so much can be done during a 15-minute visit. Additional support from a multi-disciplinary team is necessary to provide more patient-focused care, avoid unnecessary trips to the ED or hospital, and improve the quality of life of a person living with Alzheimer's.
As I look forward, my main message today is that you don't need to feel alone. The doctor doesn't need to be alone. Information and resources are available. I encourage you to reach out to the Alzheimer's Association to learn more.


A responsible approach to pest control.
We get it. You don't want to share your kitchen with ants, but you don't want harsh chemicals brought into your home. You don't want the wasps buzzing your kids in the yard, but you don't want to risk spraying something that could hurt the environment. You want to get rid of your problem in a responsible manner. At Alta, we share that same goal. We're a local, family-owned company specializing in low impact pest control. Our focus is to get rid of the problem while minimizing the impact on the environment. We only use low impact products that are both people and pet friendly. Call us today and we'll be out there within 48 hours.
What we do / what they do.
No one can guarantee that you'll never see a bug again. Pests have been around for millions of years and are built to survive. What we can promise is to return whenever you need us to, free of charge. Any customer receiving our preventative treatments has access to unlimited free reservices!


text:
module Renzu
    ( module Renzu.Getter
    , module Renzu.Index
    , module Renzu.Iso
    , module Renzu.Lens
    , module Renzu.Optic
    , module Renzu.Prism
    , module Renzu.Setter
    , module Renzu.Tuple
    ) where

----------------------------------------------------------------

import Renzu.Getter
import Renzu.Index
import Renzu.Iso
import Renzu.Lens
import Renzu.Optic
import Renzu.Prism
import Renzu.Setter
import Renzu.Tuple

redpajama_set_name: RedPajamaGithub


The former Leinster and Ireland lock condemned the Munster man for not expressing remorse after rendering his opponent unconscious.
Paul O'Connell's kick connects with Dave Kearney's head.
ONE WEEK ON but one section of the media is not willing to drop the Paul O'Connell/Dave Kearney head kick drop just yet.
The Sunday Independent has published three stories, today, that deal with the incident, which occurred in the Munster v Leinster Pro12 match on 13 April, in detail.
In the closing stages of the match, O'Connell shinned Kearney flush in the head as he lay prone on the Thomond Park pitch. Referee Nigel Owens took no action at the time and O'Connell rejoined his teammates as the winger was carted off the pitch.
On Monday, the match's citing commissioner, Eddie Walsh, deemed that the Munster man had no case to answer, prompting criticism from Leinster coach Joe Schmidt and captain Leo Cullen.
Francis adds that 'it is a given that there was no malicious intent in O'Connell's action' but criticises the forward for not expressing concern for Kearney, a player he has trained with in Ireland camp in the past. He believes a public act of contrition would reassure 'every kid, red or blue, who witnessed what happened'.
In Jim Glennon's column, the former Ireland international stated that the lack of a citing sets a worrying precedent.
Would the public and media reaction be quite as muted had it been Brian O'Driscoll or Sean O'Brien being carried off the pitch? One suspects not.
Email "'Kearney could have been killed' - Neil Francis on O'Connell's head kick".
Feedback on "'Kearney could have been killed' - Neil Francis on O'Connell's head kick".


text:
Kesef Finance
22 May 2021. Website is active
Kesef is bridging the gap between real-world financial problems and cryptocurrencies with an App-first concept to handle all your financial requirements. Whether it is fiat or crypto, you got covered with Kesef Finance. The product that we offer may look like a simple wallet, but it is power-packed with almost all your financial needs - not just crypto. With a virtual and physical debit card, you can use your crypto without needing to sell them, get fiat in your bank, and then use it. Also, you can earn the highest available interest on crypto, and trade all 3000+ tokens in a curated and easy manner.
DeFi Investment
Ticker: KSF
Token Type: ERC-20
Available for sale: 8,000,000 KSF (32%)
Total supply: 25,000,000 KSF
Pre-sale Price : 1 KSF = 1 USD
ICO Price: 1 KSF = 1.2 USD
Accepting: ETH, USDT
Screenshots taken on 16 May 2021
Tweets by Kesef Finance
Mind AI
Mind AI is an artificial intelligence engine that is capable of human-like abstract reasoning without the need for big data or supercomputers. With its ability to contextualize information and reason, Mind AI is able to generalize knowledge, a feat that no other AI today is capable of. By being able to learn on its own, Mind AI will be able to formulate its own hypotheses and models of how things work, augmenting human intelligence.
Fan Controlled Football League
Expected to kick off in 2018, the Fan-Controlled Football League (FCFL) reimagines American football – and the experience of being a die-hard fan – for the digital age. The FCFL will seek to deliver a compelling football product that captivates a broader digital audience. It will feature fast-paced, high-scoring action that embraces the spread-football evolution of the NCAA football and NFL games while enabling a diverse set of styles and strategies on both offense and defense ─ all controlled by the fans. Player personnel and real-time play calling decisions are all made by fans via the league's blockchain platform, making fans the coach and general manager for their team. Fans will no longer be just viewers; rather, they will be active contributors to the games they are watching. This is a transformational shift in the way sports fans engage and interact: no more sitting back and passively watching as a team's roster takes shape or a game unfolds. They will be essential to the league's product both on the field and off. This is the democratization of sports, and it's about to be realized through the most innovative sports league ever created, thanks to decentralized blockchain technology.
Digital Ticks
A First ever Commodity - Crypto Exchange well designed by traders for traders. Digital Ticks Exchange (DTX) is just not another crypto to crypto exchange but is also a semi-algorithm platform provider in its own. DTX plans to cater to all types of crypto assets as well as commodity to crypto assets. DTX would be power packed by a lot of advanced features including all the basic features of an exchange required by a novice trader to a professional trader as well as for a high frequency trader. In terms of security DTX is taking extra precautionary measures to avoid any kind of hacks like DDoS attacks, phishing attempts and by also performing vulnerability assessments and penetration testing. DTX has installed robust technologies behind the scene that could handle heavy volatility of the crypto markets as well as commodity markets which can handle upto 1,000,000 orders per second. Digital Ticks Exchange team believes into robust technology, ahead of industry standards in terms of providing customer service to its stakeholders as well as traders. Digital Ticks Exchange team ensures all its traders to have a smooth and user friendly trading experience. Digital Ticks Exchange would not levy any transaction charges for first few months of inception thereby giving traders to trade on zero transaction charges. DTX would give volume-based incentive for high frequency trader (HFT) which would give them scope for retaining higher profitability in the trade.
MYCRYPTOCITY
MyCryptoCity is a completely decentralized simulation game built on the Solana network. Usually the player has an overhead view of the city and develops the city by following different strategies. They get MYCTY coin by making the best use of player worker recruitment and resource utilization options. MyCryptoCity, a centralized protocol, ushers in a new era in gaming. It is designed to support the long-term sustainability of the MyCryptoCity game and its governance and provide players with a blockchain gaming experience. The purpose of this design; combining the playground with the blockchain and rewarding the players.

redpajama_set_name: RedPajamaCommonCrawl


text:
Software Engineering Stack Exchange is a question and answer site for professionals, academics, and students working within the systems development life cycle. It only takes a minute to sign up.
How are GPL-compatible licenses like MIT usable in GPL programs without being subject to the copyleft provision?
I'm currently examining the possibilities and implications of linking against a GPL library for an application in a commercial context.
From what I've understood of the GPL, as long as the application is used internally there is no obligation to release its code (even if a copy is moved to a controlled subsidiary).
What I don't understand is the following point from the FAQ :
If a library is released under the GPL (not the LGPL), does that mean that any software which uses it has to be under the GPL or a GPL-compatible license? Yes, because the software as it is actually run includes the library.
If I take a look at the GPL-compatible licenses, some of them (like the boost one) don't seem to impose the release of the code. Using it would create a situation where you could be compliant with the GPL licence without having to respect its obligation of making your code public (which doesn't seem very credible).
(NB : there are components in Adobe Photoshop licensed under boost and I don't think the code is available on demand)
The most reasonable explication would be that I'm missing something... Could you please tell me where I made a mistake ?
Robert Harvey
Louis MorazzaniLouis Morazzani
+1 for explication just because why would you ever actually use that word in a sentence
– Jimmy Hoffa
@JimmyHoffa +1 for your love of language.
– Racheet
Where did you red that Boost was GPL? It has its own license. The standard rule is that GPLv2 does not mix with proprietary software. There is a question a week on this site about how to get around this. We should ban all GPL questions.
– Andrew T Finnell
I see he said Boost was GPL compatible. The rest of my comment stands.
Short answer: They're not. They'll become subject to the copyleft.
The Wikipedia article on license compatibility has a good section on GPL compatibility:
Many of the most common free software licenses, such as the original MIT/X license, ... are "GPL-compatible". That is, their code can be combined with a program under the GPL without conflict (the new combination would have the GPL applied to the whole).
[emphasis added]
And more explicitly from the FSF FAQ on GPL compatibility:
It means that the other license and the GNU GPL are compatible; you can combine code released under the other license with code released under the GNU GPL in one larger program.
And just for edification, here's the FSF's comments on various licenses
FSF's comment on the boost license
This is a lax, permissive non-copyleft free software license, compatible with the GNU GPL.
Which means that anything licensed under Boost is easily subsumed by the GPL.
Where it gets tricky
Let's say we have project Foo licensed under Boost, and project Bar licensed under GPL and which wants to use Foo.
Bar+Foo is allowed since the licenses are compatible, and the release of Bar+Foo must be GPL as Bar is GPL. Foo, by itself and without Bar or Bar+Foo, is still available under the Boost license. Said another way, Bar+Foo has no license impact upon Foo itself.
The resulting license of the project combination is a forward acting event for the combination only. It is not a retroactive event.
So if someone else wants to take Foo and do something else with it, they are still free to do so without the copyleft provision of the GPL. However, if they take Bar+Foo, delete Bar and only use +Foo then they are still bound by the terms of the GPL since Bar+Foo was GPL'd.
Your other question:
This is directly answered by the FSF GPL FAQ on source distribution
The GPL does not require you to release your modified version, or any part of it. You are free to make modifications and use them privately, without ever releasing them. This applies to organizations (including companies), too; an organization can make a modified version and use it internally without ever releasing it outside the organization.
Wholly owned subsidiaries are considered part of the parent organization, so you would legally be in the clear. FSF would point out that you are violating the spirit of Free Software though.
I wonder: If an employee is using the unpublished modified version in the company, would he have the right to get the source code from the company?
– unor
@GlenH7 : thanks for your very helpful explication (especially the "Where it gets tricky" part)
– Louis Morazzani
@unor - No, that would constitute a private use by the Company (the employee is part of the company, not a separate entity).
– iheanyi
@GlenH7 Sure, but would they even be allowed to relicense Foo under the GPL? Sublicensing would be fine, but then they would also have to keep the Boost license in Bar+Foo, would they not?
– lesderid
I've always questioned if this would hold up in law, however...something that belongs to the MIT license arbitrarily having its license "replaced" but maybe what it is is that the project "as a whole" must have restrictions at least as open as the GPL, but, one they do that, the certain parts of them that are MIT could be extracted and "redistributed" as just MIT? Maybe. Or maybe something else...
– rogerdpack
By "GPL-compatible", they mean, a license that does not conflict with the GPL. A less restrictive license, like the Boost license, is "compatible" with the GPL because it doesn't restrict users of the code from doing anything that the GPL would allow a user to do. That is, the Boost license allows people to copy freely, which is what the GPL requires people are allowed.
An example of a license that is not "compatible" would be a license that required a fee to the original authors for users to distribute copies. Since the GPL explicitly permits both free and paid distribution, this more restrictive license would not be compatible.
In other words, the GPL says "You must allow $A, $B and $C". Any license that allows $A, $B, $C and also $D and $E is compatible. A license that allowed $A and $B but not $C would not be.
Maximus Minimus
Gort the RobotGort the Robot
So the new, combined work is wholly licensed under the GPL, correct? But the original code licensed under MIT can still be distributed separately under MIT without running afoul of the GPL, correct?
– Robert Harvey
IANAL, but yes, that is how it works.
– Fabio Fracassi
"because it doesn't restrict users of the code from doing anything that the GPL would allow a user to do" - And also because it doesn't prevent the user from doing anything that the GPL would require them to do.
– Ross Patterson
Minor nitpick but the GPL doesn't actually forbid charging fees for just about anything; see gnu.org/licenses/gpl-faq.html#DoesTheGPLAllowMoney
– Maximus Minimus
I am pretty sure the GPL allows anyone to charge for distribution, but does not allow people to require others to charge if they distribute themselves. In other words, I can charge you for a copy, but I can't require you to send me a payment if you give a copy to a third party.
– Gort the Robot
You didn't make a mistake: the FAQ answer was incomplete. It should have said that the combined program must be licensed under the GPL, not a GPL compatible licence. It has since been corrected (see below: I have emphasised the important bit):
Yes, because the program actually links to the library. As such, the terms of the GPL apply to the entire combination. The software modules that link with the library may be under various GPL compatible licenses, but the work as a whole must be licensed under the GPL. See also: What does it mean to say a license is "compatible with the GPL"?
I had earlier said that "if a library is released under the GPL then any software which uses it has to be under the GPL itself due to its so-called 'viral' nature. A permissive GPL-compatible license such as boost cannot be used." By "software which uses it" I meant the combined modules and library.
Bennett McElweeBennett McElwee
I believe that this is a common misunderstanding. It isn't necessary to release your part of the code under the GPL, as long as it has a compatible license. The license for your part can also be more permissive, but not less, than the GPL. Only the combined work remains under the GPL, so the additional restrictions of the GPL apply only if one uses your code together with the linked GPL library. See gnu.org/licenses/gpl-faq.html#GPLModuleLicense
– ert
Yes, that's right. My original answer could have been misinterpreted. Happily it's all moot now, as Gnu have updated their FAQ to say the right thing.
– Bennett McElwee
Thanks for contributing an answer to Software Engineering Stack Exchange!
Not the answer you're looking for? Browse other questions tagged licensing or ask your own question.
Using GPL code with MPL code
Avoid GPL violation by moving library out of process
What to do when using MIT-licensed code in a GPL-licensed project?
How do I deal with imported modules in GPL?
Is there a GPL-compatible software license for libraries which allows static linking, but requires redistribution of library source code?
Can I use GPL, LGPL, MPL licensed packages with my application and make it closed source?
Non-viral open source license but with clause for source disclosure?
Is there a modified LGPL license that allows static linking?
Releasing a project under GPL v2 or later without the source code of libraries
Can GPL v2 code link to an LGPL v3 library
Can I include a modified GPL/Apache licensed font in my LGPL project?
Distributing GPL licensed software that optionally links to non-GPL licensed libraries
Using an LGPL licensed library that may or may not include GPL licensed code from an MIT licensed library
I released my project under GPL. Can I still use it in my commercial app?


Since 2001, Vega has established itself as the leader in the plant-based natural health and performance products industry. Formulated by Brendan Brazier, vegan, former professional Ironman triathlete and bestselling author on plant-based nutrition, the Vega brand of nutritional products is internationally recognized. Good for your body and the planet, Vega is the clean, plant-based choice to fuel your healthy, active lifestyle—without compromise.
Vega's passion for plant-based nutrition is as much about empowering health as it is about supporting the health of our planet. But sustainability isn't just about what goes into theur products—sustainability is a part of everything Vega does. Vega wants to be a company that leaves a net zero carbon footprint.


text:
package com.itellity.sys.util;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.StringTokenizer;

public final class StringUtilities {
    public static final String EMPTY_STRING = "";
    public static final String NEWLINE = "\n";
    public static final String CRLF = "\r\n";

    public static final char substitute = '\uFFFD';

    /**
     * neue Zeile (CR und CR/LF), %, *, ;, `, ~, ^, #, ?, $, &, /, \, |, tilde, @, < und >
     */
    private static final String[] ILLEGAL_CHARS = new String[] {
            "*", "\n", "\r", "\b", ";", "?", String.valueOf('"'), "\\", "|", "~", "`", "´", "<", ">", "$", "@", "#"
        };

    /**
     *
A string comparator that does case sensitive comparisons and handles embedded numbers correctly.

     *
Do not use if your app might ever run on any locale that uses more than 7-bit ascii characters.

     */
    private static final Comparator<String> NATURAL_COMPARATOR_ASCII = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return compareNaturalAscii(o1, o2);
            }
        };

    /**
     *
A string comparator that does case insensitive comparisons and handles embedded numbers correctly.

     *
Do not use if your app might ever run on any locale that uses more than 7-bit ascii characters.

     */
    private static final Comparator<String> IGNORE_CASE_NATURAL_COMPARATOR_ASCII = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return compareNaturalIgnoreCaseAscii(o1, o2);
            }
        };

    private StringUtilities() {
    }

    public static Locale valueOfLocale(String loc) {
    	if (loc == null) {
    		return Locale.ENGLISH;
    	} else if (loc.indexOf("_") > -1) {
    		int pos = loc.indexOf("_");
    		return new Locale(loc.substring(0, pos), loc.substring(pos+1));
    	}
    	return new Locale(loc);
    }

    /**
     * compares to strings while ignoring null states, case and trailing blanks
     *
     * @param first
     * @param last
     * @return
     */
    public static boolean areEqualIgnoringCase(String first, String last) {

        if ((first == last) || (StringUtilities.isNullOrEmpty(first) && StringUtilities.isNullOrEmpty(last))) {
            return true;
        }

        if (!StringUtilities.isNullOrEmpty(first)) {
            return first.trim().equalsIgnoreCase((last == null) ? last : last.trim());
        }

        return false;
    }

    /**
     * A substring implementation that prevents IndexOutOfBoundsExceptions
     *
     *
     * @param s
     * @param start
     * @param end
     * @return
     */
    public static String secureSubString(String s, int start, int end) {

        if (end < start) {
            throw new IllegalArgumentException("start must be smaller than end. start:" + start + " end:" + end);
        } else if (start < 0) {
            throw new IllegalArgumentException("start may not be bellow zero");
        }

        if (StringUtilities.isNullOrEmpty(s)) {
            return fillEnd("", ' ', end - start);
        }

        if ((start + end) > s.length()) {
            return fillEnd(s, ' ', end - start + s.length() + 1).substring(start, end);
        }

        return s.substring(start, end);
    }

    public static String limitText(String body, int length, boolean showdots) {

        if (!StringUtilities.isNullOrEmpty(body)) {
            int bodylength = body.trim().length();

            return StringUtilities.secureSubString(body, 0, ((showdots && (bodylength > length)) ? (length - 3) : length)) +
                ((showdots && (bodylength > length)) ? "..." : "");
        }

        return body;
    }

    /**
     *
     *
     * @param s
     *
     * @return
     */
    public static boolean isNull(String s) {
        return (s == null);
    }

    /**
     *
     *
     * @param s
     *
     * @return
     */
    public static boolean isEmpty(String s) {

        if (s == null) {
            return false;
        }

        return s.equals(EMPTY_STRING);
    }

    public static boolean isBlank(String s) {
        return isNullOrEmpty(removeSpaces(s));
    }

    public static boolean isNullOrEmpty(String[] s) {

        if ((s == null) || (s.length == 0))
            return true;

        for (int i = 0; i < s.length; i++) {

            if (!isNullOrEmpty(s[i])) {
                return false;
            }
        }

        return true;
    }

    public static boolean isNullOrEmpty(List<String> input) {
        return (input == null) ? true : isNullOrEmpty(input.toArray(new String[input.size()]));
    }

    public static boolean isNullOrEmpty(String s) {
        return (s == null) || s.equals(EMPTY_STRING);
    }

    /**
     * isNumeric checks wether only a given string contains digits or + or -
     *
     * @param   s  String
     *
     * @return  boolean
     */
    public static boolean isNumeric(String s) {

        if (s == null) {
            return false;
        }

        char[] exploded = removeSpaces(s).toCharArray();

        for (int i = 0; i < exploded.length; i++) {

            char item = exploded[i];
			if (isInvalidDigit(item)) {
                return false;
            }
        }

        return true;
    }

	private static boolean isInvalidDigit(char item) {
		return !Character.isDigit(item) && ('+' != item) && ('-' != item) && ('X' != item) && ('.' != item) && (',' != item) && ('x' != item);
	}

    /**
     * isNumeric checks wether only a given string contains digits or + or -
     *
     * @param   s  String
     *
     * @return  boolean
     */
    public static String stripNonNumeric(String s) {
        char[] exploded = removeSpaces(s).toCharArray();
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < exploded.length; i++) {

            if (Character.isDigit(exploded[i]) || ('+' == exploded[i]) || ('-' == exploded[i]) || ('X' == exploded[i]) || ('x' == exploded[i])) {
                builder.append(exploded[i]);
            }
        }

        return builder.toString();
    }

    public static int lastIndexOf(String pattern, String s) {

        if (!isNullOrEmpty(s)) {
            int pos = s.indexOf(pattern);

            while (pos != -1) {

                if ((pos + 1) >= s.length())
                    return pos;

                int newPos = s.substring(pos + 1).indexOf(pattern);

                if (newPos > 0) {
                    pos = newPos + 1 + pos;
                } else {
                    return pos;
                }
            }

        }

        return -1;
    }

    public static BigDecimal toBigDecimal(String s) {
        return toBigDecimal(s, null);
    }

    public static String removeNoneDigits(String s) {

        if (StringUtilities.isNullOrEmpty(s)) {
            return s;
        }

        char[] exploded = removeSpaces(s).toCharArray();
        StringBuffer buf = new StringBuffer();

        for (int i = 0; i < exploded.length; i++) {

            if (Character.isDigit(exploded[i]) || ('.' == exploded[i]) || ('+' == exploded[i]) || ('-' == exploded[i])) {

                buf.append(exploded[i]);

            }
        }

        return buf.toString();
    }

    public static BigDecimal toBigDecimal(String s, MathContext context) {

        if (isNullOrEmpty(s)) {
            return BigDecimal.ZERO;
        }

        s = s.replace(',', '.');

        int lastDotPos = lastIndexOf(".", s);

        if (lastDotPos > -1)
            s = s.substring(0, lastDotPos).replace('.', ' ') + s.substring(lastDotPos);

        StringBuffer buf = new StringBuffer();
        boolean colonFound = false;
        char[] exploded = removeSpaces(s).toCharArray();

        for (int i = 0; i < exploded.length; i++) {

            if (Character.isDigit(exploded[i]) || ('.' == exploded[i]) || ('+' == exploded[i]) || ('-' == exploded[i])) {

                if ('.' == exploded[i]) {

                    if (!colonFound)
                        buf.append(exploded[i]);

                    colonFound = true;
                } else {
                    buf.append(exploded[i]);
                }
            }
        }

        String result = buf.toString().trim();

        if (isNullOrEmpty(result))
            return BigDecimal.ZERO;

        result = ".".equals(result) ? "0" : result;
        result = "+".equals(result) ? "0" : result;

        if (result.endsWith("-")) {
            result = result.substring(0, result.length() - 1) + "00";
        } else if (result.indexOf('.') == -1) {
            result += ".00"; // append dots and zeros
        } else if (result.endsWith(".")) {
            result += "00"; // append zeros after dot
        }

        try {
            return (context == null) ? new BigDecimal(result) : new BigDecimal(result, context);
        } catch (NumberFormatException e) {
            System.err.println("Exception while parsing : " + s);
            e.printStackTrace();

            return BigDecimal.ZERO;
        }
    }

    /**
     * Trims a given String to the given length. if the given String's length  is inferior to the given length, the string is returned unchanged.
     *
     * @param s
     * @param length
     * @return a string with a length of at most (param) length.
     */
    public static String trimToLength(String s, int length) {

        if (!isNull(s) && (s.length() > length)) {
            s = s.substring(0, length - 1);
        }

        return s;
    }

    /**
     * Wirft aus einem String alle Spaces und Zeichen die kleiner sind raus. Wirkung ist mit trim
     * vergleichbar, allerdings wird der gesammte String bearbeitet.
     *
     * @param   str  String, der bearbeitet werden soll
     *
     * @return  String ohne Spaces und
     */
    public static String removeSpaces(String str) {

        if ((str == null) || (str.length() == 0)) {
            return str;
        }

        // erstmal losrennen, obs was zu tun gibt
        int i = 0;

        while ((i < str.length()) && (str.charAt(i) > ' ')) {
            i++;
        }

        // wenn i aufs Ende zeigt, gibst nix zu tun
        if (i == str.length()) {
            return str;
        }

        // Buffer fuers Ergebnis
        StringBuffer result = new StringBuffer(str.length() - 1);

        // es gibt was zu tun, also nicht doofe Zeichen umkopieren
        for (i = 0; i < str.length(); i++) {
            char c = str.charAt(i);

            if (c > ' ') {
                result.append(c);
            }
        }

        return result.toString();
    }

    /**
     * capitalizes (i.e. upper case) the first car of a given string
     *
     * @param s
     * @return
     */
    public static String capitalizeFirstChar(String s) {

        if (StringUtilities.isNullOrEmpty(s) || (s.trim().length() < 1)) {
            return s;
        }

        s = s.trim();
        s = s.substring(0, 1).toUpperCase() + ((s.length() > 1) ? s.substring(1) : "");

        return s;
    }

    public static boolean hasCapitalizedFirstChar(String s) {

        if (StringUtilities.isNullOrEmpty(s) || (s.trim().length() < 1)) {
            return false;
        }

        s = s.trim();
        return s.substring(0, 1).toUpperCase().equals(s.substring(0, 1));
    }

    /**
     * Fuellt einen String am Anfang mit einem Zeichen bis zu einer bestimmten Laenge auf. Ist der
     * String schon laenger als gewuenscht, wird er unveraendert zurueckgegeben.
     *
     * @param   str  String, der aufgefuellt werden soll
     * @param   c    Zeichen, das verwendet werden soll
     * @param   len  gewuenschte Laenge
     *
     * @return  aufgefuellter String
     */
    public static String fillStart(String str, char c, int len) {

        // wenn schon lang genug, einfach zurueck
        if (str.length() >= len) {
            return str;
        }

        StringBuffer result = new StringBuffer(len);

        // Fuellung bauen
        int anz = len - str.length();

        while (anz > 0) {
            result.append(c);
            --anz;
        }

        // String drankleben
        result.append(str);

        return result.toString();
    }

    /**
     * Fuellt einen String am Ende mit einem Zeichen bis zu einer bestimmten Laenge auf. Ist der
     * String schon laenger als gewuenscht, wird er unveraendert zurueckgegeben. Ist der String
     * null, dann wird ein neuer String mit der gewuenschten Laenge und den
     * gewuenschten Fuellzeichen erzeugt.
     *
     * @param   str  String, der aufgefuellt werden soll
     * @param   c    Zeichen, das verwendet werden soll
     * @param   len  gewuenschte Laenge
     *
     * @return  aufgefuellter String
     */
    public static String fillEnd(String str, char c, int len) {

        if (str == null) {
            str = "";
        }

        // wenn schon lang genug, einfach zurueck
        if (str.length() >= len) {
            return str;
        }

        StringBuffer result = new StringBuffer(len);

        // String drankleben
        result.append(str);

        // Fuellung bauen
        int anz = len - str.length();

        while (anz > 0) {
            result.append(c);
            --anz;
        }

        return result.toString();
    }

    public static String stringifyStringList(List<String> items) {
    	return stringifyStringList(items, ", ");
    }

    public static String stringifyStringList(List<String> items, String delimiter) {
        String itemList = "";

        if (items != null) {

            for (String item : items) {

				itemList += item + delimiter;
            }
        }

        return (itemList.length() > 2) ? itemList.substring(0, itemList.length() - delimiter.length()) : itemList;
    }

    public static List<String> unstringifyStringList(String itemList) {
    	return unstringifyStringList(itemList, ",");
    }

    public static List<String> unstringifyStringList(String itemList, String token) {
    	StringTokenizer tokenizer = new StringTokenizer(itemList, token);
        ArrayList<String> items = new ArrayList<String>();

        while (tokenizer.hasMoreElements()) {
            String elem = tokenizer.nextToken();
            items.add(elem.trim());
        }

        return items;
    }

    public static String decodeStrangeUtf8Encoding(String string) {

        if (StringUtilities.isNullOrEmpty(string)) {
            return "";
        }

        try {
			string = new String(string.getBytes(), "utf-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
        return string;
    }

    public static String normalizeUriPart(String uri) {

        if (StringUtilities.isNullOrEmpty(uri)) {
            return "-";
        }

        uri = uri.replace(" ", "-");
        uri = uri.replace("(", "-");
        uri = uri.replace(")", "-");
        uri = uri.replace("}", "-");
        uri = uri.replace("{", "-");
        uri = uri.replace('?', '-');
        uri = uri.replace(':', '-');
        uri = uri.replace(';', '-');
        uri = uri.replace('"', '-');
        uri = uri.replace("'", "-");
        uri = uri.replace("`", "-");
        uri = uri.replace("´", "-");
        uri = uri.replace("/", "-");
        uri = uri.replace("&", "-");
        uri = uri.replace("ä", "ae");
        uri = uri.replace("ö", "oe");
        uri = uri.replace("ü", "ue");
        uri = uri.replace("ß", "ss");
        uri = uri.replace("Ä", "Ae");
        uri = uri.replace("Ö", "Oe");
        uri = uri.replace("ö", "oe");
        uri = uri.replace("À","ae");
        uri = uri.replace("Ü", "Ue");
        uri = uri.replace("À", "A");
        uri = uri.replace("à", "a");
        uri = uri.replace("È", "E");
        uri = uri.replace("è", "e");
        uri = uri.replace("Á", "A");
        uri = uri.replace("á", "a");
        uri = uri.replace("É", "E");
        uri = uri.replace("é", "e");
        uri = uri.replace("å", "a");
        uri = uri.replace("Å", "A");
        uri = uri.replace("ê", "e");
        uri = uri.replace("Ê", "E");
        uri = uri.replace("Í", "I");
        uri = uri.replace("í", "i");
        uri = uri.replace("Ó", "O");
        uri = uri.replace("ó", "o");
        uri = uri.replace("Ú", "U");
        uri = uri.replace("ú", "u");
        uri = uri.replace("ø", "oe");
        uri = uri.replace("æ", "ae");
        uri = uri.replace("Æ", "AE");
        uri = uri.replace("Ø", "OE");
        uri = uri.replace("Ç", "C");
        uri = uri.replace("ç", "c");
        uri = uri.replace("Ş", "S");
        uri = uri.replace("ş", "s");
        uri = uri.replace("Ý","Y");
        uri = uri.replace("ý","y");
        uri = uri.replace("þ", "th");
        uri = uri.replace("Þ", "Th");
        uri = uri.replace("Ð", "D");
        uri = uri.replace("ð", "d");
        return uri;
    }

    public static String decodeHTMLChars(String input) {

        if (StringUtilities.isNullOrEmpty(input))
            return input;

        input = input.replace("
", "\n");
        input = input.replace(" ", " ");
        input = input.replace("ä", "ä");
        input = input.replace("'", "'");
        input = input.replace("ö", "ö");
        input = input.replace("ü", "ü");
        input = input.replace("Ä", "Ä");
        input = input.replace("Ö", "Ö");
        input = input.replace("Ü", "Ü");
        input = input.replace("ß", "ß");
        input = input.replace("€", "€");
        input = input.replace("'", "'");
        input = input.replace(""", "\"");
        input = input.replace("É", "É");
        input = input.replace("é", "é");
        input = input.replace("È", "È");
        input = input.replace("è", "è");
        input = input.replace("à", "à");
        input = input.replace("À", "À");
        input = input.replace("á", "á");
        input = input.replace("Á", "Á");
        input = input.replace("ó", "ó");
        input = input.replace("Ó", "Ó");
        input = input.replace("Ú", "Ú");
        input = input.replace("ú", "ú");
        input = input.replace("â", "â");
        input = input.replace("Â", "Â");
        input = input.replace("ô", "ô");
        input = input.replace("Ô", "Ô");
        input = input.replace("ç","ç");
        input = input.replace("Ç","Ç");
        input = input.replace("…","...");
        input = input.replace(""","\"");
        input = input.replace("“", """);
        input = input.replace("„", """);
        input = input.replace("‘", "'");
        input = input.replace("’", "'");
        input = input.replace("–", "-");
        input = input.replace("—", "-");
        input = input.replace("²", "²");
        input = input.replace("•", "\n\t-");
        input = input.replace("¼","¼");
        input = input.replace("½","½");
        input = input.replace("¾","¾");
        input = input.replace("¿","¿");
        return decodeXMLEscapeChars(input);
    }

    public static String maskHTMLChars(String input) {

        if (StringUtilities.isNullOrEmpty(input))
            return input;

        input = decodeXMLEscapeChars(input);
        input = input.replace("*", "");
        input = input.replace("\n", "");
        input = input.replace("\"", " ");
        input = input.replace("\\\"", " ");
        input = input.replace("'", " ");

        return input;
    }

    public static String encodeHTMLChars(String input) {

        if (StringUtilities.isNullOrEmpty(input))
            return input;

        input = input.replace("\n", "
");
        input = input.replace("ä", "ä");
        input = input.replace("é","é");
        input = input.replace("è","è");
        input = input.replace("É","É");
        input = input.replace("È","È");
        input = input.replace("ö", "ö");
        input = input.replace("ü", "ü");
        input = input.replace("Ä", "Ä");
        input = input.replace("Ö", "Ö");
        input = input.replace("Ü", "Ü");
        input = input.replace("ß", "ß");
        input = input.replace("€", "€");
        input = input.replace("\"", """);
        input = input.replace(""", "“");
        input = input.replace(""", "„");
        input = input.replace("'","‘");
        input = input.replace("'","’");
        input = input.replace("'", "'");
        input = input.replace("\"", """);
        return input;
    }

    public static String decodeXMLEscapeChars(String input) {

        if (StringUtilities.isNullOrEmpty(input))
            return input;

        input = input.replace(""", "'");
        input = input.replace("„", "'");
        input = input.replace("“", "'");
        input = input.replace("&", "&");
        input = input.replace("'", "'");
        input = input.replace("<", "<");
        input = input.replace(">", ">");

        return input;
    }

    public static String encodeXMLEscapeChars(String input) {

        if (StringUtilities.isNullOrEmpty(input))
            return input;

        input = input.replace("\"", """);
        input = input.replace("&", "&");
        input = input.replace("\"", "'");
        input = input.replace("'", "'");
        input = input.replace("<", "<");
        input = input.replace(">", ">");

        return input;
    }

    /**
     * Removes all HTML element tags from a string, leaving just the character
     * data. This method does not touch any inline HTML character
     * entity codes. Use
     * {@link #decodeXMLEscapeChars decodeXMLEscapeChars()}
     * to convert HTML character entity codes.
     *
     * @param s  the string to adjust
     *
     * @return the resulting, possibly modified, string
     *
     * @see #decodeXMLEscapeChars
     */
    public static String stripHTMLTags(String s) {

        if (StringUtilities.isNullOrEmpty(s))
            return s;

        // replace all line breaks and spaces
        s = s.replace("
", "\n");
        s = s.replace(" ", " ");

        char[] ch = s.toCharArray();
        boolean inElement = false;
        StringBuilder buf = new StringBuilder();

        for (int i = 0; i < ch.length; i++) {

            switch (ch[i]) {

            case '<':
                inElement = true;

                break;

            case '>':

                if (inElement)
                    inElement = false;
                else
                    buf.append(ch[i]);

                break;

            default:

                if (!inElement)
                    buf.append(ch[i]);

                break;
            }
        }

        return buf.toString();
    }

    /**
     * neue Zeile (CR und CR/LF), %, *, ;, `, ~, ^, #, ?, $, &, /, \, |, tilde, @, < und >
     *
     * @return
     */
    public static String getIllegalJavaScriptChars() {
        String chars = "";

        for (String keyword : ILLEGAL_CHARS) {
            chars = "," + keyword;
        }

        return chars.substring(1);
    }

    public static boolean hasIllegalChars(List<String> illigalChars, String name) {

        if (StringUtilities.isNullOrEmpty(name))
            return false;

        name = name.trim().toLowerCase();

        for (String keyword : illigalChars) {

            if (name.indexOf(keyword) > -1) {
                return true;
            }
        }

        return false;
    }

    public static boolean hasIllegalJavaScriptChars(String name) {

        return hasIllegalChars(Arrays.asList(ILLEGAL_CHARS), name);
    }

    public static String removeIllegalChars(List<String> illigalChars, String name) {

        if (!StringUtilities.isNullOrEmpty(name)) {

            for (String illegalChar : illigalChars) {

                name = name.replace(illegalChar, "");

            }
        }

        return name;
    }

    public static String removeIllegalJavaScriptChars(String name) {

        return removeIllegalChars(Arrays.asList(ILLEGAL_CHARS), name);
    }

    /**
     * Returns a comparator that compares contained numbers based on their numeric values and compares other parts
     * using the current locale's order rules.
     *
For example in German locale this will be a comparator that handles umlauts correctly and ignores
     * upper/lower case differences.

     *
     * @return
A string comparator that uses the current locale's order rules and handles embedded numbers
     *         correctly.

     * @see #getNaturalComparator(java.text.Collator)
     */
    public static Comparator<String> getNaturalComparator() {
        Collator collator = Collator.getInstance();

        return getNaturalComparator(collator);
    }

    /**
     * Returns a comparator that compares contained numbers based on their numeric values and compares other parts
     * using the given collator.
     *
     * @param collator used for locale specific comparison of text (non-number) subwords - must not be null
     * @return
A string comparator that uses the given Collator to compare subwords and handles embedded numbers
     *         correctly.

     * @see #getNaturalComparator()
     */
    public static Comparator<String> getNaturalComparator(final Collator collator) {

        if (collator == null) {

            // it's important to explicitly handle this here - else the bug will manifest anytime later in possibly
            // unrelated code that tries to use the comparator
            throw new NullPointerException("collator must not be null");
        }

        return new Comparator<String>() {
                public int compare(String o1, String o2) {
                    return compareNatural(collator, o1, o2);
                }
            };
    }

    /**
     * Returns a comparator that compares contained numbers based on their numeric values and compares other parts
     * based on each character's Unicode value.
     *
     * @return
a string comparator that does case sensitive comparisons on pure ascii strings and handles embedded
     *         numbers correctly.

     *         Do not use if your app might ever run on any locale that uses more than 7-bit ascii characters.
     * @see #getNaturalComparator()
     * @see #getNaturalComparator(java.text.Collator)
     */
    public static Comparator<String> getNaturalComparatorAscii() {
        return NATURAL_COMPARATOR_ASCII;
    }

    /**
     * Returns a comparator that compares contained numbers based on their numeric values and compares other parts
     * based on each character's Unicode value while ignore upper/lower case differences.
     * Do not use if your app might ever run on any locale that uses more than 7-bit ascii characters.
     *
     * @return
a string comparator that does case insensitive comparisons on pure ascii strings and handles embedded
     *         numbers correctly.

     * @see #getNaturalComparator()
     * @see #getNaturalComparator(java.text.Collator)
     */
    public static Comparator<String> getNaturalComparatorIgnoreCaseAscii() {
        return IGNORE_CASE_NATURAL_COMPARATOR_ASCII;
    }

    /**
     *
Compares two strings using the current locale's rules and comparing contained numbers based on their numeric
     * values.

     *
This is probably the best default comparison to use.

     *
If you know that the texts to be compared are in a certain language that differs from the default locale's
     * langage, then get a collator for the desired locale ({@link java.text.Collator#getInstance(java.util.Locale)})
     * and pass it to {@link #compareNatural(java.text.Collator, String, String)}

     *
     * @param s first string
     * @param t second string
     * @return zero iff s and t are equal,
     *         a value less than zero iff s lexicographically precedes t
     *         and a value larger than zero iff s lexicographically follows t
     */
    public static int compareNatural(String s, String t) {
        return compareNatural(s, t, false, Collator.getInstance());
    }

    /**
     *
Compares two strings using the given collator and comparing contained numbers based on their numeric
     * values.

     *
     * @param s first string
     * @param t second string
     * @return zero iff s and t are equal,
     *         a value less than zero iff s lexicographically precedes t
     *         and a value larger than zero iff s lexicographically follows t
     */
    public static int compareNatural(Collator collator, String s, String t) {
        return compareNatural(s, t, true, collator);
    }

    /**
     *
Compares two strings using each character's Unicode value for non-digit characters and the numeric values off
     * any contained numbers.

     *
(This will probably make sense only for strings containing 7-bit ascii characters only.)

     *
     * @return zero iff s and t are equal,
     *         a value less than zero iff s lexicographically precedes t
     *         and a value larger than zero iff s lexicographically follows t
     */
    public static int compareNaturalAscii(String s, String t) {
        return compareNatural(s, t, true, null);
    }

    /**
     *
Compares two strings using each character's Unicode value - ignoring upper/lower case - for non-digit
     * characters and the numeric values of any contained numbers.

     *
(This will probably make sense only for strings containing 7-bit ascii characters only.)

     *
     * @return zero iff s and t are equal,
     *         a value less than zero iff s lexicographically precedes t
     *         and a value larger than zero iff s lexicographically follows t
     */
    public static int compareNaturalIgnoreCaseAscii(String s, String t) {
        return compareNatural(s, t, false, null);
    }

    /**
     *
Wraps a string around after a certain number of chars

     *
(This will probably make sense only for strings containing 7-bit ascii characters only.)

     *
     * @return emptyString if string is empty.
     *
     */
    public static String wrapLines(String string, int chars) {
        String name1 = "";
        String returnName = "";

        if ((string.length() >= chars) && !StringUtilities.isNullOrEmpty(string) && (chars > 0)) {
            int count = string.length();
            int cut = 0;

            for (int i = 0; i < count; i++) {

                if (((i % chars) == 0) && (i != 0)) {
                    name1 = string.substring(cut, i);
                    returnName += name1 + " ";
                    cut = i;
                }

                if ((i + 1) == count) {
                    name1 = string.substring(cut, i + 1);
                    returnName += name1 + " ";
                }
            }
        } else {
            returnName = string;
        }

        return (returnName == null) ? "" : returnName;
    }

    /**
     * @param s             first string
     * @param t             second string
     * @param caseSensitive treat characters differing in case only as equal - will be ignored if a collator is given
     * @param collator      used to compare subwords that aren't numbers - if null, characters will be compared
     *                      individually based on their Unicode value
     * @return zero iff s and t are equal,
     *         a value less than zero iff s lexicographically precedes t
     *         and a value larger than zero iff s lexicographically follows t
     */
    private static int compareNatural(String s, String t, boolean caseSensitive, Collator collator) {
        int sIndex = 0;
        int tIndex = 0;

        int sLength = s.length();
        int tLength = t.length();

        while (true) {
            // both character indices are after a subword (or at zero)

            // Check if one string is at end
            if ((sIndex == sLength) && (tIndex == tLength)) {
                return 0;
            }

            if (sIndex == sLength) {
                return -1;
            }

            if (tIndex == tLength) {
                return 1;
            }

            // Compare sub word
            char sChar = s.charAt(sIndex);
            char tChar = t.charAt(tIndex);

            boolean sCharIsDigit = Character.isDigit(sChar);
            boolean tCharIsDigit = Character.isDigit(tChar);

            if (sCharIsDigit && tCharIsDigit) {
                // Compare numbers

                // skip leading 0s
                int sLeadingZeroCount = 0;

                while (sChar == '0') {
                    ++sLeadingZeroCount;
                    ++sIndex;

                    if (sIndex == sLength) {
                        break;
                    }

                    sChar = s.charAt(sIndex);
                }

                int tLeadingZeroCount = 0;

                while (tChar == '0') {
                    ++tLeadingZeroCount;
                    ++tIndex;

                    if (tIndex == tLength) {
                        break;
                    }

                    tChar = t.charAt(tIndex);
                }

                boolean sAllZero = (sIndex == sLength) || !Character.isDigit(sChar);
                boolean tAllZero = (tIndex == tLength) || !Character.isDigit(tChar);

                if (sAllZero && tAllZero) {
                    continue;
                }

                if (sAllZero && !tAllZero) {
                    return -1;
                }

                if (tAllZero) {
                    return 1;
                }

                int diff = 0;

                do {

                    if (diff == 0) {
                        diff = sChar - tChar;
                    }

                    ++sIndex;
                    ++tIndex;

                    if ((sIndex == sLength) && (tIndex == tLength)) {
                        return (diff != 0) ? diff : (sLeadingZeroCount - tLeadingZeroCount);
                    }

                    if (sIndex == sLength) {

                        if (diff == 0) {
                            return -1;
                        }

                        return Character.isDigit(t.charAt(tIndex)) ? -1 : diff;
                    }

                    if (tIndex == tLength) {

                        if (diff == 0) {
                            return 1;
                        }

                        return Character.isDigit(s.charAt(sIndex)) ? 1 : diff;
                    }

                    sChar = s.charAt(sIndex);
                    tChar = t.charAt(tIndex);
                    sCharIsDigit = Character.isDigit(sChar);
                    tCharIsDigit = Character.isDigit(tChar);

                    if (!sCharIsDigit && !tCharIsDigit) {

                        // both number sub words have the same length
                        if (diff != 0) {
                            return diff;
                        }

                        break;
                    }

                    if (!sCharIsDigit) {
                        return -1;
                    }

                    if (!tCharIsDigit) {
                        return 1;
                    }
                } while (true);
            } else {

                // Compare words
                if (collator != null) {

                    // To use the collator the whole subwords have to be compared - character-by-character comparision
                    // is not possible. So find the two subwords first
                    int aw = sIndex;
                    int bw = tIndex;

                    do {
                        ++sIndex;
                    } while ((sIndex < sLength) && !Character.isDigit(s.charAt(sIndex)));

                    do {
                        ++tIndex;
                    } while ((tIndex < tLength) && !Character.isDigit(t.charAt(tIndex)));

                    String as = s.substring(aw, sIndex);
                    String bs = t.substring(bw, tIndex);
                    int subwordResult = collator.compare(as, bs);

                    if (subwordResult != 0) {
                        return subwordResult;
                    }
                } else {

                    // No collator specified. All characters should be ascii only. Compare character-by-character.
                    do {

                        if (sChar != tChar) {

                            if (caseSensitive) {
                                return sChar - tChar;
                            }

                            sChar = Character.toUpperCase(sChar);
                            tChar = Character.toUpperCase(tChar);

                            if (sChar != tChar) {
                                sChar = Character.toLowerCase(sChar);
                                tChar = Character.toLowerCase(tChar);

                                if (sChar != tChar) {
                                    return sChar - tChar;
                                }
                            }
                        }

                        ++sIndex;
                        ++tIndex;

                        if ((sIndex == sLength) && (tIndex == tLength)) {
                            return 0;
                        }

                        if (sIndex == sLength) {
                            return -1;
                        }

                        if (tIndex == tLength) {
                            return 1;
                        }

                        sChar = s.charAt(sIndex);
                        tChar = t.charAt(tIndex);
                        sCharIsDigit = Character.isDigit(sChar);
                        tCharIsDigit = Character.isDigit(tChar);
                    } while (!sCharIsDigit && !tCharIsDigit);
                }
            }
        }
    }

    /**
     * Substitutes all illegal characters in the given string by the value of
     * {@link EscapingXMLStreamWriter#substitute}. If no illegal characters
     * were found, no copy is made and the given string is returned.
     *
     * @param string
     * @return
     */
    public static String escapeCharacters(String string) {

        char[] copy = null;
        boolean copied = false;
        for (int i = 0; i < string.length(); i++) {
            if (isIllegal(string.charAt(i))) {
                if (!copied) {
                    copy = string.toCharArray();
                    copied = true;
                }
                copy[i] = substitute;
            }
        }
        return copied ? new String(copy) : string;
    }

    private static final List<Character> LEGAL_CONTROL_CHARS = Arrays.asList('\n','\r','\t');

	public static boolean isControlCharcter(int i) {

		return !LEGAL_CONTROL_CHARS.contains(i) && Character.isISOControl(i);
	}

    private static boolean isIllegal(char c) {
        return isControlCharcter(c);
    }

}
//
// $Log: StringUtilities.java,v $
// Revision 1.6  2006/10/02 20:39:46  erik
// zwischenstand
//
// Revision 1.5  2005/08/01 13:16:40  erik
// development
//
// Revision 1.4  2005/07/09 02:22:10  erik
// isNumeric accepts + and -
//
// Revision 1.3  2005/06/20 18:31:37  erik
// zwischenstände
//
// Revision 1.2  2005/06/16 22:57:27  erik
// renamed AbstractEnumeration into AbstractEnumerationValue
//
//


Master the art of cocktail making followed by a 3-course Sushi extravaganza by Kouzu in Belgravia, London.
Of course, it's the dream right? Sushi and Cocktails. Well in this masterclass, you will learn how to mix the best cocktails in town and then enjoy the best sushi in town.
Although sashimi is typically eaten with chopsticks, sushi is traditionally eaten but picking it up between thumb and middle finger. You are then supposed to turn the piece upside down and only dip the fish into the soy sauce, never the rice - rice absorbs too much sauce and this changes the texture of the bite.


text:
Home Headlines Special agric zones to attract $4bn investments – NGF
Special agric zones to attract $4bn investments – NGF
By ADEBAYO OBAJEMU
The Nigeria Governors' Forum (NGF) has said that the establishment of Special Agro-processing Zones (SAPZs) in Nigeria has the potential of attracting between one to four billion dollars investments into the country.
The Chairman of the forum and Governor of Ekiti, Kayode Fayemi, disclosed this while briefing reporters after the forum's 4th meeting on Wednesday in Abuja.
Mr Fayemi explained that all states were potential beneficiaries of the SAPZs initiative, which would bring together the farming and the processing community.
"The Forum was briefed by its Deputy Chairman, Gov. Aminu Tambuwal of Sokoto state on the meeting between the Forum and the AfDB. The officials came in company of existing and potential Chinese investors in Nigeria.
"The meeting was part of a series of high-level engagements driven by the AfDB to promote the establishment of SAPZs in Nigeria.
"This SAPZs which will bring together the farming and the processing community have the potential of attracting about one billion dollars from the AfDB and up to 4 billion dollars with the entry of private sector investors."
Mr Fayemi said that the governors already agreed with AfDB that a tasks desk for the initiative would be at NGF Secretariat to coordinate interest expressed from various states.
On the issue of health, he said that members of the forum resolved to continue to support the actualisation of universal health coverage in Nigeria.
This according to him followed update from the NGF Secretariat on Basic Health Care Fund (BHCF), State Health Insurance Agency and the fact that Nigeria had been polio-free for three years and on the verge of being certified polio free.
"The governors expressed willingness to prioritize routine immunization coverage in the States which will ensure that Nigeria is declared polio free and ensure sustainability moving forward."
Asked of the governors' decision on the Nigerian Financial Intelligence Unit (NFIU) directive on local government funds, Mr Fayemi said the governors were exploring available means to settle the matter.
"NFIU is a matter that is on our agenda consistently, but as you may be aware we are also in court.
"We are exploring all other initiatives in order to ensure that we come to a clear conclusion on NFIU matter."
The chairman said that the governors during the meeting also received a presentation on polio eradication from Rotary International Nigeria PolioPlus Committee, led by its Chairman, Tunji Funsho.
"Rotary have been active in the dedication of polio for a considerable length of time.
"The briefing is about the work that have been done and the need to sustain progress and keeping our state forces on eradication of wide polio virus intact."
Mr Fayemi said that the forum also received a presentation on the forthcoming "State of the States Conference" scheduled to hold from November 26 to 27, from Scott Sheldon, the Managing Director of CWC.
He said that the governors pledged to work with the team from CWC to deliver on the objectives of the conference.
"The forum also resolved to participate in UN General Assembly on the Sustainable Development Goals (SDGs) and Climate Change; as well as the Tokyo international conference on Africa which will come up on Aug. 28 to Aug. 30 as well as Sept. 23 to Sept. 27 respectively."
Some of the governors in attendance were Okezie Ikpeazu (Abia), Umaru Fintri (Adamawa), Udom Emmanuel (Akwa Ibom), Willie Obiano (Anambra), Samuel Ortom (Benue), Bala Mohammed (Bauchi), Godwin Obaseki (Edo).
Others were Ifeanyi Ugwuanyi (Enugu), Abdullahi Ganduje (Kano), Darius Ishiaku (Taraba), Abubakar Badaru (Jigawa), Ifeanyi Okowa (Delta), Emeka Ihedioha (Imo), Seyi Makinde (Oyo), Aminu Masari (Katsina), Bello Matawalle (Zamfara), Babagana Umara (Borno) and Cross River Deputy Governor, Prof. Ivira Esu.
Abdullahi Ganduje
Ifeanyi Okowa
Ifeanyi Ugwuanyi
Kayode Fayemi
Nigeria Governors Forum
Previous articleNorth West's lion share of senior ministers 'next level of sectionalism' – Afenifere, Ohanaeze
Next articleAmerican banking giant, JP Morgan, partners NSE on derivatives


Rec hall with tables and chairs and jetmaster wood fire, two shelters (one with power) and camping areas, toilet and shower block, instant gas hot water.
Low climbing wall, bush mini golf, camp fire circle, hiking, orienteering and native wildlife.
Looking for more information about Camp Warringal? Shoot us a message here!
Thanks for contacting Camp Warringal! They will get back to you shortly.


A sophisticated silhouette that's perfect for all outfits.
The Base London Tyne is a sophisticated and stylish shoe that can be worn both casually and formally.
These Tyne men's premium leather shoes offer a stylish and sophisticated design that would be a perfect new addition to your footwear collection.


Everybody loves a very good shortcut. A quicker path to paintings, a quick peek at the solutions to the crossword puzzle, and maybe even happy, healthful skin in a single day. But let's accept it, shortcuts are tough to return through. Luckily, we've got compiled a list of splendor and grooming products that seem too excellent to be genuine, however virtually paintings.
From special varieties of moisturizers that rely upon herbal components to little patches that blast acne spots overnight to extraordinary-effective foot peels and restorative face masks, there's a touch something for all people here. And no longer simply skin care merchandise — we've got included gear too (like a straightener that smooths, straightens, and brushes all at once, and a painless hair removal machine).
It may be completely overwhelming to go into the Amazon shopping international knowing that you need low priced, tried-and-genuine splendor merchandise — there are hundreds of alternatives for every possible class. But now, you may toss your issues apart, log some more you-time, and relax, because we've got you completely covered with all of the terrific beauty and grooming products on Amazon that has stellar evaluations. And even if it's something you don't absolutely need right now… Properly, we are all approximately that treat your self-mentality. Happy scrolling!
Remember again then whilst you first commenced shaving. The things you probably did and the products you used were so unfit for real shaving. If you're seeking out terrific men's grooming products you can use for the first-class shaving results then study on.
Never use cleaning soap when you shave. No need to you depend on foam regular. Soap is for inexperienced young adults who've no foresight but to buy actual shaving merchandise. Foam alternatively, does now not web page nicely for your face due to its aerated nature. It can once in a while be an OK as men's grooming merchandise move. However, in my personal enjoyment, the pleasant thing to use in your beard before shaving it off is lotions or creams. These products are better at promoting smoother rash unfastened shave. Specifically, search for products that contain coconut oil. These are established to be virtually suitable for your facial pores and skin fitness.
Never use products which have alcohol. Alcohol significantly dries up your skin and consequently makes it liable to scarring. Also keep away from people with menthol ingredients because this can make you insensitive from an excessive amount of scrapping of the pores and skin. Another properly product that may be used is the oil you use proper earlier than the shaving method starts offevolved.
Now, the goods you need to use after the shave is pretty standard as nicely. Use moisturizers after you shave. Let me repeat that again just to pressure it in addition to those men accessible who hard-headedly deny the significance of facial pores and skin care: Use moisturizers when you shave. You see this is the satisfactory step to avoid in addition to remedy on the equal time the phenomenon one name's razor burn. Razor burn typically takes place whilst no longer sufficient slickness or cutting sharpness is the gift of the shaving tools. Now to keep away from this as well as to treat this, one ought to use moisturizers on your pores and skin. If you moisturize your pores and skin, it'll now not handiest be healthier, it's going to also be smoother and extra resilient in your next shaving enjoy. The blade may not snag on choppy skin or roughage.
The high-quality merchandise for pores and skin moisture are lotions that have shea or glycerin within the substances. Aloe Vera is likewise a high-quality herbal component to use because it enables your skin produce more herbal safety. It is also a relaxing palliative for burns as a result of a few awful razor techniques. If you are looking for some fresh aroma, the oil of lavender is the manner to move. It has been used for so many a while in the past for the advertising of healthful skin most of the aristocracy of the ancients. The royals in past instances have constantly used this oil due to its enjoyable fragrance and due to the internal peace the track foretells and promotes.
Male Grooming has moved on an amazing deal for the reason that day in which guys simply truly shaved and introduced a splash of aftershave. Nowadays there are many grooming merchandises for guys that help to preserve skin and hair looking and feeling great.
Many special male hair styling brands and products are to be had, and the right one for you can rely upon the duration of your hair, and your fashion and character. You might need a piece of wax as a crowning glory after you've washed your hair, or you would possibly need a something more potent to help manage your wayward locks or formidable hairstyle.
Some dedicated shampoos for men are designed to scrub the hair and exfoliate the scalp. Men won't need the extra shine and glow that a girl's shampoo provides, and so distinctive ingredients are used.
Hair regrowth products are famous for men who are hectic approximately dropping their hair. For a few humans dropping their hair isn't a trouble, but for other human beings, it's miles. If you're concerned approximately going bald, why now not see if a hair loss product could forestall you losing your hair?
Hair dryers can make drying and style your hair tons quicker and less difficult, and a salon pleasant hairdryer so that it will be up to the activity and last for years is not expensive. There's no need to put up with having to towel dry your hair anymore, admit it, you want a hairdryer!
Hair straighteners for men have emerged as increasingly famous as extra men have long hair, and are trying to create increasingly more styles and looks. Rather than just having long hair, many men have longer hair on the front or the sides than the back. By using straighteners, you may manipulate your hair and style it as you need it.
Hair clippers are a splendid manner to save cash when you have or want certainly brief hair. Rather than go to the barbers, why not spend money on a fixed of hair clippers and cut your hair your self? You'll shop time as well as money, and you may have your hair reduce as frequently as you want.
Shaving products have stepped forward over the last few years, and lots of humans are going again to a wet shave. With advances in razors, and new male grooming merchandise for before, at some point of and after the shave, you are positive to locate the proper products for you. Keep your face smoother for longer with scrubs, shaving oils and put up shave moisturizers. It might also be time to reflect consideration on converting your razor too.
Male grooming also includes tanning merchandise, which can be designed to present a healthy solar-kissed glow all year spherical. If you are searching out a healthful way to get a tan why now not do not forget a tanning device?
If you are shaving with a disposable razor, the use of the cheapest shampoo from the supermarket and thinking why your skin and hair do not look and feel as top as they may do, why now not treat your self to a few male grooming merchandise and spot how a great deal higher your pores and skin and hair can appearance and feel?


text:
Tribes of Neurot Adaptation and Survival: The Insect Project
By Roman Sokal
Neurosis's experimental alter-ego turns on the aural electron microscope and delves deep within the microcosm of the insect world with Adaptation and Survival, an interactive two-disc listening experience that puts the listener within the insect consciousness, where there is much more than meets the ear. The result is a chaotic and almost electronic metropolis/colossus of sound, as if the insects become machines, gathering, fighting and communicating in a frightening yet soothing state of ambient frenzy. Every sound heard here are actual samples of insect sounds manipulated beyond, and each listen yields an altogether different cinematic experience. Although the three-platter vinyl version is more "interactive," the two-CD set (when played with two stereo systems under lawless conditions) exudes enough power, mystery and an infinite and in-depth learning experience into what lies beneath to warrant Tribes of Neurot a feature story in National Geographic. Adaptation and Survival: The Insect Project is definitely the most ambitious sound project in existence to date. (Neurot)
IMPROV & AVANT-GARDE
More Tribes of Neurot
Tribes of Neurot
Tribes of Neurot 60-Degrees
Stemming from compilation tracks, rare vinyl releases and previously unreleased material, 60-Degrees is a collection of some of the most int...


Drafting paper is used by drafters and designers with graphite pencils, technical pens, and ink. We offer a wide variety of graph paper, drafting vellum, and Mylar film, as well as tracing paper pads and rolls by trusted brands such as Clearprint, Alvin, Graphix.
Plotter paper by Alvin and Clearprint is great for pen/inkjet use. Extremely durable, yet economical. Use when Diazo production is not intended. Recommended pen type is felt-tip or ballpoint. Clearprint plotter paper available in sheets or rolls. Features outstanding color depth and intensity. Economical for quick check plots.
Are you confused about the different types of drawing and drafting paper and how to choose the proper type? What is the difference between drafting vellum, tracing paper, film, with grids or without? What is meant by transparency, weight, and archival? Cutting-Mats.net has you covered on all types of drafting and drawing papers. Watch the short video below to learn more.


text:
Meth Cases Slowing, Drug Still A Community Problem
ANDERSON — Two people are heading to prison after receiving sentences for methamphetamine-related convictions on Monday, but authorities are seeing a downward trend in the drug.
Still, drug task force detectives warn it's still out there.
James R. Hampton, 47, and Kelsey J. Coverly, 35, are co-defendants in a lab bust that happened in September, and both were sentenced Monday by Madison Circuit 6 Judge Dennis Carroll. Hampton was sentenced to 12 years, with six executed in prison, while Coverly, who pleaded guilty to lesser charges, was sentenced to four years, with 18 months executed.
According to the probable cause affidavit on their case, drug task force detectives were tipped off that the two had been cooking meth at a home in the 400 block of Suburban Drive. Precursor logs also showed Coverly had been making several purchases of pseudoephedrine, the key ingredient in homemade meth production.
Detectives went to the house and smelled the distinctive odor of methamphetamine and found several incriminating items in a bucket in the backyard. When they entered the home, they found stripped batteries, coffee filters, hydrochloric acid, sulfuric acid and other precursors — chemical ingredients to meth-making — throughout the house.
The narrative reads similar to dozens of lab raids made by detectives in recent years, but the numbers are down, according to drug task force officials. After Madison County ranked first in the state and second in the country in labs seized in 2012, detectives Jason Brizendine and Lee Ann Dwiggins underwent training and earned certification to specifically deal with the problem.
The number dropped from 96 seizures in 2012 to 61 in 2013. The year to date figure is trending lower again through 2014, according to Brizendine, but meth remains a problem in the area.
"I think the efforts by law enforcement are definitely showing. A few years ago, it seemed like we were dealing with labs almost nightly," Brizendine said. "They're still out there, but we're making an impact."
Prosecutors are noticing, as well. Deputy prosecutor Dan Kopp, who tried the cases against Hampton and Coverly, said he has prosecuted a number of the meth cases that have inundated Madison County felony courts in recent years, and he has seen the influx slow down.
"They're making a difference," Kopp said. "And this is good for the defendants in the long run, believe it or not. Making meth is an inherently dangerous activity, even if you were a chemist. So getting these people away from that destructive behavior is good for them and for society as a whole."
Like Jack Molitor on Facebook and follow him @aggiejack4 on Twitter, or call 640-4883.
Madison County ranked first in the state and second in the country in meth labs seized in 2012.
The number dropped from 96 seizures in 2012 to 61 in 2013.


The Mass of Anointing is celebrated at 11:00 a.m on the last Monday of each month at Sacred Heart. The elderly and those suffering from physical or emotional illness are especailly encouraged to attend.
Parish Center & all are welcome!


text:
The Clarion Golden Eagles are the athletic teams that represent Pennsylvania Western University Clarion (known before July 2022 as Clarion University of Pennsylvania), located in Clarion, Pennsylvania, in NCAA Division II intercollegiate sports. The Golden Eagles are members of the Pennsylvania State Athletic Conference (PSAC) for 13 of 14 varsity sports; the wrestling team competes in the Mid-American Conference (MAC) as a member of the NCAA's Division I. The Golden Eagles have been a member of the PSAC since its foundation in 1951.

History
Notable former Golden Eagles include Kurt Angle NCAA Division I Wrestling Champion and Olympic Wrestler; former UFC Champion Frankie Edgar who was a four-time NCAA Division I tournament qualifier; Reggie Wells, NFL offensive lineman; Cy Young winner Pete Vukovich; and Men's NCAA Division I Basketball Champion Coach at Kentucky John Calipari, a point guard for Clarion University from 1980-1982.

Conferences
1908–1950: Independent
1951–present: Pennsylvania State Athletic Conference

Varsity teams

List of teams

Men's sports (6)
Baseball
Basketball
Football
Golf
Swimming and diving
Wrestling

Women's sports (8)
Basketball
Cross country
Golf
Soccer
Softball
Swimming and diving
Tennis
Track and field
Volleyball

National championships

Team

Individual sports

Football
Clarion has made one appearance in the NCAA Division II football playoffs; their record is 2–1.

The team defeated the East Carolina Pirates in the 1952 Lions Bowl, 13–6.

Wrestling

Men's Basketball

References

External links

redpajama_set_name: RedPajamaWikipedia


The Avoca Quality Consortium (AQC) has developed an Oversight Capability Maturity Model (OCMM) to assess organizational capabilities for oversight of external service providers in both regulated and non-regulated scenarios. A first-of-its-kind for the Pharmaceutical R&D industry, the OCMM enables organizations to manage internal capabilities for provider oversight and identify weaknesses. This process will help organizations manage providers' ability to deliver on time, on budget and with expected quality, which is increasingly important to ensure ICH E6 (R2) compliance.
The OCMM® has five levels of maturity, and addresses ten critical dimensions for Oversight Capability. Each dimension is linked to a wide range of AQC leading practice guides, tools and templates. For example, one of the dimensions of oversight capability is governance. Many organizations struggle with developing effective governance constructs such as committee charters. Having governance charters in place helps to drive effective joint collaboration to better ensure successful delivery on the goals and objectives of the partnership. The model links users to sample governance committee charters, such as an Executive Governance Committee Charter.
The outcome of this OCMM is a matrix with 50 detailed descriptions of oversight capability (5 levels and 10 dimensions) that can be used to assess your organizational maturity level and to advance it to higher levels.