An attorney disabled due to pregnancy, childbirth and/or any complications arising from those conditions is treated in the same manner as attorneys who are disabled for any other medical reason and is eligible to receive disability benefits according to the terms of the disability income benefits program of the firm.
Given the demands of the job and the high expectations for performance placed on all attorneys, the firm presumes disability for a period of twelve weeks following the birth of a child, and grants paid disability leave for this period, without the need for independent medical verification of disability.
In addition, a pregnant attorney may elect to leave work up to two weeks prior to the anticipated date of birth without medical certification of disability. These two weeks are in addition to the regular disability leave outlined above.
In either instance, the attorney must notify the firm's benefits coordinator of the date of commencement of her disability leave and the date of the birth of her child, so that adequate records can be maintained.
Regardless of when the attorney elects to commence her presumptive disability period, disability leave in excess of the allotted number of weeks is granted only in the event that the employee provides the firm's benefits coordinator with the appropriate medical certification as required for other disabilities covered under the disability policy.
The use of disability leave as a result of pregnancy, childbirth and related medical conditions shall not be a factor in or affect a partnership (or other promotional decision) or salary increase determination. Pregnancy, childbirth and related medical conditions are an integral part of human existence; they are not to be considered as voluntary and optional undertakings by the affected lawyers.
The use of disability leave as a result of pregnancy, childbirth and related medical conditions may affect the timing of the parmership (or other promotional decision) or salary increase determination only to the extent that other medical disabilities affect the timing of the partnership or salary increase determination. For example, if the use of medical leave to recover from gall bladder surgery would not affect the timing of the determination, neither can the use of medical leave for pregnancy or childbirth.
At the attorney's option, the attorney may also apply for a leave of absence under the firm's childcare leave policy as set forth in Policy 2 below.
This policy was originally developed to comply with the requirements of Title VII of the Civil Rights Acts of 1964. It is applicable to the medical conditions experienced as a result of being pregnant, of bearing a child, and of recovering from childbirth. This type of leave is sometimes referred to as maternity leave, but it should not be confused with leave to parents (male and female) for the purpose of caring for an infant or child after its birth. Those leaves are covered under Model Policy 2: Childcare Leave.
The Pregnancy Discrimination Act of 1978 requires employers who are covered by Title VII to treat women affected by pregnancy, childbirth and related medical conditions the same as non-pregnant persons who are "signilar in their ability or inability to work .... for all employment-related purposes, including receipt of benefits under fringe benefit programs."
This policy therefore simply restates the effect of that law. Thus, if the law firm has a disability benefit program which permits paid or unpaid leaves to persons with non-pregnancy disabilities, it must offer the same paid or unpaid leaves to women affected by pregnancy, childbirth or related medical conditions.
If a firm does not have a general disability benefits program as assumed in section A, such a firm may nevertheless wish to consider offering a paid or unpaid leave for pregnancy, childbirth or related medical conditions, to the extent this is economically feasible. Alternative A has been drafted to serve that purpose.
The Supreme Court has held in California Federal Savings and Loan Association v. Guerra, 479 U.S. 272, 107 S.Ct. 683, 93 LEd.2d 613 (1987) that the Pregnancy Discrimination Act was intended by Congress to be "a floor beneath which pregnancy disability benefits may not drop -- not a ceiling above which they may not rise." 107 S.Ct. at 692 (approving the language of the Court of Appeals at 758 F.2d 390, 396 (9th Cir. 1985)). In that case a California statute which required employers to provide leave and reinstatement to employees disabled by pregnancy, but not by other conditions, was found not to be a violation of Title VII because of its provisions favoring pregnant workers above other disabled workers.
Because the period of disability for a normal, uncomplicated pregnancy and delivery can be generally approximated, many firms prefer to establish a presumptive period of disability for which the disabled attorney need furnish no medical verification. Such a presumptive period eases the administrative burden on both the firm and the affected attorney.
This policy uses the presumptive period of 12 weeks for all childbirth under the assumption that the work of an attorney may be so demanding in terms of time, commitment, stamina and potential stress that optimal physical fitness is necessary for performance of the job. Some firms may opt for a shorter presumptive period.
This policy does not include any provision regarding the effect of the employee's resignation or termination of employment upon the use of disability leave. Resignation or termination of employment at the end of the disability period in no way affects the use of the disability benefits since the employee has earned the right to those benefits by her work preceding the disability period.
Some organizations specify that the right to take childbirth disability leave is contingent upon the attorney advising the firm in advance that she intends to return to work on some basis at the end of the leave period. Such a provision is not permitted, however, unless such a requirement is also imposed on the use of other types of medical disability leave.
This policy has no provision about reinstatement upon completion of the leave. The lawyer, however, must be reinstated when the leave is completed. Some organizations, especially those with highly structured departments, may prefer to include a provision indicating whether the attorney, upon return to work, will be placed in the same or an equivalent position.
Attorneys working on a reduced or flextime schedule or using a telecommuting arrangement who are affected by pregnancy, childbirth and related medical conditions receive the same disability benefits that such attorneys with non-pregnancy disabilities receive under the general disability policy.
Where attorneys with reduced work schedules are not covered by a disability leave program, the firm or organization may nevertheless opt to institute such a leave for personnel affected by pregnancy, childbirth or related medical conditions.


It's no secret that freezing temps and cold wind can take a toll on your skin, but so can showering too often! "Overshowering can lead to dryness, redness, and irritation of the skin, and even precipitate skin conditions such as eczema," Dr. Robinson explains. Based on your activity level, showering every day may be overkill. For the average adult, showering every other day is sufficient to cleanse the skin withhout stripping away skin's natural moisture. Here's more inspiration for cutting back on your showers (including that it will help preserve your hair color!).
Ditch the bar soap! "Traditional bar soaps can strip the skin of its natural oils, leading to dryness," says Dr. Robinson. Instead, opt for a rich, soap-free formula, such as Olay Ultra Moisture Body Wash or Yuni Concentrated Body Cleansing Creme. For an extra moisturizing dose, finish with a in-shower lotion like Jergens Wet Skin Moisturizer that you apply and rinse off in the shower.


A Quiet Day is an on-campus "retreat." We come together to hear a speaker give brief talks, and keep silence in between. Our speaker this Saturday is Fr. Eddy Rix, former Dean of Students at King's and current Priest-in-Charge at All Saints' Church in Wynnewood, Pennsylvania.
Talks begin at 9:00am, 10:00am, and 11:00am, with a light lunch to follow in the Senior Common Room at 11:30. The bell is rung to mark the beginning of each talk so that wherever you are on campus, you can gather in the Chapel for the next talk.


I woke up early for a Sunday. Had an appointment with JW to go compare our weekend thoughts about my big idea. As always, I was worried about strife, but there wasn't any which means not only what I'm saying makes a lot of logical sense (or perhaps I'm just peddling my wares with brevity), but also that it's in the flow of the right time, the right place, and the right people. That is particularly important, this idea is big in scope and time.
I nailed down the first ten milestones and need to lay down the rest probably before Tuesday. I don't know where that leaves Korean class this week. Last week it needed to go under the bus so the party would/could go on. This week, I can't decide if that is necessary. Then again, I never did get a good breakdown of what I missed or the homework assignment. Decisions, decisions.
After the meeting, I met up with LG who followed me back home to borrow my Folse writing book. The recordings I made at his lectures last year finally saw the light of other people's ears when I shared them via Dropbox to MS, LG, and PP. We got to talking about parts of my big idea (what has dribbled out here and what sharing an office has brought his ears). I opened the gate while talking and was too focused on the barking angels to deactivate the alarm system. This led to a call from Meow who'd received a call from ADT. At least we know the system works, for reals. I made coffee and LG and I continued to talk big and about the PDF in general until Meow came home.
When LG left, we decided it was a perfect time to take the dogs for a walk as we both had street clothes on and were in a general DO mode. The day was warmer, but still chilly. The overcast sky gave me a lot of chances to torture Twitchy while I stopped to pictures of lifeless trees without birds.
I spent the remainder of the day backposting and listening to music (until Meow phoned me to complain that my music had too much "bass"). Then I switched to quality television programming like Wizards vs. Aliens.
Of the things I considered DOing: playing more Sudoku, grading homework assignments, writing a lesson plan for next-next week, finishing the TOEIC Rubric, studying Korean, adding new things to my whiteboard, typing up the milestones, plugging the bass back in, tearing out the ceiling in my office.
That last one. That's an important one. There is a creature between the roof and the ceiling. Or creatures. It or they run about and I heard them above my office tonight. Last night Meow heard it or them above her in the living room. It (they?) is too big to be a mouse. My money is on cat creature.


text:
module Foursquare2
  module Pages

    # Get information about a page.
    #
    # /!\ A page is considered by Foursquare as a user.
    # @param [Integer] user_id - Page to get information for.

    def page(user_id, options = {})
      response = connection.get do |req|
        req.url "pages/#{user_id}", options
      end
      return_error_or_body(response, response.body.response.user)
    end

    # Search for pages.
    #
    # @param [Hash]  options
    # @option options String :twitter - Match on twitter username
    # @option options String :fbid - Match on facebook id.
    # @option options String :name - Match on name

    def search_pages(options = {})
      response = connection.get do |req|
        req.url "pages/search", options
      end
      return_error_or_body(response, response.body.response)
    end

    # Get all venues for a given page.
    #
    # @param [String] page_id - The page to retrieve venues for.
    # @param [Hash]  options
    # @option options Integer :limit
    # @option options Integer :offset - For paging through results
    # @option options String :ll - Latitude and longitude in format LAT,LON - Limit results to venues near this latitude and longitude. NOT VALID with NE or SW (see after).
    # @option String :radius - Can be used when including ll. Limit results to venues within this many meters of the specified ll. Not valid with ne or sw.
    # @option String :sw - With ne, limits results to the bounding quadrangle defined by the latitude and longitude given by sw as its south-west corner, and ne as its north-east corner. Not valid with ll or radius.
    # @option String :ne - See sw

    def page_venues(page_id, options = {})
      response = connection.get do |req|
        req.url "pages/#{page_id}/venues", options
      end
      venues = return_error_or_body(response, response.body.response.venues)
      venues = Foursquare2.filter(venues, options[:query]) if options.has_key? :query
      venues
    end

    #
    # Returns a list of managed pages.
    #

    def managed_pages(options = {})
      response = connection.get do |req|
        req.url "pages/managing", options
      end
      return_error_or_body(response, response.body.response.managing)
    end
  end
end

redpajama_set_name: RedPajamaGithub


Ecomm ⋆ 100% Private Proxies - Fast, Anonymous, Quality, Unlimited USA Private Proxy!
I just started at a new company and they have Sitecore for the CMS and Magento for eCommerce Platform. Are they even compatible – can they be integrated, should I move CMS to Magento?
I am building a Cart and to be able to delete a product I would like to use "Remove" instead of an "x" icon. I think using the words will pay better with older folks who have harder time with icon recognition, and two, main retails are using this (Amazon, Walmart). Does anybody have any research behind this they can share?


text:
by Corrina Lawson | Jan 29, 2019 | Uncategorized | 0 comments
copyright Corrina Lawson
Lo, several years ago (or more), I decided I wanted to write a short Sherlock Holmes-style story and "steampunk it up."
I shake my head at my younger writing self because, of course, creating a steampunk world and characters to inhabit it isn't that simple. But, eventually, that short story became The Curse of the Brimstone Contract, my best-selling book.
And, finally, there's a sequel, or, rather, a continuation of the story of Joan Krieger, dressmaker and rebel, and consulting detective Gregor Sherringford: A Hanging at Lotus Hall.
A Hanging at Lotus Hall is a murder mystery, it's a science fiction story that includes some interesting gadgets, it's a story of how magic changes a world, but, most of all, A Hanging at Lotus Hall is the story of how two people of a different class who love each other attempt to negotiate a partnership, emotionally, logically, and intimately.
Here's the opening. It's due out 2/5 and also available in paperback! :
Joan Krieger had fought hard to have choices of her own. But, she reflected, having those choices definitely had complicated her life.
Take the offer that the Headmaster of the Isca School, John Moriarty, had just presented to her, one that seemed too good to be true.
"You do me great honor, sir," Joan said, playing for time, and set her teacup and saucer on the table next to the chair. A quite comfortable chair, she reflected, upholstered with velvet cushions. It matched the rest of the office of the headmaster, furnished in dark woods and burgundy couches and chairs of the softest fabric. It was a place designed to relax the peers of the realm, who sent their sons to Isca to hone their mage talent.
It had the opposite effect on Joan, setting her teeth on edge. She suspected Moriarty knew that.
How much did he know about her semi-illegal activities with magic?
She folded her hands in her lap to cover her reaction. It was worrisome, of course, that she had gained the attention of the highest official of the Metaphysical Society. But surprising that the headmaster had asked her to teach girls gifted with magic.
Her pleasure was tempered by cynicism. There must be a catch. Again, how well was Moriarty informed of her covert efforts with magic in her detective work?
"Would it be fair to say this would be a massive change in your school's position that only men can properly handle the power inherent in the mage gift?" she asked.
"The world changes and we must change with it, Miss Krieger."
"Indeed," she agreed.
He caught her gaze and held her full attention, something few people could do. It spoke to the power contained in his unassuming form, power that she sensed, even though he kept it leashed. He resembled a clerk with his drab (but well-fitting) gray suit and pants. His hair had receded, revealing a large forehead that showcased his alert brown eyes. Moriarty had the reputation of being able to calm the most rambunctious mage-gifted peers' sons.
Joan suspected Moriarty missed nothing, from the laces of her fine leather boots to the perfect fit of her self-made dress, this one in gray to match the businesslike, perhaps even somber, occasion. He'd started off by offering her a carrot. Where was the stick?
"In these times, the smallest change is often greeted with suspicion," Joan said. "This is a great change, not a small one. Is your staff supportive of it? And the Metaphysical Society?"
In other words, what was she getting into if she agreed to take the position? Trouble, of course, and that was interesting in itself. But she wanted specifics. It was always possible Moriarty could be an ally.
Moriarty pursed his lips. He'd expected her to jump at his offer, not question it. She waited for him to say more. After all, he'd asked her to his school, to his office. That meant he needed her, in some form. "Possess the soul in patience," went the old play, as Gregor was fond of quoting. Good advice in this situation.
"I cannot claim the idea to teach girls to hone their mage talent is without opposition, that's true. I'm prepared for objections on that score," Moriarty said.
"Are you, truly?" Did he realize how widespread the wrong-headed perception that women were too flighty and weak to handle the mage gift was?
Moriarty sighed and placed his teacup and saucer on the coffee table with the ornately carved feet. "Those objections are why, for now, I propose only a single course, and that for a limited time, to teach the girls the basic foundations of magic."
"And what do you propose for later, sir?" Joan sipped her tea. Moriarty was taking his time, leading her down a path by doling out his offer in bits and pieces.
"Once we begin to teach the girls, it will be obvious that some of them will need to continue their education."
"Naturally," she said.
"And at some point, depending on how fast they come along, we will need a mage school for girls."
Oh, she well knew of this need. If she'd attended a mage school or if her mother had, her life would be utterly different.
But for now, only boys who were peers of the realm or sponsored by peers of the realm were allowed to openly learn magic. That law wasn't strictly enforced because, well, the Empire needed mages.
"And do you propose to teach girls of all classes?" she said, baiting him.
"It is for only noble girls," he replied, "But, think on this: if a mage school for girls eventually receives the sanction of the Isca School and the Metaphysical Society, you would be able to take in some scholarship students. If you were the headmistress, that is."
The approval of the Metaphysical Society meant official sanction.
It wasn't an easy thing to convince anyone to entrust their mage-gifted children to a stranger. Damn it all, she could not even convince her own family to let her test her cousins for the gift. But with the stamp of approval from the Metaphysical Society, girls would be lining up to learn. By dangling the possibility of scholarships at the potential school, Moriarty would give Joan the power to make dreams come true, even for common girls.
"Establishing a mage school for girls is several steps ahead of simply teaching one course, and none of those steps are certain." She stood, her skirts rustling as she walked to the window of his office, which looked out upon the quad. At this time of day, it was empty, the pupils hard at work in the brick buildings surrounding the quad. The boys were either from the "best" families or approved by them. The feeling was that the "lesser" classes, like all women, either lacked the mage gift or were too stupid to learn how to use it properly. She was proof that both assumptions were wrong.

redpajama_set_name: RedPajamaCommonCrawl


text:
ICPC closes fraud investigation on suspended SEC DG
Mounir Gwarzo
By Taiwo Ojoye
Eniola Akinkuotu, Abuja
The Independent Corrupt Practices and other related offences Commission has completed investigations into the suspended Director General of the Securities and Exchange Commission, Mr. Mounir Gwarzo, The PUNCH can report.
It was learnt that Gwarzo's case file had been forwarded to the legal department of the ICPC for further action.
The legal department of the commission is expected to either file charges against the suspended SEC boss or recommend that the case be closed if there is not enough evidence.
The spokesperson for the ICPC, Mrs. Rasheedat Okoduwa, told our correspondent on Monday that the case file had indeed been sent to the legal department.
She, however, said she would not speak further on the case but would allow the legal department to do its job.
Okoduwa said, "I can confirm that the investigations into the SEC DG regarding his activities at the exchange commission have been completed. The case file has also been sent to the legal department for further action. That is all I can say for now."
Gwarzo, who was recently recommended for dismissal by the panel set up by the Ministry of Finance, is accused of perpetrating several acts of corruption.
The other officials suspended alongside Gwarzo include the Head of Media Division, Mr. Abdulsalam Naif and the Head of Legal Department, Mrs. Anastasia Braimoh.
The suspended SEC boss allegedly paid a severance allowance of over N104m to himself less than a month after assuming office.
He also allegedly awarded contracts to some firms he had interests in or firms owned by his relatives and cronies.
The firms include: Outbound Investment Limited, Medusa Investment Limited, Northwind Environmental Services, Micro-Technologies Nigeria Limited, Tida International Limited, Outlook Communication, Acromac Nigeria Limited, Balfort International Limited and Interactive Worldwide Nigeria Limited.
Ex-Lagos AG arraigned over P&ID scam, gets bail
Lagos housewife accuses husband of N71m fraud, assault
EFCC grills NDDC's director over N25bn fraud
In one of the petitions written against Gwarzo, it was alleged that one of the companies, Outbound Investment Limited, is owned by the suspended SEC boss while another firm, Medusa Investment Limited, is jointly owned by Gwarzo and his wife, Khadija.
The petition partly read, "Mr. Gwarzo and two of his relatives are directors of Outbound Investment Limited. Since Mr. Gwarzo resumed office as the DG of the commission, the company has been the sole supplier of diesel to the commission.
"The company has also supplied air conditioners to the Lagos zonal office of the commission as well as supplied fridges to the commission. Payments made by the commission to the company for contracts executed can be verified from the company's bank account held with account number 1016723428.
"Mr. Gwarzo is also the Director of Medusa Investment Limited. The only other director of the company is Khadija Mustapher, who is also his wife. The company has actively been used to carry out illegal transactions through the company's bank account with Guaranty Trust Bank with number 0023953920."
In the petition which has been sent to the House of Representatives, Gwarzo was accused of diverting money from the commission under the pretext that he was organising staff training.
Some shell companies which lacked the requisite expertise were said to have been paid bogus sums of money for the trainings.
The petitioner added, "Prior to Mr. Gwarzo's tenure, the commission used to pay between the sums of N60,000 to N150,000 to reputable training providers such as the Chartered Accountants of Nigeria, Nigerian Institute of Management, Financial Institutions Training Centre, Nigerian Institute of Advanced Legal Studies, Lagos Business School and Centre for Management Development to train members of staff of the commission."
"However, when Mr. Gwarzo assumed office of SEC DG, he commenced paying sums ranging from N700,000 to N780,000 per staff (sic) as training fee to training institutions owned by his friends and associates."
The suspended SEC DG has, however, denied the allegations levelled against him, insisting that he is being persecuted by the Minister of Finance, Mrs. Kemi Adeosun, for his refusal to stop forensic audit of Oando Plc.
EU to deploy 100 observers for 2023 polls
Japa: FG warns against illegal migration
Ukraine bans officials, lawmakers from travelling abroad
Cardinal accused of sex assault quits Vatican job


Dreaming of ditching your 9-5 and building an online business?
Ready to take massive action to design a business and life you love?
Ready to see exactly how you can take your skill set and turn it into a profitable online business while working from anywhere?
Are you ready to ditch your 9-5 for a business and life that you love instead of fighting with yourself daily about a job you're not a fan of?
Hey there! I'm Amanda Boleyn and I help women just like you go from cushy, comfortable, corporate to finding their freedom way of building an online business that works for them and their skill set.
You can read my full story, here where I share my entire journey with you on how I left corporate and ended up to where I am today.
I'm so excited you're here and I look forward to serving you and your journey!
Meet other women making the leap from their 9-5 to running their own business.


people to each other, and the good things we can do together.
Our biggest challenge in employee engagement is overcoming fear to create the confidence and openness that enables teams and organisations to succeed in the most difficult times.
A powerful way to create greater employee engagement is to listen with genuine interest and then show by your actions that you listened.
I am personally most engaged at work when I'm doing what I said I would and making great things happen.


In celebration of the 2014 Grammys and a very good year in music (Daft Punk, anyone?), Roger Zamudio's Red Carpet Events LA staged an intimate and very tasteful event at the W Westwood that was as much a celebration of clever accessories and items made in the USA, and Los Angeles in particular.
Although the banner charity, African Millennium Foundation (AMF), benefits women and children halfway around the world, it is certainly a cause many of the celebrities in attendance can get behind. One of the most admirable of the made-in-LA inventions on display was the work of Los Angeles high school student Leigh More, who helped establish the AMF-affiliated project Girls Helping Girls, which trains young women orphaned by Aids to express themselves creatively through jewellery-making.
AMF raises money and awareness to help its beneficiaries receive the tools they need to combat poverty, hunger and disease at its very root by providing African women and children with the necessary tools for achieving self-sufficiency. The current Apron project helps Mozambique mothers feed their children and communities with the installation of solar-powered ovens.
The clothing line Felio Siby was a perfect pairing for the charity. While the collection features designer jeans, T-shirts, handbags and more polished sportswear items, a lot of what was on display had motifs that celebrated the legacy of Nelson Mandela as well as protecting African wildlife. There was also the newly launched, affordable sportswear line Nredom Snoitom. While the company has been producing private-label and house brand apparel for department stores, they are launching their own retail operation in downtown Los Angeles, with a collection that has a bit of everything, from preppy basics, to ethnic folk prints to lace and floral patterns.
Louisville, Kentucky-based jewellery designer Ronaldo, who made a splash at one of last year's Oscar suites, was not only back with his lovingly forged line of sterling silver and gold-wire bracelets and bangles with and without pearls, but also some intricate one-of-a-kind cameo collars as well as semiprecious stone solitaire rings, earrings and cuffs. While some of last year's featured designs had a delicate Florentine feel, expect more pieces inspired by Italy to appear in his online store as well as the 900 retailers across the US carrying his collection.
Other fantastic LA companies bringing something new to the plate included Joy and Mario, whose espadrilles give a Franco-Spanish classic a modern, urban LA twist; Elin Bianco, which is bringing fine and innovative Israeli skin and hair care to boutiques in the States; Pursenal Butler purse stands, a clever organizer that makes it easy for us to find that favourite bag when pinched for time; Rafia, whose jewellery represents the perfect hybrid of LA boho chic and East Indian luxury. The line is the product of a Mother-daughter team, and a rarity in that there is literally something for everybody, from delicate sterling silver and gold-filled chains with semiprecious stones to bold collars, cuffs and statement pieces that run the gamut from earthy to edgy—much like the musicians who attended themselves.
There were also some thirst-quenching treats, including Purity Organics coconut water and juices, Devotion Vodka which starts with an eye-catching bottle and some tempting flavours and adds to the formula a made-in-America pedigree and a formula that is sugar- and gluten-free as well as distilled using artisanal techniques; and BodyShots, a new tequila experience that turns a cocktail into something a little more intimate.


text:
İnceburun  Lighthouse  () is an active lighthouse on the Black Sea coast in Sinop Province, Turkey.

The masonry lighthouse was constructed in 1863 on İnceburun (), on the cliffs of the northernmost point of Anatolia. It is situated about  northwest of Sinop. The -tall lighthouse tower with a gallery around the lantern room has the form of an octagonal prism in the upper half sitting on a square-plan base, and is white painted. A one-story keeper's house is attached to it, and three additional buildings belong to the light station. At a focal height of , it flashes white four times every 20 seconds.

The lighthouse is accessible but the tower is closed to the public. The lighthouse keeping is served by Family Çilesiz, who do the job in fifth generation.

References

Buildings and structures in Sinop Province
Lighthouses in Turkey
Lighthouses completed in 1863
1863 establishments in the Ottoman Empire
Lighthouses of the Black Sea
Tourist attractions in Sinop Province

redpajama_set_name: RedPajamaWikipedia


Driving around neighborhoods on these early spring days you may see a small garden tree full of purplish-pink flower on bare branches. This is the Eastern Redbud – Cercis canadensis. It is hardy in zones 5-9 and grows slowly to a mature height of 25′ or so, making it an excellent choice for smaller gardens. It requires full sun or part shade conditions and very little maintenance. An added bonus to planting this tree is that it attracts Hummingbirds, giving them the food they need early on in the season.
After the tiny pea-shaped flowers diminish it produces these almost heart shaped leaves.
Another lovely cultivar is the Cercis candensis 'Forest Pansy' which boast the same flowers in early spring but, purple leaves.
This entry was posted in Uncategorized on April 17, 2015 by creativegarden.
Gather 'round the dining table or the fireplace, or simply sit back and enjoy the pleasant, colorful and peaceful surroundings. Once barren, this backyard is now THE place to be. Creative Garden Spaces was contracted to create the master garden design including site planning, hardscape recommendations and plant selection.
Using detailed plans, the homeowner completed the project including the building of retaining walls, patios and fireplace.
This entry was posted in Portfolio on January 12, 2014 by creativegarden.
By learning to see the yard as an extension of the home, this once uninviting space was transformed into an ultimate getaway.
The outdoor kitchen area is paired with a covered patio for easy grilling and alfresco dining. Comfortable chairs pulled up to the fireplace invites lively conversation or makes a quiet place for contemplation.
This entry was posted in Portfolio on January 10, 2014 by creativegarden.
Creative Garden Spaces was hired to create an outdoor living space complete with full kitchen and fireplace. The catch? Stay within the parameters of the existing slate patio and cover the space for year-round use.
A fireplace was positioned to support the outer corner of the space, large beams were installed to support the roof and skylights were added to minimize darkening of the house interior. The kitchen includes a 42″ bbq grill, 24″ griddle, double-sided burners, full size sink plumbed with hot and cold water, a refrigerator and a keg-o-rator. The fireplace and cook island were faced with cultured stone. Concrete countertops top the cook island.
This entry was posted in Portfolio on January 9, 2014 by creativegarden.
Creative Garden Spaces was asked to create new spaces, and to refresh and enhance existing spaces, pulling them together in a way that draws the visitor from one space to another. Bit by bit, the entire acre is being transformed — with planting areas being completed by the owner.
New spaces included the building of a large natural stone fireplace to balance the heaviness of the existing pergola and expansive deck. A 6′ retaining wall with a bench seat that surrounds the spillway was designed around a lion's head wall fountain to divide the upper and lower yards. Rotten wood steps were replaced with concrete in about the same place, but terraces were added to enable planting areas.
This entry was posted in Portfolio on January 8, 2014 by creativegarden.
Creative Garden Spaces designed and created spaces to reflect the homeowners clean, contemporary style. Plantings were kept to a minimum number of varieties, planted in mass. Large scale pavers maintained the clean look while a low-profile gas fireplace provided an unobstructed view of the lake. The existing large back deck was enhanced by defining "rooms" with creative use of furniture arrangements and containers.
This entry was posted in Portfolio on January 7, 2014 by creativegarden.
What began as a "what to plant where" project turned into the reshaping of existing planting beds, removal and transplant of existing plants and a planting plan to fill in.
In addition, Creative Garden Spaces expanded the existing deck and sitting area by installing a slate patio surrounded by plants. A pop of color unites the spaces with comfy furniture cushions and glazed containers.
This entry was posted in Portfolio on January 6, 2014 by creativegarden.
Having a pool presents some security issues. Rather than the typical wood or chainlink fence, Creative Garden Spaces designed a custom lattice fence and arbor that leads guests from the driveway through the side yard and to the pool. Once inside the space, the pool was designed with the minimum amount of pool decking to place more emphasis on the lawn and planting areas. Fast growing trees were added for privacy.
Project #8: Time for a Swim!
This entry was posted in Portfolio on January 5, 2014 by creativegarden.
With a little ingenuity, a narrow back yard is reworked to fit a fireplace sitting area, an outdoor kitchen and eating area. Creative Garden Spaces expanded the existing deck to accommodate the cook island to include a 36″ KitchenAid grill, built-in ice chest and sink plumbed with cold water. The soapstone countertop has an etched and fused glass backsplash. Wide stairs lead to the fireplace sitting area on the lower deck which spills out into a planted side yard.
In addition, retaining walls were added to the front yard to ease maintenance, an existing rock and concrete bowl were made into water features and the entry was given a facelift with a new concrete step covered with the same tile as just inside the door. The bed at the front was updated with lush plantings to complement the existing maple and azalea, and a concrete path was replaced with a softer natural stone path. A vegetable garden behind the fireplace, along with trellis' on each side of the fireplace, complete the plan.
This entry was posted in Portfolio on January 4, 2014 by creativegarden.
An upcoming wedding put this yard re-do on the fast track. Challenges included handling elevation changes, defining large expansive areas and preserving the view.
Creative Garden Spaces expanded the existing stamped concrete patio using pavers that simulate stone. Low walls, pathways and wide stairs traverse the property leading to specifically defined areas. An oval patio served as the place for the wedding ceremony to take place, but easiy converted to a place to relax an enjoy the view. A 6′ fire pit encourages lots of conversation. Low growing plants preserve the view while providing color throughout the season.
This entry was posted in Portfolio on January 2, 2014 by creativegarden.
An outdoor table and cushy chairs beckon you to spend more time enjoying the outdoors. Create a space where you can invite friends and have them feel comfortable.
Experience outdoor living at it's finest!
Contact residential landscape professional Debbie Brooks at Creative Garden Spaces.


We create awesome resume, both the well written and designed. Sometimes just great content is not enough to get noticed, its worth having a great design too.
You can call us at 9811917157, 9711119788, 01142484668 | Just SMS or WhatsApp Template Number at 9811917157 to get an instant call back.
Anyonyam Consulting Services is a Delhi based manpower recruitment firm/ agency. To contact us for all your recruitment needs you can simply write an email to us at info@anyonyam.com or give us a call at 9811917157, 9711119788.


text:
package lowring

import (
	"math"
	"time"

	"github.com/gholt/holdme"
)

type Node uint16

const NilNode Node = math.MaxUint16

type Ring struct {
	NodeToCapacity              []int
	NodeToGroup                 []int
	GroupToGroup                []int
	ReplicaToPartitionToNode    [][]Node
	MaxPartitionCount           int
	Rebalanced                  time.Time
	ReplicaToPartitionToWait    [][]uint16
	ReassignmentWait            uint16
	MaxReplicaReassignableCount int8
	ReplicaToNodeToPartitions   [][][]uint32
}

func New(replicaCount int) *Ring {
	ring := &Ring{
		GroupToGroup:             []int{0},
		ReplicaToPartitionToNode: make([][]Node, replicaCount),
		MaxPartitionCount:        8388608,
		ReplicaToPartitionToWait: make([][]uint16, replicaCount),
		ReassignmentWait:         60,
	}
	m := replicaCount - int(float64(replicaCount)/2.0+0.5)
	if m < 1 {
		m = 1
	}
	ring.MaxReplicaReassignableCount = int8(m)
	for replica := 0; replica < replicaCount; replica++ {
		ring.ReplicaToPartitionToNode[replica] = []Node{NilNode}
		ring.ReplicaToPartitionToWait[replica] = []uint16{0}
	}
	return ring
}

func (ring *Ring) FillReplicaToNodeToPartitions() {
	if ring.ReplicaToNodeToPartitions == nil {
		replicaCount := len(ring.ReplicaToPartitionToNode)
		partitionCount := len(ring.ReplicaToPartitionToNode[0])
		nodeCount := len(ring.NodeToCapacity)
		for replica := 0; replica < replicaCount; replica++ {
			nodeToPartitions := make([][]uint32, nodeCount)
			ring.ReplicaToNodeToPartitions = append(ring.ReplicaToNodeToPartitions, nodeToPartitions)
			partitionToNode := ring.ReplicaToPartitionToNode[replica]
			for partition := 0; partition < partitionCount; partition++ {
				node := partitionToNode[partition]
				if node != NilNode {
					nodeToPartitions[node] = append(nodeToPartitions[node], uint32(partition))
				}
			}
		}
	}
}

func (ring *Ring) SetReplicaCount(v int) {
	if v < len(ring.ReplicaToPartitionToNode) {
		ring.ReplicaToPartitionToNode = ring.ReplicaToPartitionToNode[:v]
		ring.ReplicaToPartitionToWait = ring.ReplicaToPartitionToWait[:v]
		if ring.ReplicaToNodeToPartitions != nil {
			ring.ReplicaToNodeToPartitions = ring.ReplicaToNodeToPartitions[:v]
		}
	} else {
		for v > len(ring.ReplicaToPartitionToNode) {
			partitionToNode := make([]Node, len(ring.ReplicaToPartitionToNode[0]))
			for partition := len(partitionToNode) - 1; partition >= 0; partition-- {
				partitionToNode[partition] = NilNode
			}
			partitionToWait := make([]uint16, len(ring.ReplicaToPartitionToWait[0]))
			ring.ReplicaToPartitionToNode = append(ring.ReplicaToPartitionToNode, partitionToNode)
			ring.ReplicaToPartitionToWait = append(ring.ReplicaToPartitionToWait, partitionToWait)
			if ring.ReplicaToNodeToPartitions != nil {
				ring.ReplicaToNodeToPartitions = append(ring.ReplicaToNodeToPartitions, nil)
			}
		}
	}
}

func (ring *Ring) AddNode(capacity int, group int) Node {
	node := Node(len(ring.NodeToCapacity))
	ring.NodeToCapacity = append(ring.NodeToCapacity, capacity)
	ring.NodeToGroup = append(ring.NodeToGroup, group)
	if ring.ReplicaToNodeToPartitions != nil {
		for replica := len(ring.ReplicaToNodeToPartitions) - 1; replica >= 0; replica-- {
			ring.ReplicaToNodeToPartitions[replica] = append(ring.ReplicaToNodeToPartitions[replica], nil)
		}
	}
	return node
}

func (ring *Ring) doublePartitions() int {
	oldPartitionCount := len(ring.ReplicaToPartitionToNode[0])
	for replica := len(ring.ReplicaToPartitionToNode) - 1; replica >= 0; replica-- {
		partitionToNode := make([]Node, len(ring.ReplicaToPartitionToNode[replica])*2)
		copy(partitionToNode, ring.ReplicaToPartitionToNode[replica])
		copy(partitionToNode[len(ring.ReplicaToPartitionToNode[replica]):], ring.ReplicaToPartitionToNode[replica])
		ring.ReplicaToPartitionToNode[replica] = partitionToNode
		partitionToWait := make([]uint16, len(ring.ReplicaToPartitionToWait[replica])*2)
		copy(partitionToWait, ring.ReplicaToPartitionToWait[replica])
		copy(partitionToWait[len(ring.ReplicaToPartitionToWait[replica]):], ring.ReplicaToPartitionToWait[replica])
		ring.ReplicaToPartitionToWait[replica] = partitionToWait
		if ring.ReplicaToNodeToPartitions != nil {
			for node := len(ring.ReplicaToNodeToPartitions[replica]) - 1; node >= 0; node-- {
				partitions := make(holdme.OrderedUint32sNoDups, len(ring.ReplicaToNodeToPartitions[replica][node]), len(ring.ReplicaToNodeToPartitions[replica][node])*2)
				copy(partitions, ring.ReplicaToNodeToPartitions[replica][node])
				ln := len(ring.ReplicaToNodeToPartitions[replica][node])
				for i := 0; i < ln; i++ {
					partitions = append(partitions, uint32(oldPartitionCount)+ring.ReplicaToNodeToPartitions[replica][node][i])
				}
				ring.ReplicaToNodeToPartitions[replica][node] = partitions
			}
		}
	}
	return len(ring.ReplicaToPartitionToNode[0])
}

type rebalancer struct {
	ring                                *Ring
	nodeCount                           int
	groupCount                          int
	replicaCount                        int
	partitionCount                      int
	oldRebalanced                       time.Time
	totalCapacity                       float64
	partitionReassignmentsLeft          []int8
	replicaToPartitionToChangedThisPass [][]bool
	replicaToNodeToOptimal              [][]int32
	replicaToNodeToOptimal1             [][]int32
	replicaToDesiredNodes               []*desiredNodes
	replicaToGroupToOptimal             [][]int32
	replicaToGroupToDesiredNodes        [][]*desiredNodes
	tierCount                           int
	groupToTier                         []int
	replicaToTierToDesiredGroups        [][]*desiredGroups
	randIntn                            func(int) int
	nodeUsed                            []bool
	nodeUsedClearer                     []bool
	groupUsed                           []bool
	groupUsedClearer                    []bool
}

func (ring *Ring) Rebalance(randIntn func(int) int) {
	r := newRebalancer(ring, randIntn)
	r.rebalance()
}

func newRebalancer(ring *Ring, randIntn func(int) int) *rebalancer {
	r := &rebalancer{
		ring:           ring,
		nodeCount:      len(ring.NodeToCapacity),
		groupCount:     len(ring.GroupToGroup),
		replicaCount:   len(ring.ReplicaToPartitionToNode),
		partitionCount: len(ring.ReplicaToPartitionToNode[0]),
		oldRebalanced:  ring.Rebalanced,
		randIntn:       randIntn,
	}
	r.setRebalanced(time.Now())
	r.growIfNeeded()
	r.initWhatsLeftForThisPass()
	r.initNodeAndGroup()
	r.initTiers()
	return r
}

func (r *rebalancer) rebalance() {
	r.unassignDisabled()
	r.unassignDupNodes()
	r.assignUnassigned()
	r.reassignDupTiers()
	r.reassignBasedOnDesire()
}

func (r *rebalancer) setRebalanced(now time.Time) {
	minutesElapsed := int64(now.Sub(r.ring.Rebalanced) / time.Minute)
	r.ring.Rebalanced = now
	if minutesElapsed >= int64(r.ring.ReassignmentWait) || minutesElapsed >= int64(math.MaxUint16) {
		for replica := 0; replica < r.replicaCount; replica++ {
			partitionToWait := r.ring.ReplicaToPartitionToWait[replica]
			for partition := 0; partition < r.partitionCount; partition++ {
				partitionToWait[partition] = 0
			}
		}
	} else if minutesElapsed > 0 {
		for replica := 0; replica < r.replicaCount; replica++ {
			partitionToWait := r.ring.ReplicaToPartitionToWait[replica]
			for partition := 0; partition < r.partitionCount; partition++ {
				wait64 := int64(partitionToWait[0]) - minutesElapsed
				if wait64 < 0 {
					wait64 = 0
				}
				partitionToWait[partition] = uint16(wait64)
			}
		}
	}
}

func (r *rebalancer) growIfNeeded() {
	r.totalCapacity = 0
	for node := 0; node < r.nodeCount; node++ {
		nodeCapacity := r.ring.NodeToCapacity[node]
		if nodeCapacity > 0 {
			r.totalCapacity += float64(nodeCapacity)
		}
	}
	newPartitionCount := r.partitionCount
	doublings := uint(0)
	keepTrying := true
	for keepTrying && newPartitionCount < r.ring.MaxPartitionCount {
		keepTrying = false
		for node := 0; node < r.nodeCount; node++ {
			nodeCapacity := r.ring.NodeToCapacity[node]
			if nodeCapacity <= 0 {
				continue
			}
			targetAssignmentCount := float64(newPartitionCount) * (float64(nodeCapacity) / r.totalCapacity)
			under := (targetAssignmentCount - float64(int(targetAssignmentCount))) / targetAssignmentCount
			over := float64(0)
			if targetAssignmentCount > float64(int(targetAssignmentCount)) {
				over = (float64(int(targetAssignmentCount)+1) - targetAssignmentCount) / targetAssignmentCount
			}
			if under > 0.01 || over > 0.01 {
				newPartitionCount *= 2
				doublings++
				if newPartitionCount == r.ring.MaxPartitionCount {
					break
				} else if newPartitionCount > r.ring.MaxPartitionCount {
					newPartitionCount /= 2
					doublings--
					break
				}
				keepTrying = true
			}
		}
	}
	for newPartitionCount > r.partitionCount {
		r.partitionCount = r.ring.doublePartitions()
	}
}

func (r *rebalancer) initWhatsLeftForThisPass() {
	r.partitionReassignmentsLeft = make([]int8, r.partitionCount)
	r.replicaToPartitionToChangedThisPass = make([][]bool, r.replicaCount)
	if r.oldRebalanced.IsZero() {
		for partition := 0; partition < r.partitionCount; partition++ {
			r.partitionReassignmentsLeft[partition] = int8(r.replicaCount)
		}
		for replica := 0; replica < r.replicaCount; replica++ {
			partitionToChangedThisPass := make([]bool, r.partitionCount)
			for partition := 0; partition < r.partitionCount; partition++ {
				partitionToChangedThisPass[partition] = true
			}
			r.replicaToPartitionToChangedThisPass[replica] = partitionToChangedThisPass
		}
	} else {
		for partition := 0; partition < r.partitionCount; partition++ {
			r.partitionReassignmentsLeft[partition] = r.ring.MaxReplicaReassignableCount
		}
		for replica := 0; replica < r.replicaCount; replica++ {
			r.replicaToPartitionToChangedThisPass[replica] = make([]bool, r.partitionCount)
			partitionToWait := r.ring.ReplicaToPartitionToWait[replica]
			for partition := 0; partition < r.partitionCount; partition++ {
				if partitionToWait[partition] != 0 {
					r.partitionReassignmentsLeft[partition]--
				}
			}
		}
	}
}

func (r *rebalancer) initNodeAndGroup() {
	r.ring.FillReplicaToNodeToPartitions()
	r.replicaToNodeToOptimal = make([][]int32, r.replicaCount)
	r.replicaToNodeToOptimal1 = make([][]int32, r.replicaCount)
	r.replicaToDesiredNodes = make([]*desiredNodes, r.replicaCount)
	r.replicaToGroupToOptimal = make([][]int32, r.replicaCount)
	r.replicaToGroupToDesiredNodes = make([][]*desiredNodes, r.replicaCount)
	for replica := 0; replica < r.replicaCount; replica++ {
		r.replicaToNodeToOptimal[replica] = make([]int32, r.nodeCount)
		r.replicaToNodeToOptimal1[replica] = make([]int32, r.nodeCount)
		r.replicaToDesiredNodes[replica] = newDesiredNodes(r.nodeCount, r.randIntn)
		r.replicaToGroupToOptimal[replica] = make([]int32, r.groupCount)
		r.replicaToGroupToDesiredNodes[replica] = make([]*desiredNodes, r.groupCount)
		for group := 0; group < r.groupCount; group++ {
			r.replicaToGroupToDesiredNodes[replica][group] = newDesiredNodes(0, r.randIntn)
		}
	}
	for node := 0; node < r.nodeCount; node++ {
		capacity := r.ring.NodeToCapacity[node]
		if capacity > 0 {
			optimal := int32(float64(capacity)/r.totalCapacity*float64(r.partitionCount)*100 + 0.5)
			optimal1 := int32(10000/(float64(capacity)/r.totalCapacity*float64(r.partitionCount)) + 0.5)
			for replica := 0; replica < r.replicaCount; replica++ {
				r.replicaToNodeToOptimal[replica][node] = optimal
				r.replicaToNodeToOptimal1[replica][node] = optimal1
				desire := int32((int(optimal) - len(r.ring.ReplicaToNodeToPartitions[replica][node])*100) * 10000 / int(optimal))
				r.replicaToDesiredNodes[replica].Add(Node(node), desire)
				for group := r.ring.NodeToGroup[node]; group != 0; group = r.ring.GroupToGroup[group] {
					r.replicaToGroupToOptimal[replica][group] += optimal
					r.replicaToGroupToDesiredNodes[replica][group].Add(Node(node), desire)
				}
			}
		}
	}
	r.nodeUsed = make([]bool, r.nodeCount)
	r.nodeUsedClearer = make([]bool, r.nodeCount)
	r.groupUsed = make([]bool, r.groupCount)
	r.groupUsedClearer = make([]bool, r.groupCount)
}

func (r *rebalancer) initTiers() {
	r.groupToTier = make([]int, r.groupCount)
	r.replicaToTierToDesiredGroups = make([][]*desiredGroups, r.replicaCount)
	for replica := 0; replica < r.replicaCount; replica++ {
		r.replicaToTierToDesiredGroups[replica] = []*desiredGroups{}
	}
	tierParents := []int{0}
	for tier := 0; ; tier++ {
		var nextTierParents []int
		tierAdded := false
		for child := 1; child < r.groupCount; child++ {
			parent := r.ring.GroupToGroup[child]
			for i := len(tierParents) - 1; i >= 0; i-- {
				if parent == tierParents[i] {
					r.groupToTier[child] = tier
					for replica := 0; replica < r.replicaCount; replica++ {
						if tier == len(r.replicaToTierToDesiredGroups[replica]) {
							r.replicaToTierToDesiredGroups[replica] = append(r.replicaToTierToDesiredGroups[replica], newDesiredGroups(0, r.randIntn))
							tierAdded = true
						}
						r.replicaToTierToDesiredGroups[replica][tier].Add(child, 0)
						nextTierParents = append(nextTierParents, child)
					}
					break
				}
			}
		}
		if !tierAdded {
			break
		}
		tierParents = nextTierParents
	}
	r.tierCount = len(r.replicaToTierToDesiredGroups[0])
	for replica := 0; replica < r.replicaCount; replica++ {
		for tier := 0; tier < r.tierCount; tier++ {
			for _, group := range r.replicaToTierToDesiredGroups[replica][tier].byDesire {
				groupNodeCount := len(r.replicaToGroupToDesiredNodes[replica][group].byDesire)
				if groupNodeCount > 0 {
					sum := 0
					for i := 0; i < groupNodeCount; i++ {
						sum += int(r.replicaToDesiredNodes[replica].toDesire[r.replicaToGroupToDesiredNodes[replica][group].byDesire[i]])
					}
					r.replicaToTierToDesiredGroups[replica][tier].Move(group, int32(sum/groupNodeCount))
				}
			}
		}
	}
}

func (r *rebalancer) unassignDisabled() {
	for checkForDisabledNode := 0; checkForDisabledNode < r.nodeCount; checkForDisabledNode++ {
		if r.ring.NodeToCapacity[checkForDisabledNode] < 0 {
			disabledNode := Node(checkForDisabledNode)
			for replica := 0; replica < r.replicaCount; replica++ {
				for partition := 0; partition < r.partitionCount; partition++ {
					if r.ring.ReplicaToPartitionToNode[replica][partition] == disabledNode {
						r.ring.ReplicaToPartitionToNode[replica][partition] = NilNode
						if !r.replicaToPartitionToChangedThisPass[replica][partition] {
							r.ring.ReplicaToPartitionToWait[replica][partition] = r.ring.ReassignmentWait
							r.replicaToPartitionToChangedThisPass[replica][partition] = true
							r.partitionReassignmentsLeft[partition]--
						}
					}
				}
				r.ring.ReplicaToNodeToPartitions[replica][disabledNode] = nil
			}
		}
	}
}

func (r *rebalancer) unassignDupNodes() {
	replicaMax := r.replicaCount - 1
	for partition := 0; partition < r.partitionCount; partition++ {
		copy(r.nodeUsed, r.nodeUsedClearer)
		if r.ring.ReplicaToPartitionToNode[0][partition] != NilNode {
			r.nodeUsed[r.ring.ReplicaToPartitionToNode[0][partition]] = true
		}
		for replica := 1; replica < r.replicaCount; replica++ {
			if r.ring.ReplicaToPartitionToNode[replica][partition] != NilNode {
				if r.nodeUsed[r.ring.ReplicaToPartitionToNode[replica][partition]] {
					r.ring.ReplicaToPartitionToNode[replica][partition] = NilNode
					if !r.replicaToPartitionToChangedThisPass[replica][partition] {
						r.ring.ReplicaToPartitionToWait[replica][partition] = r.ring.ReassignmentWait
						r.replicaToPartitionToChangedThisPass[replica][partition] = true
						r.partitionReassignmentsLeft[partition]--
					}
				} else if replica < replicaMax {
					r.nodeUsed[r.ring.ReplicaToPartitionToNode[replica][partition]] = true
				}
			}
		}
	}
}

func (r *rebalancer) assignUnassigned() {
	replicaMax := r.replicaCount - 1
	for partition := 0; partition < r.partitionCount; partition++ {
		initted := false
		for replica := 0; replica < r.replicaCount; replica++ {
			if r.ring.ReplicaToPartitionToNode[replica][partition] == NilNode {
				if !initted {
					r.bestNodeInit(partition)
					initted = true
				}
				node := r.bestTieredNode(replica)
				if node == NilNode {
					node = r.bestNode(replica)
					if node == NilNode {
						node = r.replicaToDesiredNodes[replica].byDesire[0]
					}
				}
				r.assign(replica, partition, node)
				if replica < replicaMax {
					r.bestNodeUpdate(node)
				}
			}
		}
	}
}

func (r *rebalancer) reassignDupTiers() {
	replicaMax := r.replicaCount - 1
	for tier := 0; tier <= r.tierCount; tier++ {
		for partition := 0; partition < r.partitionCount; partition++ {
			copy(r.groupUsed, r.groupUsedClearer)
			for group := r.ring.NodeToGroup[r.ring.ReplicaToPartitionToNode[0][partition]]; group != 0; group = r.ring.GroupToGroup[group] {
				if r.groupToTier[group] == tier {
					r.groupUsed[group] = true
				}
			}
			for replica := 1; replica < r.replicaCount; replica++ {
				for group := r.ring.NodeToGroup[r.ring.ReplicaToPartitionToNode[replica][partition]]; group != 0; group = r.ring.GroupToGroup[group] {
					if r.groupToTier[group] == tier {
						if r.groupUsed[group] {
							hadChangedThisPass := r.replicaToPartitionToChangedThisPass[replica][partition]
							if !hadChangedThisPass {
								if r.ring.ReplicaToPartitionToWait[replica][partition] > 0 || r.partitionReassignmentsLeft[partition] < 1 {
									continue
								}
							}
							originalNode := r.ring.ReplicaToPartitionToNode[replica][partition]
							r.assign(replica, int(partition), NilNode)
							r.bestNodeInit(int(partition))
							node := r.bestTieredNodeIfNotNode(replica, originalNode)
							if node == NilNode {
								node = originalNode
							}
							r.assign(replica, int(partition), node)
							if node == originalNode {
								if !hadChangedThisPass {
									r.replicaToPartitionToChangedThisPass[replica][partition] = false
									r.ring.ReplicaToPartitionToWait[replica][partition] = 0
									r.partitionReassignmentsLeft[partition]++
								}
							} else {
								replica = 0
							}
						} else if replica < replicaMax {
							r.groupUsed[group] = true
						}
						break
					}
				}
			}
		}
	}
}

func (r *rebalancer) reassignBasedOnDesire() {
	for replica := 0; replica < r.replicaCount; replica++ {
		desiredNodes := r.replicaToDesiredNodes[replica]
		desiredNodesLen := len(desiredNodes.byDesire)
		nodeToOptimal1 := r.replicaToNodeToOptimal1[replica]
		nodeToPartitions := r.ring.ReplicaToNodeToPartitions[replica]
		partitionToChangedThisPass := r.replicaToPartitionToChangedThisPass[replica]
		partitionToWait := r.ring.ReplicaToPartitionToWait[replica]
	nextUnderweight:
		for i := 0; i < desiredNodesLen; {
			underweightNode := desiredNodes.byDesire[i]
			if desiredNodes.toDesire[underweightNode] <= 0 {
				break
			}
			if desiredNodes.toDesire[underweightNode]-nodeToOptimal1[underweightNode] < 0 {
				i++
				continue
			}
			underweightTopGroup := r.ring.NodeToGroup[underweightNode]
			for r.ring.GroupToGroup[underweightTopGroup] != 0 {
				underweightTopGroup = r.ring.GroupToGroup[underweightTopGroup]
			}
			for j := desiredNodesLen - 1; j >= 0; j-- {
				overweightNode := desiredNodes.byDesire[j]
				if desiredNodes.toDesire[overweightNode] >= 0 {
					break
				}
				if r.ring.NodeToCapacity[overweightNode] < 0 {
					continue
				}
				overweightTopGroup := r.ring.NodeToGroup[overweightNode]
				for r.ring.GroupToGroup[overweightTopGroup] != 0 {
					overweightTopGroup = r.ring.GroupToGroup[overweightTopGroup]
				}
				if overweightTopGroup == underweightTopGroup && underweightTopGroup != 0 {
					continue
				}
				for k := len(nodeToPartitions[overweightNode]) - 1; k >= 0; k-- {
					partition := nodeToPartitions[overweightNode][k]
					if !partitionToChangedThisPass[partition] && (partitionToWait[partition] > 0 || r.partitionReassignmentsLeft[partition] < 1) {
						continue
					}
					r.bestNodeInit(int(partition))
					if r.nodeUsed[underweightNode] || r.groupUsed[underweightTopGroup] {
						continue
					}
					r.assign(replica, int(partition), underweightNode)
					continue nextUnderweight
				}
			}
			i++
		}
	}
}

func (r *rebalancer) bestNodeInit(partition int) {
	copy(r.nodeUsed, r.nodeUsedClearer)
	copy(r.groupUsed, r.groupUsedClearer)
	for replica := 0; replica < r.replicaCount; replica++ {
		node := r.ring.ReplicaToPartitionToNode[replica][partition]
		if node != NilNode {
			r.nodeUsed[node] = true
			for group := r.ring.NodeToGroup[node]; group != 0; group = r.ring.GroupToGroup[group] {
				r.groupUsed[group] = true
			}
		}
	}
}

func (r *rebalancer) bestNodeUpdate(node Node) {
	r.nodeUsed[node] = true
	for group := r.ring.NodeToGroup[node]; group != 0; group = r.ring.GroupToGroup[group] {
		r.groupUsed[group] = true
	}
}

func (r *rebalancer) bestTieredNode(replica int) Node {
	bestNode := NilNode
	for tier := 0; tier < r.tierCount && bestNode == NilNode; tier++ {
		bestDesire := int32(math.MinInt32)
		for _, group := range r.replicaToTierToDesiredGroups[replica][tier].byDesire {
			if !r.groupUsed[group] && r.replicaToTierToDesiredGroups[replica][tier].toDesire[group] > bestDesire {
				byDesire := r.replicaToGroupToDesiredNodes[replica][group].byDesire
				toDesire := r.replicaToGroupToDesiredNodes[replica][group].toDesire
				bestNode = byDesire[0]
				bestNodeDesire := toDesire[bestNode]
				bestNodeOverallDesire := math.NaN()
				ln := len(byDesire)
				for i := 1; i < ln; i++ {
					node := byDesire[i]
					if toDesire[node] != bestNodeDesire {
						break
					}
					if math.IsNaN(bestNodeOverallDesire) {
						bestNodeOverallDesire = 0
						for replicaB := 0; replicaB < r.replicaCount; replicaB++ {
							bestNodeOverallDesire += float64(r.replicaToGroupToDesiredNodes[replicaB][group].toDesire[bestNode])
						}
					}
					var overallDesire float64
					for replicaB := 0; replicaB < r.replicaCount; replicaB++ {
						overallDesire += float64(r.replicaToGroupToDesiredNodes[replicaB][group].toDesire[node])
					}
					if overallDesire > bestNodeOverallDesire {
						bestNode = node
						bestNodeOverallDesire = overallDesire
					}
				}
				bestDesire = r.replicaToTierToDesiredGroups[replica][tier].toDesire[group]
			}
		}
	}
	return bestNode
}

func (r *rebalancer) bestTieredNodeIfNotNode(replica int, notNode Node) Node {
	bestNode := NilNode
	for tier := 0; tier < r.tierCount && bestNode == NilNode; tier++ {
		bestDesire := int32(math.MinInt32)
		for _, group := range r.replicaToTierToDesiredGroups[replica][tier].byDesire {
			if !r.groupUsed[group] && r.replicaToTierToDesiredGroups[replica][tier].toDesire[group] > bestDesire {
				byDesire := r.replicaToGroupToDesiredNodes[replica][group].byDesire
				toDesire := r.replicaToGroupToDesiredNodes[replica][group].toDesire
				bestNode = NilNode
				var i int
				var node Node
				for i, node = range r.replicaToGroupToDesiredNodes[replica][group].byDesire {
					if node != notNode {
						bestNode = node
						break
					}
				}
				if bestNode == NilNode {
					continue
				}
				bestNodeDesire := toDesire[bestNode]
				bestNodeOverallDesire := math.NaN()
				ln := len(byDesire)
				for ; i < ln; i++ {
					node = byDesire[i]
					if toDesire[node] != bestNodeDesire {
						break
					}
					if math.IsNaN(bestNodeOverallDesire) {
						bestNodeOverallDesire = 0
						for replicaB := 0; replicaB < r.replicaCount; replicaB++ {
							bestNodeOverallDesire += float64(r.replicaToGroupToDesiredNodes[replicaB][group].toDesire[bestNode])
						}
					}
					var overallDesire float64
					for replicaB := 0; replicaB < r.replicaCount; replicaB++ {
						overallDesire += float64(r.replicaToGroupToDesiredNodes[replicaB][group].toDesire[node])
					}
					if overallDesire > bestNodeOverallDesire {
						bestNode = node
						bestNodeOverallDesire = overallDesire
					}
				}
				bestDesire = r.replicaToTierToDesiredGroups[replica][tier].toDesire[group]
			}
		}
	}
	return bestNode
}

func (r *rebalancer) bestNode(replica int) Node {
	bestNode := NilNode
	bestDesire := int32(math.MinInt32)
	for _, node := range r.replicaToDesiredNodes[replica].byDesire {
		if !r.nodeUsed[node] && r.replicaToDesiredNodes[replica].toDesire[node] > bestDesire {
			bestNode = node
			bestDesire = r.replicaToDesiredNodes[replica].toDesire[node]
		}
	}
	return bestNode
}

func (r *rebalancer) assign(replica, partition int, node Node) {
	oldNode := r.ring.ReplicaToPartitionToNode[replica][partition]
	if oldNode != NilNode {
		r.ring.ReplicaToNodeToPartitions[replica][oldNode] = holdme.OrderedUint32sNoDups(r.ring.ReplicaToNodeToPartitions[replica][oldNode]).Remove(uint32(partition))
		desire := int32((int(r.replicaToNodeToOptimal[replica][oldNode]) - len(r.ring.ReplicaToNodeToPartitions[replica][oldNode])*100) * 10000 / int(r.replicaToNodeToOptimal[replica][oldNode]))
		r.replicaToDesiredNodes[replica].Move(oldNode, desire)
		for group := r.ring.NodeToGroup[oldNode]; group != 0; group = r.ring.GroupToGroup[group] {
			r.replicaToGroupToDesiredNodes[replica][group].Move(oldNode, desire)
			groupNodeCount := len(r.replicaToGroupToDesiredNodes[replica][group].byDesire)
			sum := 0
			for i := 0; i < groupNodeCount; i++ {
				sum += int(r.replicaToDesiredNodes[replica].toDesire[r.replicaToGroupToDesiredNodes[replica][group].byDesire[i]])
			}
			r.replicaToTierToDesiredGroups[replica][r.groupToTier[group]].Move(group, int32(sum/groupNodeCount))
		}
	}
	r.ring.ReplicaToPartitionToNode[replica][partition] = node
	if !r.replicaToPartitionToChangedThisPass[replica][partition] {
		r.ring.ReplicaToPartitionToWait[replica][partition] = r.ring.ReassignmentWait
		r.replicaToPartitionToChangedThisPass[replica][partition] = true
		r.partitionReassignmentsLeft[partition]--
	}
	if node != NilNode {
		r.ring.ReplicaToNodeToPartitions[replica][node] = holdme.OrderedUint32sNoDups(r.ring.ReplicaToNodeToPartitions[replica][node]).Add(uint32(partition))
		desire := int32((int(r.replicaToNodeToOptimal[replica][node]) - len(r.ring.ReplicaToNodeToPartitions[replica][node])*100) * 10000 / int(r.replicaToNodeToOptimal[replica][node]))
		r.replicaToDesiredNodes[replica].Move(node, desire)
		for group := r.ring.NodeToGroup[node]; group != 0; group = r.ring.GroupToGroup[group] {
			r.replicaToGroupToDesiredNodes[replica][group].Move(node, desire)
			groupNodeCount := len(r.replicaToGroupToDesiredNodes[replica][group].byDesire)
			sum := 0
			for i := 0; i < groupNodeCount; i++ {
				sum += int(r.replicaToDesiredNodes[replica].toDesire[r.replicaToGroupToDesiredNodes[replica][group].byDesire[i]])
			}
			r.replicaToTierToDesiredGroups[replica][r.groupToTier[group]].Move(group, int32(sum/groupNodeCount))
		}
	}
}


Each of your senses will take you on a journey through this remarkable landscape. Gaze across undulating meadows. Run your hands over centuries-old stones. Hear a trickling fountain in the town square as you savor a slice of fresh melon. Open the windows and let the scent of endless lavender fields waft through your dreams.
Days 1-2 From storybook Saignon, pedal easygoing paths through lavender fields and oak groves | Explore Ménerbes, the town Peter Mayle called home while writing A Year in Provence | Vincent van Gogh painted the starry nights of Provence—enjoy stars of the Michelin variety at our hotel's acclaimed restaurant | Pedal past picturesque Luberon villages including the charming hamlets of Bonnieux and Lacoste | Cross the Pont Julien, an ancient Roman stone arch bridge | Opt to indulge in a treatment at our hotel's world-class spa.
Days 3-4 Fall in love with ocher-colored Roussillon | Linger in Gordes, where a massive 12th-century castle keeps watch over neighboring towns | Stop to admire lovely medieval Sénanque Abbey | Cycle to your heart's content in the lavender-scented countryside | Journey into an undiscovered area of Provence, a new landscape that offers a different perspective with the Alps' snowy peaks in the distance | Engage in a traditional game of pétanque, which originated in this sunny region.
Days 5-6 Discover the 12th-century castle of Simiane-la-Rotonde, a charming hilltop town | Tour a family-run lavender farm and distillery and learn about the myriad uses of this fragrant flower | Ever tried goat cheese wrapped in chestnut leaves? Today's your chance in the village of Banon | Head out on a final spin through the serene sun-drenched countryside | A Michelin-starred dinner provides the perfect farewell to Provence.
From $4,799 - $5,099 pp dbl. occ.
In Provence you head off each morning after choosing among several expertly designed routes—all with detailed directions, mileage and shuttle options. Unlike trips with one fixed daily route (or worse, one guide that everyone's obliged to follow), you're free to enjoy the best of the region at your pace, stopping wherever you want to explore further.
Backroads is the only active travel company providing two support vans in Provence—because we know it's essential to ensure a truly great travel experience. It doubles our ability to be there when you need us to offer hydration, lighten your load or give you a lift if it's time to take a break. Read more on why two vans make all the difference.
Our Trip Leaders in Provence live in the area and are deeply engaged in their communities, giving them unique inside knowledge they're happy to share in making your experience that much richer. They'll introduce you to people, customs and parts of town you'd likely never encounter on your own—and teach you a few local phrases to help break the ice.
We design and support our Provence trips to suit mixed abilities and varied interests—so you can set your own pace, then change things up as the day unfolds. And all guests are free to do the same, traveling together or apart, with no one cramping anyone else's style. Which sounds easy in theory, but it's hard to pull off. Here's more on how we do it.
Fall is a magical time for biking through the olive groves, fragrant lavender fields and quaint villages of France's stunning Provence.


text:
The Championship Of Russia. Legionnaires
In the first round of the championship of Russia-2001 field were 19 foreigners. Now - 57. Exactly triple. In applications for season-2002 featured 49 foreign players from 13 countries. Now in applications for the first round matches (and how many did not hit the number 18?!) was listed 70 representatives of 23 States. From Sweden to Malawi, from Costa Rica to Italy, from South Africa to Uruguay.It is easy to calculate the percentage of foreigners among left on the field, and among the declared matches. 57 of 70 of 224 and 288 respectively. And there and there with a small error - quarter. But... mark TWAIN once said: sometimes a lie, big lie and statistics. We have reliable figures can be adapted to any thesis, the most polar. The same conclusion has come and your correspondent, analyzing the influence of foreigners in the first round.This paragraph is for football "cosmopolitan." Czech Jiri Jarosik from CSKA scored two amazing goals "ruby". Exotic Spartak goalkeeper Bugs - from the Morocco - defended dry the match with "torpedo-the Metallurgist". On account of the "Vikings" four touchdown passes: they did the Czechs Shirl from "Zenith" and Kucharz from "Shinnik" and the South African Zwane from "Rostov" and the Serb side from "Uralan". Finally, six (!) of the 11 seats in the symbolic team of the tour version of the "SE" was taken by the aliens: the same Jarosik and Svane and Italian "calmac" Dal Canto, red-white Senegalese Kebe, Brazilian Samarco Souza and the only senior Bosnian army rahimić. Is all of this is not a performance jump as foreign "ore"?Now - the argument for supporters of football "national idea". Of the 57 who played the Legionnaires scored only one Jarosik. While forwards from abroad had half a dozen, not to mention an attacking midfielder.Maybe not in nationality matter? But how long and carefully the club were tracking the player, how much you paid for it and comfortable Lee made his adaptation? CSKA and "Wings", which had to strengthen a particular position, chose to pay more than three million for one player. And "Saturn", "Dynamo" and Uralan intended to raise the General level of composition - and took whole squads of aliens. Maybe not stellar, but it is quite sturdy. As guard of Africans who came to Rostov, on the recommendation of perfectly knowing the market of Victor Bondarenko, and Chekov in "Zenith" Vlastimil Petrzhela. Well, different goals - different means. Importantly, in their application was not chaos - listed in clubs(some doubt still is only "the Dynamo"), it seems, reigns the mind.The most mysterious in this sense, the team "Rubin". On the one hand, the budget Kazantsev able to secure the purchase of the international class players such as Nowotny and Sibaya. On the other hand, there play the "beach" instances such as the Brazilian Calisto. Looking at the difference in the class of players of the same team, I Cech with the South African did it became. They would place in the leading clubs, and they, it seems, will have to drag the ungrateful who struggle for survival.The flywheel is the large-scale experiment with foreigners in the history of our football spins on the eyes. The session will last, probably, two years, until in 2005 the Premier League does not limit the number of foreign players. So, there is a time to realize whether they are in such numbers.Igor RABINER.
Striker "Ajax" Andy van der Meyde got injured right hip and will not participate in the match of the qualifying stage of EURO 2004 against the Czech Republic
The chief referee for the super Cup of Russia, March 8 will compete for the national champion Lokomotiv Cup winners CSKA assigned Muscovite Valentin Ivanov, tried gold match these teams last year
The news that "SE" relates to the number of players who can become the best in the championship of Russia 2003, caused the midfielder Rotor smile:- Very nice to hear such
Http://bcpg.lviv.ua/jenskie-futbolkipolo-klassika-aktualnogo-stilya-casual
bcpg.lviv.ua
Sport Madrid


I have been stationed with the U.S. Army in Germany and have been trying to teach myself Photoshop for quite a long time. I have bought numerous training tapes, DVD's, and books. One of the most confusing issues to me was masking and compositing. It seemed each tape, DVD, and book explained each briefly and differently to the point it was confusing. I was searching for a training tool which would clairify masking and compositing issues and would include all the related issues together in one single source. I was so delighted when I received Katrin's book. The minute I thumbed through the pages I knew this was the tool I had been searching for! This book covers it all and there would be no reason to purchase any other item to obtain info regarding these subjects. The only thing which could improve on this book would be if Katrin would make DVD's to supplement the book. She provides one of the best explanations I have read regarding use of the pen tool which can be quite intimidating. In addition, she provides an equally excellent explanation of selecting hair and fine detail which can also be quite complex. I have been experimenting with blue/green screen techniques and could never really find a good source of material for this as it relates to Photoshop and guess what, she covers this too! What I really like about her book is that she covers ALL aspects of a particular subject and not just part. I have been so disappointed with most of the other photoshop tapes, DVD's and books but not this one. The book is recommended for intermediate to advanced level but I think it would also be good for the beginner level because he/she would not have to waste a lot of time and money procuring other resources to learn this subject matter. This book is fantastic and I highly recommend it to anyone who wants to learn photoshop masking and compositing techniques.
An excellent introduction to OO programming from one of the field's luminaries. It's a very articulate book, and quite lyrical in parts, at least for a CS text.
You should consider this book bearing its limitations in mind: it's certainly not "C++ for complete morons", but more about the aesthetic and architectural aspects of OO designs. Really it is not a very good book for an introductory programming course, but rather something to read after you've been using an OO language for a little while.
Secondly, the book presents OO as a good solution for all design situations, when modern consensus is that it is not always so: sometimes procedural, functional, or other approaches are much better. This is perhaps understandable considering when this book was written and by who.
A mature reader can bear this in mind, and get a great deal of enjoyment and insight from OOAD.
This book does a great job of getting the reader familiar with the basics of python and is written as an intro text book for programming and Computer Science. For the more seasoned python fan this book makes a nice addition to the library and a handy quick reference. Chances are though, it possess little new info. It is more for the beginner, and there are Computer Science Departments use this book for that purpose.


text:
MORE BY THIS CONTRIBUTOR
Somewhat Divine
Joseph Priestley
Entranced by the Factory
Maxwell's Demon
Flowery Regions of Algebra
Pierre Simon Laplace
Dozing at His Desk
The Genius of the Periodic Table
With Great Stomack
Learned Insane
The Lunar Men
John Barrell
Thomas Telford
Isaac Land
Nelson the Populist
Colin Munro
'Tipu's Tiger'
Deborah Cohen
Dr James Barry
Jack in the Belfry
Dinah Birch
'The Monk'
Science, technology and mathematics, Europe, Western Europe, UK, 1700-1799, 1750-1799, Maritime
Vol. 18 No. 21 · 31 October 1996
pages 11-12 | 2668 words
Our Trusty Friend the Watch
Longitude: The True Story of a Lone Genius who Solved the Greatest Scientific Problem of his Time by Dava Sobel
Fourth Estate, 184 pp, £12.99, August 1996, ISBN 1 85702 502 4
The curious Lilliputians guessed Gulliver's pocket-watch must be 'the God that he worships', because 'he assured us he seldom did anything without consulting it.' The giant King of Brobdingnag had a different perspective: Gulliver must 'be a piece of Clockwork (which is in that country arrived to a very great perfection)'. Any acute 18th-century reader of Swift would easily make sense of these timely jokes. Britain was then rapidly establishing world leadership in precision horology and its citizens increasingly seemed driven by the workings of the clock. Time management became a way of judging others – busy bourgeois, dawdling plebeians, languorous natives. Time discipline was imposed on workshops. Fine jewelling to reduce friction and ingenious machines to cut gears helped to make clocks of stunning accuracy. Pocket watches began to tell seconds, and, to assist the genteel Newmarket punters, even fractions of a second. Fashionable theologians preached that the Creation itself was best understood as godly clockwork.
The products and faith of this clockwork universe took the clockwatchers and their timepieces everywhere. In August 1773, after a 13-month voyage from Britain, the sloops Resolution and Adventure arrived on the north coast of Tahiti. For some on board, including their captain, James Cook, this was a return visit to the Pacific haven they called 'King George's Island'. The British were there, among other reasons, to check the performance of a small jewelled watch, barely more than five inches in diameter, carried with them all the way from London. This timepiece, finished by the expert clockmaker Larcum Kendall at the end of 1769 after 30 months of painstaking work, promised a solution to the enduring puzzle of longitude, the way of finding how far east or west a traveller was from home.
Latitude, the distance north or south of the equator, was comparatively easy to determine – just before being cast ashore on Lilliput, Gulliver's shipmates have time during the storm to observe that they are in latitude 30°2'S. It was also long understood that, with a sufficiently reliable clock, such a traveller might be able to compare the local time with that in his place of departure, and thence translate time differences into true distance east or west. To get positions accurate to a mile at the equator, such a clock must err no more than four seconds over its whole voyage. But reliability of this order was scarcely to be achieved by any feasible clock. Only in the later 18th century did such clocks appear – and Kendall's so-called K-1 was eminent among them. Tahiti was a good place to test its worth, since back in 1769 British astronomers had determined its longitude with care in order to observe the transit of Venus across the face of the Sun. Armed with pendulum clocks and sextants, the astronomers divined that 'Point Venus', as they called it, was 149°30'38" west of Greenwich, the home base of all British navigators.
Cook adored 'our trusty friend the Watch', relied on it absolutely, and told his Admiralty masters that K-1 had passed its tests with flying colours. The clock subsequently followed the British flag across the Pacific: with Cook to his death in Hawaii in 1779, then with Captain Arthur Phillip to the new penal settlement in Botany Bay in 1788. A second copy, rather less worthy, travelled on the Bounty with William Bligh and was taken by the mutineers to Pitcairn Island. Hence Umberto Eco playfully suggests at the end of his own recent longitude novel, The Island of the Day Before, that the documents on which his story is based must have been found by Bligh while adrift in the South Seas, who then delivered them 'to the Admiralty in strictest confidence'. Tell-tale links between horology and the deeds that won the Empire were no coincidence. The Navy's ability to sail by the most direct route across the open seas was crucial for the very survival of ships' crews and the efficacy with which a worldwide maritime network was secured.
Yet precision clockwork was never truly indispensable to heroic seamanship. The Tahitians who encountered Cook's men were also heirs of a culture of expert navigators. During the two millennia before 500 AD in European reckoning, the vast area of seas and islands stretching between Hawaii, New Zealand and the western coasts of South America had already been crossed by Polynesians, a feat far beyond any navigational skill then possessed by the ancestors of Cook. Some of the 'experimental gentlemen' on board his ships meditated on the Polynesian achievement, however little they knew of its true scope. 'This exercise of their memories, and of other mental faculties confirming by their own experience the truth of the phenomena communicated to them by their parents and teachers gives them as it were a predilection for the examination of truth,' opined a naturalist on board the Resolution. Such savants sought to compare the mental maps of Tahitian experts with their own charts, guessing at the oral traditions and astronomical lore of the natives they encountered. Thence developed the sense that European discoveries were merely revisitations to lands and seas already well-known to others. Cook himself contemplated some of the effects of the encounter between the two maritime cultures: 'they cannot be restored to that happy mediocrity in which they lived before we discovered them if the intercourse between us should be discontinued. It has become in a manner incumbent on the Europeans to visit them once in three or four years,' he judged, 'in order to supply them with those conveniences which we have introduced among them.' So did watchful Europeans imagine the change from timeless lassitude to punctilious commerce.
It was hard to tell which longitude schemes were feasible, which utopian. In 1687, one schemer proposed using a 'powder of sympathy', which when applied to a weapon could directly affect a wounded victim, however far away. So the longitude recipe involved putting a wounded dog on a ship, then using the powder on a knife in port every midday. The distant dog, its wound kept open, would promptly yelp on shipboard, telling its sailing companions when it was noon back home. A slightly more viable project, canvassed in 1714 with prestigious scholarly backing, demanded a worldwide network of moored hulks equipped with mortars to fire rockets at regular times. Its promoter, a renegade Cambridge mathematician, tried firing noisy bombs over Hampstead Heath to test the method and attract investors.
Satirists from Swift to Eco have found much matter in these schemes. But in more ponderous mood, such witty vexations form little part of the resolutely Anglocentric 'true story' recounted by Dava Sobel. Rather, her hero, the 'lone genius' of her ostentatious subtitle, is John Harrison, a dour Yorkshire carpenter and village choirmaster who spent half a century from the early 1720s trying to make clocks capable of determining longitude and to convince metropolitan grandees that he had done so. Kendall's watch was a faithful copy of Harrison's fourth such attempt, a device which beat the clock-maker's main enemy, friction, with diamond jewelling and a lubricating oil which proved remarkably resistant to changes in temperature; it was itself tried on voyages to the West Indies during the earlier 1760s.
The romance has a neat shape. The humble autodidact Harrison, whom Sobel inevitably compares with Abraham Lincoln and the log-cabin heroes of her own American myths, but who rather shares the plodding devotion of his fellow-Yorkshireman Geoffrey Boycott, long battled alongside his loyal brother James and son William against the dandified prejudices of London and Oxbridge professors and bureaucrats. In 1714, Parliament had offered a remarkably large reward of £20,000 for any scheme capable of giving longitude within half a degree. Harrison kept on producing devices which apparently merited reward only to see his hopes dashed by committees which changed the rules, pushed their own favoured clients and methods, and requisitioned his clocks, then damaged or otherwise misused them. There were odious villains, such as the Astronomers Royal, James Bradley and Nevil Maskelyne, who used their Greenwich power base to orchestrate the conspiracy against Harrison. Maskelyne gloried in giving clockmakers 'a bone to pick that would crack their teeth'. The day was saved by the King himself – mad George was something of an amateur horologist – so that, a month before Cook's arrival off Tahiti in 1773, Harrison was awarded by Parliament more or less the balance of the sum he so richly deserved.
As with any satire of brave provincials battling London toffs eventually to win their just rewards, there's more to this tale than superficial heroism. Period detail, especially knowledge of the London clockmakers, matters. A 1747 guide for ambitious parents keen on placing their sons in the right profession commended the watch-maker's business: 'we beat all Europe in Clocks and Watches of all sorts.' Profits could be huge, though 'all the branches require a mechanic head, a light nice hand and a strong sight. If he understands his Business, he may have Bread almost any where.' Sobel is fairly reliable on horological technique and has some very good sources, too, notably the stunning lecture delivered in 1935 by the ex-naval officer Rupert Gould, who spent a dozen years after the First World War restoring all four of Harrison's clocks to working order in the state they now enjoy in the splendid Time Gallery at the National Maritime Museum. So, for example, the third clock, which took Harrison 19 years to build, includes what Gould called 'the only mechanically perfect remontoire I have ever met with' – a spring device used to store up energy and deliver it at an 'absolutely constant' rate to the escape wheel. This was the work of an engineer, he reckoned, rather than a traditional clockmaker. According to Gould, the clock's roller-bearings, designed to minimise friction, 'look as though they have been taken out of a modern car'.
Modernity has much to learn from the longitude story. Sobel guesses that one reason Harrison was viewed with scepticism by the London astronomers was that his clock had 'all the complexity of the longitude problem hardwired in its works'. The astronomers had their own perfectly viable method based on the motion of the Moon. They needed good instruments to measure distances between the Moon and nearby stars, and just such a quadrant was on sale in London from the 1730s. They also needed clocks good enough to keep time reliably over about eighteen hours, and the English produced them in abundance. Using these two devices a navigator could tell the position of the Moon at a fixed local time: accurate lunar tables, available under Maskelyne's editorship from the 1760s, could then let him compare this time with that of Greenwich. The 'method of lunars' was viable, but it was scarcely simple and it nicely made apparent the dependence of navigators on the authoritative doctrine of metropolitan astronomy. There is a long tradition which rates such elegant complexity above the mundane quick-fix of a mechanical stratagem. Think of modern purists' hostility to the displacement of their painstaking mathematical analysis by the bump and grind of powerful computers, or fashion's search for authentic crafts in preference to mass-produced tat. The way Sobel tells it, Harrison's story has the best of both worlds. His up-to-date engineering beat cloistered dons – and we reflect that Bill Gates dropped out of Harvard before exacting his revenge through Microsoft. At the same time, Harrison's traditional craftsmanship beat the very best scientific expertise – compare the Campaign for Real Ale and its war on chemical fizz. These are two apparently contradictory morals which contemporary taste seems very ready to accept.
There are, however, more apt morals to be drawn from the longitude story. Heroic individualism is rarely a reliable guide to the workings of science and technology. No doubt prejudice in individualism's favour partly explains why the shared skills of Polynesian navigators, or London artisans, have been ignored or minimised. The campaigns to make, test and distribute ways of navigating the oceans were above all collective enterprises. To build a clock portable yet reliable enough, Harrison worked closely with several other clockmakers, such as John Jeffreys, who supplied the Yorkshireman with his own pocket watch, one of the first genuinely accurate watches and the direct source of much of the design of H-4, the device which eventually won out. Kendall, who then worked out how to copy H-4, was one of Jeffreys's best apprentices. Without this network, no horological solution to the longitude problem would have succeeded. The same is true of the many tests which Harrison's devices had to pass. For a test to count, all must agree in advance that the conditions are sufficiently like the real-world situation in which, eventually the device will work. Getting this agreement is never easy and often relies on who has authority on their side – a principle which governs tests of food safety or missile accuracy or marine clocks. Whose kitchen is really like the labs where cook-chill packs are tested? The fierce fights Sobel describes around the tests of Harrison's first and fourth watches are perfectly understandable in this light: it was never self-evident that voyages across the Atlantic, or up the Channel or in Maskelyne's rooms in Greenwich, represented accurately enough the conditions any clock would encounter in everyday use on the high seas.
To get this kind of accuracy it was also crucial to produce large numbers of reliable timepieces. Understandably, Harrison never attempted this. What Sobel neatly calls 'the mass production of genius' was surely the key to the problem. Harrison's genius may well have demonstrated the feasibility of a marine chronometer, but it didn't produce the clocks mariners then used. It is remarkable that scarcely any of the innovations Harrison built into his clocks – and which Sobel describes in compelling detail – were taken over into the large-scale productions of the late 18th-century English marine chronometer industry. Instead, other masters and other workshops, led by the furious rivals John Arnold and Thomas Earnshaw, eventually won the day for the chronometer against the lunar method by simplifying clock design and applying a principle which a contemporary Scottish don, Adam Smith, had so tardily described – the division of labour in manufactures. While government manuals continued to instruct naval officers on the technicalities of lunar observation, thousands of clocks good enough for sailors' purposes were made. And eventually, as has often been observed, this was why the British clock-trade shrank. Once saturated, the marine market simply could not sustain the intricate network of workshops and their output.
Harrison's clocks and their aftermath in fact belong to a more exciting and challenging narrative than one of individual craft and purblind tradition. In Dombey and Son, much concerned with the new and shaky time-worlds of rail and steam, Dickens makes the ships' instrument-maker Solomon Gills into a symbol of solid trust and sterling tradition. Above his shop door in Leadenhall Street is a wooden statue of a midshipman captured in the very act of taking an observation with his sextant. Gills himself uses a 'tremendous chronometer, rather than doubt which precious possession he would have believed in a conspiracy against it on the part of all the clocks and watches of the City and even of the very Sun itself'. It seems tempting to treat such chronometers as benevolent emblems of a vanished world of ingenuity, solidity and trustworthiness, a fitting and amiable gift for aged servants when they retire. The temptation should be resisted, for in every detail the wheels of these cunning and beautiful devices turned in time with the processes of capital, empire and modernity.
Vol. 18 No. 21 · 31 October 1996 » Simon Schaffer » Our Trusty Friend the Watch
Contact us for rights and issues inquiries.
More from this issue »
More by this contributor »


How to eliminate "time wasters" so you're free to make more money every single day!
How you can use the power of automation to maximize your income, instantly!
Find out how you can boost productivity with 1 simple "system" designed to cut your workload by up to 70%!
Why you should minimize long-term goals if you're serious about building a successful online business!
It goes without saying that there are only so many workable hours in any given day, and one of the key components to maximizing your online income is in maximizing your time. Failure to do so will ultimately result in a constant struggle for success, where you are overloaded with daily tasks that do nothing to help improve your bottom line. … Are you experiencing business overload? Having too many 'off days'?
You've probably had days where you sat at your computer for hours only to shut it down at the end of the day, feeling as though you've accomplished nothing. While we all have our 'off days', it's important that we learn how to effectively manage our time so that we're not only working smarter – we're actually able to work less while still getting more done! Imagine being able to log off after only a few hours of work, knowing that you've actually gotten more done than those days where you were chained to your desk for hours – your creativity gone along with your energy and motivation. And there's more to the ongoing success of your business than just time management alone.
You also need to learn how to delegate tasks, outsource projects, automate tasks, and streamline your business so that you're able to compete in your market. If you take a closer look at successful people in your market, you'll find that they seem to have an abundance of time, are happier, motivated and focused. So, how can they run such wildly successful businesses without being burdened, and weighed down by the day-to-day business grind? They've learned how to harness the power of time management, and in "assigning value" to their business projects. They've discovered the incredible value in focusing only on the most important aspects of business, while letting go of the things that don't matter. Freedom to Profit is a special report written specifically for those who are desperate to learn how to maximize productivity, while minimizing their workload. We'll explore some of the easiest ways of optimizing each and every workday, while helping you finally gain the freedom you need – to succeed!
We all need a well-managed routine, or system that helps to keep us on track. Without one, we find ourselves wasting valuable time just trying to get organized from day to day. By creating a project schedule however, we know exactly what we need to get done each day. Have you ever felt as though you just didn't know where to begin? That could be because your workload is very overwhelming and you have so many things to get done that you end up not getting anything done at all! So, not only do you need a project schedule, you need a workable system that breaks down your workload into simple tasks – setting a specific time frame on every project. Keep it simple and realistic. The objective is to create a workable system, so you don't want to become overzealous in what you believe you accomplish every day. A strict, overloaded work system will only bog you down and you'll likely find it impossible to stick to, so set realistic goals based on the time you allocate to each project, the time you have available each day, and the tasks that only you can do.


text:
Great Job Internet
Bong Joon-ho says he'll never direct a Marvel movie: "I can't stand people wearing tight-fitting clothes"
Filed to:Film
Photo: Frazer Harrison (Getty Images)
In the exhausting ongoing debate over the value (or lack thereof) of Marvel movies, one man has emerged as the voice of reason: Parasite director Bong Joon-ho. The South Korean filmmaker behind one of the best films of the year has broken his silence on the senseless controversy that is threatening to destroy the very delicate fabric of Film Twitter's reality. During an in-depth interview with Variety, Director Bong was asked to weigh-in on Martin Scorsese's comments about Marvel movies, and he offered perhaps the best and most reasonable response yet. "I have so much respect for Scorsese and Coppola, and I grew up studying their films," said Director Bong. "So I fully understand the context of their comments and I respect their opinion." However, he went on to note that he's an admirer of films like Guardians Of The Galaxy and Logan, which have "great cinematic moments."
When asked if he'd ever direct a Marvel movie, Director Bong revealed that he has a very specific psychological hang-up that prevents him from doing so:
I have a personal problem. I respect the creativity that goes into superhero films, but in real life and in movies, I can't stand people wearing tight-fitting clothes. I'll never wear something like that, and just seeing someone in tight clothes is mentally difficult. I don't know where to look, and I feel suffocated. Most superheroes wear tight suits, so I can never direct one.
Is this legitimate, or is it like when your high school teacher asks you to write a book report and you feign a phobia of literature? "I'm sorry, Ms. Jameson. I really want to do this, but I have an extremely intense fear of inanimate objects with biological designations; like why does a book have a spine?!" In any case, you're unlikely to find Bong Joon-ho in a Lululemon or hanging out by a pool.
For the record, Director Bong hasn't entirely ruled out directing a superhero movie. "If there is a superhero who has a very boxy costume, maybe I can try," he says.
Martin Scorsese clarifies criticism of Marvel movies but refuses to back down
Marvel's Kevin Feige offers predictable defense of the artistic merit of superhero movies
Chris Evans, Scarlett Johansson, and Chadwick Boseman weigh in on Scorsese's Marvel comments