text:
Market Street Gamble
There are signs that business is improving: co-workers are changing jobs, and each open position no longer attracts a raft of overqualified candidates. At industry gatherings competitors, customers, and colleagues are no longer worried about layoffs (unless their companies are being taken over, in which case all bets are off). The commuter train is crowded despite a near doubling of the fares over the past five years. We're beginning to wait for tables again at our favorite restaurants. Despite the war, despite the noise of national politics, and despite the spike in the price of gas, the economy is enjoying a late spring. In San Francisco, construction proceeds apace, and brokers and landlords are hopeful that the boom in residential real estate has finally spilled into the commercial sector. And yet, and yet…..our economy appears to be undergoing some structural changes. While nationally we fear that oil prices have permanently risen, locally it may be that the need for commercial space has been permanently reduced. The signs abound. In my department of 16 people at least three (not the same individuals each day) work from home. At the base of our office tower it is rare to see a non-food-and-beverage retail outlet stay open longer than a year. A small business can sublet prime San Francisco office space for under $30 per foot per year, less than half the cost during the pre-2001 Internet boom. People will turn out for unique experiences, as the Giants' downtown stadium demonstrates. But Union Square toy vendor FAO Schwarz, despite its distinctive atmosphere, declared bankruptcy, the Sony Metreon is barely hanging on (even Microsoft closed its store), and the jury is out on the Ferry Building's renovation. In light of the history of failed or struggling projects, the $410 million risk that developers Forest City Enterprises and Westfield America are taking to raze the historic Emporium, preserve the 100-year old dome, and construct a massive shopping center on the site, is breathtaking. © 2004 Stephen Yuen I'll visit it when it's done, but I'll keep my wallet in my pocket.
Dial-up Dinosaur
Our home Internet access is still via AOL dial-up. I've been resisting signing up for cable or DSL for admittedly flimsy reasons:
Each member of the household already has broadband at work or school.
DSL and Cable have the annoying habit of going down at critical moments. The POTS (plain old telephone service) lines never go down.
People leave their broadband-connected computers on all the time and consequently have to worry about hackers, maintaining firewalls, etc. That's one of the reasons I run our personal finances off a 7-year-old Macintosh (system 9.1). It's not connected to the Internet and has never been hit by a virus (because no one bothers to write one that will affect it.) I painstakingly load the data manually into Quicken but am comforted by a feeling of security and control.
It will tempt me to spend even more time on the Internet. I already waste too much of my life staring at glowing boxes.
As a dry-run for the inevitable day when we upgrade to broadband, I worked on my sister-in-law's system when we visited her in Salt Lake City two weeks ago. Comcast had recently installed a cable modem, but something wasn't quite right, so she couldn't access the Internet. After fiddling with the modem, I connected a Linksys wireless router to her HP desktop PC and popped a card into the E-machines laptop. Voila! Two machines with broadband access. A visitor turned on his Powerbook G4 with its built-in Airport card, and now we had three machines on-line.
First application? Warcraft III, which the under-25's played to the wee hours. Rueful observation: games and porn were two principal drivers of technology in the 1970's and 1980's (VCRs, cable TV, videogames), and they're in no danger of being dislodged from that position. [Update - 5/28/04: wargames still have quite a way to go before they simulate reality.]
Warcraft III collaborative battle. I don't think this is what Mrs. Clinton meant by "taking a village".
Out in Right Field
One of the great things about living in the United States is that we can disagree without killing each other. We can have widely divergent beliefs, yet still be friends. On the political spectrum, broadly speaking, I suppose I would be a moderate conservative, placing me square in the center of the nation as a whole but way out in right field here in San Francisco.
One of my friends comments regularly on economic, and occasionally political matters. His views are typical of the people I encounter every day. His latest e-mail is reproduced below:
As you no doubt know from some comments I have made over time, I dislike President Bush intensely. I view him as not only ignorant, but also devoid of morals. Like his father he is willing to sink to any level of lies, distortions, and misrepresentations to achieve his ends. I never believed the stories of weapons of mass destruction and links of Saddam Hussein to Al Queda [sic] as justifications for invading Iraq. I always felt Iraq would turn into the quagmire and disaster it has. The idea he stated that God had chosen him to do what he did in the Middle East was preposterous. Why would God chose [sic] him? His great intellect? His honesty? His integrity?
The Medicare bill was just another fiasco this incompetent, unethical President put us through. He lied about the cost to get it through Congress. The purpose of the bill was to protect the profits of drug makers, not to help seniors. The drug makers were concerned about the growing threat of cheaper imported drugs. Indeed, what logic is there in having the bill prohibit the government from negotiating prices with drug makers? In addition, the way this bill was structured is the first step in applying means testing to Medicare. Before things are done the Republicans will have cheated most Americans out of the retirement benefits they were promised and taxed for all their lives.
I have nothing but contempt for Bush and the Republicans. The deficits being run up right now will haunt us in the future. The propaganda they put out discussed below is just an attempt to whitewash a bad deal for Americans. Bush's commercials attacking Kerry follow the pattern of lies, distortions, and misrepresentations he has consistently been guilty of.
As I say when people refer to Bush as "my," "your," or "our" President, he is not "my" President. I didn't vote for him, nor do I support him or his policies. He is "the" President, legally appointed in a decision that was a travesty by five Republican appointed Supreme Court justices.
I've watched my friend(and others) seethe with anger over the past three years. After the 2002 elections, when the Democrats lost control of all three branches of government for the first time since the 1950's, apoplexy would be a mild description of his condition. If President Bush is re-elected, how would he deal with that?
Both for reasons of self-knowledge--Plato said that was one of the goals of life--and anger management, the following article by Keith Burgess-Jackson, a philosophy professor and a Nader voter, may be helpful. According to Prof. Burgess-Jackson,
There are four signs of hatred:
Obsession. The hater returns again and again to the hated. Nothing looms larger in the hater's mind. The hated becomes a brooding omnipresence, a focus of suspicion, fear, and loathing.
Inability to see--much less to acknowledge‑-good in the hated. The hated becomes the very personification of evil, incapable of being, intending, or doing good. Nobody is perfectly bad, of course, but this is how the hated appears.
Cynicism. Nothing the hated says is taken at face value, however plausible it may be on its face and however sincerely it is expressed. Indeed, the hated's claim of good motivation is often taken as further evidence of his or her viciousness, duplicity, or perversity.
Malevolence. The hater is not merely indifferent to the welfare of the hated, as might be the case with a stranger, but wishes things to go poorly for him or her. The hater delights in the hated's misery or misfortune. The Germans have a special word for this: "schadenfreude."
After reading the article, I applied the test to myself vis-a-vis President Clinton, whom I did not support. An honest appraisal showed, I think, that I did not have the characteristics that Prof. Burgess-Jackson describes. For example, I thought President Clinton did well in his management of the economy, and he displayed political courage when he signed the NAFTA and welfare-reform bills. My friend, and many others, see absolutely no good in anything President Bush says or does. President Bush is both incredibly stupid, but somehow he's brilliant in his Machiavellianly evil plots. (Perhaps it's Karl Rove who is the Rasputin behind the throne?)
The difference between my friend and me is that I believe the Republic will muddle through and possibly do better than expected from the vantage point of these gloomy times, regardless who wins in November. If President Bush is re-elected, I fear for my friend's health. © 2004 Stephen Yuen
Labels: Bush, Iraq, Politics
Mending Fences
A couple of months ago the police smashed through our fence in hot pursuit of a burglary suspect. They told us that the Parks and Recreation Department would repair the damage.
After two weeks of silence, I wrote a polite letter to the Chief of Police. (I wasn't angry, or even irritated, because my expectations are always low when dealing with any government agency--saves me a lot of needless anguish.) A lieutenant called the next day and asked me to fill out a claim form. Done. Claim form mailed.
Next, the City risk manager called to say that the City would not perform the repair after all but would reimburse me for the expense. Of course, said expense had to be "reasonable", which meant that I had to get two pre-approved estimates from reputable contractors. Call to All-Fence, who had rebuilt our fence after the gale winds of 1994 blew it down, appointment scheduled, estimate delivered for $350. Fax to City risk manager, with accompanying phone call pleading that she waive requirement for a second estimate because of small size of claim. Request granted. Now we're getting somewhere, albeit 45 days after the incident.
Call received from the Association of Bay Area Governments (ABAG)in Oakland. Gentleman says ABAG processes claims for all Bay Area governments. Could I please send him materials on the claim? Done. Can I tell All-Fence to begin work? Only if I sign a release form with a witness's signature. Done. Release form mailed. I send a $35 (10%) deposit to All-Fence, along with a note to make an appointment for the repair.
Now for the unexpected good news. When we returned from our long weekend in Salt Lake City the fence was fixed! Our contractor had been in the neighborhood and had taken it upon himself to do the task without making an appointment or otherwise asking permission.
Everyone we dealt with was perfectly nice--we just got our $350 check from ABAG--but the difference between public and private efficiency could not be more plain. Individuals aren't inherently better because they work in the private sector. It's the system, as we used to say in the sixties. © 2004 Stephen Yuen
Challengers Baseball - Part II
While the San Francisco Giants were losing, 8-1, to the Pittsburgh Pirates at SBC Park today, just across McCovey cove,in Barry Bonds' Junior Giants Park, another Giants squad was engaged in a spirited contest with the Foster City Mariners. In this game of Challengers baseball (see my post last month), everyone hits, everyone crosses the plate, and everyone cheers for the opposing team.
Several parents were late because it was difficult to find the path to the little ballpark amidst the sea of parked cars and coned-off streets. When they arrived, I helped them take the wheelchairs out of their vans--although they are so practiced that they didn't really need my help--and the kids were there in plenty of time to take their turn at bat in the top of the second.
It may have been the wind, or the ambience from the nearby Major League game, but the balls were flying off the bats today. Some made it to the outfield grass, and a few even cleared the fence. One ball was hit to the leftfielder, but his back was turned because he was more interested in the sounds emanating from SBC Park. When I shouted, he chased the ball down. "Always face the batter"--don't remember seeing that advice in a baseball book.
The runners sometimes bunch up, but no one's in a big hurry.
After the game, the teams cheer each other and shake hands. The players eagerly devour their snack and drink and already are looking forward to next week's game. © 2004 Stephen Yuen
Presidential Lies
I've been re-reading the lies, in his own words, that the President of the United States used to justify military action against Iraq. Below are excerpts:
Earlier today, I ordered America's armed forces to strike military and security targets in Iraq. They are joined by British forces. Their mission is to attack Iraq's nuclear, chemical and biological weapons programs and its military capacity to threaten its neighbors.
Their purpose is to protect the national interest of the United States, and indeed the interests of people throughout the Middle East and around the world.
Saddam Hussein must not be allowed to threaten his neighbors or the world with nuclear arms, poison gas or biological weapons.
Other countries possess weapons of mass destruction and ballistic missiles. With Saddam, there is one big difference: He has used them. Not once, but repeatedly. Unleashing chemical weapons against Iranian troops during a decade-long war. Not only against soldiers, but against civilians, firing Scud missiles at the citizens of Israel, Saudi Arabia, Bahrain and Iran. And not only against a foreign enemy, but even against his own people, gassing Kurdish civilians in Northern Iraq.
The international community had little doubt then, and I have no doubt today, that left unchecked, Saddam Hussein will use these terrible weapons again.
This situation presents a clear and present danger to the stability of the Persian Gulf and the safety of people everywhere. The international community gave Saddam one last chance to resume cooperation with the weapons inspectors. Saddam has failed to seize the chance.
And so we had to act and act now.
The hard fact is that so long as Saddam remains in power, he threatens the well-being of his people, the peace of his region, the security of the world. The best way to end that threat once and for all is with a new Iraqi government -- a government ready to live in peace with its neighbors, a government that respects the rights of its people.
Heavy as they are, the costs of action must be weighed against the price of inaction. If Saddam defies the world and we fail to respond, we will face a far greater threat in the future. Saddam will strike again at his neighbors. He will make war on his own people.
And mark my words, he will develop weapons of mass destruction. He will deploy them, and he will use them.
Because we're acting today, it is less likely that we will face these dangers in the future.
From a speech by President Bill Clinton to the American people in 1998
Puddle Jumpers
The bronze in the park next to the Pyramid often brings a smile to picnickers.
The Best Hope
There's a scene in the movie Crocodile Dundee in which a New York City mugger pulls a knife on the Australian outback character played by Paul Hogan. Crocodile Dundee produces a much larger weapon and says, "That's a knife? THIS is a knife." The mugger gapes, then flees, and the audience always laughs.
The brutal beheading of an American civilian by Islamic terrorists is no laughing matter, but the principle is relevant. The U.S. military has weapons vastly more powerful than knives, and one wonders if the terrorists have as much sense as the mugger in the movie.
President Bush's strategy to create a democracy in Iraq, for all its missteps and misjudgments, represents one of the world's last chances to avoid a catastrophe. The majority of Moslems may well be peaceful, but if just 1% of Islam's 1 billion adherents are as fanatical as those who gladly kill themselves in order to kill us, no amount of talking, self-humiliation, or material concessions will satisfy them. Even killing us is not sufficient for some whose hatred leads them, contrary to the dictates of their religion, to burn and rend the bodies of our dead. The knife that killed Nick Berg was up close and personal.
With thousands, if not millions, besotted by white-hot fury and many more being created each day by the poisonous teachings promulgated in the madrassas, we are in a desperate race to show that there is another way. A peaceful and prosperous society in the heart of Islam's territory, a society respectful of the rights of women and non-believers, may be the catalyst that transforms the region. Observation and first-hand experience of the new Iraq will contradict extreme religious teachings, resulting, it is hoped, in their widespread questioning and rejection (cognitive dissonance). We won't know for a generation whether the strategy was successful, but at least it's a plan that has a possibility of working.
(One theory that has worked so far is the "flypaper" strategy. U.S. forces in Iraq are such an affront to radical Islam that jihadists will focus their efforts on driving them out. Tactically, it may be easier to strike in other locales, including the American homeland, but the bull, enraged, can only see the red cape. Awful though the attrition be, it is better that the battles are fought over there than over here.)
Others have written persuasively that moderate Moslems should see that it is in their own best interest to leash their radical brethren. The rage that Americans felt after 9/11, when so many innocents were murdered, has been echoed in recent days when everyman Nick Berg was slaughtered. That 9/11 anger will be multiplied a thousand-fold if a weapon of mass destruction is detonated in an American city. No American President, whose sworn duty is to preserve, protect, and defend, will be able to withstand the pressure to go nuclear. Failure in Iraq is not an option.
Cure for Depression
One way to stop thinking about the all the people who want to see us dead is to attend a college graduation. Last Friday I watched over 3,000 students receive their diplomas (actually, pieces of paper that promised that diplomas will be mailed to them over the summer) at the University of Utah's Huntsman Center in Salt Lake City.
One girl had "No War" in bold letters on her cap—bravo. Navy cadets, resplendent in their whites, ushered us to our seats—bravo to them, too.
Thousands of students, energized and eager, naïve and knowledgeable, hopeful and hesitant, streamed out to the sunlight. The world is their oyster. © 2004 Stephen Yuen
Random Thoughts on Iraq
Abu Ghraib prison abuses-->hazing
Fallujah murders, burning, dismemberment-->lynching
Both are bad, which is worse? Which pictures do we see every night?
Leadership of Large Organizations
Large organizations always have bad apples. When are leaders excused (but not totally) from the actions of subordinates?
When the actions are contrary to clearly communicated principles, policies, and procedures;
When violations, once known, are immediately investigated and corrective action, ranging from reprimand and demotion to firing and criminal prosecution, is taken; and
When the leader and/or organization makes restitution.
Service, not Selfishness
Many people who serve as senior officials in American government have had successful careers in the private sector. Whether Democrat or Republican, their primary motivation is service borne out of gratitude. Power can be intoxicating, but the slow-as-molasses bureaucracies quickly dissipate the euphoria.
Let the People Decide
Because they're not doing it for money or glory (as was Pat Tillman), every member of the Bush Administration, including the President himself, would willingly sacrifice his or her position in the pursuit of victory in the war on terror. On the other hand, they will not resign if it would jeopardize the ultimate objective.
If President Bush thought that it was essential that Donald Rumsfeld continue as Secretary of Defense, and if Karl Rove told the President that he would lose the election if Mr. Rumsfeld stays, I believe President Bush would say, "That's what elections are for. Let the people decide."
If Bush is Trailing Badly in October
His opponents, both foreign and domestic, should hope that the President is not trailing badly in the polls in October. Thinking that John Kerry will not take the steps necessary to protect the U.S homeland and the fragile Iraq democratic experiment, President Bush may well initiate aggressive military actions against Syria and Iran, as well as insurgents within Iraq. The U.S. military will follow his orders gladly, because they overwhelmingly want to win. Cynics will view such actions as "wagging the dog", but in truth, the dog has long since been hurtled over the fence. It may be more accurate to say "in for a penny, in for a pound."
If Mr. Kerry does go on to win after Mr. Bush ploughs the field, the prospects for international cooperation improve. Neither our friends or enemies will want the bad Republican cops to come back into the room. © 2004 Stephen Yuen
Only in Utah
Shopping for Mother's Day cards in Salt Lake City, I came across this display in Wal-Mart:
My sister-in-law and her husband fled the Bay Area in 1995. We're here to attend the college graduation of their older son--my nephew. They sold their 3-bedroom, 1-bath house in Burlingame and bought a 5-bedroom, 3-bath home in Salt Lake City for much less than the price of their Burlingame house. Below is a view of the Wasatch mountains from their neighborhood.
Labels: Family, Utah
Best Buy: A Good Outcome
Twice I've had a problem at Best Buy, and twice I've been pleased with the outcome.
The first occurred when I switched from cable (Comcast) to satellite (DirecTV), including TiVo, and purchased the requisite equipment. A couple of days before the installer was due to arrive, I opened the (re-sealed) boxes and noted that there were some cables and manuals missing. I went back to the store, and customer service immediately took back all the boxes and substituted new, and, in some cases, upgraded equipment at no extra charge. DirecTV and TiVo, by the way, have turned out better than I had expected.
Next came the application for the $100 rebate on the satellite equipment. I painstakingly filled out the (original! no copies accepted!) rebate form, photocopied the receipts, cut out the proofs of purchase, and mailed the kit and caboodle to the Best Buy rebate center. The package was rejected and returned with the notation "multiple receipts". Helpfully, I had enclosed the receipts for the exchange and upgrade, but too much information probably confused them. So my second problem was, how much letter-writing, form-filling, photocopying, and package mailing was I willing to endure to collect $100?
I went back to the store, and laid the whole mess in front of Nicolette and her manager. The manager said, "What if we take the path of least resistance and give you a $100 credit on your charge card?" It took me two seconds to register that I was getting what I wanted with a minimum hassle, and point one second to utter, "Sure."
After receiving the credit, I thanked them in what I hope was not an overly fawning manner—I do have my pride—and out of gratitude bought some DVDs, software, and accessories that I don't need.
Being able to walk into a store, speak to a live person, and (sometimes) resolve problems satisfactorily keeps me from buying most of my stuff over the Internet. © 2004 Stephen Yuen
Giant Hesitation
A statue of Willie Mays greets the fans at the entrance to SBC Park.
The local preacher likes to organize outings to Giants baseball games, and so it was that I found myself in the left-field bleachers of SBC (formerly Pac Bell) park last Friday night. Despite the poor vantage from the cheap seats ($21), we did get a good look at Barry Bonds, who is by consensus one of the three or four greatest players who ever lived. Although number 25 didn't do anything notable that night, at least someday I'll be able to tell my grandchildren and the other guys at the rest home that I saw him play.
Number 25 did not get a hit today, though the Giants scored 12 runs.
The Giants were hosting the World Champion Florida Marlins and started the game in a fashion that reminded me of the Giants in the 70's and early 80's. The Marlins had the bases loaded with two out in the top of the first inning. A high fly ball was launched to right-center field, but the outfielders miscommunicated, and the ball was dropped. Because everyone was running on two outs, three runs scored easily. Somehow the scorer perceived a windblown double while everyone else in the Park saw an error, but in any case the damage was done. Hope flickered as the Giants rallied in the bottom of the first and trailed only 4 – 2.
The youngster and I got up to buy hot dogs. As we stood in line, we watched on the monitors as the Marlins used the Giants pitchers for batting practice. It was 9 – 2 as we returned to our seats $28 poorer (two hot dogs, sodas, and fried calamari for a certain high-maintenance individual seated next to me and the kid), but who's counting when we're having so much fun. Incredibly, the Giants rallied to tie the score 9 – 9 at the bottom of the second, the big blow was a grand slam home run by Brian Dallimore, the rookie third baseman. The grandslam was Dallimore's first major league hit, a feat matched by only four other players, including Barry Bonds' father, the late Bobby Bonds.
The score is 9 - 9 at the bottom of the 2nd inning.
The game settled down, and the Giants came away with a 12 – 9 victory. During the course of the evening, and despite the game's excitement, I soured on the SBC experience: 1) the wind blew right through my light jacket, and the sub-50 temperatures seemed to double the pressure on my bladder—memories of frigid Candlestick Park arose involuntarily; 2) the lines to the men's restroom were at least 30-deep before one even got to the entrance (I can't imagine how women endure their circumstances); 3) the price of food and drink is beyond outrageous.
The preacher is talking about seeing a couple of more games this year. The youngster's pleading eyes light up. I'll get back to them when it's warmer. © 2004 Stephen Yuen
Labels: ATT Park, Barry Bonds, Giants, San Francisco
OPEN THREAD: It's the springtime of my life.
At the Snow Car Café...


text: Q: How to dynamically update the rotation of a cube with react-three/fiber? I am attempting to set the rotation of a cube, on click, with react-three/fiber.  I would like to be able to click the box and have it rotate from its current angle to a new angle of rotation, each time the cube is clicked.  Currently, I have a react-three/fiber codesandbox, however, the animation does not stop at the right angle, and will not restart.  I am assuming this is because the clock.elapsedTime continues to run, even while the animation pauses.   Can anyone provide any assistance?

redpajama_set_name: RedPajamaStackExchange


text:
Pureland Project
by Highervibrations1 | Aug 3, 2016 | Articles, Law and Current Events
The seed for The Pureland Project was planted in 2005 when Meg Ferrigno moved to Tibet to serve Garchen Rinpoche's school projects. In speaking with the fellow teachers and villagers they formed the ideas for the project. In 2011 The Pureland Project was granted 501c3 status and in 2012 Ahimsa House opened its doors in Philadelphia.
H.E. Garchen Rinpoche is a highly realized Tibetan Buddhist master from Nangchen, Tibet. After spending 20 in prison during the cultural revolution, he was brought to America to establish a center in Arizona. In 1998 upon his return to his homeland, Rinpoche built four schools at the request of the villagers. Rinpoche has dedicated his life for the benefit of all beings.Rinpoche encourages his students to donate to his Tibetan homeland through the pureland project.
Find out more about the Pureland Project here.
Tibetan Buddhism and the Pure Land
There is a strong (and unfounded) belittling of Pure Land teachings and practice in the Western understanding of Tibetan Buddhism. Perhaps this is due to the dominant position of academics and nihilists in 'western' Buddhist circles, although there has been connivance by some Tibetan teachers in this misrepresentation of the Dharma as elitist, complex, and 'profound' (in the misguided way that human minds think of obscurity as indicative of depth).
An overly-academic and somewhat tedious new publication by Georgios T. Halkias (Luminous Bliss, A Religious History of Pure Land Literature in Tibet) should —but probably will not— put that false image to rest. In it, Prof. Halkias offers a catalog of the enormous body of Tibetan Pure Land literature: sutra translations, commentaries, practices, dharanis, mantras, and prayers of aspiration for birth in Dewachen (Sukhavati), authored by leading lamas of all Tibetan Buddhist lineages (Nyingma, Sakya, Kagyu, Jonang, and Geluk).
Pure Land teachings have always been central to Tibetan Buddhism, but owing to Western academic prejudice, they have been downplayed in favor of the obscure, the difficult, and the exotic.
The Jonang Master Kunchen Dolpopa labored long and hard to establish other emptiness (zhentong) —the view of ultimate reality as empty of all that is insubstantial and impermanent, but full of all permanent Buddha qualities— not out of some quaint philosophical curiosity, but to dispel the doubts of fellow Buddhists regarding the Pure Land. He saw the growing dominance of nihilism as a threat to the excellent Pure Land practice that is the last remaining viable way to enlightenment in this Dharma-Ending Age.
Kunchen Dolpopa taught in The Supplication: "The relative three worlds are just an exaggerated, confusing appearance, while the absolute three worlds and the Buddha Essence are an indestructible, unimagined, unconfusing appearance."
The relative three worlds are the three realms of desire, form, and formlessness, while the absolute three worlds are none other than the three aspects of the Pure Land: the dharmakaya-kshetra of the fully enlightened mind of Amideva, in which dwell the Buddhas and Great Bodhisattvas; the sambhogakaya-kshetra of the unhindered power of Amideva, in which dwell the Bodhisattvas; and the nirmanakaya-kshetra of the compassion of Amideva, in which dwell aspiring ordinary beings, the non-retrogressing objects of the Buddha's compassion. They are the three Pure Lands into which beings of various grades are reborn upon making the Definitive Aspiration for birth in the field of action (buddha kshetra) of Amideva.
Kunchen Dolpopa's residence at Jomonang Monastery was called Dewachen (Land of Supreme Bliss), where he wrote extensive prayers for birth in the Pure Land and an extensive commentary on the Sukhavati Sutra. He gave us the solid understanding of other emptiness on the basis of which we can develop certainty (the 'three minds', faith, shinjin, anjin), and he also offered his personal example.
On the eve of his parinirvana, Kunchen Dolpopa told his disciples: "I am going to Dewachen." While some of them thought he was merely retiring to his monastic quarters, his close disciples knew his true intention. As an emanation of Avalokiteshvara, the Bodhisattva of Compassion, Kunchen Dolpopa never leaves Dewachen. In one of his prayers, he exclaimed: "May all who hear my name be born in Dewachen!"
As instructed by Kunchen Dolpopa, we must study and understand "the Three Wheels of the Dharma in sequence", so that when we encounter the Pure Land teachings, we do not reject or accept them superstitiously, but rather understand them and accept them in wisdom. First, we strive to generate renunciation of the illusion of material happiness; next, we cultivate the view of the emptiness of relative self and phenomena; and finally we can glimpse ultimate reality: true purity, true existence, true bliss, and true permanence.
Kunchen Dolpopa taught us to enter the Holy Path (the Bodhisattva Way) through the Gate of the Pure Land. That is his great gift and legacy. We rely exclusively on the parinamana (merit transfer) of Amideva, as expressed in His Vows, for our own birth in the Pure Land. Then, once our birth is assured, we recite the Holy Name (om amideva hrih), cultivate the four immeasurable thoughts, and practice the transcendent perfections (paramitas) for the benefit of others.
om amideva hrih

redpajama_set_name: RedPajamaCommonCrawl


Please select which advisor you would like to schedule a meeting with.
and assume total responsibility and risk for your use of the web sites you are linking to.
Brant's meetings are scheduled by Megan in our office.


The Lakers have signed LeBron James to a four-year max-contract deal. Late last night, it was reported that President of Basketball Operations Magic Johnson met with James personally at his residence.
It has been known that James has the utmost respect for Johnson. Although earlier reports came out this morning stating that James and the Lakers did not meet in person, it is safe to say that those reports were untrue.
The Lakers were planning to meet together as a group in their training facility last night to discuss and go over their free agency plan, but Johnson was noticeably absent, reportedly meeting and talking with James during that time.
This meeting between arguably two of the greatest players of all-time was kept in the dark until James made his decision to sign with LA.


text:
Borek – wieś w Polsce położona w województwie kujawsko-pomorskim, w powiecie radziejowskim, w gminie Topólka.

Podział administracyjny
Wieś duchowna, własność biskupstwa włocławskiego (klucz włocławski), położona była w II połowie XVI wieku w powiecie brzeskokujawskim województwa brzeskokujawskiego. W latach 1975–1998 miejscowość należała administracyjnie do województwa włocławskiego.

Wieś sołecka.

Demografia
Według Narodowego Spisu Powszechnego (31.03.2011 r.) liczyła 168 mieszkańców. Jest szesnastą co do wielkości miejscowością gminy Topólka.

Historia
W wieku XIX Borek był folwarkiem położonym w powiecie nieszawskim, gminie Czamanin, parafii Orla. W roku 1885 liczył 108 mieszkańców, mając 297 mórg rozległości.

Przypisy

Topólka (gmina)
Wsie klucza włocławskiego

redpajama_set_name: RedPajamaWikipedia


text:
Oxford African American Studies Center
Africa and Diaspora Studies
Archives, Collections, and Libraries
Exploration, Pioneering, and Native Peoples
Law and Criminology
Military and Intelligence Operations
Miscellaneous Occupations and Realms of Renown
Society and Social Change
Before 1400: The Ancient and Medieval Worlds
1400–1774: The Age of Exploration and the Colonial Era
1775–1800: The American Revolution and Early Republic
1801–1860: The Antebellum Era and Slave Economy
1861–1865: The Civil War
1866–1876: Reconstruction
1877–1928: The Age of Segregation and the Progressive Era
1929–1940: The Great Depression and the New Deal
1941–1954: WWII and Postwar Desegregation
1955–1971: Civil Rights Era
1972–present: The Contemporary World
Dramatic (ballets unless otherwise stated)
PRINTED FROM OXFORD AFRICAN AMERICAN STUDIES CENTER (www.oxfordaasc.com). © Oxford University Press, 2021. All Rights Reserved. Under the terms of the licence agreement, an individual user may print out a PDF of a single chapter of a title in Oxford Medicine Online for personal use (for details see Privacy Policy and Legal Notice).
Marsalis, Wynton ( Learson )
Barry Kernfeld
https://doi.org/10.1093/acref/9780195301731.013.73224
(b New Orleans, Oct 18, 1961). American trumpeter, composer, bandleader and educationist, brother of Branford Marsalis. From an early age he studied both jazz and classical music. When he was 14 he performed Haydn's Trumpet Concerto with the New Orleans PO and while a student at the Juilliard School he joined Art Blakey's Jazz Messengers (1980). He toured in a quartet with Herbie Hancock, Ron Carter and Tony Williams and recorded his first album as leader (1981), then in early 1982 left Blakey to form a quintet (1982–5) with his brother Branford; he also toured with Hancock in 1983 as a member of the quintet V.S.O.P. II. In 1984 he became the first musician to win Grammy awards for both a jazz recording and a classical recording. Marsalis completed his first large-scale suite, Soul Gestures in Southern Blues ...
A version of this article originally appeared in Grove Music Online.


text:
Q: How to get a file's size which is greater than 4 Gb? I made a simple function, which get's a file's size.
int file_size( char * filename )
{
     int size;
     struct stat st;

     stat( filename, &st );
     size = st.st_size;

     return size;

}//file_size

It is working fine, but if i have a file which size is bigger than 4Gb than i get a negativ number back, and of course this isn't the correct file size. So how can i get such a big file's size? I think, that the return value should anything else like int but i don't know what, and i don't think, that would solve my problem.
Thanks,
kampi
Update:
Hi!
I found the solution. I have to use __stat64. I modifyed my function, and now it is retrieving the real size. I tested it with an 8Gb big file.
unsigned long long int file_size( char * filename )
{
    unsigned long long int size;
    struct __stat64 st;

    __stat64( filename, &st );
    size = st.st_size;

   return size;

}//file_size

And a notice:
When i used printf, i had to use "%I64d" to print it out.

A: You can use the Win32 GetFileSizeEx function.
HANDLE aFile = CreateFile
(
  filename,
  FILE_READ_ATTRIBUTES,
  0,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL
);

if (aFile != INVALID_HANDLE_VALUE)
{
  long long aSize;
  GetFileSizeEx(aFile, &aSize);

  CloseHandle(aFile);
  return aSize;
}
else
  return -1;

A: You can probably use _stat64.

A: st_size is defined as long in wchar.h, so you could probably try with long, instead of int
struct stat {
    ....
    _off_t     st_size;
    ....
}

....

typedef long _off_t;

May be like this
long file_size( char * filename )
{
     long size;
     struct stat st;

     stat( filename, &st );
     size = st.st_size;

     return size;

}//file_size

A: In such cases, return value of stat() might be -1, and errno set to EOVERFLOW.
The man page for stat on my (64 bit x86 machine) says:

EOVERFLOW
(stat()) path refers to a file whose
  size cannot be represented in the type
  off_t.  This can occur when an
  application compiled on a 32-bit
  platform without
  -D_FILE_OFFSET_BITS=64 calls stat() on a file whose size exceeds (2<<31)-1
  bits.

A: I think , problem is because of file size more than INT_MAX , So that it is giving you
negative values .
Probably you can do type cast for long data type , it may work.

Otherwise use , fseek , ftell function . then subtract end file pointer from start file pointer .  It will also give you file size. ( number of bytes ) .


Pictures are up of Rubys puppies. THey are so cute and all look so much alike.
Hope, Harley and Lola's pups have all gone home. The last one left yesterday. This process always warms my heart and makes me so happy. Sending puppies home is a feeling I cannot explain. THe words that clients say to me make my day, week even month. One family when they picked up brought a gift for my daughter. She talked to my daughter about going to med school when they came for a visit. My daughter has known for years that med school was were she was going to go. When they picked up their pup they gave Karina a Medical dictionary. Karina loves it and reads it all the time. SO very kind of them. Another family picked up their dog and brough a friend who has one of my past pups, which they brought with them. THis pup was tiny, nick named Peanut. It was so good to see him and how good he is doing and how big he has gotten. His owners were so kind and had the nicest things to say to me.
Clients just have a way of making me realize this is were I belong. Creating these dogs, loving them and providing them ot families that will love them for life. Thank you to all my past and present clients for being you. I appreciate your business, kind words and references. You all rock.
Check out Rubys pups on the puppy page.


Last week, I wrote about metadata in Siteleaf and the variety of ways you could use it to customize your website. In this post, I'll do the same, but with metadata's much cooler, older brother—taxonomy.
The word 'taxonomy' isn't used very often on the web, but almost every website uses some form of taxonomy—the most common being 'tags'. Siteleaf supports the use of tags on posts, but in a way that is more flexible than most systems. Instead of posts having only one set of tags, they are capable of having as many tag sets as you'd like—each with its own name. In the UI, Siteleaf automatically creates 'Tags' to get you started, but don't let that hold you back from being creative.
Let's start by looking at the code involved for listing a set of tags. In the code above, we're creating a template for our individual blog posts. Because the object tied to our template is a post, we can access the taxonomy keyword and loop through the tags set. If our set were named 'Colors', we would use taxonomy.colors.
In each listing, we link the name of the tag to its page, using value for the text and url for the URL. Since taxonomy is more involved than key/value metadata, we have a nice list of useful variables to work with. Take a look at the theme documentation for a full list.
Now that we have a list of the post's tags, where does each one link? Upon publishing, Siteleaf auto-generates a page for every tag, using a taxonomy template. This allows you to list all the posts that pertain to a given tag.
This is a basic taxonomy template. It displays the name of the tag with a list of the tag's posts. If the URL to our tag is /blog/tags/design, we would create this template at the path /blog/tags/default.html.
Now, tags are pretty basic. There's nothing new here that we can't already do with most CMSs. But, what if we look beyond tags? What could we create with custom tag sets or multiple tag sets on a single site? Let's go through a few use-cases.
Larry Fox, fellow developer at Oak, runs Bar Lawrence, Studiomates' provider of fine cocktails. Whether we're celebrating a launch or putting a nail in the coffin of a long week, Bar Lawrence is always a treat.
The Bar Lawrence website runs on Siteleaf and uses taxonomy for the drink ingredients. Each drink is a post, published on the date it is served. And because Larry uses taxonomy to handle the ingredients, each one is linked and indexed.
The drink listings on the website include each drink's title along with its linked ingredients underneath. With some fancy CSS footwork, Larry designed the ingredients to highlight upon hovering the drink, indicating that you can click them to see more.
When you click an ingredient link, it takes you to a list of previously served drinks that were made using that ingredient. Larry treats his ingredients taxonomy similar to how tags relate to blog posts, but because of the custom name, his website's URL is more semantic. Where the URL would normally be /menu/tags/gin or /menu/categories/gin, it now provides a more readable path, /menu/ingredients/gin.
Bar Lawrence also has a full list of ingredients that serves as an index for navigating the drinks. With only a dozen lines of code, Larry has added another way to browse and explore the website. Let's take a look at how we could create an index of our own.
First, we sort the ingredients, using the Liquid filter, sort. This provides us with a new array that runs alphabetically, from A-Z. Next, we loop through the sorted ingredients and extract the first letter of each ingredient, using the truncate filter.
truncate takes two parameters: the intended length and the string to append (... by default). Since we want to cut our ingredient down to one letter with no appended string, we pass 1 and an empty string. We then use a conditional to check if the letter differs from that of the previous ingredient's. If it does, we insert the letter into the HTML. Lastly, we insert the ingredient and link to its page.
Larry's implementation of taxonomy with ingredients works beautifully for cocktails, but I can also see it handling even broader subjects, like meal recipes. With multiple tag sets, you could assign one for ingredients and another for meal type (breakfast, dessert, etc).
While we're talking about drinks, let's talk about the best one—coffee. At Studiomates, I handle the caffeine business, Café Jonnie. Similar to Bar Lawrence, Café Jonnie catalogs the drinks that are served, but lists the beans rather than the specific drinks. I could follow Larry's lead by including the ingredients for each bag of beans, but instead, I focus on the roaster and origin.
Unlike Bar Lawrence, Café Jonnie's tag sets consist of singular values—and that's okay. This is a use-case where we don't need more than one value for the given tag sets. Think of the tag sets as key/value metadata, but with the linking and indexing that comes with taxonomy. With this setup, I can browse all of the beans from a given roaster or location. The taxonomy value has more of a parent association to the post.
Like many of Siteleaf's features, we designed taxonomy through use-cases. A Working Library, website of fellow Studiomate Mandy Brown, played a big role in shaping the feature. Mandy writes and reviews books on her website. In her reviews, she includes each book's author and publisher as linked categories, so you can see a list of other books by them.
This works as-is, but it requires mixing the two fields into one group, 'Categories'. This name could apply to anything, and it results in URLs like /books/category/doubleday. With taxonomy in Siteleaf, we could break these two fields into their own tag sets, 'Author' and 'Publisher', so our URLs could have more meaning, like /books/publisher/doubleday and /books/author/annalee-newitz.
I hope this post shed some light on one of the more powerful Siteleaf features. With its ability to easily add new navigation structures, while remaining simple and flexible, I'm confident we'll continue to discover use-cases. If you have any questions after reading this, don't hesitate to reach out.


Cressida and Julian Field live comfortably in the English countryside with their elderly Ukranian odd-job man and friend of the family, Romka.
Suddenly the police arrive. What has Romka done? Is he guilty?
Is there a time limit on revenge and punishment? "The Handyman" looks at questions surrounding culpability/retribution, universal responsibility and the possibility of evil.
"The Handyman", directed by Christopher Morhan, premiered at the Minerva Theatre, Chichester in September 1996.


Five Wings of the Heart Mandala Series outline a set of spiritual practices intended to help a person bring together elements of blessing, prayer, meditation, self-help affirmation, and daily vows. We offer these practices as one possible way of developing the inner strength and calm that will allow us to participate in the mending of the world. We invite everyone to join hands in working strongly and lovingly for a more compassionate and life-friendly world.
Teams-of-Two: A Model for Personal Unfolding, Citizen Activism and Social Transformation, explains our vision of organizing our participants into independent supportive pairs.
Companions in the Storm, Companions-in-Blessing explores twelve of the deeper dimensions of spiritual friendship, in the context of our need to work together to protect the web of life from runaway industrialization. Ecology and biology show us how all life is woven together. But many of us work on the great ecology, peace and justice issues of our time as isolated individuals. The EcoBodhi community is a decentralized network that seeks to encourage the deepening of active, friend-to-friend (mutual support) relationships, rather than the development of passive, follower-to-authority-figure relationships.
The Ecology of Ecology Movements is an evolving blueprint for building a sustainable ecological advocacy and action groups, based on my experiences and struggles campaigning against nuclear weapons for thirty years. I hope this blueprint will help people everywhere build enduring organizations and communities that celebrate and protect the web of life. We are using this blueprint to support the unfolding of the Deep Green Awakening community.
Infinity Hidden in a Speck explores the idea of as-yet unrealized resources and abilities hidden in our trillions of cells and their quadrillions of connections.
Please note: Inclusion of a work as a resource in our online library is based on our appreciation and gratitude for a person's contribution to public knowledge, art, spiritual inspiration and/or ecological wisdom and advocacy, and does not indicate knowledge, approval or endorsement of this web site by the person or organization whose works we have included, quoted or referenced. Neither does it mean that we agree with everything that they have said or written in the course of their lifetimes, or that they agree with everything that we have said and written.
Books, sermons, speeches of the Rev. Dr. Martin Luther King, Jr.
JoannaMacy.net one of the outstanding ecological/spiritual thinkers of our time. Her online library of articles and videos will introduction you to her books and her vision of ecological action in our time, "The Work That Reconnects." Also see, Joanna Macy and The Work That Reconnects — Exploring A Path Toward Compassionate Resilience .
MollyYoungBrown.com Molly Young Brown teaches Psychosynthesis and Ecospirituality. Her books and essays include insights for finding one's way in a world that is unraveling.
Ecobuddhism.org A Buddhist response to global warming. Large library of resources, including "A Buddhist Declaration on Climate Change." The Declaration that presents to the world's media a unique spiritual view of climate change and our urgent responsibility to address the solutions. It emerged from the contributions of over 20 Buddhist teachers of all traditions to the book A Buddhist Respose to the Climate Emergency. The Time to Act is Now was composed as a pan-Buddhist statement by Zen teacher Dr David Tetsuun Loy and senior Theravadin teacher Ven. Bhikkhu Bodhi with scientific input from Dr John Stanley.
Ecoversity , in Santa Fe, New Mexico, is a non-profit educational center which explores and demonstrates concepts of sustainable living, ecological design, and responsibility for the wise stewardship of the Earth. Established in 1999, Ecoversity focuses on practices and solutions designed to regenerate the Earth and revitalize the human spirit.
GreenFaith.org Interfaith resources about caring for the environment.
All text content on this site is in the Creative Commons unless otherwise marked as Copyright.
All images retain their original Creative Commons, Public Domain, or Copyright status.


text:
Saturn Rukh is a hard science fiction novel written by the United States physicist Robert L. Forward. It was first published in hardcover in March 1997 (and later in paperback in 1998) by Tor Books. Saturn Rukh is themed around human contact with alien organisms on the gaseous planet Saturn. Like many of Forward's books, the novel is a speculation of the nature of intelligent life in a non-Terran ecosystem, in this case the atmosphere of a gas giant.

Plot summary

In an unspecified time in the future, a multi-national consortium sends six astronauts to Saturn to establish a helium mining factory to produce stabilized metastable helium ("meta"), a powerful rocket fuel, in the planet's upper atmosphere. If completed properly, each aeronaut will receive a billion dollars. With only enough "meta" to get them to Saturn, failure will cost them their lives. And all too soon the crew of astronauts crash-lands on a surface, which is actually the back of an enormous alien life-form. They dub the bizarre sting-ray-shaped creature that "swims" through Saturn's gaseous upper atmosphere "the Rukh". The creature is 4-kilometer-long and has two brains, both male and female. When part of their apparatus is swallowed by one of these giant birdlike beings, the crew needs to find a way to communicate and to be able to cooperate with the Rukhs so that they may survive.

See also
A Meeting with Medusa
The Algebraist

External links
 Sample pages of the novel

1997 American novels
1997 science fiction novels
American science fiction novels
Fiction set on Saturn
Hard science fiction
Tor Books books
Novels by Robert L. Forward
Works set on balloons


Since 1914, we have been building our reputation as an award-winning construction company and are proud to have been named the Commercial Master Builder of the Year at the 2014 MBA Awards.
We are a fourth generation commercial and industrial builder with offices in Adelaide and Mount Gambier.
Founders and brothers, Clifford and Charles Kennett began trading from their family home in West Croydon as "Kennett Brothers" until Kennett Pty Ltd was adopted in the 1970s. Shortly after the Mount Gambier office was opened.
Focusing on projects up to $50 million in value, we work through the tender market and also undertake construction-managed contracts.
Celebrating 100 years of business, we continue to deliver building success in the aged care, education, retail, government, automotive, health and commercial sectors across the state.
Read more about our tailored construction approach and browse our catalogue of award-winning project case studies.


text:
German submarine U-397 was a Type VIIC U-boat of Nazi Germany's Kriegsmarine during World War II.

She carried out one patrol. She did not sink or damage any ships.

She was scuttled in northern Germany on 5 May 1945.

Design
German Type VIIC submarines were preceded by the shorter Type VIIB submarines. U-397 had a displacement of  when at the surface and  while submerged. She had a total length of , a pressure hull length of , a beam of , a height of , and a draught of . The submarine was powered by two Germaniawerft F46 four-stroke, six-cylinder supercharged diesel engines producing a total of  for use while surfaced, two Garbe, Lahmeyer & Co. RP 137/c double-acting electric motors producing a total of  for use while submerged. She had two shafts and two  propellers. The boat was capable of operating at depths of up to .

The submarine had a maximum surface speed of  and a maximum submerged speed of . When submerged, the boat could operate for  at ; when surfaced, she could travel  at . U-397 was fitted with five  torpedo tubes (four fitted at the bow and one at the stern), fourteen torpedoes, one  SK C/35 naval gun, (220 rounds), one  Flak M42 and two twin  C/30 anti-aircraft guns. The boat had a complement of between forty-four and sixty.

Service history
The submarine was laid down on 29 August 1942 at the Howaldtswerke (yard) at Kiel as yard number 29, launched on 6 October 1943 and commissioned on 20 November under the command of Oberleutnant zur See Fritz Kallipke.

She served with the 5th U-boat Flotilla from 20 November 1943 and the 7th flotilla from 1 June of the same year. She was reassigned to the 23rd flotilla on 1 July 1944, then the 31st flotilla on 20 February 1945.

The boat's first patrol was preceded by the short journey from Kiel in Germany to Stavanger, arriving at the Norwegian port on 2 June 1944.

Patrol
U-397 departed Stavanger on 8 June 1944 and arrived back there on the 24th.

The boat moved back to Kiel on 4 July 1944.

Fate
The submarine was scuttled on 5 May 1945 in Geltinger Bucht (east of Flensburg).

References

Bibliography

External links

German Type VIIC submarines
U-boats commissioned in 1943
1943 ships
Ships built in Kiel
World War II submarines of Germany
Operation Regenbogen (U-boat)
Maritime incidents in May 1945


Set on the historic site of the former Inglis Newmarket Stables in the heart of Randwick, apartments have been popular not just for their leading-edge design to be delivered by a rare collaboration of Australia's best architects, but also the community's proximity to great healthcare and education facilities, the upcoming light rail, and world-class beaches.
The next release – 103 apartments made up of a mixture of one, two, and three bedrooms layouts, set in the most historic corner of the site - is now making its debut.
Known as Figtree Pocket, the first release of these predominantly large-scale apartments will be set over two buildings of five and seven storeys in a secluded north-facing position on Young Street.
The new apartments are a stone's throw from Newmarket House and the much-loved historic Big Stable, which are among key heritage features being retained to pay tribute to the site's racing history.
Cbus Property's commitment to the highest quality design across the unique precinct has seen a collaboration among leading designers. Four top Australian firms, Bates Smart, Neeson Murcutt Architects, Smart Design Studio and SBJ, are each designing a stage in the masterplanned community, while landscaping by Arcadia Landscape Architecture will create critical links, open spaces, gardens and playgrounds.
Figtree Pocket, designed by multi award-winning architects Smart Design Studio, delivers grand residences set within grand gardens.
The tailored simplicity of the design sees buildings of polished and raw concrete with metallic accents anchored by an intensely leafy, green base of deep plantings, reflecting the lush landscaped surrounds.
Between the buildings is a residents-only outdoor room, including sunken seating under the sweeping canopy of a grand fig tree.
Studio founder and Creative Director William Smart, who has a string of accolades for public and residential developments, said the concept was always to make the garden the undisputed centrepiece.
"We were very definite in our thinking that the central garden needed to be the 'hero' of the project and we had to create buildings to celebrate it," he commented.
Alex Longley, Principal of Arcadia Landscape Architecture, says the fig tree – such an iconic feature across the historic site, is the inspiration for Figtree Pocket.
Colliers International Managing Director of Residential Peter Chittenden said Figtree Pocket would become an exclusive part of the new Randwick neighbourhood.
"Smart Design Studio has created a stunning response to the very special and unique location of this precinct of apartments. Everything from the generous and thoughtful floorplans to the vision for how the greenery will embrace the buildings has been considered to the last detail," he said.
Sixty apartments will be released across a further two buildings in the first quarter of 2018 to complete Figtree Pocket.
The new stage has now been launched and Figtree apartments are now selling. The project is expected to be complete by 2021.
Read more about Newmarket Residences or enquire now.
To discover more off the plan apartments in Sydney, click here.


Last weekend, VIS students from grades 9, 10 and 11 welcomed refugee students from PROSA and had fun cooking lunch together. PROSA (School for everyone) is a school run by volunteer teachers, which allows refugee minors to get the basic Austrian school certificate. It was a pleasure to see the students sharing a love for cooking and spending time together.
The community service programme is part of both the MYP and the IB DP curriculum and requires students to take an active part in the communities in which they live. The emphasis is on developing community awareness and concerns and acquiring the skills to make an effective contribution to society.
This enables students to enhance their personal and interpersonal development through experiential learning. At the same time, it provides an important counterbalance to the pressures of the rest of the academic programme.
A good community service programme should be both challenging, enjoyable, and a personal journey of self-discovery. Each individual student has a different starting point, and therefore different goals and needs, and for many their activities include experiences that are profound and life changing.


I will be leaving after Valentine event. Thanks for playing with me.
I'm afraid the creatures you are asking for are not in any of the for sale tab, much less the stock for this shop. They are not currently available for buying.
lending out creatures for ice fox quest pm me.
I would like a m/f pair of brown amagnae please! 1k each for a total of 2k. Thank you!
My total would be 130,000g.
Need potions or anything fish?
Again, you cannot order anything that isn't on stock either in the shop or my sales tab. Please take a look at what is actually on sale before asking for anything.
The creatures in any tab that has "for sale" in its name are for sale. If you are interested in some of them, PM me please.
New stock available! Check my Keep for many past event creatures for sale!
Ah, those are indeed not candy creatures. Candy creatures usually refers to the creatures transformed by candies, i. e. the Swirled Winged Cats, Caramel Gryphons, Gold Horned Narwhals, Plush Krakens and Black Rose Imps.
Those are indeed for sale and I'll send you a trade right away.
I would love 15 oblivion pillagebeasts for a total of 15k, please!
I gift people at random who click my eggs!
Selling M/F pair of SB GoldenCrystalwings- PM me if interested!


text:
// Modified for Tendermint
// Originally Copyright (c) 2013-2014 Conformal Systems LLC.
// https://github.com/conformal/btcd/blob/master/LICENSE

package p2p

import (
	"encoding/binary"
	"encoding/json"
	"math"
	"math/rand"
	"net"
	"os"
	"sync"
	"time"

	. "github.com/tendermint/go-common"
	crypto "github.com/tendermint/go-crypto"
)

const (
	// addresses under which the address manager will claim to need more addresses.
	needAddressThreshold = 1000

	// interval used to dump the address cache to disk for future use.
	dumpAddressInterval = time.Minute * 2

	// max addresses in each old address bucket.
	oldBucketSize = 64

	// buckets we split old addresses over.
	oldBucketCount = 64

	// max addresses in each new address bucket.
	newBucketSize = 64

	// buckets that we spread new addresses over.
	newBucketCount = 256

	// old buckets over which an address group will be spread.
	oldBucketsPerGroup = 4

	// new buckets over which an source address group will be spread.
	newBucketsPerGroup = 32

	// buckets a frequently seen new address may end up in.
	maxNewBucketsPerAddress = 4

	// days before which we assume an address has vanished
	// if we have not seen it announced in that long.
	numMissingDays = 30

	// tries without a single success before we assume an address is bad.
	numRetries = 3

	// max failures we will accept without a success before considering an address bad.
	maxFailures = 10

	// days since the last success before we will consider evicting an address.
	minBadDays = 7

	// % of total addresses known returned by GetSelection.
	getSelectionPercent = 23

	// min addresses that must be returned by GetSelection. Useful for bootstrapping.
	minGetSelection = 32

	// max addresses returned by GetSelection
	// NOTE: this must match "maxPexMessageSize"
	maxGetSelection = 250

	// current version of the on-disk format.
	serializationVersion = 1
)

const (
	bucketTypeNew = 0x01
	bucketTypeOld = 0x02
)

// AddrBook - concurrency safe peer address manager.
type AddrBook struct {
	BaseService

	mtx               sync.Mutex
	filePath          string
	routabilityStrict bool
	rand              *rand.Rand
	key               string
	ourAddrs          map[string]*NetAddress
	addrLookup        map[string]*knownAddress // new & old
	addrNew           []map[string]*knownAddress
	addrOld           []map[string]*knownAddress
	wg                sync.WaitGroup
	nOld              int
	nNew              int
}

// NewAddrBook creates a new address book.
// Use Start to begin processing asynchronous address updates.
func NewAddrBook(filePath string, routabilityStrict bool) *AddrBook {
	am := &AddrBook{
		rand:              rand.New(rand.NewSource(time.Now().UnixNano())),
		ourAddrs:          make(map[string]*NetAddress),
		addrLookup:        make(map[string]*knownAddress),
		filePath:          filePath,
		routabilityStrict: routabilityStrict,
	}
	am.init()
	am.BaseService = *NewBaseService(log, "AddrBook", am)
	return am
}

// When modifying this, don't forget to update loadFromFile()
func (a *AddrBook) init() {
	a.key = crypto.CRandHex(24) // 24/2 * 8 = 96 bits
	// New addr buckets
	a.addrNew = make([]map[string]*knownAddress, newBucketCount)
	for i := range a.addrNew {
		a.addrNew[i] = make(map[string]*knownAddress)
	}
	// Old addr buckets
	a.addrOld = make([]map[string]*knownAddress, oldBucketCount)
	for i := range a.addrOld {
		a.addrOld[i] = make(map[string]*knownAddress)
	}
}

// OnStart implements Service.
func (a *AddrBook) OnStart() error {
	a.BaseService.OnStart()
	a.loadFromFile(a.filePath)
	a.wg.Add(1)
	go a.saveRoutine()
	return nil
}

// OnStop implements Service.
func (a *AddrBook) OnStop() {
	a.BaseService.OnStop()
}

func (a *AddrBook) Wait() {
	a.wg.Wait()
}

func (a *AddrBook) AddOurAddress(addr *NetAddress) {
	a.mtx.Lock()
	defer a.mtx.Unlock()
	log.Info("Add our address to book", "addr", addr)
	a.ourAddrs[addr.String()] = addr
}

func (a *AddrBook) OurAddresses() []*NetAddress {
	addrs := []*NetAddress{}
	for _, addr := range a.ourAddrs {
		addrs = append(addrs, addr)
	}
	return addrs
}

// NOTE: addr must not be nil
func (a *AddrBook) AddAddress(addr *NetAddress, src *NetAddress) {
	a.mtx.Lock()
	defer a.mtx.Unlock()
	log.Info("Add address to book", "addr", addr, "src", src)
	a.addAddress(addr, src)
}

func (a *AddrBook) NeedMoreAddrs() bool {
	return a.Size() < needAddressThreshold
}

func (a *AddrBook) Size() int {
	a.mtx.Lock()
	defer a.mtx.Unlock()
	return a.size()
}

func (a *AddrBook) size() int {
	return a.nNew + a.nOld
}

// Pick an address to connect to with new/old bias.
func (a *AddrBook) PickAddress(newBias int) *NetAddress {
	a.mtx.Lock()
	defer a.mtx.Unlock()

	if a.size() == 0 {
		return nil
	}
	if newBias > 100 {
		newBias = 100
	}
	if newBias < 0 {
		newBias = 0
	}

	// Bias between new and old addresses.
	oldCorrelation := math.Sqrt(float64(a.nOld)) * (100.0 - float64(newBias))
	newCorrelation := math.Sqrt(float64(a.nNew)) * float64(newBias)

	if (newCorrelation+oldCorrelation)*a.rand.Float64() < oldCorrelation {
		// pick random Old bucket.
		var bucket map[string]*knownAddress = nil
		for len(bucket) == 0 {
			bucket = a.addrOld[a.rand.Intn(len(a.addrOld))]
		}
		// pick a random ka from bucket.
		randIndex := a.rand.Intn(len(bucket))
		for _, ka := range bucket {
			if randIndex == 0 {
				return ka.Addr
			}
			randIndex--
		}
		PanicSanity("Should not happen")
	} else {
		// pick random New bucket.
		var bucket map[string]*knownAddress = nil
		for len(bucket) == 0 {
			bucket = a.addrNew[a.rand.Intn(len(a.addrNew))]
		}
		// pick a random ka from bucket.
		randIndex := a.rand.Intn(len(bucket))
		for _, ka := range bucket {
			if randIndex == 0 {
				return ka.Addr
			}
			randIndex--
		}
		PanicSanity("Should not happen")
	}
	return nil
}

func (a *AddrBook) MarkGood(addr *NetAddress) {
	a.mtx.Lock()
	defer a.mtx.Unlock()
	ka := a.addrLookup[addr.String()]
	if ka == nil {
		return
	}
	ka.markGood()
	if ka.isNew() {
		a.moveToOld(ka)
	}
}

func (a *AddrBook) MarkAttempt(addr *NetAddress) {
	a.mtx.Lock()
	defer a.mtx.Unlock()
	ka := a.addrLookup[addr.String()]
	if ka == nil {
		return
	}
	ka.markAttempt()
}

// MarkBad currently just ejects the address. In the future, consider
// blacklisting.
func (a *AddrBook) MarkBad(addr *NetAddress) {
	a.RemoveAddress(addr)
}

// RemoveAddress removes the address from the book.
func (a *AddrBook) RemoveAddress(addr *NetAddress) {
	a.mtx.Lock()
	defer a.mtx.Unlock()
	ka := a.addrLookup[addr.String()]
	if ka == nil {
		return
	}
	log.Info("Remove address from book", "addr", addr)
	a.removeFromAllBuckets(ka)
}

/* Peer exchange */

// GetSelection randomly selects some addresses (old & new). Suitable for peer-exchange protocols.
func (a *AddrBook) GetSelection() []*NetAddress {
	a.mtx.Lock()
	defer a.mtx.Unlock()

	if a.size() == 0 {
		return nil
	}

	allAddr := make([]*NetAddress, a.size())
	i := 0
	for _, v := range a.addrLookup {
		allAddr[i] = v.Addr
		i++
	}

	numAddresses := MaxInt(
		MinInt(minGetSelection, len(allAddr)),
		len(allAddr)*getSelectionPercent/100)
	numAddresses = MinInt(maxGetSelection, numAddresses)

	// Fisher-Yates shuffle the array. We only need to do the first
	// `numAddresses' since we are throwing the rest.
	for i := 0; i < numAddresses; i++ {
		// pick a number between current index and the end
		j := rand.Intn(len(allAddr)-i) + i
		allAddr[i], allAddr[j] = allAddr[j], allAddr[i]
	}

	// slice off the limit we are willing to share.
	return allAddr[:numAddresses]
}

/* Loading & Saving */

type addrBookJSON struct {
	Key   string
	Addrs []*knownAddress
}

func (a *AddrBook) saveToFile(filePath string) {
	log.Info("Saving AddrBook to file", "size", a.Size())

	a.mtx.Lock()
	defer a.mtx.Unlock()
	// Compile Addrs
	addrs := []*knownAddress{}
	for _, ka := range a.addrLookup {
		addrs = append(addrs, ka)
	}

	aJSON := &addrBookJSON{
		Key:   a.key,
		Addrs: addrs,
	}

	jsonBytes, err := json.MarshalIndent(aJSON, "", "\t")
	if err != nil {
		log.Error("Failed to save AddrBook to file", "err", err)
		return
	}
	err = WriteFileAtomic(filePath, jsonBytes, 0644)
	if err != nil {
		log.Error("Failed to save AddrBook to file", "file", filePath, "error", err)
	}
}

// Returns false if file does not exist.
// Panics if file is corrupt.
func (a *AddrBook) loadFromFile(filePath string) bool {
	// If doesn't exist, do nothing.
	_, err := os.Stat(filePath)
	if os.IsNotExist(err) {
		return false
	}

	// Load addrBookJSON{}
	r, err := os.Open(filePath)
	if err != nil {
		PanicCrisis(Fmt("Error opening file %s: %v", filePath, err))
	}
	defer r.Close()
	aJSON := &addrBookJSON{}
	dec := json.NewDecoder(r)
	err = dec.Decode(aJSON)
	if err != nil {
		PanicCrisis(Fmt("Error reading file %s: %v", filePath, err))
	}

	// Restore all the fields...
	// Restore the key
	a.key = aJSON.Key
	// Restore .addrNew & .addrOld
	for _, ka := range aJSON.Addrs {
		for _, bucketIndex := range ka.Buckets {
			bucket := a.getBucket(ka.BucketType, bucketIndex)
			bucket[ka.Addr.String()] = ka
		}
		a.addrLookup[ka.Addr.String()] = ka
		if ka.BucketType == bucketTypeNew {
			a.nNew++
		} else {
			a.nOld++
		}
	}
	return true
}

// Save saves the book.
func (a *AddrBook) Save() {
	log.Info("Saving AddrBook to file", "size", a.Size())
	a.saveToFile(a.filePath)
}

/* Private methods */

func (a *AddrBook) saveRoutine() {
	dumpAddressTicker := time.NewTicker(dumpAddressInterval)
out:
	for {
		select {
		case <-dumpAddressTicker.C:
			a.saveToFile(a.filePath)
		case <-a.Quit:
			break out
		}
	}
	dumpAddressTicker.Stop()
	a.saveToFile(a.filePath)
	a.wg.Done()
	log.Notice("Address handler done")
}

func (a *AddrBook) getBucket(bucketType byte, bucketIdx int) map[string]*knownAddress {
	switch bucketType {
	case bucketTypeNew:
		return a.addrNew[bucketIdx]
	case bucketTypeOld:
		return a.addrOld[bucketIdx]
	default:
		PanicSanity("Should not happen")
		return nil
	}
}

// Adds ka to new bucket. Returns false if it couldn't do it cuz buckets full.
// NOTE: currently it always returns true.
func (a *AddrBook) addToNewBucket(ka *knownAddress, bucketIdx int) bool {
	// Sanity check
	if ka.isOld() {
		log.Warn(Fmt("Cannot add address already in old bucket to a new bucket: %v", ka))
		return false
	}

	addrStr := ka.Addr.String()
	bucket := a.getBucket(bucketTypeNew, bucketIdx)

	// Already exists?
	if _, ok := bucket[addrStr]; ok {
		return true
	}

	// Enforce max addresses.
	if len(bucket) > newBucketSize {
		log.Notice("new bucket is full, expiring old ")
		a.expireNew(bucketIdx)
	}

	// Add to bucket.
	bucket[addrStr] = ka
	if ka.addBucketRef(bucketIdx) == 1 {
		a.nNew++
	}

	// Ensure in addrLookup
	a.addrLookup[addrStr] = ka

	return true
}

// Adds ka to old bucket. Returns false if it couldn't do it cuz buckets full.
func (a *AddrBook) addToOldBucket(ka *knownAddress, bucketIdx int) bool {
	// Sanity check
	if ka.isNew() {
		log.Warn(Fmt("Cannot add new address to old bucket: %v", ka))
		return false
	}
	if len(ka.Buckets) != 0 {
		log.Warn(Fmt("Cannot add already old address to another old bucket: %v", ka))
		return false
	}

	addrStr := ka.Addr.String()
	bucket := a.getBucket(bucketTypeNew, bucketIdx)

	// Already exists?
	if _, ok := bucket[addrStr]; ok {
		return true
	}

	// Enforce max addresses.
	if len(bucket) > oldBucketSize {
		return false
	}

	// Add to bucket.
	bucket[addrStr] = ka
	if ka.addBucketRef(bucketIdx) == 1 {
		a.nOld++
	}

	// Ensure in addrLookup
	a.addrLookup[addrStr] = ka

	return true
}

func (a *AddrBook) removeFromBucket(ka *knownAddress, bucketType byte, bucketIdx int) {
	if ka.BucketType != bucketType {
		log.Warn(Fmt("Bucket type mismatch: %v", ka))
		return
	}
	bucket := a.getBucket(bucketType, bucketIdx)
	delete(bucket, ka.Addr.String())
	if ka.removeBucketRef(bucketIdx) == 0 {
		if bucketType == bucketTypeNew {
			a.nNew--
		} else {
			a.nOld--
		}
		delete(a.addrLookup, ka.Addr.String())
	}
}

func (a *AddrBook) removeFromAllBuckets(ka *knownAddress) {
	for _, bucketIdx := range ka.Buckets {
		bucket := a.getBucket(ka.BucketType, bucketIdx)
		delete(bucket, ka.Addr.String())
	}
	ka.Buckets = nil
	if ka.BucketType == bucketTypeNew {
		a.nNew--
	} else {
		a.nOld--
	}
	delete(a.addrLookup, ka.Addr.String())
}

func (a *AddrBook) pickOldest(bucketType byte, bucketIdx int) *knownAddress {
	bucket := a.getBucket(bucketType, bucketIdx)
	var oldest *knownAddress
	for _, ka := range bucket {
		if oldest == nil || ka.LastAttempt.Before(oldest.LastAttempt) {
			oldest = ka
		}
	}
	return oldest
}

func (a *AddrBook) addAddress(addr, src *NetAddress) {
	if a.routabilityStrict && !addr.Routable() {
		log.Warn(Fmt("Cannot add non-routable address %v", addr))
		return
	}
	if _, ok := a.ourAddrs[addr.String()]; ok {
		// Ignore our own listener address.
		return
	}

	ka := a.addrLookup[addr.String()]

	if ka != nil {
		// Already old.
		if ka.isOld() {
			return
		}
		// Already in max new buckets.
		if len(ka.Buckets) == maxNewBucketsPerAddress {
			return
		}
		// The more entries we have, the less likely we are to add more.
		factor := int32(2 * len(ka.Buckets))
		if a.rand.Int31n(factor) != 0 {
			return
		}
	} else {
		ka = newKnownAddress(addr, src)
	}

	bucket := a.calcNewBucket(addr, src)
	a.addToNewBucket(ka, bucket)

	log.Notice("Added new address", "address", addr, "total", a.size())
}

// Make space in the new buckets by expiring the really bad entries.
// If no bad entries are available we remove the oldest.
func (a *AddrBook) expireNew(bucketIdx int) {
	for addrStr, ka := range a.addrNew[bucketIdx] {
		// If an entry is bad, throw it away
		if ka.isBad() {
			log.Notice(Fmt("expiring bad address %v", addrStr))
			a.removeFromBucket(ka, bucketTypeNew, bucketIdx)
			return
		}
	}

	// If we haven't thrown out a bad entry, throw out the oldest entry
	oldest := a.pickOldest(bucketTypeNew, bucketIdx)
	a.removeFromBucket(oldest, bucketTypeNew, bucketIdx)
}

// Promotes an address from new to old.
// TODO: Move to old probabilistically.
// The better a node is, the less likely it should be evicted from an old bucket.
func (a *AddrBook) moveToOld(ka *knownAddress) {
	// Sanity check
	if ka.isOld() {
		log.Warn(Fmt("Cannot promote address that is already old %v", ka))
		return
	}
	if len(ka.Buckets) == 0 {
		log.Warn(Fmt("Cannot promote address that isn't in any new buckets %v", ka))
		return
	}

	// Remember one of the buckets in which ka is in.
	freedBucket := ka.Buckets[0]
	// Remove from all (new) buckets.
	a.removeFromAllBuckets(ka)
	// It's officially old now.
	ka.BucketType = bucketTypeOld

	// Try to add it to its oldBucket destination.
	oldBucketIdx := a.calcOldBucket(ka.Addr)
	added := a.addToOldBucket(ka, oldBucketIdx)
	if !added {
		// No room, must evict something
		oldest := a.pickOldest(bucketTypeOld, oldBucketIdx)
		a.removeFromBucket(oldest, bucketTypeOld, oldBucketIdx)
		// Find new bucket to put oldest in
		newBucketIdx := a.calcNewBucket(oldest.Addr, oldest.Src)
		added := a.addToNewBucket(oldest, newBucketIdx)
		// No space in newBucket either, just put it in freedBucket from above.
		if !added {
			added := a.addToNewBucket(oldest, freedBucket)
			if !added {
				log.Warn(Fmt("Could not migrate oldest %v to freedBucket %v", oldest, freedBucket))
			}
		}
		// Finally, add to bucket again.
		added = a.addToOldBucket(ka, oldBucketIdx)
		if !added {
			log.Warn(Fmt("Could not re-add ka %v to oldBucketIdx %v", ka, oldBucketIdx))
		}
	}
}

// doublesha256(  key + sourcegroup +
//                int64(doublesha256(key + group + sourcegroup))%bucket_per_group  ) % num_new_buckets
func (a *AddrBook) calcNewBucket(addr, src *NetAddress) int {
	data1 := []byte{}
	data1 = append(data1, []byte(a.key)...)
	data1 = append(data1, []byte(a.groupKey(addr))...)
	data1 = append(data1, []byte(a.groupKey(src))...)
	hash1 := doubleSha256(data1)
	hash64 := binary.BigEndian.Uint64(hash1)
	hash64 %= newBucketsPerGroup
	var hashbuf [8]byte
	binary.BigEndian.PutUint64(hashbuf[:], hash64)
	data2 := []byte{}
	data2 = append(data2, []byte(a.key)...)
	data2 = append(data2, a.groupKey(src)...)
	data2 = append(data2, hashbuf[:]...)

	hash2 := doubleSha256(data2)
	return int(binary.BigEndian.Uint64(hash2) % newBucketCount)
}

// doublesha256(  key + group +
//                int64(doublesha256(key + addr))%buckets_per_group  ) % num_old_buckets
func (a *AddrBook) calcOldBucket(addr *NetAddress) int {
	data1 := []byte{}
	data1 = append(data1, []byte(a.key)...)
	data1 = append(data1, []byte(addr.String())...)
	hash1 := doubleSha256(data1)
	hash64 := binary.BigEndian.Uint64(hash1)
	hash64 %= oldBucketsPerGroup
	var hashbuf [8]byte
	binary.BigEndian.PutUint64(hashbuf[:], hash64)
	data2 := []byte{}
	data2 = append(data2, []byte(a.key)...)
	data2 = append(data2, a.groupKey(addr)...)
	data2 = append(data2, hashbuf[:]...)

	hash2 := doubleSha256(data2)
	return int(binary.BigEndian.Uint64(hash2) % oldBucketCount)
}

// Return a string representing the network group of this address.
// This is the /16 for IPv6, the /32 (/36 for he.net) for IPv6, the string
// "local" for a local address and the string "unroutable for an unroutable
// address.
func (a *AddrBook) groupKey(na *NetAddress) string {
	if a.routabilityStrict && na.Local() {
		return "local"
	}
	if a.routabilityStrict && !na.Routable() {
		return "unroutable"
	}

	if ipv4 := na.IP.To4(); ipv4 != nil {
		return (&net.IPNet{IP: na.IP, Mask: net.CIDRMask(16, 32)}).String()
	}
	if na.RFC6145() || na.RFC6052() {
		// last four bytes are the ip address
		ip := net.IP(na.IP[12:16])
		return (&net.IPNet{IP: ip, Mask: net.CIDRMask(16, 32)}).String()
	}

	if na.RFC3964() {
		ip := net.IP(na.IP[2:7])
		return (&net.IPNet{IP: ip, Mask: net.CIDRMask(16, 32)}).String()

	}
	if na.RFC4380() {
		// teredo tunnels have the last 4 bytes as the v4 address XOR
		// 0xff.
		ip := net.IP(make([]byte, 4))
		for i, byte := range na.IP[12:16] {
			ip[i] = byte ^ 0xff
		}
		return (&net.IPNet{IP: ip, Mask: net.CIDRMask(16, 32)}).String()
	}

	// OK, so now we know ourselves to be a IPv6 address.
	// bitcoind uses /32 for everything, except for Hurricane Electric's
	// (he.net) IP range, which it uses /36 for.
	bits := 32
	heNet := &net.IPNet{IP: net.ParseIP("2001:470::"),
		Mask: net.CIDRMask(32, 128)}
	if heNet.Contains(na.IP) {
		bits = 36
	}

	return (&net.IPNet{IP: na.IP, Mask: net.CIDRMask(bits, 128)}).String()
}

//-----------------------------------------------------------------------------

/*
   knownAddress

   tracks information about a known network address that is used
   to determine how viable an address is.
*/
type knownAddress struct {
	Addr        *NetAddress
	Src         *NetAddress
	Attempts    int32
	LastAttempt time.Time
	LastSuccess time.Time
	BucketType  byte
	Buckets     []int
}

func newKnownAddress(addr *NetAddress, src *NetAddress) *knownAddress {
	return &knownAddress{
		Addr:        addr,
		Src:         src,
		Attempts:    0,
		LastAttempt: time.Now(),
		BucketType:  bucketTypeNew,
		Buckets:     nil,
	}
}

func (ka *knownAddress) isOld() bool {
	return ka.BucketType == bucketTypeOld
}

func (ka *knownAddress) isNew() bool {
	return ka.BucketType == bucketTypeNew
}

func (ka *knownAddress) markAttempt() {
	now := time.Now()
	ka.LastAttempt = now
	ka.Attempts += 1
}

func (ka *knownAddress) markGood() {
	now := time.Now()
	ka.LastAttempt = now
	ka.Attempts = 0
	ka.LastSuccess = now
}

func (ka *knownAddress) addBucketRef(bucketIdx int) int {
	for _, bucket := range ka.Buckets {
		if bucket == bucketIdx {
			log.Warn(Fmt("Bucket already exists in ka.Buckets: %v", ka))
			return -1
		}
	}
	ka.Buckets = append(ka.Buckets, bucketIdx)
	return len(ka.Buckets)
}

func (ka *knownAddress) removeBucketRef(bucketIdx int) int {
	buckets := []int{}
	for _, bucket := range ka.Buckets {
		if bucket != bucketIdx {
			buckets = append(buckets, bucket)
		}
	}
	if len(buckets) != len(ka.Buckets)-1 {
		log.Warn(Fmt("bucketIdx not found in ka.Buckets: %v", ka))
		return -1
	}
	ka.Buckets = buckets
	return len(ka.Buckets)
}

/*
   An address is bad if the address in question has not been tried in the last
   minute and meets one of the following criteria:

   1) It claims to be from the future
   2) It hasn't been seen in over a month
   3) It has failed at least three times and never succeeded
   4) It has failed ten times in the last week

   All addresses that meet these criteria are assumed to be worthless and not
   worth keeping hold of.
*/
func (ka *knownAddress) isBad() bool {
	// Has been attempted in the last minute --> good
	if ka.LastAttempt.Before(time.Now().Add(-1 * time.Minute)) {
		return false
	}

	// Over a month old?
	if ka.LastAttempt.After(time.Now().Add(-1 * numMissingDays * time.Hour * 24)) {
		return true
	}

	// Never succeeded?
	if ka.LastSuccess.IsZero() && ka.Attempts >= numRetries {
		return true
	}

	// Hasn't succeeded in too long?
	if ka.LastSuccess.Before(time.Now().Add(-1*minBadDays*time.Hour*24)) &&
		ka.Attempts >= maxFailures {
		return true
	}

	return false
}

redpajama_set_name: RedPajamaGithub


text:
Devon Allen is a Top Hurdler. But His True Love is Football.
Athletes have juggled two professional sports before. Deion Sanders and Bo Jackson played professional baseball and football, and Renaldo Nehemiah, the first 110-meter hurdler to run under 13 seconds, played for the San Francisco 49ers for three seasons. But none of those athletes suffered grueling injuries on the football field before trying the juggling act.
There is also the lure of the N.F.L. salary. The minimum wage for an N.F.L. player is $660,000. In professional track, no governing body sets a minimum standard for pay. Runners, the luckiest among them, at least, sign contracts with athletic brands that pay them, and they win prize money from different races. Some professional track athletes have been reported to make as little as $5,000 a year.
"I'm doing pretty well for myself in track, so it's not it's not about the money," Allen said. "That's not a motivating factor at all. Since I was a little kid, I wanted to play in the N.F.L., and I got my opportunity."
Allen signed a three-year $2.5 million contract with the Eagles. But just $40,000 is guaranteed if Allen fails to make the final 53-man roster, according to OverTheCap. And that's far from a sure bet. He proved to be a gifted receiver at Oregon, leading the team in touchdown catches as a sophomore. Still, Allen will be joining one of the best wide receiver groups in the N.F.L., led by the former Pro Bowl receiver A.J. Brown and the first-round pick DeVonta Smith. There's also the chance he could play on special teams; he thrived as a gunner on punt and kick returns at Oregon.
Lubik is confident that Allen will find a way to make the Eagles roster and shock the Philadelphia coaches, the same way he did Oregon coaches years ago.
"Every time you think he can't do something, you challenge him. Not only does he do it, but he blows it away," Lubik said, noting how Allen unexpectedly became Oregon's go-to recover as a junior and has found success after two A.C.L. surgeries. "That's why even with the challenge of the N.F.L., you can never count that guy out. I can see him being a big-time guy in the N.F.L."
Once Again, Tennis Is Disrupted by Politics
Three Astros Pitchers Combine to No-Hit the Yankees
Scott Vermillion, Former American Soccer Pro, Had C.T.E.
Dansby Swanson Has Atlanta Braves Surging in NL East


text:
Ryanair to launch one-stop website
By Matthew Fletcher
Updated: 19:00 EST, 19 February 2000
Ryanair boss Michael O'Leary is poised to turn the cut-price airline's fledgling online sales operation into a one-stop travel website.
He plans to offer travel insurance, hotel accommodation and car hire on ryanair.com later this year.
Ryanair will take a fee from companies that sell their services through the website, which has already generated sales of £3.5 million since its launch in mid-January.
O'Leary, a former tax accountant, wants to sell more tickets over the internet to reduce the airline's need to pay expensive commissions to travel agents. But he believes that the site could be selling clothing and travel magazines by the end of the year.
The news will raise expectations in the City that ryanair.com is destined for flotation because of the astronomical valuations that have been placed on dot.com businesses.
But O'Leary, whose airline is regarded as one of the most successful in Europe, said he had no plans to float despite the website's success.
'We want to concentrate on being Europe's largest low-fares airline,' he said. 'Selling tickets online will help us cut some £10 million in costs, but there is scope for using ryanair.com to sell a variety of products.
'We were approached by lastminute.com, the travel site, but we turned them down because we want to sell Ryanair tickets ourselves.'
The website is Ryanair's latest weapon in its campaign to lure bargain-basement passengers from troubled British Airways, which saw its share price slide last week to a new low of 261p before climbing back to 279 1/2p.
The Dublin-based airline recently announced that pre-tax profits for the nine months to December were £46 million, at a time when rivals such as BA and Dutch carrier KLM have reported losses.
O'Leary has built his airline's bargain-basement reputation by flying to second-rung European airports and using cheaper planes. It will add eight new routes this summer and offer fares as low as £10 for non-peak passengers on certain routes.
O'Leary has postponed plans to set up a European base because he believes there is increased scope to win passengers from BA, which is using smaller planes to concentrate on premium passengers.
An important part of Ryanair's offensive could fall in place this spring. O'Leary has been lobbying the Treasury to change the rules on airport tax - currently £10 - so that low-cost passengers do not pay the same rate as business travellers flying on more expensive tickets.
'The current system is unfair. But we expect the government to change the rules in the Budget so that passengers on low fares pay less,' he said.


text:
US House rejects Goldstone report
Congressman Brian Baird (D-WA) told Al Jazeera: "The resolution [HR867] itself, I don't think accurately characterizes the Goldstone report itself. It certainly doesn't accurately characterize, nor does it really attempt to characterize, the reality on the ground and the devastation and death that occured there. And nor does it speak at all to the suffering of the Palestinian people or what needs to happen to try to move this situation forward. And I am concerned not only about that but about the general issue of what we can do proactively to get more relief to the people in Gaza in need immediately and what we can do to try to move the peace process forward, and that includes in my judgment, cessation of settlement expansion and moving towards real progress on the ground — tangible progress."
Congressman Dennis Kucinich (D-OH) made the following statement on the House Floor about H. Res 867, which condemns the 'Goldstone Report' or the Report of the United Nations Fact Finding Mission on the Gaza Conflict:
"Today we journey from Operation Cast Lead to Operation Cast Doubt. Almost as serious as committing war crimes is covering up war crimes, pretending that war crimes were never committed and did not exist.
"Because behind every such deception is the nullification of humanity, the destruction of human dignity, the annihilation of the human spirit, the triumph of Orwellian thinking, the eternal prison of the dark heart of the totalitarian.
"The resolution before us today, which would reject all attempts of the Goldstone Report to fix responsibility of all parties to war crimes, including both Hamas and Israel, may as well be called the "Down is Up, Night is Day, Wrong is Right" resolution.
"Because if this Congress votes to condemn a report it has not read, concerning events it has totally ignored, about violations of law of which it is unaware, it will have brought shame to this great institution.
"How can we ever expect there to be peace in the Middle East if we tacitly approve of violations of international law and international human rights, if we look the other way, or if we close our eyes to the heartbreak of people on both sides by white-washing a legitimate investigation?
"How can we protect the people of Israel from existential threats if we hold no concern for the protection of the Palestinians, for their physical security, their right to land, their right to their own homes, their right to water, their right to sustenance, their right to freedom of movement, their right to the human security of jobs, education and health care?
"We will have peace only when the plight of both Palestinians and Israelis is brought before this House and given equal consideration in recognition of that principle that all people on this planet have a right to survive and thrive, and it is our responsibility, our duty to see that no individual, no group, no people are barred from this humble human claim."
Israel preparing public for a new war in Gaza
By Avi Issacharoff and Amos Harel, Haaretz, November 4, 2009
Maj. Gen. Amos Yadlin, director of Military Intelligence, announced Tuesday that Hamas launched a rocket some 60 kilometers into the sea, apparently as an experiment. Such a rocket, if fired from the northernmost point of the Gaza Strip, could strike the southern cities of the Gush Dan area – including Rishon Letzion, Holon and Bat Yam – and possibly reach as far as Tel Aviv itself.
Although Yadlin didn't specify the type of the weapon used, it appears to be a standard, foreign-made rocket smuggled into Gaza. Yadlin told the Knesset Foreign Affairs and Defense Committee that Hamas has accumulated an arsenal of rockets slightly larger than the arsenal it possessed before last winter's Operation Cast Lead.
The experiment hardly caught Israeli intelligence by surprise, as it had assumed Hamas had acquired a similar type of rocket several months ago. However, the importance of Yadlin's report should not be underestimated as this is the first tangible piece of evidence that Hamas holds a weapon capable of striking Gush Dan. It would seem Hamas has used the lull in fighting with Israel to not only restore, but improve its capabilities. Still, and similar to Hezbollah, restoring the arsenal hardly testifies to restoring motivation to confront Israel militarily. [continued…]
Editor's Comment — How can you tell when an Israeli official is lying? You can see his lips moving.
I know, an old joke, but really: are we supposed to believe this?
With international attention focused on today's debate on the Goldstone report taking place in New York at the UN General Assembly, Hamas decides to try out one of its shiny-new rockets from Iran. That's sure to steer the debate in Hamas' favor!
Then there's the dubious concept of missile testing in this context. One would assume that missiles constructed in Iran have undergone very thorough testing in Iran. "Testing" them in Gaza would simply mean depleting the inventory.
Haaretz says: "Israel believes Hamas considers the new rocket a strategic asset, a 'doomsday weapon' of sorts, and therefore avoided publicizing the experimental launch, in the hope of using the weapon as a surprise during some later confrontation."
Wouldn't a more effective way of maintaining the element of surprise be to skip the "test"?
Before the war on Gaza, Israeli hawks kept on saying that Hamas could not be trusted to maintain a truce and that it was building up its stockpile of longer-range missiles. Then Israel attacked and the long-range missile threat never materialized.
If Hamas really had such an arsenal, why didn't it use it?
Were they afraid that Israel would abandon its "restraint"? Were they afraid that Israel might use disproportionate force?
U.S. reins in its expectations for Middle East peace talks
By Jay Solomon, Wall Street Journal, November 4, 2009
The Obama administration is scaling back its ambitions for the Arab-Israeli peace process, focusing on maintaining some degree of low-level dialogue in the face of big divisions between the two sides.
U.S. officials began outlining Washington's diminished expectations as Secretary of State Hillary Clinton completes a one-week tour of the Middle East on Wednesday. She had tried to kick-start a new round of talks during stops in Israel and Arab capitals, but the divisions proved too wide to bridge.
Israeli Prime Minister Benjamin Netanyahu has refused U.S. calls for a complete freeze of settlement activity in the West Bank and East Jerusalem, and the Palestinians have ruled out resuming negotiations without the freeze.
Mrs. Clinton subsequently pressed Arab leaders to agree to support talks with just a partial Israeli freeze. But barring that, U.S. officials said all sides might be forced to accept a lower level of engagement in the talks to guard against a new round of violence in the Palestinian territories.
There is a fear that militant groups, such as Hamas in the Palestinian territories and Hezbollah in Lebanon, could use a political vacuum to spark renewed violence.
More on Mideast Peace Talks
"There's value in having the process" in itself, said State Department spokesman P.J. Crowley on Tuesday. In a sign of the administration's changing focus, Mr. Crowley added: "If this particular path, we think, can't get us there, we'll look for others." [continued…]
'Jewish terrorist' suspected in murder blamed on Palestinians
By Chaim Levinson, Haaretz, November 4, 2009
Police suspect that Yaakov (Jack) Teitel, who has confessed to murdering two Palestinians and carrying out a long list of other, less deadly, terror attacks, also murdered two traffic policemen in the Jordan Valley eight months ago – a crime originally attributed to Palestinian terrorists.
Haaretz reported on Tuesday that police suspected Teitel of other murders in addition to those of the two Palestinians, but at the time, a gag order was still in place that prevented specifying which murders.
The policemen, Warrant Officer David Rabinowitz and Senior Warrant Officer Yehezkel Ramzarkar, were shot while sitting in their patrol vehicle near Moshav Massua. The subsequent investigation indicated that the assailant had lain in wait at the turn-off from the main road to Massua and did something to make them stop and roll down their window. He then shot them from point-blank range. No damage was done to the vehicle, and nothing was taken from it.
Teitel denied responsibility for these murders, and it not clear what evidence the police have against him. But a police source said yesterday that Teitel's modus operandi in the crimes he has admitted to "precisely matches" that of the policemen's murder.
The police and the Shin Bet security service have long assumed that the policemen's killer acted alone, and not as part of an organization, making it difficult to get information about the crime. And while the police considered the possibility that the murder was criminal rather than the work of terrorists, three different lines of inquiry had drawn blanks, leaving investigators utterly in the dark. [continued…]
This entry was posted in Congress, Editor's comments, Goldstone Report, Hamas, IDF, Israel-Palestinian conflict, Israeli occupation, War on Gaza, Zionism on November 4, 2009 by Paul Woodward.
← McGovern: get out of Afghanistan Italy convicts 23 Americans for CIA renditions →
1 thought on "US House rejects Goldstone report"
Phillip Wilder November 4, 2009 at 7:31 pm
It is so sad to see this country's position in the world continue to deteriorate further. Israel and the US are bound together on a road deeper into isolation and self destruction.