Jo Kondo: "I am interested in words more than in sentences, in sentences more than in paragraphs, in paragraphs more than in a whole page. Thus, it could be said that in music I am more concerned with each sound than with the phrases they create."
Charles Seeger's Dilemma: that thinking and discoursing in the "language mode of communication" about the "music mode of communication" dominates, directs and, above all, limits research about music.
I work with sounds with the same pleasure that I take in kneading dough or riding a bike or walking early mornings with daughter and/or dog in tow. But I wrestle with words, fool persisting in his folly, and more often than not — especially when the words should have something to do with music — something fails. Do words fail me? Or have I failed to manage the words?
In a recent comment thread here, Charles Shere mentioned OULIPO, the famous "workshop for potential literature." The best work associated with the OULIPO — Queneau, Perec, Mathews — is entirely comfortable with its playful approach to language. With music, however, a playful approach is often discouraged or put down. For some, "playing games" is supposed to be at odds with the really musical; musical compositions are criticized for having playful systems and structures. This attitude is wrong in so many ways, so profoundly pessimistic about music, not least in its rejection, if not denial, of the potential for music to work on multiple levels, as well as the multiple and surprising ways in which these levels may interact.
The results of research into the physics, psychophysics and neuroscience of music are often fascinating, but also, as a practicing musician, often frustrating. This frustration is due, in part, to an inherent pessimism, in that the subject of research is typically constrained by existing musical repertoire and its material qualities and existing conditions for performance and audition. Far more interesting, for a composer like me, would be exploration of the potential and means for musicians and listeners to go beyond those constraints. It is one thing, for example, to determine limits for pitch perception under conventional listening contexts, but it is quite another thing to investigate ways and contexts through which these limits may be expanded. Further, there is a real frustration that much research — research in audio recording somewhat excepted — does not focus on issues of urgent compositional interest. For example, I would really like to know more about how fast a listener can take in and process musical information. In some cases — as real musical variety encompasses both clarity and opacity — the compositional interest is not only creating music which can be taken in and analyzed by a listener but also in making music which overwhelms the whole sensory and cognitive apparatus. It would be very useful to have more empirical insight into this issue.
I am an owner and user of umbrellas. No, more than that: I am fond of umbrellas. A well-made umbrella is light but sturdy, mechanically stable and smooth in operation. It is capable of protecting against rain, hail, sun, or — within reasonable limits of strength and velocity — wind. It may be used to hide from unwanted gazes or to disguise a private conversation. A umbrella can make both an excellent improvised directional sound reflector or a mute — this was a particular specialty of my days as a young trombonist — or, in a snap, it may be used as a foil to fend off attackers or to defend ones honor. Erik Satie was said to have owned dozens of them. At one point in time, I owned more than twenty of them, and took great pride in keeping them all in good maintenance, cleaning them, lightly oiling the mechanism, straightening ribs gone askew and patiently sewing loose ends back onto their assigned ribeyes. [Warning! Some umbrellas come with sharped tips and rib-ends; others may be sharpened by their owners.] I once used the opening and closing of a large ensemble of umbrellas as a somewhat visually distracting musical accompaniment to a dance. [Jo Kondo's early masterpiece of pseudo-repetition, Under the Umbrella, for five percussionists playing 25 cowbells and a gong, does not require an umbrella, but is clearly the work of a musicians who understands and appreciates the entire concept of an umbrella.] Like a passion for this music or that, and the radical music in particular, an affection for umbrellas is not, however, universal. One of my oldest and best friends is a gifted writer who has long worked a day job in the Financial district in San Francisco. Being physically tall, he finds that he has to defend himself on rainy days against a sea of eye-level umbrella edges while attempting to go peacefully to his office. Consequently, he is as much of the anti-umbrella party as I am a pro-bumpershootist. (As I am somewhat taller than Tom, it may be the case that I have a sufficient advantage in avoiding what, for him, would be eye-level umbrella edges, which demonstrates that some partisan differences are, indeed, more due to nature than nurture.) To date, we have successfully avoiding scheduling our all-too-rare reunions on dates with a high likelihood of rain. When we do meet, I make a point of stashing my umbrella away from his view and we both take care to avoid talking about this controversy. Thus our friendship has remain unaffected despite the potential of these partisan differences to cause a serious rift. Many successful friendships, one supposes, are like that.
The fifth volume, Music in the Late Twentieth Century, of Richard Taruskin's The Oxford History of Western Music.
I may well be missing some activity, but judging from the blogs I follow, there has recently been a aggregatel decline in the frequency and volume of independent classical music blogging, with the number of institutional music blogs increasing. The pace on this blog has slowed due to some large projects elsewhere and a share of some serious self-doubts about writing. I'm not altogether certain that the slowdown here won't be more permanent, perhaps by way of transition to some other format. I've often thought that sharing a magazine-like format with some mix of like- and contrarily-minded colleagues might be interesting, but that starts to smack more of conventional column journalism than of the free-form made possible by the blog medium and composition, mostly a solitary activity, tends to attract folk like me who did not necessarily get good marks for "plays well with others" in elementary school. Your ideas about this would be welcome. In any case, how do you perceive this trend — as an Adagio between fast movements (the lull before the next storm) or a general ritardando (the great fade-out)?
I've always thought of Copland, Britten, and Shostakovich as an interesting triad. Each was immensely gifted and intelligent; caught in an uneasy relationship to the prevailing Modernism-Reactionism duality of the early 20th century; apparently self-assigned to a position of National Spokesman for his art. Each composed masterpieces, particularly early masterpieces, then went on to an uneven output often troubled by indecision as to whether to be Popular or Principled (with respect to personal musical style).
It is, indeed, interesting how these three became "national spokesmen", as none of three came equipped with the biography or personality which could be described as a cookie cutter for such a role and the part of the local political and musical institutions in assigning these identities was perhaps more critical than their own contributions. While each lived through real political difficulties, on balance each showed a talent for adaption to their local systems.
Besides being the unavoidable composers during their lifetimes (as a kid, these were the three reliable exceptions to the rule of not-programming contemporary music on local radio and concerts), the members of this triad have received substantial attention of late from music historians with both scholarly (Taruskin) and more popular (Ross) projects. I'll have to admit to having large blind spots (deaf spots? why are we so persistently forced to use visual metaphors when talking about sound?) for the music of all three and this, collaterally, has made reading these histories a real chore. In Copland's case, for example, the music which lasts for me are the most "difficult" early and late pieces, The Organ Symphony or even the much-maligned Inscape, for example, with Appalachian Spring being the elegant exception that proves the rule for his "mainstream" pieces. With Britten, whose music I have really heard far too much of, the Church Parables remains impressive, and with Shostakovich, I have absolutely no patience left and now publicly pledge not to let myself get hauled once again to a new production of The Nose or Lady Macbeth of Mtsensk under the promise that "this time, you'll really like it". No I won't.
This is music which fails to renew the musical imagination. But then again, maybe, the official, mainstream status of these men and the stuff they made simply precludes any such ambition. It would have been best if we could've grouped the three into a Poe/Silliman category of a Musical School of Quietude, and let it all fade away. But it is in the nature of such boat-not-rockers that they continue to dominate concert programs and have a decisive influence on the young quietist and careerist composers of our time. And, unfortunately, in music, as opposed to poetry, our quietists are not restricted to the piano end of the dynamic range. There is one, small and slightly evil joy I can take, though: these are the three 20th century composers whose names are most likely to get mispelled on undergraduate music appreciation tests. Take your small pleasures wherever you can find them, I say.
That a cloud of ashes from an Icelandic volcano can cause air traffic in most of Europe to shut down is a nice reminder that redundancy can be useful and valuable when the unexpected happens. Where rail lines and ferries can take up the slack, most travelers are inconvenienced but not stuck, but wherever airplanes have a monopoly, tough luck. The present bootleneck is costly to the air carriers and big trouble not only for passengers but for the increasing share of post and freight that is flown. The time advantage of jet travel is real, but shouldn't there be more travel alternatives available? Fast and affordable passenger ships, for sure, and isn't this a good argument for a more thorough revival of dirigible airships as a more gentle mode of air travel?
Here's the reminder: a bit of redundancy in musical performance practice is also useful. Conducting cues, for example, can often avert difficulties or rescue a performance when caution was insufficient. Doublings and cued notes in parts are useful. Players are wise to bring extra reeds, strings, bows, mallets, etc., the spare tires of concert life. When electronics are in play, redundant power sources, mikes, cables, amps, speakers, recordings, computers and software can save a concert. And in the composition itself, repetitions and doublings can serve multiple purposes, both aesthetic and a practical.
Ron Silliman points to this post with the statement Why memorizing poetry is inherently right wing. The question of memorization is, of course, sometimes an important one for musical performance as well and sometimes we musicians also make a similar distinction between rote and "by heart" memorization. Generally speaking, the pro-memorization camp is our conservative party and it is typical for competitions and recitals on the establishment circuit to insist that musicians play without sheet music visible on stage. (This insistence comes with that same weird macho-but-prissy swagger that only conservative pseudo-intellectuals carry.) While there are cases in which getting rid of the paper is unavoidable — in opera, for example, or with some percussion instruments for which visual contact with a music stand cannot be maintained —, I side decidedly with the opposition party here. This is because when playing notated music one can too frequently discover that notation is a gift that keeps giving; reading music is seldom a task which is completed with rehearsal and a live performance is often a valuable additional opportunity for discovery. This possibility was brought home to me first by playing baroque music, realizing continuo and ornamentation in real time.
Addendum, 14/4/2010: I think that I wasn't clear enough here. My problem is not with memorization but with the insistence than musicians play without notation and the deprecation of musicians who chose to use notation. Although my own memory is probably average, when I rehearse something well, it is almost inevitably committed to memory, but I still want to have the notation available. And not for insurance but out of optimism, that there is still more music to be found in the act of reading.
A performance last fall of Le marteau sans maître left me once again astonished about an unresolved tension in the piece, a tension between structural concerns — the interlocking cycles of two, three and four movements and the systematic orchestration and scoring patterns in particular — that were made explicit, expressed at the immediate surface of the music, and the note-to-note continuity, the precise sense of which was not aurally recoverable beyond the most general and impressionistic considerations — contour, registration, and to some extent pitch complementarity. Although Le marteau is a piece which I have listened to, intently, for more than 30 years, and has some qualities — not least its notorious coolness — which I actually find attractive, the absence of a compelling connection between local continuity and global order makes for an increasingly frustrating listening experience. Moroever, there are some scoring pattern changes and choices of instrumental register in the piece that are almost shocking in their clumsiness.
The problem here might be described as being too schematic. A schematic diagram uses topological abstraction to present the relationship between the functioning parts of a process, system, or organism in a clear fashion by ignoring actual size, scale and precise orientation and by eliding detail. Of course, such simplification is often extremely useful, but when the process, system, or organism is something as precious and sensuous as a piece of treasured music, then the loss of precision may very well come at the expense of those details, dimensions or parameters of the music which we value most.
A bit of constructive technique that I have find useful of late involves composing with pre-determined scoring patterns. I have sometimes combined these with rhythmic structures akin to Mr Cage's famous square root method and have found Gray codes ( and, specifically, Beckett-Gray codes) to be particularly useful scoring patterns. Now, this probably sounds like a lot of abstraction — and even, as I later discovered, with the Gray codes, some fairly sophisticated maths — but, my goal has never been to let this become so abstract as to not relate audibly to the immediate musical concerns of a musical continuity.
* Morton Feldman is here unavoidable: "It appears to me that the subject of music, from Machaut to Boulez, has always been its construction. Melodies of 12-tone rows just don't happen. They must be constructed....To demonstrate any formal idea in music, whether structure or stricture, is a matter of construction, in which the methodology is the controlling metaphor of the composition...Only by 'unfixing' the elements traditionally used to construct a piece of music could the sounds exist in themselves--not as symbols, or memories which were memories of other music to begin with."
For a time, say say '78 through '84, my music used a lot of literal repetitions, notated often between happy pairs of ||: :||s. Repetition in music was useful for creating contexts that well self-sustaining and self-similar. Canons were a particularly useful extension of repetitive techniques, as the music was simultaneously asserting something about where one was, where one had been, and where one might be going. Canons became increasingly important to me in the late 1980's, and now I can't imagine working without them, but they are increasingly loose, rather than strict, in character. Letting a voice which had been trailing gradually move to a leading position in a contrapuntal environment (John Cage, borrowing an idea about Gagaku from Henry Cowell, called this a "Japanese Canon"; Morton Feldman would brilliantly use this same idea, borrowed perhaps from simultaneous Torah recitation in the Orthodox Schul, Jo Kondo's idea of a "shape" and its "shadow" was definitely in the same ballpark) was literally like getting ahead of oneself.
This is the Palatka Band from Transylvanian village of Palatca in Romania playing at the 2010 Táncháztalálkozó in Budapest. Not the best sound quality, but a good illustration of the multi-ethnic region's string band style and technique. The bass, three-stringed, uses a very short bow in heavy strokes and battuto. The viola, or kontra, also three-stringed, tuned g-d'-a, plays a chordal accompaniment. The prima violinist, Lőrincz Codoba uses, in the slow sections, the typical right-hand style, in which most expression occurs in a space in which vibrato and portamento are not always distinct. This is also a good illustration of a traditional form of music transmission in the relationship between older and younger players.
A second standard bit of advice to composers is that it is better to set a good (or, in some cases, even a mediocre) text than an extraordinary text. Setting aside any prima-this, poi-that personal rivalries between poet/librettist and composer, the thinking here seems to be that setting a text to music requires — if the music is to be interesting on its own terms — a certain amount of pliancy, perhaps too much abuse for texts valued highly, and we are even prepared to accept a near-complete acoustical erasure of the sense and continuity of a text to the needs of dramatic and musical continuity. There is, however, so much usable room for a composer in the composition space available for setting a text between having every word clear and comprehensible and the fantastic and melismatic opposite of that, that I have to assume that this second bit of advice is not necessarily true. It may make some music-political tactical sense to avoid setting the masterworks in favor of the merely good — for example, by playing down expectations and attachments an audience brings to familar and treasured words — but I don't think that there are any unexceptionable musical reasons for this.
Qualms: Who wants these sounds, this music? Is this music worth taking your time? Is it worth breaking your silence? What does this piece of music do that no other piece of music (or alternative activity) can do? Quarrel: How does this music differ from other music? Is that difference or disagreement potentially productive of more new music? Quantity: Is there enough of this music? Is there too much of this music? Are the internal proportions of this music right (or wrong, in an interesting way)? Quality: Is this music well-considered, well-felt, and well-made? Question: Have you heard something in this music that you have not heard in other music? Have you learned something from this music? Do you value this music, those sounds, these times? Quiet! Does the music articulate phenomena, sounds, that are otherwise inaudible, unknown? In composing, in throwing these sounds out, have I made it possible for you to hear something new? Is this music an opportunity for changing our habits of listening? Can you, did you, hear that too?


In order to drive safely in even the worst weather you need to have good windshield wipers.
Unfortunately wiper blades are like a leaking roof, you only think about them when it rains. I recommend replacing wiper blades every year, preferably just before winter hits.
If you live in the land of ice and snow as I do, you may want to consider winter blades. Winter blades have all the pivot points under a rubber cover that prevents water getting in and freezing the blade mechanism.
Follow these instructions carefully. Read and be sure you understand them before you begin. Gather together all of your tools and supplies before you begin. Allow plenty of time to do the job so you don't have to hurry. Remember that these are general instructions. For more detailed instructions pertaining to your specific vehicle, consult an appropriate repair manual.
Safety is important whenever you're working around machinery. Beware of hot objects, sharp instruments and hazardous materials. Don't substitute tools unless you're sure you won't compromise either your safety or the performance of your vehicle. Never work on a vehicle that is only supported by a jack. Use jack stands to support the vehicle while you work. Work on a solid, level surface. Never jack a car up on dirt or grass.
With that said, let's get to work!
Some wiper arms will only come up two, maybe three inches off the windshield. If you raise the wiper arm and it only comes up a small amount, don't force it. There is a locking tab at the base of the wiper that will lock it in a raised position.


With the recently concluded 27th African Union Assembly themed around human rights, Richard Munang and Robert Mgendi argue that universal access to education is a crucial step towards empowering citizens on the continent.
At the Paris climate conference (COP21) in December 2015, 195 countries adopted the first-ever universal, legally binding global climate deal. Richard Munang and Robert Mgendi write that the terms of the deal present Africa with an opportunity for long-term sustainable economic growth.
With climate change posing a serious threat to the livelihoods of millions, the future of the African continent depends on tackling challenges in governance, say Richard Munang and Robert Mgendi.
The effects of climate change are far-reaching, cutting across key sectors. It is essential for decision makers to maintain a broad outlook, Richard Munang and Robert Mgendi argue.
The world is more interconnected than ever before. With the right partnerships in place, Richard Munang and Robert Mgendi argue, Africa can go a long way toward achieving the Sustainable Development Goals.
If Africa succeeded in building climate resilience into its agricultural sector, poverty could be dealt a major blow, argues Richard Munang and Robert Mgendi.
An old African proverb proclaims, "It is the young trees that make up the forest." What this means in the present context is that Africa's youth will determine its future. Indeed, Africa will not rise unless young people provide leadership and leverage their tech-savviness to mobilise for the realisation of better policies – policies that promote inclusive development.
September 2015 saw Africa's Heads of States and Governments join their counterparts from across the globe to unanimously adopt the Sustainable Development Goals (SDGs) at the 70th UN General Assembly. This signaled a common global intent to transition into economic, social and environmental progress in the next 15 years: a united, mutually collective front against hunger, malnutrition, poverty, unemployment, disease, climate change, low agricultural productivity, degraded ecosystems and social inequity, among the notable challenges facing Africa.


When Hugh Jackman's Logan takes a shotgun blast to the chest in the first 30 seconds of the new Wolverine movie (a result of a skirmish over some leased hub caps, no less) we know that this is a mutant with a death wish.
It's 2029 and mutantkind has suffered a big setback (also, tigers are extinct… bummer). Logan is hiding out south of the US border with mutant tracker/"glorified truffle pig" Caliban (Stephen Merchant) and a distressingly ill Professor X (Patrick Stewart). Charles' uber-powerful brain is at war with itself. Besieged by a dementia-like illness, he suffers from seizures that go seismic if he doesn't have a steady supply of sedatives.
As if this post-mutant era garbage sandwich of an existence wasn't bad enough already, X claims he's been getting telepathic IM's from a new mutant. Thing is, there haven't been any new mutants for a quarter century—if there were, he or she could draw some really negative attention to Logan's dusty hideout.
Clearly though, there is a new mutant and it's obviously heading for them—which isn't a spoiler considering Logan wouldn't be much of a movie if it was just three sad men hiding out in the desert waiting to die of old age. Exactly who is this new superpowered kid? We won't ruin that surprise for you, but we will say this: don't bug her while she's eating her cornflakes.
Played by the awesome Dafne Keen, X-Mini Laura is on the run from some bad dudes (led by Richard E. Grant's Dr. Zander Rice) who want to put her back where she came from—a Mexican research facility doing work that's long been outlawed in the US. As far as family and friends go, she's got no one and it's up to Charles and a reluctant Logan to keep her safe.
The trailers for Logan make the movie look very dark. They're accurate. So are the brief glimpses of Wolverine-style action that the clips reveal. Logan features more adamantium-pierced skulls and claw-severed limbs than anyone needs (but everyone totally wants). Wolverine is angry (like, more than usual). You can see it in the way he looks for excuses to shred any adversary and also when he uses his mutant powers to furiously pop bullets from his chest like a regular human would spit out an olive pit. He hates mutants, most of all himself, so he drinks to the point of self-poisoning while carrying around a life-ending adamantium bullet like a talisman. There are poignant moments, yes, but not a lot of light. That doesn't mean this isn't a great movie—it's easily the best one the franchise has put out since X2.


text:
Office of the Executive Vice President | HARVARD.EDU
Harvard President's
Administrative Innovation Fund
Grant Goals
Innovation Resources
The President's Administrative Innovation Fund (PAIF) was created to catalyze administrative innovation and collaboration across Harvard by investing in staff-generated, creative solutions that support our faculty, students and staff colleagues. Since 2016, the PAIF has invested $500,000 in 41 projects involving over 200 administrative innovators across the University.
Click here to learn more about this year's funded projects and to see their video pitches.
This year's theme is The Future of Work.
Apply by April 12
Each year, the PAIF supports ideas that exemplify administrative innovation:
Administrative Excellence
PAIF Info Session
Application Submission
Many of our FY22 projects align with this year's theme of
Past themes included Diversity, Equity, Inclusion, and Belonging and Cost Savings.
Who is eligible to Apply
All benefits-eligible Harvard administrative/professional, support or service and trades staff member may apply. Faculty, post-doctoral fellows, temporary employees, students, and co-ops are not eligible.
If you have a question about eligibility, please inquire via the link below
administrative_innovation@harvard.edu
Please check back in February 2022 for updates on the next PAIF application cycle
1st Round Judging (Finalists Selected)
Finalists Submit Project and Budget Plan
Finalists Prepare for a Pitch Presentation
Final Round Judging
Selection of Awardees
Innovation Stages
The PAIF is designed to fund three stages of innovations, as described below: Seed, Sustain, and Scale. We welcome administraive innovations that feature cross-unit, cross-school, and cross-functional collaboration and we encourage projects that have the potential for positive impact throughout the University.
Our project is a new idea that we are seeking to launch with support from the President's Administrative Innovation Fund
Our innovation has been implemented and we are seeking support from the President's Administrative Innovation Fund to continue development and use
Our innovation has had initial success and we look forward to expanding it to other schools/units at the University
Most projects request $5,000 to $15,000 in funding. One or two exceptional projects may receive up to $25,000 in funding. Projects must be completed within one year.
In this application we're only asking you for an estimate of how much funding you're requesting.
Finalists will be asked to develop a more detailed budget. Note funds may be used for non-exempt overtime (as applicable), software/technology, temporary help (staff or students), back-filling for staff working on the project, and other project-related costs.
Funds may not be used for payment to staff salaries nor to fund an individual's proprietary product (any products resulting from PAIF funded projects are Harvard University intellectual property).
Projects will be judged according to the following criteria:
The proposal represents an innovative approach to an administrative challenge and is expected to have measurable impact once implemented.
The plan outlines a scope of work that can be accomplished within a year.
The proposed budget is informed, practical, and reasonable in alignment with the scope of work and the goals of the project.
Ideas with cross-school/unit and cross-functional collaborations, and ideas that enable us to realize the University's full potential as a diverse and inclusive community will be especially valued.
By submitting your innovation, you are acknowledging a few things:
You and your co-applicants are benefits-eligible Harvard administrative/professional, support or service and trades staff members. may apply. (Faculty, post-doctoral fellows, temporary employees, students, and co-ops are not eligible.)
You have spoken to your manager(s) about this idea and they are supportive of you spending time to lead its implementation.
Your idea will be shared among judges and other administrators across the University (and will be attributed to you.)
9d0c58f4c87fa206ab82ac0afa97a1b7
Sign up to receive emails with more information and deadline reminders
Reach out with questions about the application process.
efaa0e852d2e89502c13f28ed27ab0c5
629746742cd62bd26a3fe4cbb8fbde89
d3c17423813e8c0007c1dc3871af34d1
4e6fe35c6f93cd65622c9fe779a8f288

redpajama_set_name: RedPajamaCommonCrawl


text:
Take action against gun violence
Christopher White
Commentary, Guest Commentary
I was in sixth grade when two gunmen entered Columbine High School and mowed down 12 of their fellow students and a teacher before taking their own lives. By the time another madman decided to shoot up his own campus of Virginia Tech, killing 32 students and faculty members, I was halfway through college.
What had become immediately clear was the lesson that classrooms had the potential to become battlefields — a reality that the generation following mine knows in even more painful and immediate ways.
Since then, that battlefield has extended to concert venues, airports, movie theaters and churches. By one count, there have been 739 victims of mass shootings in the United States since 1987, the year I was born.
This year alone, over 13,000 people have died as a result of gun violence in this country. And according to the Centers for Disease Control and Prevention, an average of 93 Americans is killed by guns each day based on data from the past five years.
It's for this reason that the U.S. bishops have recently called for a national debate on this country's gun policies. Following the latest shooting in Sutherland Springs, Texas, where a 26-year-old gunman killed 26 individuals in a Texas church, Cardinal Daniel N. DiNardo of Galveston-Houston, the president of the U.S. Conference of Catholic Bishops, urged the nation to reckon with the "fundamental problem in our society," that leads to such violence.
"A culture of life cannot tolerate, and must prevent, senseless gun violence in all its forms," he added.
As both the nation and the U.S. church attempts to address this crisis, Pope Francis is also encouraging that conversation — and also action.
In one of the questions addressed to America in the preparatory document for the upcoming synod on young people, the Holy Father asks, "How does your community care for young people who experience extreme violence … and accompany them in various ways in their life?"
Violence takes a range of forms, through gangs, drug addiction, sexual abuse and otherwise, but in the backdrop of recent national events, gun violence should rank high in that listing, too.
"Being close to young people who are living amid great poverty and hardship, violence, war, disease, disability and suffering is a special gift of the Spirit that can truly manifest a proper manner of acting by a church that is going out," as Pope Francis says in that same document.
In preparation for the next synod, the U.S. church would do well to ponder what that "going out" might look like in the case of gun violence.
It should entail special initiatives like Cardinal Blase J. Cupich's anti-gun violence program in Chicago, which involves parishes getting involved in the fight to get guns off the street and greater attention to prison ministry. Or talking openly about the wounds and the healing experienced from tragedy like Jennifer Hubbard, who contributes reflections to "Magnificat" about losing her daughter at Sandy Hook Elementary School.
The church should also consider the ways in which it can harness the energy of the thousands of young people who are motivated by recent tragedies who have grown up with such violence but refuse to accept this as simply "normal." Perhaps they could find practical ways to work together with legislators to reinstate the assault weapons ban, which the bishops have long supported.
There's a lot of goodwill and much momentum coming from young people working to build a culture of life, as is evidenced by the remarkable crowds that gather in Washington every January for the March for Life.
This moral energy isn't finite. Perhaps the lesson in all of this, looking both ahead to this synod, but also, beyond, is that it's time we maximize its potential.
Join the conversation. Submit a proposal for a guest column to inlightoffaith@catholicnews.com.
Copyright ©2017 Catholic News Service/U.S. Conference of Catholic Bishops.
Christopher White is co-writer and co-curator of the Catholic News Service column "In Light of Faith." White is national correspondent for Crux.


text:
Ocean mission's emergency ascent caused by motor burning out
DAVID KEYTON and JERRY HARMER
Crew inspect a submersible after a British scientist and her American pilot had to make an emergency ascent from 250 meters beneath the surface of the Indian ocean off the Seychelles after smoke filled their two-person submersible, Tuesday March 19, 2019. The pair, from the UK-led Nekton Mission investigating climate change in the region, are both safe onboard the mother ship where an electrical fire aboard the sub is being investigated as the possible cause. (AP Photo/David Keyton)
ALDABRA, Seychelles (AP) — A drama in which a submersible made an emergency ascent from 250 meters (820 feet) below the Indian Ocean was caused by condensation burning out a small motor in the cockpit, the director of the British-led Nekton Mission said on Wednesday.
Oliver Steeds told The Associated Press that the burnout produced an acrid smell of smoke which triggered the pilot's emergency response.
"That's all now been fixed so we're confident now to undertake a dive," Steeds said.
The American pilot, Robert Carmichael, and the passenger, British scientist Molly Rivers, donned breathing apparatus as the vessel neared the surface. Neither was hurt in Tuesday's incident during a dive off the Seychelles.
The two-person sub returned to the water on Wednesday for tests. With Carmichael and Steeds on board, it dived to 80 meters for roughly two hours and returned to the surface without incident.
The submersible is a key part of the Nekton Mission, an unprecedented, years-long scientific exploration of the Indian Ocean to document changes taking place beneath the waves that could affect billions of people in the surrounding region over the coming decades.
The mission's ship is gathering data in the Seychelles to help inform the government's plan to protect almost a third of its vast waters by 2020. Almost nothing is known about the marine life there below 30 meters, or scuba depth.
The Associated Press is the only news agency working with British scientists from the research team. AP video coverage will include exploring the depths of up to 300 meters (985 feet) off the coast of the Seychelles, the search for submerged mountain ranges and previously undiscovered marine life, a behind-the-scenes look at life on board, interviews with researchers and aerial footage of the mission.
The seven-week expedition is expected to run until April 19.


text:
How to Be Happy, According to the Best Saxophonist in America
Marcus Strickland talks jazz, aliens and living for the day
The 43-year-old jazz musician's new album "The Universe's Wildest Dream" is now streaming.
Petra Richterovà
Introducing The Cloud Nine, a series dedicated to unraveling happiness — in all its wonderful, pesky forms. In each edition, we'll ask an interesting person exactly nine questions about their personal pursuit of happiness. How it's intersected with success, love, memory, drugs, art, grief, exercise…you name it.
Marcus Strickland has always found strength in the phrase "I am my ancestors' wildest dream."
But when the 43-year-old, Grammy Award-nominated saxophonist set about recording his latest album, he took the idiom a step further, conceiving an eight-track, Afro-Futuristic ode to the improbability of our Earthly existence. He named it The Universe's Wildest Dream.
As far as entry-points to discussions on climate change typically go, this makes for an uncommonly celebratory time capsule. Strickland spurs awareness by reminding us of the absurdity of our collective gift — instead of petrifying us with the specter of planetary doom.
Complex themes abound, to be sure; from Silicon Valley's obsession with terraforming Mars, to the centuries-long Black struggle to avoid annihilation, to the call of a mourning dove heard through the window of lockdown-era apartment. But Strickland's capacity to find gratitude, glory, and yes, happiness, in a time like this, is a master stroke for a seen-it-all vet who initially got his start in the New York jazz scene back in the late 1990s.
Playing the soprano, tenor and alto saxes, plus his bass clarinet (the first instrument he picked up when recording the album), and collaborating with old friends like drummer Charles Haynes, Strickland will head out on a multi-city tour this year. His album is now available to stream, with other records available online.
We found him a perfect candidate for this special first edition of The Cloud Nine, as a creative used to operating on the cusp of happiness and pain. Is it possible for a musician — a living jazz legend, no less — to be happy in his art? Below, we speak with Strickland about Aretha Franklin, Avatar and how his expectations for happiness have changed as he's gotten older.
1. Where do you derive happiness as a musician: the studio or the stage?
I feel that today's musician, especially today's jazz musician, is actually kind of torn between the studio and the live performance. The reason I specify jazz, is because we're all about the moment. What we're capturing in the studio is the particular moment that you're playing the solo over this song. You can basically do anything you want. It becomes a question of taste. In the studio, I become a chef. I have all these ingredients. What is it exactly that I'm gonna make out of all these choices? When I'm on stage, I get my happiness from the heightened sense of immediacy. It's almost like being a comedian. I think that's the most extreme version of what I am. A comedian has to immediately get gratification in order to feed the very thing that they're doing. If the current joke doesn't get the reaction expected, they immediately have to adjust to fit what energy is in the room. The best of them are gonna be the ones that are mostly in the moment. So I think there's a lot of satisfaction that comes from it. From being so in the moment that you never expect what's gonna happen. That's kind of like a heightened sense of living, I feel. I get different things from both and I'm happy that that both of them exist.
2. What sabotages your happiness?
I guess that would be whenever I'm thinking about anything else but now. That would be the most general way to express that feeling. If I'm thinking about the past or I'm thinking about the future, I'm not concentrating on what I can do now. That's my most general explanation for what would be cloudy for me.
3. What do you mean by this phrase, The Universe's Wildest Dream?
During the lockdown, instead of just hurrying to a gig or rehearsal in an Uber, I had time to actually walk in the park, to talk to people and get to know about facets of life that I haven't really experienced yet. I met a lot of activists, 'cause when people actually have time to think, as we saw, people start to rebel. They're saying, "Hey, this isn't right. Let's check this out." I ran into some activist farmers. I ran into many activists in general. And I'm a very curious person, I ask questions. I realized that I was yet to really focus on anything more macro than music. Like with music, I'm thinking culturally, right? And that's quite macro compared to how most people probably think about music. But I started thinking, how could I contribute towards the awareness of the most immediate thing for this planet? And that being, just lowering the temperature two degrees. That's all we have. If everybody wants to stop what they're doing, stop the oppression, stop the wars, stop the capitalism, all that stuff, just think, "Hey, could we just concentrate on this one thing?" It would be to lower the planet's temperature by two degrees. So I was thinking of, "Okay, how can I, as an artist, express this in the best way?" The title has to express it. There's this phrase: I'm my ancestors' wildest dream. I've heard that that so many times and I like that. I like what that conjures inside of me. But then I started thinking more macro…the universe's wildest dream. And I'm talking about Earth, because Earth is a life-sustaining planet. That is something we haven't seen yet other than us. All of our references, from Avatar to Alien, to all these other movies, they have to do with references to us.
The aliens in Avatar are blue. The creatures in Alien, they have limbs and a head with a big giant brain. You know, just exaggerated forms of what we are. The only reference we have is us. So that's the thing I'm trying to get across to people is that, don't really even think about your own lifespan. Think of the legacy. It's like, we actually sustained life on this planet. That is a miracle. It is an absolute miracle within this vast universe. You can travel 33 million miles if you have the fuel or the lifespan. And you'll probably come across a planet that Kepler found that is in the Goldilocks Zone in another galaxy. And hopefully when you finally find it, after all that, maybe there will be life [laughter.] But other than that, I think we're pretty much the wildest dream that the universe has. So yeah, it all started with a post that I made on Instagram. I remember I was going on a date with this lovely woman and she was asking me, "What are you doing these days?" And I said, I'm trying to think of a way, I'm trying to think of all the things that I'm talking to you about and try to put it into the music. I wanna make a post that is absolutely in the moment. So I did, I made a post and I just played my bass clarinet. I got my pedals. I played over a drone. That exact audio recording became the first track of the record, it's called "Prayer." So that kind of set the tone.
A post shared by Marcus Strickland (@marcusstrickland)
4. Do you think it's important for a musician to be happy in order to create great art?
Definitely not. Because a lot of the heroes that I have were tortured souls. But I feel the default programming for any human is to find happiness…to survive, first of all, but also to enjoy their life. That's definitely the default. And I do think that being happy definitely makes you a much more functional human being. At the same time, it's the adversities that forged these geniuses that I look up to, like Charlie Parker, Miles Davis, John Coltrane, Stevie Wonder, Ray Charles. The list goes on. Aretha Franklin. For all of them, it was the adversities that forged what I conceive as their genius. They didn't have the resources to do what's normal, and as a result, did something completely different, which most people would never even dream about imagining. And I think that's what makes a genius. Like, my favorite architect in Spain, what's his name? Ah, Gaudi, yeah. Antoni Gaudi. He didn't do well in school. He did horribly in school 'cause he wasn't thinking on that level. He probably was on the spectrum. But it's because of his outside thinking that his creations were so much different than what had preceded before.
5. In that vein, are there art forms outside of music that you turn to find inspiration, and specifically to find joy?
Oh man, everything. I just allow the world and its glory to inspire me. There's so much here. It's why I can't really be the purist who sometimes exists within art forms. There's some people who feel that if jazz doesn't have the spang-a-lang-lang, it's not jazz, right? And there's people who feel that if R&B doesn't have a certain aspect, it's not R&B. And my answer to that is everything is a mutt. Everything is mixed with what came before. I'm constantly talking to my students about compositions, because I teach at a jazz school. And one thing that was taught to me a whole lot when I was in school, while learning music, was that you have to learn your standards. Learn your standards. Well, what is the standard? Standards are these show tunes or soundtrack tunes to movies. They were very popular and then they would get covered by jazz musicians. They would take the tunes, maybe re-harmonize them, or solo over them. Because the tune was already popular, it had both this expectation of popularity and also this respect as a great tune. But I said, that was the standard at a certain point. There was a point in time where the emphasis was writing your own tunes. You have people like Joe Henderson and Wayne Shorter and John Coltrane, Thelonious Monk, all these cats were writing their own music and they wrote it with their own harmonic sensibility. So it kind of blows their mind when I start exposing this to them, because all around the country, we're still told, "Hey, learn this tune from 1915. That's gonna get you gigs." I'm here to tell you, that's not what gets you gigs. What gets you gigs is being as open as possible and trying to learn as many different types of music as possible. Being a holistic musician, not somebody who's just specialized.
6. Is there a happy memory from life that you turn to often?
One thing that I like to refer to a lot when I want to recharge my strength is the moment that I realized that I was about to play back-to-back weeks at jazz showcases in Chicago with Roy Haynes, who played with Charlie Parker, Lester Young. I mean, like, he played with everybody. I played with him and then the very next week at the same venue with Jeff Tain Watts ,who saw that I was playing with Roy Haynes. That was kind of like the straw that broke the camel's back. He said, "If you're playing with Roy Haynes, I want you to play with me" [laughter]. And Jeff Tain Watts is probably the most innovative drummer of today in my opinion. Those guys are people I grew up listening to all my life. So the moment that I realized what I was doing, that's something that I refer to whenever life tries to tear me down, or someone tries to tear me down, or even an institution tries to tear me down. I gained strength from that.
7. How would you characterize the relationship between happiness and success?
I feel that if you're picturing what your perfect life is and you're pursuing it, that the pursuit is the happiness, and the fact that you're still pursuing it, that's the success. It's not about it being absolutely as perfect as you imagine in your mind, because that just doesn't exist. But you just see it as that carrot that keeps the rabbit running. Or whatever they use on the wheel for the hamster. Keep the hamster going [chuckle]. But as a result, a lot of productivity happens because you're chasing something that is absolutely not attainable. And it's that chase of it, that's the thing…That's the very thing that's generated both happiness and success for me.
8. How have your expectations for happiness changed as you've gotten older?
Oh, I think the biggest thing for me, maturing, has been the realization that I do not have control over things outside of me. The more I realized that, the more happy I become. Because the more that you do that, the more that you just do what you can do. Like this record…it's what I can do towards the problem. It's a very macro problem that requires a whole lot of people getting their heads out of their asses and actually concentrating on the actual, most immediate problem. But this is what I can do as an individual. I'm doing my best within my resources towards that problem. And that in itself generates a feeling of happiness, of prosperity, of contribution to something bigger than the eye. Like my lifespan is not gonna even really encounter what I'm talking about [laughter]. So I feel that that's the main thing that's kept me kind of anchored, that's given me a compass.
9. Are you are able to find happiness in grief?
Well, during the lockdown, all my faculties were taken away from me. I couldn't perform. I couldn't make money at music the normal way that I did. A lot of things just dropped. The floor just dropped from underneath me and so many others. Some people flourished during the lockdown. But it kind of forced me to look into a different way of coping. What I realized was that my brain is wired to find a problem, like immediately find a problem. And I started realizing that that was the very thing that was keeping me up at night and making me unhealthy. I'm always trying to find this immediate problem. So I started looking into meditation. My questions led me to a guy named Mooji. A friend of mine urged me to check him out, and I did one of this meditation sessions that he had on YouTube. What I felt was this relaxation of my brain. It felt like a massage. Literally, like all the pressure that was there and the pain and all the shame and all that stuff. It just left. Because it's a state of the mind that we don't naturally get to. We're constantly getting fed stuff, we're constantly processing stuff, we're constantly trying to problem-solve. And most people are talking about what to do rather than what not to do. So, yeah, it was absolutely mind-blowing how much of a massage feeling I experienced. It felt like somebody went inside of my skull and just relaxed every single inch of my brain. Yeah, Mooji's bad. That's a bad dude [laughter]. Usually, with things like that, I don't even pay attention. I was like, "Oh, sure, that's somebody… That's some BS. I've seen that before," but this time I actually tried it. I actually humored it and it was because of the situation. That's remarkable. It taught me the power of meditation. I'm very grateful for that.
Is TikTok's "Lucky Girl Syndrome" a Lifehack? Or Utter Nonsense?


I've been flying for 29 years, and I've trained, evaluated, checked, taught, and flown with pilots from every branch of the service. I can say that there are good and bad pilots from every service branch. I've flown with some who were terrible and should never even be near a helicopter, much less fly one and be a PIC.
The Army guys tend to be the cockiest helicopter pilots because they have been told from day 1 that ,they are the greatest, think Nicholas Cage in Firebirds. Many of them just can't back up the BS bravado. I have also flown with some Army pilots who also could back up that reputation and then some. Some of my best friends are Army pilots too, and I love to fly with them. Most of all of the W-4's and W-5's are extremely skillful and knowledgeable. It's the W-2's and W-3's that often don't know what they don't know. I'm always leary when I have to fly and train with those guys.


The New Year often starts with all kinds of resolutions to say "no" to behaviors we don't want to engage in. We say "no" to way too much when it comes to the New Year and try to cut everything out all at once. And the all-or-nothing philosophy doesn't last very long for most people.


text:
//  Copyright Beman Dawes 2014

//  Distributed under the Boost Software License, Version 1.0.
//  See http://www.boost.org/LICENSE_1_0.txt

//  See library home page at http://www.boost.org/libs/system

#include <boost/system/config.hpp>
#include <iostream>

using std::cout;
using std::endl;

int main()
{
#ifdef BOOST_WINDOWS_API
  std::cout << "BOOST_WINDOWS_API is defined" << std::endl;
#else
  std::cout << "BOOST_WINDOWS_API is not defined" << std::endl;
#endif
#ifdef _MSC_VER
  std::cout << "_MSC_VER is defined as " <<  _MSC_VER << std::endl;
#else
  std::cout << "_MSC_VER is not defined" << std::endl;
#endif
#ifdef  __CYGWIN__
  std::cout << "__CYGWIN__ is defined" << std::endl;
#else
  std::cout << "__CYGWIN__ is not defined" << std::endl;
#endif
#ifdef __MINGW32__
  std::cout << "__MINGW32__ is defined" << std::endl;
#else
  std::cout << "__MINGW32__ is not defined" << std::endl;
#endif
#ifdef BOOST_POSIX_API
  std::cout << "BOOST_POSIX_API is defined" << std::endl;
#else
  std::cout << "BOOST_POSIX_API is not defined" << std::endl;
#endif
#ifdef BOOST_PLAT_WINDOWS_DESKTOP
  std::cout << "BOOST_PLAT_WINDOWS_DESKTOP is defined as "
    << BOOST_PLAT_WINDOWS_DESKTOP << std::endl;
#else
  std::cout << "BOOST_PLAT_WINDOWS_DESKTOP is not defined" << std::endl;
#endif
#ifdef BOOST_NO_ANSI_APIS
  std::cout << "BOOST_NO_ANSI_APIS is defined" << std::endl;
#else
  std::cout << "BOOST_NO_ANSI_APIS is not defined" << std::endl;
#endif
#ifdef BOOST_NO_CXX11_NOEXCEPT
  std::cout << "BOOST_NO_CXX11_NOEXCEPT is defined" << std::endl;
#else
  std::cout << "BOOST_NO_CXX11_NOEXCEPT is not defined" << std::endl;
#endif
#ifdef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
  std::cout << "BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS is defined" << std::endl;
#else
  std::cout << "BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS is not defined" << std::endl;
#endif
  return 0;
}

redpajama_set_name: RedPajamaGithub


text:
/*****************************************************************************************
 * File: INDh
 * Desc: Math methods
 *****************************************************************************************/

/*********************************** The zlib License ************************************
 *
 * Copyright (c) 2013 Indielib-crossplatform Development Team
 *
 * This software is provided 'as-is', without any express or implied
 * warranty. In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 *
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 *
 * 3. This notice may not be removed or altered from any source
 * distribution.
 *
 *****************************************************************************************/

#ifndef _IND_MATH_
#define _IND_MATH_

#include <stdlib.h>
#include <math.h>

#include "IndiePlatforms.h"
#include "Defines.h"
#include "IND_Vector2.h"
#include "IND_Vector3.h"

// --------------------------------------------------------------------------------
//									   IND_Math
// --------------------------------------------------------------------------------

/**
 @defgroup IND_Math IND_Math
 @ingroup Math
 Encapsulates common math operations used through library
 */

/**@{*/

/**
Max macro
*/
#define MAX(a, b)  (((a) > (b)) ? (a) : (b))

/**
Min macro
*/
#define MIN(a, b)  (((a) < (b)) ? (a) : (b))

/**
You know what this is
*/
#define PI 3.14159265358979323846f

/**
 @brief Encapsulates common math operations used through the library

 This class is comprised by a set of static methods, and a set of object methds which need
 and IND_Math instance created.

 @b Note:
 Math ttransform operations assume:
 - right-handed coordinate system
 - matrix representation by column order (changed in matrix definition)
 - vectors as columns, and post-multiplying

 Great site with sense on this math stuff: http://www.mindcontrol.org/~hplus/graphics/matrix-layout.html
 */
class LIB_EXP IND_Math {
public:

	// ----- Init/End -----

	IND_Math(): _ok(false)  { }
	~IND_Math()              {
		end();
	}

	bool init();
	void end();
	bool isOK();

	// ----- Public methods -----

	void randSeed(long pNum);

    /**
     @name Miscellaneus utilities
     */
	/**@{*/
    bool isPowerOfTwo(long pN);
	/**
     Generates a random number, given two boundary values
     @param pIni Lowest possible value to generate
     @param pEnd Higher possible value to generate
	 @return A random number between the two boundaries
	*/
	inline long randnum(long pIni, long pEnd){
        if (pIni > pEnd) {
            long pTemp = pEnd;
            pEnd = pIni;
            pIni = pTemp;
        }

        return rand() % (pEnd - pIni + 1) + pIni;
	}

	/**
     Performs conversion from radians to degree units
     @param rads A value to convert to degrees
     @param invert Will multiply the result degrees values by -1 if this is true
     @return Value converted to degrees
     */
	template <typename type>
	inline type radiansToAngle(type rads, bool invert = false)const {
		type angle; //Angle to return

		//Inversion of angle results
		if (invert) {
			angle = (-1) * rads * static_cast<type>(180.0f / PI);
		} else {
			angle = rads * static_cast<type>(180.0f / PI);
		}
		return angle;
	}

	/**
     Performs conversion from degrees to radian units
     @param angle A value to convert to radian
     @param invert Will multiply the result radian values by -1 if this is true
     @return Value converted to radian
     */
	template <typename type>
	inline type angleToRadians(type angle, bool invert = false)const {
		type radians; //Radians to return

		//Inversion of radians result
		if (invert) {
			radians = (-1) * angle * static_cast<type>(PI / 180.0f);
		} else {
			radians = angle * static_cast<type>(PI / 180.0f);
		}

		return radians;
	}

	/**
	 * Cross-Platform version of itoa. support only 10 radix for easy use and better performance
	 * taken from http://code.google.com/p/my-itoa/  (LGPL)
	 *
	 * @param val             The int that needs to be converted
	 * @param buf             The char buffer that is going to held the result
	 * @return                The length of the result String.
	 */
	static inline int itoa(int val, char* buf) {
		const unsigned int radix = 10;

		char* p;
		unsigned int a;        //every digit
		int len;
		char* b;               //start of the digit char
		char temp;
		unsigned int u;

		p = buf;

		if (val < 0) {
		    *p++ = '-';
		    val = 0 - val;
		}

		u = (unsigned int)val;
		b = p;

		do {
		    a = u % radix;
		    u /= radix;
		    *p++ = (char)a + '0';
		} while (u > 0);

		len = (int)(p - buf);
		*p-- = 0;

		//swap
		do {
		    temp = *p;
		    *p = *b;
		    *b = temp;
		    --p;
		    ++b;
		} while (b < p);

		return len;
	}

	/**
	@brief Calculates a minimum and maximum value of 4 values.

	Given 4 values, it calculates and returns the maximum and minimum values

	@param p1 Value to compare
	@param p2 Value to compare
	@param p3 Value to compare
	@param p4 Value to compare
	@param [in,out] pMax Max value result
	@param [in,out] pMin Min value result
	*/
	inline void minAndMax4(int p1, int p2, int p3, int p4, int *pMax,int *pMin) {
		*pMax = MAX(p1, p2);
		*pMax = MAX(*pMax, p3);
		*pMax = MAX(*pMax, p4);
		*pMin = MIN(p1, p2);
		*pMin = MIN(*pMin, p3);
		*pMin = MIN(*pMin, p4);
	}
    /**@}*/

	/**
     @name Culling utilities
     */
	/**@{*/
    /**
	@brief Creates a bounding rectangle surrounding a block.

	p1* -- -- *p2
	  |       |
	  |		  |
	  |		  |
	p3* -- -- *p4

	All points can be arbitrary, as the bounding rectangle gets max/min values to form a rectangle
	@param mP1 A point
	@param mP2 A point
	@param mP3 A point
	@param mP4 A point
	*/
	inline void calculateBoundingRectangle(IND_Vector3 *mP1, IND_Vector3 *mP2, IND_Vector3 *mP3, IND_Vector3 *mP4) {
		int mMinX, mMaxX, mMinY, mMaxY;

		minAndMax4((int) mP1->_x, (int) mP2->_x, (int) mP3->_x, (int) mP4->_x, &mMaxX, &mMinX);
		minAndMax4((int) mP1->_y, (int) mP2->_y, (int) mP3->_y, (int) mP4->_y, &mMaxY, &mMinY);

		mP1->_x = (float) mMinX;
		mP1->_y = (float) mMinY;
		mP2->_x = (float) mMaxX;
		mP2->_y = (float) mMaxY;
	}

	/** @brief Determines if a box determined by 2 points, is inside the supplied frustrum

		Taking an AABB min and max in world space, work out its interaction with the view frustum
		0 is outside
		1 is partially in
		2 is completely within
		Note: the viewing frustum must be calculated first
		//Here we are testing boxes against the frustrum, using the technique called "Geometric Approach - Testing Boxes II" here:
		http://zach.in.tu-clausthal.de/teaching/cg_literatur/lighthouse3d_view_frustum_culling/index.html

		@param pAABBMin First vertex of the box
		@param pAABBMax Second vertex of the box
		@param pFrustrum Frustrum structure as per camera position, specified by 6 planes
	*/
	unsigned int cullFrustumBox(const IND_Vector3 &pAABBMin, const IND_Vector3 &pAABBMax, FRUSTRUMPLANES& pFrustrum) {
		bool mIntersect = 0;
		unsigned int mResult = 0;
		IND_Vector3 mMinExtreme, mMaxExtreme;

		for (unsigned int i = 0; i < 6; i++) {
			if (pFrustrum._planes[i]._normal._x >= 0.0f) {
				mMinExtreme._x = pAABBMin._x;
				mMaxExtreme._x = pAABBMax._x;
			} else {
				mMinExtreme._x = pAABBMax._x;
				mMaxExtreme._x = pAABBMin._x;
			}

			if (pFrustrum._planes[i]._normal._y >= 0.0f) {
				mMinExtreme._y = pAABBMin._y;
				mMaxExtreme._y = pAABBMax._y;
			} else {
				mMinExtreme._y = pAABBMax._y;
				mMaxExtreme._y = pAABBMin._y;
			}

			if (pFrustrum._planes[i]._normal._z >= 0.0f) {
				mMinExtreme._z = pAABBMin._z;
				mMaxExtreme._z = pAABBMax._z;
			} else {
				mMinExtreme._z = pAABBMax._z;
				mMaxExtreme._z = pAABBMin._z;
			}

			if (pFrustrum._planes[i].distanceToPoint(mMaxExtreme) < 0.0f) {
				mResult = 0;
				return mResult;
			}

			if (pFrustrum._planes[i].distanceToPoint(mMinExtreme) < 0.0f) {
				mIntersect = 1;
			}
		}

		if (mIntersect)
			mResult = 1;
		else
			mResult = 2;

		return mResult;
	}
	/**@}*/

    /**
     @name Collision calculation
     */
	/**@{*/

	/**
     Check collision between two circles in different coordinate systems.

     Transforms the circle coordinates using supplied transform matrices, and computes collision

     @param pB1 Collision data for first circle-type collison
     @param pMat1 Matrix used to transform from coordinates where circle is, to world coordinates
     @param pScale1 Scale to apply to circle radius
     @param pB2 Collision data for second circle-type collison
     @param pMat2 Matrix used to transform from coordinates where circle is, to world coordinates
     @param pScale2 Scale to apply to circle radius

     @return true if collision, false otherwise
	*/
	bool isCircleToCircleCollision(BOUNDING_COLLISION *pB1,
                                   IND_Matrix pMat1,
                                   float pScale1,
                                   BOUNDING_COLLISION *pB2,
                                   IND_Matrix pMat2,
                                   float pScale2) {
		// Untransformed points

		// Circle 1
		IND_Vector2 mCenter1((float) pB1->_posX, (float) pB1->_posY);
		int mRadius1 = (int)(pB1->_radius * pScale1);

		// Circle 1
		IND_Vector2 mCenter2((float) pB2->_posX, (float) pB2->_posY);
		int mRadius2 = (int)(pB2->_radius * pScale2);

		// Transform the points to it's position in world coordinates by using supplied transform
		transformVector2DbyMatrix4D(mCenter1,pMat1);
		transformVector2DbyMatrix4D(mCenter2,pMat2);

		if (isCircleToCircleCollision(mCenter1, mRadius1, mCenter2, mRadius2))
			return 1;

		return 0;
	}

	/**
 	 Check collision between two triangles in different coordinate systems.

     Transforms the triangle coordinates using supplied transform matrices, and computes collision

     @param pB1 Collision data for first triangle-type collision
     @param pMat1 Matrix used to transform from coordinates where triangle is, to world coordinates
     @param pB2 Collision data for second triangle-type collision
     @param pMat2 Matrix used to transform from coordinates where triangle is, to world coordinates

     @return true if collision, false otherwise
	*/
	bool isTriangleToTriangleCollision(BOUNDING_COLLISION *pB1,
                                       IND_Matrix pMat1,
                                       BOUNDING_COLLISION *pB2,
                                       IND_Matrix pMat2) {
		// Untransformed points

		// Triangle 1
		IND_Vector2 mA1((float) pB1->_ax, (float) pB1->_ay);
		IND_Vector2 mB1((float) pB1->_bx, (float) pB1->_by);
		IND_Vector2 mC1((float) pB1->_cx, (float) pB1->_cy);

		// Triangle 2
		IND_Vector2 mA2((float) pB2->_ax, (float) pB2->_ay);
		IND_Vector2 mB2((float) pB2->_bx, (float) pB2->_by);
		IND_Vector2 mC2((float) pB2->_cx, (float) pB2->_cy);

		// Transform the points to it's position in world coordinates by using supplied transform
		transformVector2DbyMatrix4D(mA1,pMat1);
		transformVector2DbyMatrix4D(mB1,pMat1);
		transformVector2DbyMatrix4D(mC1,pMat1);

		transformVector2DbyMatrix4D(mA2,pMat2);
		transformVector2DbyMatrix4D(mB2,pMat2);
		transformVector2DbyMatrix4D(mC2,pMat2);

		if (isTriangleToTriangleCollision(mA1, mB1, mC1, mA2, mB2, mC2))
			return 1;

		return 0;
	}

    /**
 	 Check collision between a circle an a triangle in different coordinate systems.

     Transforms the triangle and circle coordinates using supplied transform matrices, and computes collision

     @param pB1 Collision data for circle-type collison
     @param pMat1 Matrix used to transform from coordinates where circle is, to world coordinates
     @param pScale Scale to apply to circle radius
     @param pB2 Collision data for triangle-type collision
     @param pMat2 Matrix used to transform from coordinates where triangle is, to world coordinates

     @return true if collision, false otherwise
     */
	bool isCircleToTriangleCollision(BOUNDING_COLLISION *pB1,
                                     IND_Matrix pMat1,
                                     float pScale,
                                     BOUNDING_COLLISION *pB2,
                                     IND_Matrix pMat2) {

		// ----- Circle -----

		// Circle 1
		IND_Vector2 mCenter((float) pB1->_posX, (float) pB1->_posY);
		int _radius = (int)(pB1->_radius * pScale);

		transformVector2DbyMatrix4D(mCenter,pMat1);

		// ----- Triangle -----

		// Triangle
		IND_Vector2 mA((float) pB2->_ax, (float) pB2->_ay);
		IND_Vector2 mB((float) pB2->_bx, (float) pB2->_by);
		IND_Vector2 mC((float) pB2->_cx, (float) pB2->_cy);

		// Transformations
		transformVector2DbyMatrix4D(mA,pMat2);
		transformVector2DbyMatrix4D(mB,pMat2);
		transformVector2DbyMatrix4D(mC,pMat2);

		if (isCircleToTriangleCollision(mCenter, _radius, mA, mB, mC))
			return 1;

		return 0;
	}

	/**
	 Check collision between two triangles in same coordinate system.
     Triangles are specified as (a1, b1, c1) and (a2, b2, c2).
     Triangles must be in same coordinate system for this method to work!

	 - First checks if each of the vertices of either triange is within inside the other triangle
	 - After that it checks for intersections between the triangle segments
     @param a1,b1,c1 First triangle coordinates
     @param a2,b2,c2 Second triangle coordinates

     @return true if collision, false otherwise
	*/
	bool isTriangleToTriangleCollision(IND_Vector2 &a1,
                                       IND_Vector2 &b1,
                                       IND_Vector2 &c1,
                                       IND_Vector2 &a2,
                                       IND_Vector2 &b2,
                                       IND_Vector2 &c2) {
		// Check if any vertex of triange 1 is inside triange 2
		if (isPointInsideTriangle(a1, a2, b2, c2)) return 1;
		if (isPointInsideTriangle(b1, a2, b2, c2)) return 1;
		if (isPointInsideTriangle(c1, a2, b2, c2)) return 1;

		// Check if any vertex of triange 2 is inside triange 1
		if (isPointInsideTriangle(a2, a1, b1, c1)) return 1;
		if (isPointInsideTriangle(c2, a1, b1, c1)) return 1;
		if (isPointInsideTriangle(c2, a1, b1, c1)) return 1;

		// Checks if any segment of triange 1 intersects with any segment of triange 2
		// Segment (a1 - b1)
		if (isSegmentIntersection(a1, b1, a2, b2)) return 1;
		if (isSegmentIntersection(a1, b1, b2, c2)) return 1;
		if (isSegmentIntersection(a1, b1, c2, a2)) return 1;

		// Segment (b1 - c1)
		if (isSegmentIntersection(b1, c1, a2, b2)) return 1;
		if (isSegmentIntersection(b1, c1, b2, c2)) return 1;
		if (isSegmentIntersection(b1, c1, c2, a2)) return 1;

		// Segment (c1 - a1)
		if (isSegmentIntersection(c1, a1, a2, b2)) return 1;
		if (isSegmentIntersection(c1, a1, b2, c2)) return 1;
		if (isSegmentIntersection(c1, a1, c2, a2)) return 1;

		return 0;
	}

	/**
	 Check collision between two circles in same coordinate system.
     Both circles must be in same coordinate system to work!

     @param pP1 Center of first circle
     @param pRadius1 Radius of first circle
     @param pP2 Center of second circle
     @param pRadius2 Radius of second circle

     @return true if collision, false otherwise
	*/
	bool isCircleToCircleCollision(IND_Vector2 &pP1,
                                   int pRadius1,
                                   IND_Vector2 &pP2,
                                   int pRadius2) {
		// h^2 = x^2 + y^2 Pythagoras :D

		// x^2
		double mDeltaXSquared = pP1._x - pP2._x;
		mDeltaXSquared *= mDeltaXSquared;

		// y^2
		double mDeltaYSquared = pP1._y - pP2._y;
		mDeltaYSquared *= mDeltaYSquared;

		// Adding radius^2
		double mSumRadiiSquared = pRadius1 + pRadius2;
		mSumRadiiSquared *= mSumRadiiSquared;

		// If that result is greater than  h^2, so less than x^2 + y^2
		// then there is a collision
		if (mDeltaXSquared + mDeltaYSquared <= mSumRadiiSquared)
			return 1;
		else
			return 0;
	}

	/**
     Check collision between a circle and a triangle in same coordinate system.
     Both elements must be in same coordinate system to work!

     @param pPCenter Center of first circle
     @param pRadius Radius of first circle
     @param pA2, pB2, pC2 Point of triangle

     @return true if collision, false otherwise
	*/
	bool isCircleToTriangleCollision(IND_Vector2 &pPCenter,
                                     int pRadius,
                                     IND_Vector2 &pA2,
                                     IND_Vector2 &pB2,
                                     IND_Vector2 &pC2) {
		// Check if circle center inside the triangle
		if (isPointInsideTriangle(pPCenter, pA2, pB2, pC2)) return 1;

		// Check the distance of the circle center to the 3 triangle segments
		if (pointToLineDistance(pA2, pB2, pPCenter, 1) < pRadius) return 1;
		if (pointToLineDistance(pB2, pC2, pPCenter, 1) < pRadius) return 1;
		if (pointToLineDistance(pC2, pA2, pPCenter, 1) < pRadius) return 1;

		return 0;
	}

	/**
	 Check if point p is inside the triangle with vertex a, b, c
	 Technique from: http://www.blackpawn.com/texts/pointinpoly/default.html

     @param p A point
     @param a,b,c Triangle point

     @return true if inside, false otherwise
	*/
	static bool isPointInsideTriangle(IND_Vector2 &p,
                                      IND_Vector2 &a,
                                      IND_Vector2 &b,
                                      IND_Vector2 &c) {
		// Compute vectors
		IND_Vector2 v0 = c - a;
		IND_Vector2 v1 = b - a;
		IND_Vector2 v2 = p - a;

		// Compute dot products
		float dot00 = v0.dotProduct(v0);
		float dot01 = v0.dotProduct(v1);
		float dot02 = v0.dotProduct(v2);
		float dot11 = v1.dotProduct(v1);
		float dot12 = v1.dotProduct(v2);

		// Compute barycentric coordinates
		float invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
		float u = (dot11 * dot02 - dot01 * dot12) * invDenom;
		float v = (dot00 * dot12 - dot01 * dot02) * invDenom;

		// Check if point is in triangle
		return (u > 0) && (v > 0) && (u + v < 1);
	}

	/**
	 Compute the distance from AB to C.

     @param pA,pB Sement or line point
     @param pC Point to compute distance from
     @param pIsSegment If true, AB is a segment, not a line

     @return Value of distance
	*/
	double pointToLineDistance(IND_Vector2 &pA,
                               IND_Vector2 &pB,
                               IND_Vector2 &pC,
                               bool pIsSegment) {
		IND_Vector2 ab (pB._x - pA._x, pB._y - pA._y);
		IND_Vector2 ac (pC._x - pA._x, pC._y - pA._y);

		double mDist (ab.crossProduct(ac) / pA.distance(pB));

		if (pIsSegment) {
			IND_Vector2 bc (pC._x - pB._x, pC._y - pB._y);
			IND_Vector2 ba (pA._x - pB._x, pA._y - pB._y);

			float mDot1 (ab.dotProduct(bc));
			if (mDot1 > 0.0f) {
				return pB.distance(pC);
			}
			float mDot2 (ba.dotProduct(ac));
			if (mDot2 > 0.0f) {
				return pA.distance(pC);
			}
		}

		return fabs(mDist);
	}

	/**
	 Check if there is an intersection between two segments
	 Segment 1 => (pAx, pAy) - (pBx, pBy)
	 Segment 2 => (pCx, pCy) - (pDx, pDy)

     @param a,b First segment
     @param c,d Second segment

     @return true if segments intersect, false otherwise
	*/
	bool isSegmentIntersection(IND_Vector2 &a,
                               IND_Vector2 &b,
                               IND_Vector2 &c,
                               IND_Vector2 &d) {
		float mGradAB, mGradCD, mYcptAB, mYcptCD, mInterceptX, mInterceptY;

		// In order to avoid divisions by zero
		if (a._y == b._y)
			b._y += 0.0001f;

		if (a._x == b._x)
			b._x += 0.0001f;

		if (c._y == d._y)
			d._y += 0.0001f;

		if (c._x == d._x)
			d._x += 0.0001f;

		// Calculates the intersection between the two lines
		mGradAB = (a._y - b._y) / (a._x - b._x);
		mGradCD = (c._y - d._y) / (c._x - d._x);

		mYcptAB = a._y - a._x * mGradAB;
		mYcptCD = c._y - c._x * mGradCD;
		mInterceptX = (mYcptAB - mYcptCD) / (mGradCD - mGradAB);
		mInterceptY = (mYcptAB - (mGradAB * mYcptCD) / mGradCD) / (1 - mGradAB / mGradCD);

		// Checking in the intersection is inside the segment
		if (!((mInterceptX >= a._x && mInterceptX <= b._x) || (mInterceptX >= b._x && mInterceptX <= a._x)))
			return 0;

		if (!((mInterceptY >= a._y && mInterceptY <= b._y) || (mInterceptY >= b._y && mInterceptY <= a._y)))
			return 0;

		if (!((mInterceptX >= c._x && mInterceptX <= d._x) || (mInterceptX >= d._x && mInterceptX <= c._x)))
			return 0;

		if (!((mInterceptY >= c._y && mInterceptY <= d._y) || (mInterceptY >= d._y && mInterceptY <= c._y)))
			return 0;

		return 1;
	}

    /**@}*/

	/**
     @name Matrix utilities
     */
	/**@{*/
    /**
	 Multiplies 2 matrices.

	 In the form of R = M1*M2 (Post multiplication on the right) that means we take the rows from
	 the left, and the columns from the right as:

      [        ][       ]
      [   M1   ][   M2  ]
      [        ][       ]  = R
      [        ][       ]

     @param m1 First matrix (left side)
     @param m2 Second matrix (right side)
     @param result Result matrix
	*/
	inline void matrix4DMultiply(const IND_Matrix &m1, const IND_Matrix &m2, IND_Matrix &result)const {

	  result._11 = m1._11 * m2._11 + m1._12 * m2._21 + m1._13 * m2._31 + m1._14 * m2._41;
	  result._12 = m1._11 * m2._12 + m1._12 * m2._22 + m1._13 * m2._32 + m1._14 * m2._42;
	  result._13 = m1._11 * m2._13 + m1._12 * m2._23 + m1._13 * m2._33 + m1._14 * m2._43;
	  result._14 = m1._11 * m2._14 + m1._12 * m2._24 + m1._13 * m2._34 + m1._14 * m2._44;

 	  result._21 = m1._21 * m2._11 + m1._22 * m2._21 + m1._23 * m2._31 + m1._24 * m2._41;
	  result._22 = m1._21 * m2._12 + m1._22 * m2._22 + m1._23 * m2._32 + m1._24 * m2._42;
	  result._23 = m1._21 * m2._13 + m1._22 * m2._23 + m1._23 * m2._33 + m1._24 * m2._43;
	  result._24 = m1._21 * m2._14 + m1._22 * m2._24 + m1._23 * m2._34 + m1._24 * m2._44;

	  result._31 = m1._31 * m2._11 + m1._32 * m2._21 + m1._33 * m2._31 + m1._34 * m2._41;
	  result._32 = m1._31 * m2._12 + m1._32 * m2._22 + m1._33 * m2._32 + m1._34 * m2._42;
	  result._33 = m1._31 * m2._13 + m1._32 * m2._23 + m1._33 * m2._33 + m1._34 * m2._43;
	  result._34 = m1._31 * m2._14 + m1._32 * m2._24 + m1._33 * m2._34 + m1._34 * m2._44;

	  result._41 = m1._41 * m2._11 + m1._42 * m2._21 + m1._43 * m2._31 + m1._44 * m2._41;
	  result._42 = m1._41 * m2._12 + m1._42 * m2._22 + m1._43 * m2._32 + m1._44 * m2._42;
	  result._43 = m1._41 * m2._13 + m1._42 * m2._23 + m1._43 * m2._33 + m1._44 * m2._43;
	  result._44 = m1._41 * m2._14 + m1._42 * m2._24 + m1._43 * m2._34 + m1._44 * m2._44;
	}

    /**
	 Multiplies 2 matrices, stores the result in place of the first matrix, after multiplication.

	 In the form of R = M1*M2 (Post multiplication on the right) that means we take the rows from
	 the left, and the columns from the right as:

     [        ][       ]
     [ target ][ next  ]
     [        ][       ]  = target
     [        ][       ]

     @param target First matrix (left side)
     @param next Second matrix (right side)

     @see matrix4DMultiply
     */
	inline void matrix4DMultiplyInPlace(IND_Matrix &target, const IND_Matrix &next)const {
        IND_Matrix temp;
        IND_Math::matrix4DMultiply(target, next, temp);
        target = temp;
	}

	/**
	 Initializes matrix as Identity.

     @param m Matrix to initialize
	*/
	inline void matrix4DSetIdentity(IND_Matrix &m)const  {
	  m._11 = 1.0f;
	  m._12 = 0.0f;
	  m._13 = 0.0f;
	  m._14 = 0.0f;
	  m._21 = 0.0f;
	  m._22 = 1.0f;
	  m._23 = 0.0f;
	  m._24 = 0.0f;
	  m._31 = 0.0f;
	  m._32 = 0.0f;
	  m._33 = 1.0f;
	  m._34 = 0.0f;
	  m._41 = 0.0f;
	  m._42 = 0.0f;
	  m._43 = 0.0f;
	  m._44 = 1.0f;
	}

	/**
	 Initializes matrix as Translation Matrix

     @param m Matrix to initialize
     @param transx,transy,transz Translation values
	*/
	inline void matrix4DSetTranslation(IND_Matrix &m, float transx, float transy, float transz) const {
	  m._11 = 1.0f;
	  m._12 = 0.0f;
	  m._13 = 0.0f;
	  m._14 = transx;
	  m._21 = 0.0f;
	  m._22 = 1.0f;
	  m._23 = 0.0f;
	  m._24 = transy;
	  m._31 = 0.0f;
	  m._32 = 0.0f;
	  m._33 = 1.0f;
	  m._34 = transz;
	  m._41 = 0.0f;
	  m._42 = 0.0f;
	  m._43 = 0.0f;
	  m._44 = 1.0f;
	}

	/**
	 Initializes matrix as Rotation Matrix.

	 This one is tough (or representation of glRotatef(), some kind of quaternion represented as a matrix.
     Detailed formula can be found in the net.

     @param m Matrix to initialize
	 @param angledegrees Angle IN DEGREES
     @param axis Axis to rotate around to, typically, for 2d, is (0,0,1)
	*/
	inline void matrix4DSetRotationAroundAxis(IND_Matrix &m, float angledegrees, const IND_Vector3 &axis) const  {
		  float angle = angleToRadians(angledegrees);
		  float x(axis._x);
		  float y(axis._y);
		  float z(axis._z);
		  float mag = sqrtf((x * x) + (y * y) + (z * z));

		  //Normalize input vector (Don't call normalize and perform here)
		  if (mag < 1e-08) {
			x = 1.0;
			y = 0.0;
			z = 0.0;
		  } else if (mag != 1.0f) {
			x /= mag;
			y /= mag;
			z /= mag;
		  }

		  float c = cosf(angle);
		  float s = sinf(angle);
		  float t = 1 - c;
		  //Left-handed coord system
		  /*m._11 = (x * x) * t + c;
			m._21 = t * x * y - s * z;
			m._31 = t * x * y + s * y;

			m._12 = t * x * y + s * z;
			m._22 = t * y * y + c;
			m._32 = t * y * z - s * x;

			m._13 = t * x * z - s * y;
			m._23 = t * y * z + s * x;
			m._33 = t * z * z + c;*/

		  //Right-handed coord system
		  m._11 = 1 + t * (x * x - 1);
		  m._21 = z * s + t * x * y;
		  m._31 = -y * s + c * x *z;

		  m._12 = -z * s + t * x * y;
		  m._22 = 1 + t * (y * y - 1);
		  m._32 = x * s + t * y * z;

		  m._13 = y * s + t * x* z;
		  m._23 = -x * s + t * y * z;
		  m._33 = 1 + t * (z * z - 1);

		  m._14 = m._24 = m._34 = 0.0f;
		  m._41 = m._42 = m._43 = 0.0f;
		  m._44 = 1.0f;
	}

	/**
	 Initializes matrix as a Scale Matrix.

     @param m Matrix to initialize
     @param scalex, scaley, scalez Scale values
	*/
	inline void matrix4DSetScale(IND_Matrix &m, float scalex, float scaley, float scalez)const {
		  m._11 = scalex;
		  m._12 = 0.0f;
		  m._13 = 0.0f;
		  m._14 = 0.0f;
		  m._21 = 0.0f;
		  m._22 = scaley;
		  m._23 = 0.0f;
		  m._24 = 0.0f;
		  m._31 = 0.0f;
		  m._32 = 0.0f;
		  m._33 = scalez;
		  m._34 = 0.0f;
		  m._41 = 0.0f;
		  m._42 = 0.0f;
		  m._43 = 0.0f;
		  m._44 = 1.0f;
	}

	/**
	 Initializes a matrix to represent a rotation matrix from 3 axes: r (right), u(up), l(look) AND p (pos).

     It uses left handed coordinate system conventions.
	 In some documentation you will see pos referred as eye (eye position)
	 Form:
	        AXES      TRANSLATION
	    [l1  l2  l3  0][ 1         -px]
	    [u1  u2  u3  0][    1      -py]
	    [r1  r2  r3  0][        1  -pz]
	    [0   0   0   1][            1 ]

	 Last column are dot products
	 It is quite similar as the gluLookAt() function from OpenGL utility library, but using 3 axes vectors from camera

     @param r Right camera vector
     @param u Up camera vector
     @param l Look camera vector
     @param p Where the camera is positioned
     @param result Matrix to initialize
	*/
	inline void matrix4DLookAtMatrixLH(const IND_Vector3 &r, const IND_Vector3 &u, const IND_Vector3 &l, const IND_Vector3 &p, IND_Matrix &result)const {
		IND_Matrix rot;
		IND_Matrix trans;

		//Compute axes matrix manually
		rot._11 = r._x;
		rot._12 = u._x;
		rot._13 = l._x;
		rot._14 = 0.0f;
		rot._21 = r._y;
		rot._22 = u._y;
		rot._23 = l._y;
		rot._24 = 0.0f;
		rot._31 = r._z;
		rot._32 = u._z;
		rot._33 = l._z;
		rot._34 = 0.0f;
		rot._41 = 0.0f;
		rot._42 = 0.0f;
		rot._43 = 0.0f;
		rot._44 = 1.0f;

		//Compute tranlation matrix
		matrix4DSetTranslation(trans, -p._x, -p._y, -p._z);

		//Compute result matrix
		matrix4DMultiply(rot,trans, result);
	}

	/**
	 Initializes a matrix to represent a rotation matrix from 3 axes: r (right), u(up), l(look) AND p (pos).

     It uses right handed coordinate system conventions.
	 In some documentation you will see pos referred as eye (eye position)
	 Form:
     AXES      TRANSLATION
     [l1  l2  l3  0][ 1         -px]
     [u1  u2  u3  0][    1      -py]
     [r1  r2  r3  0][        1  -pz]
     [0   0   0   1][            1 ]

	 Last column are dot products
	 It is quite similar as the gluLookAt() function from OpenGL utility library, but using 3 axes vectors from camera

     @param r Right camera vector
     @param u Up camera vector
     @param l Look camera vector
     @param p Where the camera is positioned
     @param result Matrix to initialize
     */
	inline void matrix4DLookAtMatrixRH(const IND_Vector3 &r, const IND_Vector3 &u, const IND_Vector3 &l, const IND_Vector3 &p, IND_Matrix &result)const {
		IND_Matrix rot;
		IND_Matrix trans;

		//Compute axes matrix manually
		rot._11 = -r._x;
		rot._12 = u._x;
		rot._13 = -l._x;
		rot._14 = 0.0f;
		rot._21 = -r._y;
		rot._22 = u._y;
		rot._23 = -l._y;
		rot._24 = 0.0f;
		rot._31 = -r._z;
		rot._32 = u._z;
		rot._33 = -l._z;
		rot._34 = 0.0f;
		rot._41 = 0.0f;
		rot._42 = 0.0f;
		rot._43 = 0.0f;
		rot._44 = 1.0f;

		//Compute tranlation matrix
		matrix4DSetTranslation(trans, p._x, -p._y, -p._z);

		//Compute result matrix
		matrix4DMultiply(rot,trans, result);
	}

	/**
	 Initializes a matrix to represent a rotation matrix from 3 axes: eye, lookat and up.

     It uses right handed coordinate system conventions
	 It replaces gluLookAt directly (without multiplying the matrix to GL of course)

     @param eye Where camera is positioned
     @param lookAt Where camera looks to
     @param up Up vector from camera
     @param result Matrix to initialize
	*/
	inline void matrix4DLookAtMatrixEyeLookUpRH(const IND_Vector3 &eye, const IND_Vector3 &lookAt, const IND_Vector3 &up, IND_Matrix &result)const {
		IND_Vector3 z (lookAt - eye);
    	z.normalise();
    	IND_Vector3 x (up.crossProduct(z));
    	x.normalise();
		IND_Vector3 y (z.crossProduct(x));
    	y.normalise();

    	//Use other class method to finally construct matrix
    	matrix4DLookAtMatrixRH(x,y,z,eye,result);
	}

	/**
	 Initializes a matrix to represent a rotation matrix from 3 axes: eye, lookat and up.

     It uses left handed coordinate system conventions
	 It replaces gluLookAt directly (without multiplying the matrix to GL of course)

     @param eye Where camera is positioned
     @param lookAt Where camera looks to
     @param up Up vector from camera
     @param result Matrix to initialize
     */
	inline void matrix4DLookAtMatrixEyeLookUpLH(const IND_Vector3 &eye, const IND_Vector3 &lookAt, const IND_Vector3 &up, IND_Matrix &result)const {
		IND_Vector3 z (lookAt - eye);
    	z.normalise();
    	IND_Vector3 x (up.crossProduct(z));
    	x.normalise();
		IND_Vector3 y (z.crossProduct(x));
    	y.normalise();

    	//Use other class method to finally construct matrix
    	matrix4DLookAtMatrixLH(x,y,z,eye,result);
	}

	/**
	 Initializes a matrix representing an orthonormal transformation.
	 It uses right handed coordinate system conventions
	 It replaces glOrtho directly (without multiplying the matrix to GL of course)

     @param left Left margin of view
     @param right Right margin of view
     @param bottom Bottom margin of view
     @param top Top margin of view
     @param znear Nearest z to show in view
     @param zfar Farthest z to show in view
     @param result Matrix to initialize
     */
	inline void matrix4DOrthographicProjectionRH(float left , float right, float bottom, float top, float znear, float zfar, IND_Matrix &result)  {
		float a = 2.0f / (right - left);
		float b = 2.0f / (top - bottom);
		float c =  -2.0f / (znear - zfar);
		float tx = (right + left) / (right - left);
		float ty = (top + bottom) / (top - bottom);
		float tz = -(zfar + znear) / (zfar - znear);
		result._11 = a;
		result._12 = 0.0f;
		result._13 = 0.0f;
		result._14 = tx;
		result._21 = 0.0f;
		result._22 = b;
		result._23 = 0.0f;
		result._24 = ty;
		result._31 = 0.0f;
		result._32 = 0.0f;
		result._33 = c;
		result._34 = tz;
		result._41 = 0.0f;
		result._42 = 0.0f;
		result._43 = 0.0f;
		result._44 = 1.0f;
	}

	/**
	 Initializes a matrix representing an orthonormal transformation.
	 It uses left handed coordinate system conventions
	 It replaces glOrtho directly (without multiplying the matrix to GL of course)

     @param left Left margin of view
     @param right Right margin of view
     @param bottom Bottom margin of view
     @param top Top margin of view
     @param znear Nearest z to show in view
     @param zfar Farthest z to show in view
     @param result Matrix to initialize
     */
	inline void matrix4DOrthographicProjectionLH(float left , float right, float bottom, float top, float znear, float zfar, IND_Matrix &result)  {
		float a = 2.0f / (right - left);
		float b = 2.0f / (top - bottom);
		float c =  -2.0f / (zfar - znear);
		float tx = (right + left) / (right - left);
		float ty = (top + bottom) / (top - bottom);
		float tz = (zfar + znear) / (zfar - znear);
		result._11 = a;
		result._12 = 0.0f;
		result._13 = 0.0f;
		result._14 = tx;
		result._21 = 0.0f;
		result._22 = b;
		result._23 = 0.0f;
		result._24 = ty;
		result._31 = 0.0f;
		result._32 = 0.0f;
		result._33 = c;
		result._34 = tz;
		result._41 = 0.0f;
		result._42 = 0.0f;
		result._43 = 0.0f;
		result._44 = 1.0f;
	}
    /**@}*/

	/**
     @name Matrix with vector utilities
     */
	/**@{*/

	/**
	 Multiplies the column vector to the matrix (from the right side).

     @param vector The vector to multiply (right side), will be modified directly with transform.
     @param mat The matrix, left side.
	*/
	inline void transformVector3DbyMatrix4D(IND_Vector3 &vector, const IND_Matrix &mat)const {
		float x = vector._x;
		float y = vector._y;
		float z = vector._z;

		vector._x = mat._11 * x + mat._12 * y + mat._13 * z + mat._14;
		vector._y = mat._21 * x + mat._22 * y + mat._23 * z + mat._24;
		vector._z = mat._31 * x + mat._32 * y + mat._33 * z + mat._34;
	}

    /**
	 Multiplies the column vector to the matrix (from the right side).

     @param vector The vector to multiply (right side), will be modified directly with transform.
     @param mat The matrix, left side.
     */
	inline void transformVector2DbyMatrix4D(IND_Vector2 &vector, const IND_Matrix &mat)const {
		IND_Vector3 fake (vector._x,vector._y,0.0f);

		transformVector3DbyMatrix4D(fake,mat);

		vector._x = fake._x;
		vector._y = fake._y;
	}

    /**@}*/

private:

    /** @cond DOCUMENT_PRIVATEAPI */

	// ----- Private -----

	bool _ok;

	// ----- Private methods -----

	void                initVars();
	void                freeVars();

    /** @endcond */
};

/**@}*/

#endif // _IND_MATH_


text:
Next →24.2-509 Party to determine method of nominating its candidates for office; exceptions
5 Candidates For Office
3 Nominations Of Candidates By Political Parties
§ 24.2-508 Powers of political parties in general
Powers of political parties in general
Each political party shall have the power to (i) make its own rules and regulations, (ii) call conventions to proclaim a platform, ratify a nomination, or for any other purpose, (iii) provide for the nomination of its candidates, including the nomination of its candidates for office in case of any vacancy, (iv) provide for the nomination and election of its state, county, city, and district committees, and (v) perform all other functions inherent in political party organizations.
Code 1950, §§ 24-363, 24-364; 1970, c. 462, § 24.1-172; 1971, Ex. Sess., c. 119; 1973, c. 30; 1975, c. 515; 1978, c. 778; 1993, c. 641.
Miller v. Brown (Court of Appeals for the Fourth Circuit, 10/01/07)
. . . limited to) a party convention, see Va. Code Ann. § 24.2-508(ii) (2006); a mass meeting, also known . . .
Miller v. Brown (District Court, E.D. Virginia, 10/11/05)
. . . caucus, or "firehouse primary."[1]See § 24.2-508. The latter three (3) forms of candidate selection . . .
. . . override this decision. . . .


I believe Cedric is somewhat right in concluding that Ruby and Rails will never make it to the mainstream – in particular when you define the mainstream as the regular, average programmer. PHP sits nicely in its niche of being a widely adopted, easily accessible language where you can achieve results with a minimum of fuss.
I am not certain that the battle against PHP for the mainstream market of regular programmers is a battle Rails should or even wants to pick. As Cedric points out, most concepts and ideas behind Ruby and Rails go above the head of the average website and the resident programmer, and in most cases they don't even matter. A project needs a certain complexity before writing it in Rails manifests itself as a benefit. It is no coincidence that the "static" pages on rubyonrails.org are written in PHP (well, more like written in HTML and glued together with a bit of PHP to avoid repeating stuff). PHP is an obvious and excellent solution when the problem is simple.
Even creating the simplest of hello world applications in Rails is a 23MB RAM consuming, 5 step process – and that doesn't even cover the deployment to a webserver. In PHP it's a simple matter of uploading a file containing <?= "Hello world" ?> to your webserver, and you're set. Rails won't ever win that battle.
Rather, I see Rails targetting the crowd of developers who build web applications and realize the benefits of design patterns, automated testing, object oriented programming, and consistent, well-structured code. Ruby and Rails try to bring the ease-of-use of PHP to Java while bringing the structure of Java to PHP. The result is a beautiful package; a language and framework with great power and flexibility and with enforced structure where it makes sense.
"The Enterprise" hasn't yet adopted Ruby and Rails, because "The Enterprise" hasn't adopted Rails yet. Rails isn't widely available at hosting companies, because it's not mainstream, and Rails isn't mainstream because it's not widely available at hosting companies. Luckily some hosting companies and bigger companies are at least open to Rails adoption.
It's interesting to note, that Cedrics "conviction doesn't come from technical grounds". His arguments are based in human values and emotions like security (in the "I feel safe" sense, not the "I'll take stuff Windows is lacking for 500, Alec" sense), fear of change, and why fix it if it's not broken.
It is indeed important to look away from the purely technical side when evaluating Rails. Rails is built on the premise that code and development must be beautiful and non-tedious, since that's what make developers happy. If Ruby and Rails doesn't make it into the mainstream it will not be due to lacking technical merits. It will be due to human emotions.


Take to the skies as a Dotty Jumper!
Imagine the exhilaration of skydiving from a plane at around 10,000–12,000ft, and 30 seconds of freefall before your parachute opens, enabling you to take in the beautiful views of the Wiltshire countryside. This once in a lifetime experience is one that you'll remember for the rest of your life. Sound good? We think so too.
You'll be attached to an experienced instructor for a tandem jump. They control the free fall, parachute opening and landing so you can just enjoy every second of this amazing experience.
You can either pay for the jump yourself for £225, with any extra money you fundraise for Dorothy House going towards helping our patients and their families. Or, if you'd prefer to use your sponsorship money to cover the costs, we ask that you raise a minimum of £450.
Please note that the maximum weight is 16 stone, and you need to be 16 to apply (under 18s must have written parental consent).
or call 01225 721 480.
Please also contact Steph if you'd like to jump on a different day as we can arrange this for you too.


Taylor's Sweet Little Art and Nerd Site: Painting of the Day- Thunder in the Mystic Mountains!
Painting of the Day- Thunder in the Mystic Mountains!
As I finished up my last painting I took a little time out to get another painting done. I've found that I really enjoy illustrative painting. Painting feels a little more natural than some of the other art mediums that I do. For this piece, I decided to go with Thunder Punch He-Man as the big hero of this scene. The reason why I did this is that I recently picked up a Vintage Thunder Punch He-Man from a local vintage toy store called DFW Vintage Toys. Thunder Punch He-Man pops ring caps when you twist his body and let him swing out a mighty punch. I always wanted one of these He-men when I was a kid. I never got one, but the fascination was always there. Since I got Thunder Punch He-Man, I have had a hard time putting this toy down. I bought a big pack of ring caps to pop in his back pack while I am at stop lights on my way to work. It keeps me entertained while I am on the road. I'm amazed that this toy is still working for being 28 years old now and it's in great shape. I also decided to add one of my favorite toy vehicles, the Roton. I did a review on one not to long ago. If you read that posting, then you know my love for this Masters of the Universe toy. This will probably be the last painting to post for a while. My commissions have stacked up and I need to get them finished. This piece is painted in acrylics on a 13" X 24" 60lb polar matte paper. You can also see this piece in my deviantart gallery here. I hope you enjoy the piece. Now I've got some comics and commissions to finish.
Pin-up of the day- The Walking Saboteur!
Painting of the Day- The Horde's Men!


Due to be a free agent this summer, Josh Bailey has instead agreed to a new six-year contract with the Islanders.
The 28-year-old forward, selected to his first All-Star appearance last month, has 15 goals and 47 assists this season—already setting career highs for assists and points (62). Bailey is tied for seventh in the league in assists and third on the Islanders in points, behind rookie Mathew Barzal (65) and captain John Tavares (64).
Bailey's contract status was largely overshadowed this season by that of Tavares, who is also in the final year of his deal.
Selected by the Islanders in the first round, No. 9 overall, in the 2008 NHL draft, Bailey has 121 goals and 247 assists in 697 games over 10 seasons in New York. He also has four goals and seven assists in 22 career playoff games.
The Islanders began the day tied with Columbus for the second wild-card spot in the Eastern Conference. The Blue Jackets currently hold the tiebreaker because they have a game in hand.