text:
Bablands December 17, 2018 Europe
Cool things to do in Berlin with under-fives
Our first and last visit to Berlin more than five years ago was, shall we say, fairly alcohol-oriented. We were 26, childless and fancy-free; mostly there for the beer and with no itinerary whatsoever. Every day it rained and every day we drank our respective bodily volumes in apple strudel cocktails and weird German wine. It was one of the best holidays we've ever had together and we've always promised ourselves we'd return mit Kind and do it all over again – probably without all the clothes shops and hourly stop-offs for tankards of Erdinger, and probably with a few more toddler-friendly haunts thrown in.
We finally made it back in late November 2018, having booked our hotel and flights 48 hours ahead on a depressed whim and done basically zero planning. Thankfully Berlin is about as child-friendly as European cities come and it didn't take long to work out where all the cool kids hang out, from the interactive kindermuseums devised purely for children to the copious familiencafes poised to provide parents with a caffeine hit while their little ones do their worst with the wendy house. We stayed six days and still didn't manage to cover everything we wanted to, but then we are pretty extra and I reckon you could still quite comfortably fit the must-sees into a long weekend.
MUSEUMS: DDR Museum
An absolute must, with or without babes, the DDR Museum is said to be one of the world's most interactive museums, as well as being one of the largest and most diverse of its kind. Offering an immersive taste of everyday life in the former East Germany, this utterly absorbing museum includes an authentic reconstruction of a high-rise, five-room 'Plattenbau' apartment in which you're free to make yourself at home; a chance to take a simulated drive inside an original Trabant P601; plus a replica of a 1970s East German kindergarten that little ones will love. Pretty much everything is touchable, wearable and/or inhabitable, with countless cupboards and drawers to open, games to play, films to watch, Soviet clothing to try on and basically everything at toddler height – plus all information in German and English. Possibly my favourite museum in the world ever, and that's saying something.
DDR Museum, Karl-Liebknecht-Straße 1, 10178 Berlin
Kindermuseum MACHmit!
Housed in an old church in Berlin's child-orientated Prenzlauer Berg district, MACHmit! is like no museum you've ever been to, featuring interactive temporary exhibition spaces; a handful of ever-changing, supervised craft booths (design a T-shirt, make a bracelet, etc.); a big red pipe to clamber through; and, most excitingly, a huge, double-sided, four-storey wooden maze that's kind of like a soft-play structure except, y'know, hard, with bridges, swings and a lot of steps. It's great, and very Grand Designs, but absolutely knackering and basically impossible to remove a child from thanks to its numerous stairways and dead ends. Should you manage to escape, MACHmit! also offers a sizeable cafe, a small shop, a mirror room, a pirate ship, tons of interactives and a bunch of those weird rubber dog things to bounce around on.
Kindermuseum MACHmit!, Senefelderstraße 5, 10437 Berlin
Labyrinth Kindermuseum
I loved the simplicity of Labyrinth, which is housed in a former factory in north Mitte. More giant Montessori play centre than a museum as such, Labyrinth is laid out over two floors with a series of wooden cube structures on the ground floor, each one accommodating a different activity: Lego, dress-up, dominoes etc. At the back of the space there's a large, galleried picnic area – next to a small cafe and between the two sets of stairs that lead up to the first floor. Upstairs there are two enormous play kitchens/grocery stores filled with every kind of plastic play food you could imagine, a well-stocked puppet theatre and a soft-play area piled with squishy play bricks for den-making. Everything is open to interpretation and designed for imaginative, open-ended play, making it Babu's favourite of the four museums we visited. Do bear in mind though, while the website is really unclear I'm pretty sure it's only open to families on weekends and reserved for school groups during the week.
Labyrinth Kindermuseum, Osloer Staße 12, 13359 Berlin
We chose the most bitterly cold day to visit the East Side Gallery, a 1,316m-long remnant of the Berlin Wall located in Friedrichshain-Kreuzberg, which was an error as obviously it's outside, but I'm still glad we saw it again, having visited and signed our names (now long gone) when we came to Berlin in 2013. This is a difficult one to explain to a two year old, and they may wonder what the hell you're doing trailing around in arctic temperatures staring at a slab of concrete, but there are plenty of games (find your favourite mural, i-spy) that you can incorporate into your visit to try and engage your child, and I think we just about got away with it before she started complaining that she was cold and bored. Look out for colourful cartoon heads by the amazing Thierry Noir, Birgit Kinder's painting depicting a Trabant crashing through the wall, Thomas Klingenstein's Detour to the Japanese Sector, and don't forget Dmitri Vrubel's My God, Help Me to Survive This Deadly Love, depicting the 'fraternal socialist kiss' between Soviet leader Leonid Brezhnev and East German President Erich Honecker in 1979.
East Side Gallery, Mühlenstraße 3-100, 10243 Berlin
Legoland Discovery Centre
Kind of cool but also kind of my own personal hell, the LEGOLAND Discovery Centre is based in an underground lair in the bowels of Potsdamer Platz, central Berlin. Don't get me wrong, I love LEGO, but we managed to hit this particular tourist trap during the holidays (it was the end of November but whatever) when it was swarming with massive children, and there were some pretty terrifying moments in the Ninjago City Adventure soft-play section involving some exceptionally violent eight year olds. Thankfully there are enough areas aimed at under-5s to make it worth the trip, despite the lingering feeling of claustrophobia, including a giant rubber Duplo-brick building zone, a much smaller and gentler soft-play area aimed at toddlers, and the mechanised Miniland LEGO city upstairs, which Babu found fascinating. In addition to all that there are a handful of LEGO build and play stations, a themed cafe and a couple of rides – although under-3s aren't allowed on those. If you're short on time I'd be inclined to leave this one out, provided you don't have a die-hard LEGO fan in the family.
LEGOLAND Discovery Centre, Potsdamer Straße 4, 10785 Berlin
PLAYGROUNDS Berlin is famed for its copious innovative playgrounds, but since it was around 2 degrees every day during our trip we weren't in a massive hurry to visit any of them. Should you happen to visit at a warmer time of year, you might want to check out the Dragon Playground on Schreinerstraße in Friedrichshain, the Witch Playground on Eisenacher Straße in Schoeneberg, the Snow White Playground on Mommsenstraße in Charlottenburg, the Circus Playground on Thielallee in Steglitz-Zehlendorf or the huge playground in Buschkrug Park, featuring a giant vampire head. All of these playgrounds are themed, differ drastically from the usual British offering and are dotted around the city, so you can take your pick depending on where you're staying and what else you're seeing. It's also worth noting that Prenzlauer Berg, where many of the museums and shops I mention are based, is jam-packed with playgrounds. Basically if you want one, you'll find one.
SHOPS: Kleine Fabriek
If you're getting ready for a new baby and have a bottomless budget then Kleine Fabriek is the shop for you. With branches in Mitte and Schöneberg, this upscale baby boutique is total nursery goals, offering the creme de la creme of ultra-tasteful, Scandinavian-style furniture, prams and accessories. Expect pricy but perfect cots and bunk beds by Oeuf, Oliver Furniture and Rafa-Kids; playful teepees and beanbags by Ferm Living and Nobodinoz; quirky lighting by Mr Maria and A Little Lovely Company; and beautiful bedroom accessories from Liewood and Konges Sløjd. We tested and fell in love with a Highway Kick scooter, and ended up ordering it for Babu for Christmas, and I still have my eye on a Lulalula play mat for the baby.
Kleine Fabriek, Kastanienallee 63, 10119 Berlin
D.nik
Another eye-wateringly expensive yet decidedly tempting kids' shop, the D.nik 'KinderConceptStore' in trendy Prenzlauer Berg is packed with design-led treasures, from build-your-own cardboard play furniture and bObles Tumbling Animals to high-end bedroom furniture and enough Mini Rodini to kit out the cast of Annie. They were a bit funny about Babu touching things, which made our browse a bit stressful, but I kind of understand when everything is so beautifully arranged (and pricey). We lusted after basically everything in this store but, after being told off twice and deciding we'd outstayed our welcome, we settled on a plain white Calafant DIY cardboard castle with the idea that it might keep Babu occupied in our hotel room in the evenings, although that inevitably didn't happen and I ended up making it by myself when we got home.
D.nik, Wörther Straße 14, 10405 Berlin
I completely fell in love with this amazing little bookstore, which sells illustrated kids' books in a variety of languages, from German and English to Russian and Korean. Admittedly there weren't a huge amount of English books in stock but then we didn't really go with the intention of buying a bunch of books we could have got at home; in fact I actually love looking at foreign-language books, even when I don't understand them – which is always – and we ended up buying Babu a German/English copy of John Lennon's Imagine, illustrated by the incredible Jean Jullien. Mundo Azul (meaning blue world in Spanish) also runs regular workshops and talks, and staff were setting up for one in one of the two floor-to-ceiling-shelved rooms when we visited. The owner, Mariela, was ridiculously lovely and even gave Babu a tour of the back room she seemed so fascinated by, as well as a beautiful illustrated postcard to take home. Definitely worth a look for the feel-good factor alone.
Mundo Azul, Choriner Straße 49, 10435 Berlin
Hase Weiss
We had to venture to an area we wouldn't otherwise have visited to check out Hase Weiss, a small but perfectly formed Charlottenburg kids' boutique specialising in traditional handmade toys. Some of their stuffed animals were obscenely beautiful – probably the nicest I've ever seen – but the real stars of the show were the modular dolls' houses, available in a variety of shapes and sizes and in mint green, pastel yellow, powder blue and baby pink; designed to stand alone or be grouped together, and accompanied by their own line of dinky furniture and handmade wooden dolls. Should you have a couple of hundred euros burning a hole in your pocket or be in the market for something extra-special then I'd say it's worth the trek. Otherwise maybe give it a miss since it's tiny and super-pricy. I was determined to buy something so settled on a pair of Meri Meri Christmas tree decorations, but if I'm honest this shop really is birthday present/rich person territory.
Hase Weiss, Windscheidstraße 25, 10627 Berlin
Another one we trekked out of town for (to Neukölln, which is kind of a dump), Zuckerfrei is a bright and modern breath of fresh air on an otherwise pretty blah street. A self-styled kids' concept store, this cute toyshop stocked a lot of items we hadn't seen elsewhere, from quirky nursery prints and bunting (we bought the most epic DIY cat bunting kit) to customisable cardboard wendy houses, educational games, innovative accessories and a large range of Steiner-style wooden toys and puzzles. Many of the items on sale encourage creativity and open-ended play, which I loved, and I'd definitely recommend a visit on the basis that we bought more stuff there than in most of the kids' shops we visited – plus it's not that far from the East Side Gallery.
Zuckerfrei, Anzengruberstraße 12, 12043 Berlin
JaJu
Of the seven kids' shops we visited (I know – I have problems), JaJu was by far my favourite. Beautifully set out over a large, bright space down a pleasant residential street in Pankow (very close to the Labyrinth museum), JaJu stocks a huge variety of nursery furniture, toys, accessories, books, gifts and clothing, as well as housing a ball pool, den and hopscotch floor decal that kids can amuse themselves with while you browse. I was tempted by a lot of stuff here, from the Lucky Boy Sunday knitted softies to the Liewood mobiles, the Eef Lillemor folding crates, the Sticky Lemon backpacks and the amazing dinosaur dress-up tails in every colour of the rainbow, but eventually decided on a Petit Monkey Matryoshka set (for me) and a Dotcomgiftshop bento box (for Babu). If you only visit one kids' shop while you're here, make it this one.
JaJu, Brehmestraße 58, 13187 Berlin
Other kids' shops that might be worth a peek if you're in the vicinity include Monkind, a lush but pricey clothing boutique on Crellestraße in the south-west of the city; the Goldfisch Kinderkaufhaus, with branches in Mitte's Brunnenstraße and the Bikini shopping centre off the south-west corner of the Zoologischer Garten; and C37, a concept store right opposite Mundo Azul that's pretty cute despite sounding like a bus route. There are also an absolute ton of second-hand kidswear stores all over the city.
PLAY CAFES Like the Dutch, Germans are big on kindercafes, though as a rule Berlin's offerings appear to be rather less stylish and rather more functional than the two-in-one concept stores we visited Amsterdam. Mostly for that reason we didn't bother, but there are a few concentrated around the north-west of the city that look cute should you find yourself in a tight spot. Das Spielzimmer on Schliemannstraße in Prenzlauer Berg has a play house, cars and a climbing frame with slide; Paul & Paula on Friedrichshain's Richard-Sorge-Straße features a large play area and small shop selling kids' clothing and toys, Kiezkind in Prenzlauer Berg's Helmholtzplatz offers a giant indoor sandpit, and Café Schönhausen on Pankow's Florastraße combines a large playroom with playhouse and slide with a small on-site boutique.
RESTAURANTS There are a billion restaurants in Berlin but, of the ones we tried, the following were the most delicious and child-friendly. Schwarzwaldstuben, on Tucholskystraße in Mitte, was recommended to us before our first trip to Berlin and remains our absolute favourite place to eat in the city. Cosy, rustic and typically German, this reasonably priced gem serves hearty, regional dishes such as schnitzel, vegetable stews, pasta dumplings, and sausages with potato noodles and sauerkraut – and their continental breakfasts are pretty special too. If you're vegetarian or vegan, Der Vegetarische Metzger, on Bergmannstraße in Bergmannkiez, offers a refreshing antidote to the millions of currywurst stands dotted around the city. A self-styled 'konzeptstore' comprising a veggie 'butcher's' shop and relaxed modern cafe decorated with soft-toy sausages, Der Vegetarische Metzger serves a variety of meat-/animal-product-free takes on traditional German dishes, from bockwurst and bratwurst to schnitzel and stew. And while German food is great, particularly in freezing-cold temperatures, it does get rather limiting when one of you doesn't eat meat, which was why the incredibly toddler-friendly Papà Pane di Sorrento on Mitte's Ackerstraße was so great. It might be one of the most popular pizzerias in the city, but its staff were super-accommodating when we rocked up sans-reservation on a Saturday night. The pizza was amazing, even if I did accidentally order one without cheese, and our waiter was so nice with Babu and didn't bat an eyelid when she smashed a glass.
TIPS Stay in Mitte if you want to be close to the child-friendly action and most of the key tourist attractions. We stayed near the zoo (which we chose not to visit on this occasion because of the cold) and ended up trekking up to Mitte almost every day. I'd recommend an apart-hotel with separate sleeping and living areas so you can stuff the kids in the adjoining room come bedtime and get a bit of time to yourselves. We managed this in Amsterdam and it was great but our Berlin accommodation was more of a studio/bedsit scenario and Babu ended up going down with us at 11pm most nights. I'd also suggest downloading the BVG (kind of like TFL) app and using it to buy a Berlin WelcomeCard for however many days you're staying. You can also use the app to plan journeys, which saved us on countless occasions. The WelcomeCard is good for journeys by U-Bahn, S-Bahn, tram and bus, and also gets you money off a handful of popular attractions. Plus it costs €42.50 for unlimited travel over six days, which I think is pretty reasonable. The majority of S- and U-Bahn stations have lifts, which is such a treat where you're used to lugging a buggy around London.
Babu and Bab Dad brave the cold at the East Side Gallery, Berlin
Posted in Europe and tagged Accessories, Activities, Art, Bablands, baby, Berlin, Books, Cafe, Creative, Culture, Design, Designer, Europe, Exhibitions, fashion, Festivals, Food, Free stuff, Galleries, Germany, Guide, Hangouts, History, Independent Shops, Interactive Play, Interiors, kids, Learning, Lifestyle, Literature, Museum, Outdoors, Parents, Play, Play Area, Play Cafe, Playgrounds, Reading, Restaurant, Shopping, shops, Toddler, Toys, Travel. Bookmark the permalink.
Karla Hill	 on August 11, 2020 at 4:40 pm
Thanks for your Berlin post – I remembered your love of Berlin and looked this up while there this summer (2020) with my kids (6 and 2). We followed your recommendation on the DDR museum which was indeed excellent – and the girls loved the kindergarten and the GDR apartment. And it was a real insight into life and politics. Loved the video views to the world outside.
A new pick for parks/playgrounds in summer – the shady (in a green leafy way) Volkspark Friedrichshain and in particular, the incredible (London needs one) Bachlauf ("streambed") Volkspark Friedrichshain – a kid's water playground in a streambed. Under the trees, free and lovely. Hope you make it back in summer one day!
Enter the world of our most marvellous writer at the Roald Dahl Museum
Let the Little Dance Academy teach your toddler to breakdance with Baby Hip Hop


text:
Space Cookies robotic team is actively recruiting Freshman girls
For the past eight years, Menlo Park resident Shosh Cohen has been mentoring the Space Cookies, an all girls robotic team that draws from all over the Bay Area. Her goal for the fall: get more local girls involved.
"Our founding sponsors are NASA and the Girl Scouts, which is where the name Space Cookies comes from," Shosh explains. "Our lab is at the NASA Ames Research Center.
"We compete in First Robotics Competitions. The focus is on big robots. It's a very supportive environment — and just girls!
There will be two informational sessions and workshops aimed at rising Freshman girls to meet current Space Cookies, learn about building robots and how the group works to inspire girls to be leaders in STEM. The first session is August 23 from 3:00 to 5:00 pm, and the second session is on August 30, also from 3:00 to 5:00 pm. Sign up online.
Shosh emphasized that no experience is necessary. "Everyone gets the same training during the fall," she says.
Once the robot is built, the Space Cookies do a lot of community outreach. "They enjoy demoing the robot and talking to little girls," says Shosh. "Of course they like the competition and winning, too!"
Photo of Isabella (on the right) and Ilene with Jo (after Jo March) the robot courtesy of Space Cookies
NIdhi Tyagi August 25, 2020 at 6:00 pm
My girls are 8th graders can they be part of this virtual STEM session, to know how this program works.
Shoshanah Cohen August 26, 2020 at 3:25 pm
The Space Cookies FRC team is for high school girls only, but you can check with the VEX team at vex.spacecookies.org.

redpajama_set_name: RedPajamaCommonCrawl


Innovative Australian print to mobile mobile tech provider Radiaca has closed its first major deal, with India's PressIdeas Publishing, which takes Radiaca's new Partica print to mobile technology into a marketplace of more than 300,000 print and publishing businesses.
The Partica technology reformats print publication files (PDFs) into a mobile-friendly format able to be viewed on smartphones and tablets, and is one of the technologies offered as part of the Radiaca suite of solutions.
It has been developed to enable printers to offer a solution to publishers to enable them to have their content prepared for both print and mobile platforms from the same print ready PDF. It will allow printers to develop closer ties with publishers through offering them a clear added value service to meet a real need, mobile friendly publishing.
Shankar Vishwanath, co-founder of Radiaca and CEO of Printer Magazines Group, says, "As the printing industry has declined over the past five years, with consumers increasingly seeking solutions through online platforms, Radiaca will help positively grow the print sector by tapping into new revenue streams for printers and enabling new ways of consuming print media.
The Partica platform technology takes a PDF for print and designs streamlined, translatable and mobile-friendly articles. Through the use of polls, surveys, calls to action and real-time feedback for customers, the in-built capabilities enhance two-way communication between printers and customers – closing the gap between the content consumer and brand owner and delivering real value for the publisher.
Richard Lindley, CTO of Radiaca says, "This is a momentous move for us and our partners, especially as content consumption trends which are heading strongly to mobile continue to boom.


Home Gardening Are you a n-ooooby to gardening?
Are you a n-ooooby to gardening?
I'm so glad you like the name I thought it only appropriate! I hope you can come along and see some Uni student make an impact in their local communities plus there are some fantastic prizes up for grabs!


Find your perfect maternity tops at Jeanswest. Choose from plain or stylishly printed long sleeved tops, tees, and tanks in a range of colours, sizes, and styles, all designed with your comfort in mind. Includes our post maternity tank, designed for easy access feeding.


text:
NSString * const LCBookLookupErrorDomain = @"LCBookLookupErrorDomain";

@interface LCBookLookup (Private)
- (void)performGoogleBooksQuery;
- (NSArray *)parseGoogleBooksQuery:(id)result;
@end

@implementation LCBookLookup

@synthesize bookSource = _bookSource;
@synthesize delegate = _delegate;

@synthesize queryString = _queryString;
@synthesize results = _results;
@synthesize numberOfResults = _numberOfResults;

@synthesize loading = _loading;

- (id)init {
    if (self = [super init]) {
        self.bookSource = kGoogleBooks;
    }
    return self;
}

- (void)performGoogleBooksQuery {

    _loading = YES;

    // Construct the query
    NSInteger startIndex = 0;
    if (self.results != nil && ([self.results count] < self.numberOfResults))
        startIndex = [self.results count];

    NSString * urlString = [NSString stringWithFormat:
                            @"https://www.googleapis.com/books/v1/volumes?key=%@&q=%@&startIndex=%d&maxResults=20",
                            GoogleAPIKey, self.queryString, startIndex];
    NSURL * url = [NSURL URLWithString:urlString];

    DEBUG(@"Query String: %@", self.queryString);
    DEBUG(@"URL String: %@", urlString);
    DEBUG(@"Fetching URL %@", url);

    __block ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];

    [request setCompletionBlock:^{
        // Parse the resulting JSON
        SBJsonParser * parser = [[SBJsonParser alloc] init];
        id result = [parser objectWithString:request.responseString];
        if (!result) {
            NSLog(@"A JSON error occurred: %@", parser.error);
            [self.delegate bookLookup:self failedWithError:parser.error];
            return;
        }

        NSInteger totalItems = [((NSString *)[((NSDictionary *)result) objectForKey:@"totalItems"]) integerValue];
        _numberOfResults = totalItems;

        if (self.numberOfResults == 0) {
            NSError * error = [NSError errorWithDomain:LCBookLookupErrorDomain
                                                  code:kBookNotFound
                                              userInfo:[NSDictionary dictionaryWithObjectsAndKeys:
                                                        @"No books found", NSLocalizedDescriptionKey, nil]];
            [self.delegate bookLookup:self failedWithError:error];
            return;
        }

        // NSDictionary * bookInfo = [self parseGoogleBooksQuery:result];
        NSArray * booksInfo = [self parseGoogleBooksQuery:result];

        if (booksInfo == nil) {
            NSError * error = [NSError errorWithDomain:LCBookLookupErrorDomain
                                                  code:kBookNotFound
                                              userInfo:[NSDictionary dictionaryWithObjectsAndKeys:
                                                        @"No books found", NSLocalizedDescriptionKey, nil]];
            [self.delegate bookLookup:self failedWithError:error];
            return;
        }

        if (_results == nil) {
            // This was a new query
            _results = booksInfo;
        } else {
            // Add the new books to the results set.
            NSMutableArray * mutableResults = [_results mutableCopy];
            [mutableResults addObjectsFromArray:booksInfo];
            _results = [NSArray arrayWithArray:mutableResults];
        }

        [self.delegate bookLookupGotResults:self];
        _loading = NO;

        DEBUG(@"Found %d books", [self.results count]);
    }];

    [request setFailedBlock:^{
        NSError *error = [request error];

        NSLog(@"A HTTP error occurred: %@", error);

        [self.delegate bookLookup:self failedWithError:error];
        _loading = NO;

    }];

    [request startAsynchronous];

}

- (NSArray *)parseGoogleBooksQuery:(id)result {

    NSMutableArray * resultArray = [NSMutableArray array];

    for (NSDictionary * volumeDict in (NSArray *)[result objectForKey:@"items"]) {

        // Extract Google Books data
        // NSDictionary * volumeDict = (NSDictionary *)[((NSArray *)[result objectForKey:@"items"]) objectAtIndex:0];
        NSDictionary * volumeInfo = (NSDictionary *)[volumeDict objectForKey:@"volumeInfo"];

        NSMutableDictionary * bookInfo = [NSMutableDictionary dictionary];

        DEBUG(@"Got Book Info: %@", volumeDict);

        // Set Book attributes
        NSString * googleId = [volumeDict objectForKey:@"id"];
        if (googleId != nil)
            [bookInfo setObject:googleId forKey:@"googleId"];

        NSNumber * isEbook = [((NSDictionary *)[volumeDict objectForKey:@"saleInfo"]) objectForKey:@"isEbook"];
        if (isEbook == nil)
            [bookInfo setObject:isEbook forKey:@"isEbook"];

        NSString * title = [volumeInfo objectForKey:@"title"];
        if (title != nil)
            [bookInfo setObject:title forKey:@"title"];

        NSArray * authors = (NSArray *)[volumeInfo objectForKey:@"authors"];
        if (authors != nil)
            [bookInfo setObject:[authors componentsJoinedByString:@", "] forKey:@"authors"];

        NSString * publisher = [volumeInfo objectForKey:@"publisher"];
        if (publisher != nil)
            [bookInfo setObject:publisher forKey:@"publisher"];

        NSNumber * pages = [volumeInfo objectForKey:@"pageCount"];
        if (pages != nil)
            [bookInfo setObject:pages forKey:@"pages"];

        NSString * language = [volumeInfo objectForKey:@"language"];
        if (language != nil)
            [bookInfo setObject:language forKey:@"language"];

        NSString * thumbnailUrl = [((NSDictionary *)[volumeInfo objectForKey:@"imageLinks"]) objectForKey:@"thumbnail"];
        if (thumbnailUrl != nil) {
            // This is a hack to remove any possibility of curling in the thumbnail image.
            [bookInfo setObject:[thumbnailUrl stringByReplacingOccurrencesOfString:@"edge=curl" withString:@""]
                         forKey:@"thumbnailUrl"];
        }

        NSArray * categories = (NSArray *)[volumeInfo objectForKey:@"categories"];
        if (categories != nil)
            [bookInfo setObject:[categories componentsJoinedByString:@", "] forKey:@"categories"];

        // Now the more complicated to extract attributes
        for (NSDictionary * isbnDict in (NSArray *)[volumeInfo objectForKey:@"industryIdentifiers"]) {
            if ([[isbnDict objectForKey:@"type"] isEqualToString:@"ISBN_10"])
                [bookInfo setObject:[isbnDict objectForKey:@"identifier"] forKey:@"isbn"];
            else if ([[isbnDict objectForKey:@"type"] isEqualToString:@"ISBN_13"])
                [bookInfo setObject:[isbnDict objectForKey:@"identifier"] forKey:@"isbn13"];
        }

        if ([volumeInfo objectForKey:@"publishedDate"] != nil) {
            // Published date might only include year, year and month, etc.
            @try {
                NSDateFormatter * formatter = [[NSDateFormatter alloc] init];

                if ([[volumeInfo objectForKey:@"publishedDate"] length] == 4)
                    formatter.dateFormat = @"yyyy";
                else if ([[volumeInfo objectForKey:@"publishedDate"] length] == 7)
                    formatter.dateFormat = @"yyyy-MM";
                else if ([[volumeInfo objectForKey:@"publishedDate"] length] == 10)
                    formatter.dateFormat = @"yyyy-MM-dd";

                [bookInfo setObject:[formatter dateFromString:[volumeInfo objectForKey:@"publishedDate"]]
                             forKey:@"publishedDate"];

            }
            @catch (NSException *exception) {
                // Ignore the error, and just don't set publishedDate.
            }

        }

        [resultArray addObject:[NSDictionary dictionaryWithDictionary:bookInfo]];

    }

    return [NSArray arrayWithArray:resultArray];
}

- (void)downloadCoverImageForIndex:(NSInteger)index {

    if (index >= [self.results count])
        return;

    NSDictionary * bookInfo = [self.results objectAtIndex:index];
    NSString * isbn = [bookInfo objectForKey:@"isbn13"];
    NSString * imageUrl = [bookInfo objectForKey:@"thumbnailUrl"];

    if (isbn == nil || imageUrl == nil)
        return;

    ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:imageUrl]];
    request.downloadDestinationPath = pathToCoverForISBN(isbn);

    [request setCompletionBlock:^{
        [self.delegate bookLookup:self downloadedCoverAtIndex:index];
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];
        [self.delegate bookLookup:self failedWithError:error];
    }];
    [request startAsynchronous];

}

- (void)downloadCoverImage:(NSString *)imageUrl forISBN:(NSString *)isbn {

    ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:imageUrl]];
    request.downloadDestinationPath = pathToCoverForISBN(isbn);

    [request setCompletionBlock:^{
        [self.delegate bookLookupDownloadedCover];
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];
        [self.delegate bookLookup:self failedWithError:error];
    }];
    [request startAsynchronous];

}

- (void)lookupISBN:(NSString *)isbn {
    NSString * strippedISBN = [[isbn componentsSeparatedByCharactersInSet:
                                [[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
                               componentsJoinedByString:@""];

    if (self.bookSource == kGoogleBooks) {
        NSString * queryString = [NSString stringWithFormat:@"isbn:%@", strippedISBN];
        _queryString = queryString;
        [self performGoogleBooksQuery];
    }
}

- (void)lookupBookInfo:(NSDictionary *)bookInfo {

    DEBUG(@"Looking up book with info: %@", bookInfo);

    // Reset properties
    _results = nil;
    _numberOfResults = 0;
    _queryString = nil;

    NSMutableArray * queryArray = [NSMutableArray array];

    if ([bookInfo objectForKey:@"title"] != nil && ![[bookInfo objectForKey:@"title"] isEqualToString:@""]) {
        NSString * escapedTitle = [[bookInfo objectForKey:@"title"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        [queryArray addObject:[NSString stringWithFormat:@"intitle:%@", escapedTitle]];
    }

    if ([bookInfo objectForKey:@"authors"] != nil && ![[bookInfo objectForKey:@"authors"] isEqualToString:@""]) {
        NSString * escapedAuthors = [[bookInfo objectForKey:@"authors"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        [queryArray addObject:[NSString stringWithFormat:@"inauthor:%@", escapedAuthors]];
    }

    if ([bookInfo objectForKey:@"publisher"] != nil && ![[bookInfo objectForKey:@"publisher"] isEqualToString:@""]) {
        NSString * escapedPublisher = [[bookInfo objectForKey:@"publisher"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        [queryArray addObject:[NSString stringWithFormat:@"inpublisher:%@", escapedPublisher]];
    }

    if ([bookInfo objectForKey:@"isbn13"] != nil && ![[bookInfo objectForKey:@"isbn13"] isEqualToString:@""]) {
        NSString * strippedISBN = [[[bookInfo objectForKey:@"isbn13"] componentsSeparatedByCharactersInSet:
                                    [[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
                                   componentsJoinedByString:@""];
        [queryArray addObject:[NSString stringWithFormat:@"isbn:%@", strippedISBN]];
    }

    if (self.bookSource == kGoogleBooks && [queryArray count] > 0) {
        NSString * queryString = [queryArray componentsJoinedByString:@"+"];
        _queryString = queryString;
        [self performGoogleBooksQuery];
    }

}

- (void)loadMoreResults {
    if ([self.results count] >= self.numberOfResults)
        return;

    // All we should have to do is this
    if (self.loading)
        return;

    [self performGoogleBooksQuery];
}

@end

redpajama_set_name: RedPajamaGithub


Innovation, quality and reliability are the core values of our company. These principles today more than ever for Magic Rainbow Scratch Art , Rainbow Scratch Art , Foil Rainbow Scratch Art , We sincerely welcome all guests to set up business relationships with us on the basis of mutual benefits. Please contact us now. You will get our professional reply within 8 hours.
"Our commission is to serve our users and purchasers with greatest good quality and aggressive portable digital items for Magic Rainbow Scratch Art , Rainbow Scratch Art , Foil Rainbow Scratch Art , We believe with our consistently excellent service you can get the best performance and cost least goods from us for a long term . We commit to provide better services and create more value to all our customers. Hope we can create a better future together.


Maggie's Second Chance is a delightfully illustrated children's book which inspires children to help animals in need. In the story, we follow the life of Maggie, who was abandoned in a locked house, rescued, and finally gets a forever loving home.
One of the things that impressed us about this book is that it helps preserve a child's sense of empathy for all living beings. As the publisher says, most children have a deep sense of what is ethically right, and this book definitely will reinforce that inner understanding about the way the world should really be.
The books ends with a page about how to help other animals in need.
Maggie's Second Chance would make a wonderful gift for any child that would be appreciated for many years.
Nancy Furstinger, the author of nearly one hundred books, many about animals, was an editor at two children's book publishing houses. She shares her home with three rescued dogs (including Jolly, the real Maggie) and seven rescued house rabbits.
Joe Hyatt is the illustrator of Buddy Unchained, an award-winning picture book used in schools and libraries around the country. He has a career painting portraits of dogs that was inspired by the portrait he made of his yellow Labrador retriever, Nola. He lives in California with his three rescued dogs, Nola, Turtle, and Holiday.


Evaluation of heart time-activity curves as a predictor of hepatic extraction of 99mTc-mebrofenin in dogs.
Title Evaluation of heart time-activity curves as a predictor of hepatic extraction of 99mTc-mebrofenin in dogs.
In this study, heart time-activity curve, created following intravenous injection of 99mTc-mebrofenin were used to quantify hepatic function in normal dogs and dogs with induced hepatic parenchymal cell damage. The results were compared to a direct measurement of hepatic extraction following mesenteric venous injection of 99mTc-mebrofenin. The heart time-activity curves were normalized and the area under the curve from 0-30 minutes and 0-60 minutes were determined. In addition, the half-time clearance rate of the heart time-activity curve was analyzed using a two-compartment model. Linear regression analysis was used to describe the relationship between the area under the normalized heart time-activity curve and hepatic extraction. There was good correlation between the area under the normalized heart time-activity curve and hepatic extraction. The best correlation was obtained from the 0-30 minute data (r2 = 0.92). A formula for calculating hepatic extraction was derived using linear regression analysis: Hepatic extraction = 1.092 - (0.0000308 x AUC0-30 minutes). There was good correlation between the half-time clearance rates from the heart time-activity curve and hepatic extraction. The best correlation was between the fast phase half-time clearance and hepatic extraction (r2 = 0.88). The area under a normalized heart time-activity curve can be used as a simple alternative to deconvolutional analysis for the determination of hepatic extraction as a measure of hepatic parenchymal cell function in the dog.


text:
Q: Need help forming a regex pattern matcher My String to parse is an http response with the separation of vertical bars '|' colons ':'
and commas ','
"1701|919422522891:224c1214-bb95-414d-ba76-77db95370545,1701|918275004333:5e93a439-2644-4455-9f01-f27e6cf0cde6"

I have made an attempt to parse with the following code
public void split2(){
    String input = "1701|919422522891:224c1214-bb95-414d-ba76-77db95370545," +
                   "1701|918275004333:5e93a439-2644-4455-9f01-f27e6cf0cde6";

    Matcher matcher = Pattern.compile("\\|.*?\\:\\,").matcher(input);
    int nr = 0;
    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

UPDATE - WORKING CODE
The split method works well
  public String[] split(String regex,String input)
    {
        input = "1701|919422522891:224c1214-bb95-414d-ba76-77db95370545," +
                "1701|918275004333:5e93a439-2644-4455-9f01-f27e6cf0cde6";
        regex = "\\||:|," ;

        String[] soso = Pattern.compile(regex).split(input, input.length());

            for(String s :soso){
                Log.e("",s.toString());
        }

        return null;
    }

A: You can use:
Matcher matcher = Pattern.compile("[^|]*\\|[^:]*:[^,]*,").matcher(input);

Explanation: This regex "[^|]*\\|[^:]*:[^,]*," means:

*

*[^|]* - Match 0 or more characters before a pipe

*\\| - Match a pipe

*[^:]* - Match 0 or more characters before a colon

*: - Match a colon

*[^,]* - Match 0 or more characters before a comma

*, - Match a coma

A: Instead of match you can easily do a split.
\||:|,

See demo.
https://regex101.com/r/vN3sH3/28

redpajama_set_name: RedPajamaStackExchange


Federated Co-operatives Limited's Co-op Refinery Complex (CRC) in Regina, Sask., is one of Canada's largest and most productive refineries. The complex originally was established in the 1930s by a group of eight farmers as a more economical way to supply fuel to a small chain of Saskatchewan farmer-owned gas stations. The facility's output has grown from 500 bbl/d in 1935 to 130,000 bbl/d today, making it one of Western Canada's major fuel suppliers.
Water is critical to sustaining CRC operations. The refinery requires an average of 1,600 gal/min of water for steam generation; the steam is used for heating, hydrogen production, cooling towers and for powering equipment. The facility is one of the single largest freshwater consumers in Regina, drawing water from on-site groundwater wells and receiving supplies from the city's municipal system during periods of high demand.
When the CRC increased its operations several years ago, raising production from 100,000 bbl/d to 130,000 bbl/d, the Water Security Agency (WSA), the provincial body responsible for water supply and use, mandated that the CRC find a new source of water to support the expansion.
Figure 1. Refinery relies on five treatment stages for its wastewater.
Regina has an arid climate. So, water conservation and demand management play significant roles in addressing the area's water scarcity challenges. Embracing responsible water usage and responding to the WSA's requirement, the CRC committed to a C$200 million "environmental mega project" and water recycling initiative — referred to as the wastewater improvement project (WIP) — to enable the refinery to reuse 100% of its wastewater.
To meet this ambitious water recycling target, the WIP would need to be capable of high levels of wastewater treatment to remove solids, oils, phenols, nitrogen compounds, organics and other contaminants. Treated water then would require demineralizing to allow its use in steam production. Further sustainability and environmental objectives included eliminating the release of volatile organic compounds (VOCs) from wastewater ponds, phasing out the use of municipal treated water and reducing demand for groundwater.
CRC decided to partner with SUEZ Water Technologies & Solutions on the project. SUEZ, which helped design, build and commission the WIP, incorporated a variety of advanced processes and proprietary treatment technologies. The WIP was commissioned in mid-2015 and has treated refinery waste since November 2015. The demineralization plant has been completed and tested; it should be in continuous operation by the end of the second quarter of this year.
The WIP design features five treatment stages (Figure 1) and uses a range of SUEZ technologies.
Stage 1 — Wastewater tanks and oily water separators. Wastewater initially goes to holding tanks where oil and water are separated by gravity. Floating oil is skimmed from the top of the wastewater and subsequently reprocessed within the refinery. Wastewater then passes to another tank where sediment and oily sludge sink to the bottom. The oil is sent back to the refinery for reprocessing while the sludge is removed and disposed of safely.
Figure 2. Following treatment in a membrane bioreactor, water goes to hollow-fiber membranes.
Stage 2 — Dissolved gas flotation unit. Wastewater continues to stage 2 — a SUEZ Poseidon dissolved gas flotation unit. Here, microscopic nitrogen bubbles pumped into the wastewater bind to suspended oil particles. The bubbles cause the remaining oil particles to float to the surface where they are removed for reprocessing in the refinery. This stage uses SUEZ's PolyFloc AE1701 chemistry as a flocculant.
Stages 3 and 4 — Membrane bioreactor (MBR) and centrifuge. Following separation, the wastewater goes to an MBR. First, biological treatment breaks down VOCs and ammonia in the water. Then, the water is filtered using SUEZ's ZeeWeed 500 ultrafiltration hollow-fiber membranes (Figure 2). This combined treatment creates a permeate. Stage 3 utilizes SUEZ's BioPlus BA2970 and BioPlus BA3900 chemistry for biological seeding and bioaugmentation in the biological reactor, and FoamTrol AF3031 for foam control there.
Stage 4 consists of a centrifuge to separate the bioreactor's excess biomass, with bacteria then returned to the bioreactor. A small amount of water also is extracted and reprocessed; the leftover solid biomass is disposed of safely. SUEZ's Novus CE2655 chemistry serves as a flocculant in the centrifuge.
Stage 5 — Demineralization plant. The permeate from stage 3 largely is free of organics, ammonia, nitrites, nitrate and other impurities. It undergoes further treatment in a demineralization plant in preparation for steam production. The plant features SUEZ's High pH RO system, which consists of ion exchange units for hardness reduction and a decarbonator to remove alkalinity and carbon dioxide. High pH RO is unique in its ability to effectively run at a very high recovery, under high organic loading, without fouling or frequent cleaning.
This stage prepares the recycled water for steam production by removing high levels of dissolved solids such as calcium, magnesium, chlorides and sulfates. Following treatment, the permeate takes a second pass through another RO unit to polish the water. Finally, a mixed-bed ion exchanger eliminates undesirable ions to produce ultrapure water suitable for steam production. Figure 3 shows the wastewater before and after treatment.
Figure 3. Samples show wastewater before and after treatment.
The WIP also takes advantage of SUEZ's InSight asset performance management system, which combines advanced data and analytics to ensure wastewater treatment assets operate optimally. For instance, InSight monitors the performance and long-term health of the ZeeWeed membranes. InSight also tracks the operation, chemistry and overall product quality between stages — monitoring the removal of solids, oils and greases across stage 2, and closely evaluating the quality of water leaving stage 3 to ensure it's on spec to reuse during stage 5. Moreover, InSight watches chemical use, dosage ranges, and tank inventories to check that chemicals are dosed correctly, ordered when needed and always available.
Thanks to leading-edge wastewater treatment technologies from SUEZ, the CRC became the first refinery in North America to treat all its effluent on-site, eliminating wastewater discharge. Today, the facility recovers 2 million gal/d of wastewater, the majority of which is used in its steam plant. The WIP has cut the refinery's freshwater needs by 28% — equivalent to the annual water usage of approximately 3,100 Regina households. By decreasing the CRC's reliance on raw water from the local aquifer and the city's municipal system, the WIP also ensures that the refinery's draw from groundwater supplies complies with regulated allocations.
The combination of live bacteria, special filtration units and SUEZ's advanced High pH RO technology decreases VOC emissions and nuisance odors from the CRC's wastewater ponds, significantly reducing the refinery's environmental footprint.
JOHN ELLIOTT, PE, is Oakville, Ont.-based industrial sales manager for Canada for SUEZ Water Technologies & Solutions. Email him at j.elliott@SUEZ.com.
Biological treatment can handle many industrial wastewater streams.


text:
Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease
Sandro Rossetti, Vickie J. Kubly, Mark B. Consugar, Katharina Hopp, Sushmita Roy, Sharon W. Horsley, Dominique Chauveau, Lesley Rees, T. Martin Barratt, William G. Van't Hoff, W. Patrick Niaudet, Vicente E. Torres, Peter C. Harris
Nephrology and Hypertension
Autosomal dominant polycystic kidney disease (ADPKD) caused by mutations in PKD1 is significantly more severe than PKD2. Typically, ADPKD presents in adulthood but is rarely diagnosed in utero with enlarged, echogenic kidneys. Somatic mutations are thought crucial for cyst development, but gene dosage is also important since animal models with hypomorphic alleles develop cysts, but are viable as homozygotes. We screened for mutations in PKD1 and PKD2 in two consanguineous families and found PKD1 missense variants predicted to be pathogenic. In one family, two siblings homozygous for R3277C developed end stage renal disease at ages 75 and 62 years, while six heterozygotes had few cysts. In the other family, the father and two children with moderate to severe disease were homozygous for N3188S. In both families homozygous disease was associated with small cysts of relatively uniform size while marked cyst heterogeneity is typical of ADPKD. In another family, one patient diagnosed in childhood was found to be a compound heterozygote for the PKD1 variants R3105W and R2765C. All three families had evidence of developmental defects of the collecting system. Three additional ADPKD families with in utero onset had a truncating mutation in trans with either R3277C or R2765C. These cases suggest the presence of incompletely penetrant PKD1 alleles. The alleles alone may result in mild cystic disease; two such alleles cause typical to severe disease; and, in combination with an inactivating allele, are associated with early onset disease. Our study indicates that the dosage of functional PKD1 protein may be critical for cyst initiation.
Kidney international
https://doi.org/10.1038/ki.2008.686
ADPKD
Hypomorphic allele
PKD1
10.1038/ki.2008.686
Dive into the research topics of 'Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease'. Together they form a unique fingerprint.
Polycystic Kidney Diseases Medicine & Life Sciences 100%
Gene Dosage Medicine & Life Sciences 91%
Cysts Medicine & Life Sciences 66%
Heterozygote Medicine & Life Sciences 23%
polycystic kidney disease 1 protein Medicine & Life Sciences 17%
Fathers Medicine & Life Sciences 10%
Rossetti, S., Kubly, V. J., Consugar, M. B., Hopp, K., Roy, S., Horsley, S. W., Chauveau, D., Rees, L., Barratt, T. M., Van't Hoff, W. G., Niaudet, W. P., Torres, V. E., & Harris, P. C. (2009). Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease. Kidney international, 75(8), 848-855. https://doi.org/10.1038/ki.2008.686
Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease. / Rossetti, Sandro; Kubly, Vickie J.; Consugar, Mark B. et al.
In: Kidney international, Vol. 75, No. 8, 04.2009, p. 848-855.
Rossetti, S, Kubly, VJ, Consugar, MB, Hopp, K, Roy, S, Horsley, SW, Chauveau, D, Rees, L, Barratt, TM, Van't Hoff, WG, Niaudet, WP, Torres, VE & Harris, PC 2009, 'Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease', Kidney international, vol. 75, no. 8, pp. 848-855. https://doi.org/10.1038/ki.2008.686
Rossetti S, Kubly VJ, Consugar MB, Hopp K, Roy S, Horsley SW et al. Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease. Kidney international. 2009 Apr;75(8):848-855. doi: 10.1038/ki.2008.686
Rossetti, Sandro ; Kubly, Vickie J. ; Consugar, Mark B. et al. / Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease. In: Kidney international. 2009 ; Vol. 75, No. 8. pp. 848-855.
@article{b9345ff3025b4c49b23ac576df095589,
title = "Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease",
abstract = "Autosomal dominant polycystic kidney disease (ADPKD) caused by mutations in PKD1 is significantly more severe than PKD2. Typically, ADPKD presents in adulthood but is rarely diagnosed in utero with enlarged, echogenic kidneys. Somatic mutations are thought crucial for cyst development, but gene dosage is also important since animal models with hypomorphic alleles develop cysts, but are viable as homozygotes. We screened for mutations in PKD1 and PKD2 in two consanguineous families and found PKD1 missense variants predicted to be pathogenic. In one family, two siblings homozygous for R3277C developed end stage renal disease at ages 75 and 62 years, while six heterozygotes had few cysts. In the other family, the father and two children with moderate to severe disease were homozygous for N3188S. In both families homozygous disease was associated with small cysts of relatively uniform size while marked cyst heterogeneity is typical of ADPKD. In another family, one patient diagnosed in childhood was found to be a compound heterozygote for the PKD1 variants R3105W and R2765C. All three families had evidence of developmental defects of the collecting system. Three additional ADPKD families with in utero onset had a truncating mutation in trans with either R3277C or R2765C. These cases suggest the presence of incompletely penetrant PKD1 alleles. The alleles alone may result in mild cystic disease; two such alleles cause typical to severe disease; and, in combination with an inactivating allele, are associated with early onset disease. Our study indicates that the dosage of functional PKD1 protein may be critical for cyst initiation.",
keywords = "ADPKD, Childhood, Hypomorphic allele, Mutation, PKD1",
author = "Sandro Rossetti and Kubly, {Vickie J.} and Consugar, {Mark B.} and Katharina Hopp and Sushmita Roy and Horsley, {Sharon W.} and Dominique Chauveau and Lesley Rees and Barratt, {T. Martin} and {Van't Hoff}, {William G.} and Niaudet, {W. Patrick} and Torres, {Vicente E.} and Harris, {Peter C.}",
note = "Funding Information: The many families and physicians are thanked for their involvement in the study, and for providing comprehensive clinical records. This study was supported by NIDDK grant DK58816, the PKD Foundation (SR), and KH was supported by the Mayo Summer Undergraduate Research Fellowship program (Mayo Graduate School). ",
doi = "10.1038/ki.2008.686",
journal = "Kidney International",
T1 - Incompletely penetrant PKD1 alleles suggest a role for gene dosage in cyst initiation in polycystic kidney disease
AU - Rossetti, Sandro
AU - Kubly, Vickie J.
AU - Consugar, Mark B.
AU - Hopp, Katharina
AU - Roy, Sushmita
AU - Horsley, Sharon W.
AU - Chauveau, Dominique
AU - Rees, Lesley
AU - Barratt, T. Martin
AU - Van't Hoff, William G.
AU - Niaudet, W. Patrick
AU - Torres, Vicente E.
AU - Harris, Peter C.
N1 - Funding Information: The many families and physicians are thanked for their involvement in the study, and for providing comprehensive clinical records. This study was supported by NIDDK grant DK58816, the PKD Foundation (SR), and KH was supported by the Mayo Summer Undergraduate Research Fellowship program (Mayo Graduate School).
N2 - Autosomal dominant polycystic kidney disease (ADPKD) caused by mutations in PKD1 is significantly more severe than PKD2. Typically, ADPKD presents in adulthood but is rarely diagnosed in utero with enlarged, echogenic kidneys. Somatic mutations are thought crucial for cyst development, but gene dosage is also important since animal models with hypomorphic alleles develop cysts, but are viable as homozygotes. We screened for mutations in PKD1 and PKD2 in two consanguineous families and found PKD1 missense variants predicted to be pathogenic. In one family, two siblings homozygous for R3277C developed end stage renal disease at ages 75 and 62 years, while six heterozygotes had few cysts. In the other family, the father and two children with moderate to severe disease were homozygous for N3188S. In both families homozygous disease was associated with small cysts of relatively uniform size while marked cyst heterogeneity is typical of ADPKD. In another family, one patient diagnosed in childhood was found to be a compound heterozygote for the PKD1 variants R3105W and R2765C. All three families had evidence of developmental defects of the collecting system. Three additional ADPKD families with in utero onset had a truncating mutation in trans with either R3277C or R2765C. These cases suggest the presence of incompletely penetrant PKD1 alleles. The alleles alone may result in mild cystic disease; two such alleles cause typical to severe disease; and, in combination with an inactivating allele, are associated with early onset disease. Our study indicates that the dosage of functional PKD1 protein may be critical for cyst initiation.
AB - Autosomal dominant polycystic kidney disease (ADPKD) caused by mutations in PKD1 is significantly more severe than PKD2. Typically, ADPKD presents in adulthood but is rarely diagnosed in utero with enlarged, echogenic kidneys. Somatic mutations are thought crucial for cyst development, but gene dosage is also important since animal models with hypomorphic alleles develop cysts, but are viable as homozygotes. We screened for mutations in PKD1 and PKD2 in two consanguineous families and found PKD1 missense variants predicted to be pathogenic. In one family, two siblings homozygous for R3277C developed end stage renal disease at ages 75 and 62 years, while six heterozygotes had few cysts. In the other family, the father and two children with moderate to severe disease were homozygous for N3188S. In both families homozygous disease was associated with small cysts of relatively uniform size while marked cyst heterogeneity is typical of ADPKD. In another family, one patient diagnosed in childhood was found to be a compound heterozygote for the PKD1 variants R3105W and R2765C. All three families had evidence of developmental defects of the collecting system. Three additional ADPKD families with in utero onset had a truncating mutation in trans with either R3277C or R2765C. These cases suggest the presence of incompletely penetrant PKD1 alleles. The alleles alone may result in mild cystic disease; two such alleles cause typical to severe disease; and, in combination with an inactivating allele, are associated with early onset disease. Our study indicates that the dosage of functional PKD1 protein may be critical for cyst initiation.
KW - ADPKD
KW - Childhood
KW - Hypomorphic allele
KW - Mutation
KW - PKD1
U2 - 10.1038/ki.2008.686
DO - 10.1038/ki.2008.686
JO - Kidney International
JF - Kidney International


The long wait is over! Canadian company Arizer proudly presents the Solo II Vaporizer. For years, we've seen the stellar success of the Solo, widely popular because of its superb vapor quality and excellent performance. Now, the even better Solo II is expected to overcome Solo's glory with more impressive features. Unlike its predecessor, the Solo II now comes with precise temperature controls. That means raising the bar when it comes to your vaping experience. And because of its more efficient heating system and advanced electronics, the Arizer Solo II heats up to 4 times faster than the Solo. Battery life is also greatly improved, so you won't have to charge often while on the go. The OLED display will let you know when the device heats up, the temperature and the battery life. The 3 buttons at the front controls the heat setting, brightness, and allows you to adjust the temperature with increments of 1 degree °C or 10 degree °F. So, the long wait is over. Now, you can take advantage of all these improved features in one device: the Arizer Solo II.
The new Arizer Solo II is designed to be more compact, lightweight and durable as compared to the older Solo. And to give you more options, it the Solo II now comes in Mystic Blue and Carbon Black.
The Solo II comes with a rechargeable battery for portability. The upgraded battery of the Arizer Solo II ensures longer vaping time of up to 3 hours. That's up to 2 times faster than the Solo and up to 4 times faster than the Air.
The Arizer Solo II™ Vaporizer comes with a 2-year warranty on workmanship and defects, a 1-year warranty on the battery, and a lifetime warranty on the heating element. The Arizer Solo II™ is guaranteed to be free of manufacturing defects and in proper working condition when you receive your order. Should you receive a defective item, we will provide a replacement, free of charge. To obtain your replacement, contact Smokazon.com within 7 days after receiving your order.


A child learns to read and during early education, we read about the history of our country, read the text of a lesson, read the question, "If you have three apples and take one away, how many apples are left?" At some point, we begin to read for fun.
As adults, we read everything from Hotrod magazines about a 400 hp motor experimental car that runs on Black Flag bug spray or about the latest dirt in Hollywood. We buy it, borrow it or pore over it at the beauty shop.
According to personal taste, many enjoy thrillers, romance, westerns, how-to, or cook books. Now, folks are reading on the Internet, I-PAD, Kindle or who knows what?
Have I read all these books? No, but I have read many of them. Some are just too boring. Some are utterly fascinating from cover to cover. My favorite genre is mystery, but I am often pleasantly surprised to find a vintage book most enjoyable and informative.
The preface reads, "The hero is a young man of high aims and noble purposes. But he makes some grave mistakes. The most important lesson in morals to be derived from his experience is that it is unwise and dangerous for young people to conceal their actions from their parents and friends." The book has several lithograph illustrations.
The book exemplifies the morals expected of young people in 1875. Wouldn't it be refreshing if some of those high standards were still expected of the youth in 2016? Hollywood has proved a poor substitution for learning morals.
If you're interested in learning more about how people lived and thought in earlier days, I recommend reading a vintage book.
Have you ever read a vintage book that left a positive impression?


25Isa SarahBanks jasmin. kinkymicha. bbMissy. SexyJaina.
TwentyThreeCentiSexyStripSylvieBBWSweetHotBigCOCKAthena .MissBrendacandyhooneyTwentyThreeCentiSunnyCuteXXL .AbbieCoxClarissaHopeAlettaJaydensDOMINIANDJACOP .DrCinnamonurAsianBEDdablekinkymichabbMissy .GreatTrioHot1AmeliaBeasleyAsianBootyXHotXXXSource .kinkymichaOlivyaSaphireCuteKiokoAsianBootyX .AbbieCoxDeniseTaylorCrazyAmmyYourKinkyDesire .MissNicolleXErikaWestYrenneHeyeskinkymicha .ClarissaHopeTyraBlondTwentyThreeCentiYourfantasyYour .JohnieBlackcarlasdreamsJakeStrokesMischka .DanielaRojasOkSaraaAshleyReneScarlethSexyHot .
DirtySexyNicolleAryannaaDeniseTaylorMilfKlarissa .RedBarbieHerexMuscleManiaxCrazyAmmyOlivyaSaphire .SunnyCuteXXLYourKinkyDesireOlivyaSaphireRoxyGinger .AsianBootyXMilfKlarissaDrCinnamonCuteKioko .candyhooneynickertjeKellyHomeMirabelleSweet .MagicSmilyGirlsDannemihaela23carlasdreams .xxMissAfinaXXDreamySonyaleytondarkTimFrancis .KattyLovelyXAshleyReneHaileyFerriliaa .JakeStrokesHaileyFerriTheFappeningDesireEmma .TyraBlondxLoren4uJammesMacriLATINDREAMHot .carlasdreamsBigCOCKAthenaDreamySonyanickertje .


text:
Die nigerianische Badmintonnationalmannschaft repräsentiert Nigeria in internationalen Badmintonwettbewerben. Die Mannschaft tritt als reines Männerteam (Thomas Cup), reines Frauen-Team (Uber Cup) oder als gemischte Mannschaft auf. Nigeria ist seit den 1990er Jahren eine Hochburg im Badminton auf dem schwarzen Kontinent.

Teilnahme an Welt- und Kontinentalmeisterschaften

Bekannte Nationalspieler

Referenzen

Mike's Badminton Populorum

Badmintonwettbewerb in Nigeria
Badminton

redpajama_set_name: RedPajamaWikipedia


text:
package com.sosnoski.site;

import java.io.*;
import java.util.HashMap;

/**
 * Parse buffer with specific extension methods for HTML. This class
 * implements extended matching and searching methods for parsing HTML text.
 *
 * @author Dennis M. Sosnoski
 * @version 1.0
 */

public class HTMLParseBuffer extends ParseBuffer
{
	/** Single quote (apostrophe) delimitor character. */
	private static final char SINGLE_QUOTE_DELIMITOR = '\'';

	/** Double quote delimitor character. */
	private static final char DOUBLE_QUOTE_DELIMITOR = '"';

	/** Horizontal tab character (whitespace). */
	private static final int HORIZONTAL_TAB = 0x09;

	/** Line feed character (whitespace). */
	private static final int LINE_FEED = 0x0A;

	/** Carriage return character (whitespace). */
	private static final int CARRIAGE_RETURN = 0x0D;

	/** Space character (whitespace). */
	private static final int SPACE = 0x20;

    /** Hashmap for attribute values. */
    private HashMap m_attrMap;

	/**
	 * Constructor.
	 *
	 * @param reader reader supplying text
	 * @param length initial buffer size
	 */

	public HTMLParseBuffer(Reader reader, int length) {
		super(reader, length);
        m_attrMap = new HashMap();
	}

	/**
	 * Constructor. This version just uses a default size for the buffer.
	 *
	 * @param reader reader supplying text
	 * @param subst text substitution table
	 */

	public HTMLParseBuffer(Reader reader) {
		super(reader);
        m_attrMap = new HashMap();
	}

	/**
	 * Skip past a target character, ignoring quoted text. Scans input
	 * looking for a character match. When a single or double quote is
	 * encountered, it skips past the closing quote before continuing to
	 * scan for a character match.
	 *
	 * @param match character value to be matched
	 * @exception IOException for input error or character not found
	 */

	public void skipPastCharQuotes(int match) throws IOException {
		int chr;
		while ((chr = read()) != match) {
			if (chr == SINGLE_QUOTE_DELIMITOR ||
				chr == DOUBLE_QUOTE_DELIMITOR) {
				skipPastChar(chr);
			} else if (chr == -1) {
				throw new IOException(END_OF_FILE_MESSAGE);
			}
		}
	}

	/**
	 * Check if a character represents a whitespace. This is coded using the
	 * standard HTML whitespace characters.
	 *
	 * @param chr character value to be checked
	 * @return true if a whitespace, false if not
	 */

	public static boolean isWhitespaceChar(int chr) {
		return (chr <= SPACE && (chr == SPACE || chr == HORIZONTAL_TAB ||
			chr == CARRIAGE_RETURN || chr == LINE_FEED));
	}

	/**
	 * Skip past whitespace characters in the input. Discards all input
	 * characters which are recognized as whitespace by the standard
	 * check method (@link isWhitespaceChar).
	 *
	 * @return true if a non-whitespace found, false
	 * if error or end of file
	 */

	public boolean skipWhitespace() {
		try {
			int chr;
			while ((chr = read()) >= 0) {
				if (!isWhitespaceChar(chr)) {
					skip(-1);
					return true;
				}
			}
		} catch (IOException ex) {}
		return false;
	}

	/**
	 * Skip to a whitespace character in the input. Discards all input
	 * characters which are not recognized as whitespace by the standard
	 * check method (@link isWhitespaceChar).
	 *
	 * @return true if a whitespace found, false
	 * if error or end of file
	 */

	public boolean skipToWhitespace() {
		try {
			int chr;
			while ((chr = read()) >= 0) {
				if (isWhitespaceChar(chr)) {
					skip(-1);
					return true;
				}
			}
		} catch (IOException ex) {}
		return false;
	}

	/**
	 * Skip to a whitespace character in the input, ignoring quoted text.
	 * Scans input looking for a whitespace character as recognized by the
	 * standard method (@see isWhitespaceChar). When a single or double quote
	 * is encountered, it skips past the closing quote before continuing to
	 * scan for a whitespace.
	 *
	 * @return true if a whitespace found, false
	 * if end of file
	 * @exception IOException for input error
	 */

	public boolean skipToWhitespaceQuotes() throws IOException {
		int chr;
		while ((chr = read()) >= 0) {
			if (isWhitespaceChar(chr)) {
				skip(-1);
				return true;
			} else {
				if (chr == SINGLE_QUOTE_DELIMITOR ||
					chr == DOUBLE_QUOTE_DELIMITOR) {
					skipPastChar(chr);
				}
			}
		}
		return false;
	}

	/**
	 * Skip past a name in the input. Scans past a name in the input, where
	 * the characters allowed are as defined for HTML.
	 *
	 * @return true if skipped past a valid name,
	 * false otherwise
	 * @exception IOException for input error
	 */

	public boolean skipPastName() throws IOException {

		// check for valid name start character
		int chr = read();
		if (Character.isLetter((char) chr) || chr == '_' || chr == ':') {

			// skip until end of name reached
			while ((chr = read()) >= 0) {
				if (!Character.isLetterOrDigit((char)(chr)) &&
					chr != '_' && chr != ':' && chr != '-' && chr != '.') {

					// return positioned past last character in name
					skip(-1);
					return true;

				}
			}
			return true;
		}
		return false;
	}

	/**
	 * Skip to and return next start or end tag. Scans from the current position
	 * to the next start or end tag in the text, skipping past comments and
	 * processing instructions. This assumes that the initial position is not
	 * inside a tag. Returns the tag name found as lower case, with input
	 * positioned either following the tag name or following the end of the tag,
     * depending on the parameter value.
	 *
     * @param drop flag for attributes to be dropped
	 * @return next start or end tag name from text (lower case, with leading
	 * '/' if close tag, or null if end of file)
	 * @exception IOException on error reading input
	 */

	public String nextTag(boolean drop) throws IOException {
		int chr;
		while ((chr = read()) >= 0) {

			// skip until less than found
			if (chr == '<') {
				chr = read();
				if (chr == '!') {

					// comment or processing instruction, just skip past end
					if (read() == '-') {
						skipPastString("-->");
					} else {
						skipPastCharQuotes('>');
					}

				} else {

					// mark start of tag
					pushMark(-1);
					if (chr == '/') {
						chr = read();
					}
					if (Character.isLetter((char)chr)) {

						// start or end tag, get the actual name text
						while (Character.isLetterOrDigit((char)read()));
						String name = read(-popMark()-1).toLowerCase();

						// optionally skip past end of tag, escaping attributes
                        if (drop) {
                            skipPastCharQuotes('>');
                        }
						return name;

					} else {
						clearMark();
					}

				}
			}
		}
		return null;
	}

	/**
	 * Collect attributes from tag. This is only valid after a call to {@link
     * #nextTag}(false). Returns with input positioned following
     * the end of the tag. All attribute names are returned as lower case.
	 *
	 * @return map of attributes present on tag (reused, so only valid until
     * next call)
	 * @exception IOException on error reading input
	 */

	public HashMap attributes() throws IOException {
		int chr;
        m_attrMap.clear();
		while (skipWhitespace() && (chr = read()) >= 0 && chr != '>') {

            // accumulate the attribute name first
            pushMark(-1);
            if (Character.isLetter((char)chr)) {

                // get the attribute name text
                while (Character.isLetterOrDigit((char)read()));
                String name = read(-popMark()-1).toLowerCase();

                // check for attribute value supplied
                String value = name;
                skipWhitespace();
                chr = read();
                if (chr == '=') {

                    // collect attribute value (quoted or unquoted)
                    skipWhitespace();
                    chr = read();
                    if (chr == SINGLE_QUOTE_DELIMITOR ||
                        chr == DOUBLE_QUOTE_DELIMITOR) {
                        pushMark();
                        skipPastChar(chr);
                        value = read(-popMark()-1);
                        read();
                    } else {
                        pushMark(-1);
                        skipToWhitespace();
                        value = read(-popMark());
                    }
                }

                // add attribute to map
                m_attrMap.put(name, value);

            } else {
                clearMark();
            }
		}
		return m_attrMap;
	}

	/**
	 * Skip past the attributes (if any) in the current tag. This is only valid
     * after a call to {@link #nextTag}(false). Returns with input
     * positioned following the end of the tag.
	 *
	 * @exception IOException on error reading input
	 */

	public void dropTag() throws IOException {
        skipPastCharQuotes('>');
	}

	/**
	 * Skip to end tag for tag. Scans from the current position to the close for
	 * the supplied tag, ignoring the contents of comments and processing
	 * instructions. Nested instances of the tag are handled by counting, so
	 * it's important that each occurrence of the tag is properly closed. If
	 * not, the results are undefined.
	 *
	 * @param name target tag name (lower case)
	 * @exception IOException on error reading input
	 */

	public void skipToCloseTag(String name) throws IOException {

		// initialize for tag scanning loop
		int depth = 1;
		int chr;
		while ((chr = read()) >= 0) {

			// skip until less than found
			if (chr == '<') {

				// mark position and check handling
				pushMark(-1);
				chr = read();
				if (chr == '!') {

					// comment or processing instruction, just skip past end
					clearMark();
					if (read() == '-') {
						skipPastString("-->");
					} else {
						skipPastCharQuotes('>');
					}

				} else {

					// position for actual start of text
					boolean end = false;
					if (chr == '/') {
						end = true;
					} else {
						skip(-1);
					}

					// match all characters of text with lowercase compare
					boolean match = true;
					for (int i = 0; i < name.length(); i++) {
						chr = Character.toLowerCase((char)read());
						if (chr != name.charAt(i)) {
							match = false;
							break;
						}
					}

					// adjust nesting depth for start or end tag
					if (match) {
						if (end) {
							if (--depth == 0) {
								popMark();
								return;
							}
						} else {
							depth++;
						}
					}
					clearMark();

				}
			}
		}
		throw new EOFException(END_OF_FILE_MESSAGE);
	}
}


text:
Adding Taxa to PaleoDB
2 Adding taxon names
3 Adding published taxonomic opinions
4 Adding unpublished opinions
This page discusses the procedure for adding taxa to the PaleoDB (aka PBDB) via the web interface. It is mostly meant as a reference as you should have received training from the authorized person supervising your data entry. Note, as mentioned below, that names entered into the PaleDB do not automatically appear in the Vertebrate Taxonomy Ontology (VTO), instead you will need to request an update be made to the VTO, either as a tracker request, or directly to the taxonomy curator.
Adding taxon names
Go to paleodb.org
Login (link at the upper right corner of the startup window). If you are not registered as a contributor, you should specify your supervisor (e.g., Paula or Wasila) as the authorizer, and your name (lastname, first initial, followed by period e.g., Midford, P.) as enterer. This will take you to the Main Menu.
The first step is to double check that the taxon is not in PaleoDB. Every (chordate) taxon in PaleoDB should be in VTO, but there may be a few that have been added since the last time the VTO was updated from the PaleoDB. In the 'Data entry' column under the heading 'Basic steps', click the 'Add/edit taxon name' link. This will take you to a page called 'Enter the taxon's full name'. Enter the name in the Taxon name field (e.g., Loganellia scotica) and click Search.
If a match is found, then we don't need to worry about it and when we add PBDB to the VTO the name should appear in Phenex. If the name is already in PBDB, then we don't need to worry unless the containing taxa are not listed in PBDB. If there are no containing taxa, the VTO update process will attach taxon directly under chordata (which is the default root in our VTO build scripts).
If a match is not found, then the Reference search page will appear. The reference to search for is the paper that you are curating (not the publication where the taxon was originally described!) You can search by simply entering the author and PBDB to make sure the reference isn't already there. You don't need to specify year or title in the search, but if the author has lots of publications already in the database, adding one of this will shorten the list of returned results. Click Search. The resulting page will display a list of matches.
If there is no match for the publication, click on the 'Main menu' item in the upper left. To record a new reference, click the 'Add new reference' in the 'Basic steps' area. This will take you to a Duplicate reference search page. Enter the name as on the Reference search page and hit the 'Search' button. When the list of references add, click the 'Add' button (since the reference shouldn't be in this list). This will take you to the 'New reference form' page.
Fill out the form. Enter the first author last name and initials - the format requires periods and spaces between the initials. Enter the second author in the same way. Additional authors with or without initials. Don't put 'and' before the final author's name. Project code can be left blank. Pay careful attention to the "Taxonomy" drop down (most will be 'stated with evidence' or 'stated without evidence'). For most phylogenetic studies, the correct choice will be 'stated with evidence.' There are two links to pop-up tip sheets that explain how the PBDB administrators expect data to be entered.
Once you hit the submit button, it will take you to a page that summarizes the reference you added. Now you can add the taxon name. There is a link to 'Add or edit all the taxon names'. Click that link and a popup page called 'Enter the taxon's full name' will appear. Search again for the taxonomic name you want to enter. If the taxonomic name is not in PaleoDB, you should search for and record the name with the highest taxonomic rank (e.g., if species you are entering does have its family entered yet, start with the family, then the genus, then the species). Clicking search will take you to a page titled 'Authority data for [taxon name].'
The first step is to specify (with the radio buttons) whether the taxon was named in the data record's primary reference or in an earlier publication. For example, the taxon Loganellia scotica was referenced in Wilson and Mars (2004), but was originally described and named in Traquair 1898. In this case the second radio button is the appropriate choice. At a minimum, the original author and year should be entered. You must also specify whether this taxon is extant (living). Additional information, such as 'type specimen', preservation category, type locality, etc. are optional and not recorded for Phenoscape taxa. Then you will reach a page that indicates that your taxon has been entered in the database.
Adding published taxonomic opinions
Next you'll enter the taxonomic opinion on the parent of the taxon.
Click on Add this author's taxonomic opinion. Usually, it will be repeated from the original description. It will look up the parent taxa after you press submit.
Adding unpublished opinions
Go to the "Add reference" form.
Add the author(s) name in the author fields, the current year in the year field, and a proxy title such as "Personal communication regarding placoderm taxonomy."
Select "unpublished" as the publication type (there's no "personal communication" category because that would be splitting hairs).
Select "stated with evidence" as the "taxonomy" value. Otherwise, the opinions would be trumped by earlier-published "with evidence" opinions.
Don't worry about the serial name, volume, issue number, first page, or last page. These fields are actually optional.
Retrieved from "https://wiki.phenoscape.org/wg/phenoscape/index.php?title=Adding_Taxa_to_PaleoDB&oldid=10092"


text:
Health & Fitness/
Smart Scales/
Jill Duffy Garmin Index Smart Scale The Garmin Index Smart Scale wirelessly keeps track of your weight, body water, fat mass, and bone mass, but it's a bit pricey for what you get.
Garmin Index Smart Scale
By Jill Duffy
May 17, 2016 8:43AM EST
Bluetooth, Wi-Fi, and ANT+ syncing. Readout shows weight as well as body fat, BMI, body water, and bone mass. Clean design. Supports up to 16 users.
Initial syncing issues in testing. No pregnancy mode. At the high end of the price spectrum.
The Garmin Index Smart Scale wirelessly keeps track of your weight, body water, fat mass, and bone mass, but it's a bit pricey for what you get.
Many people wear fitness trackers, but fewer have stepped on a smart bathroom scale. The $149.99 Garmin Index Smart Scale automatically measures and calculates everything you can hope a scale would, including weight, body water, body fat, bone mass, and body mass index (BMI). It shows all those numbers on its screen (something a lot of smart scales hide), and automatically sends the information to an app. Setting up the scale proved difficult in testing, and it lacks some of the features you'll find on competitors. Still, the Index is a solid option, even if it doesn't wow us as much as the QardioBase and the Withings Smart Body Analyzer, our Editors' Choice picks.
QardioBase Smart Scale
Withings Smart Body Analyzer (WS-50)
Fitbit Aria Wi-Fi Smart Scale
Polar Balance Connected Smart Scale
Runtastic Libra Bluetooth Smart Scale
Health o Meter Nuyu Wireless Scale
Koogeek S1 Smart Health Scale
The Garmin Index Smart Scale comes in black or white. The black model, which I tested, looks more like a rich navy blue in some light. It's a glass-top scale, squarish in shape with rounded corners, and a silver plate below the readout that says Garmin. It looks a heck of a lot like just about every other smart scale on the market, except the QardioBase, which is round. Conformity isn't a bad thing, necessarily. The Index has the same clean and modern aesthetic you'll find elsewhere.
The Index is sturdy, but heavy for a bathroom scale at 6.2 pounds. It measures 1.2 by 13.8 by 12.2 inches (HWD), and runs on four AA batteries (included), which should last about eight or nine months. It can handle weight up to 400 pounds, and is accurate to 0.1-pound. Using a toggle on the underside of the scale, you can easily change between pounds, kilograms, and stones.
The Index can track weight for up to 16 users, making it a great choice for large families. When you step on the scale, just after it reads your weight, it will flash your initials on screen. To verify it's you, the Index points an arrow on the screen, and you lean in that direction. Other scales that can track more than one person's weight, such as the Fitbit Aria and the Withings WS-50, work similarly.
When you step on the scale, your weight appears first. You stay on the scale as other icons and numbers flash until the readout stops. The display shows all your metrics, from BMI to bone mass. Many other scales send those readings to the app but don't show them on the display, and I like that the Garmin scale does.
Back-to-back readings were identical in my tests, and the weight shown on the Garmin scale was always very close (within half a pound) to readings from other bathroom scales I compared it with.
When bathroom scales estimate measurements such as water and bone mass, they use bioelectrical impedance. Pregnant women and people with pacemakers and other implanted electrical devices often need to disable this feature. Garmin's scale and app don't let you turn it off, though. The QardioBase scale has a pregnancy mode for disabling the impedance readings, and even goes one step further. Pregnant women always see a happy face light up on the scale no matter their weight or change in weight. They can even hide the weight from appearing on the scale at all, so that they can track it for their healthcare team without ever looking at the numbers.
Setup and App
I had a heck of a time getting the Garmin Index to initially sync. I followed the instructions in the booklet that came with the scale, and I looked at the online setup instructions, as well.
I already had the Garmin Connect mobile app installed on my phone because I have a Garmin Vivoactive HR, which also syncs with the app. The instructions online didn't totally match what I saw in the app, but I figured out how to add a device. I followed the prompts to set up Wi-Fi syncing with my router. Everything seemed right. But I stepped on the scale, and I didn't see any indication that my weight was transferring to the app. In fact, the scale only showed my weight and not any of my other stats, and my weight wasn't showing up in the app. Something was definitely off.
I tidied up my Garmin Connect app by removing other Garmin devices that were no longer in use. I logged out and logged back in. I reset the scale. I tried again. The result was the same: only weight appeared on the display; there was no indication of syncing and no measurements were recorded in the app.
After cycling through the instructions a few times, and even seeing a note in the app that Wi-Fi syncing was supposedly working, I set the scale aside for a day to give myself a break. I was frustrated. Then, while setting up another scale, I wanted to compare my weight to see if it was accurate. I knew the Garmin scale would at least show mass, which was all I needed. I stepped on, and it miraculously took all my measurements and synced them! The scale even flashed my initials on the screen. If only I had some clear indication about when or why the scale started working.
I've been using the Garmin Connect app for about two years with a variety of devices. It's not the fastest fitness app by far, often loading slowly or stalling while a device syncs. The app has become more stable since 2015, but it's still not great.
At a glance, the weight section of the app shows body fat as a percentage, weight in whatever unit you choose, and loss or gain. Below those numbers, a graph shows your weight plotted over the last 30 days. Tap the graph, and it opens in a new screen where you can change the length of time: 7 days, 4 weeks, or 12 months.
Also on the new screen are more details about your other body readings, including averages for weight, BMI, body water, muscle mass, and bone mass. It shows your goal weight if you've set one, and a list of other days with recorded weights, should you want to dig into your past.
The app doesn't advise you on how to change your weight or even tell you whether it's within a range that would be considered healthy—although not everyone wants that kind of generalized advice from a fitness app. But sometimes it helps people who are new to fitness tracking learn what range is considered healthy for their height, age, and sex. Koogeek's app (used with the Koogeek S1 Smart Health Scale) shows you some of your readings on a scale in which the healthy range is shaded in green.
For weight loss guidance, the Polar app (which syncs with the Polar Balance Connected Scale) does the best job. It has an integrated weight loss feature that tells you exactly how much exercise to do and examples of what foods to cut from your day to get you on track to reaching your goal weight. It requires that you log all your meals and drinks, and you need a companion Polar fitness tracker (the Polar A360 is my personal favorite from the company) in order to know how many calories you're burning. But when all three pieces—the scale, tracker, and app—are in play, you get excellent, clear, and very specific advice.
Garmin's app doesn't have any special features for securely sharing your data with a healthcare team. That's one area where the Withings WS-50 excels, and part of the reason it remains an Editors' Choice.
Comparisons and Conclusions
The Garmin Index Smart Scale is on the high end of the price range for scales that wirelessly and automatically sync your weigh-ins to an app. At $150, it costs the same as the top two scales in our ranking, the QardioBase and the Withings WS-50. All three of these scales sync by not only Bluetooth, but also Wi-Fi, which is a major perk. The Garmin Index can also sync to a computer using an ANT+ stick, but you have to supply your own.
The next tier down in price is between $99 and $129, where you'll find scales such as the Fitbit Aria, the Runtastic Libra (which uses Bluetooth only), and the Koogeek S1 Smart Health Scale.
At the low end of the price spectrum are the Nuyu Wireless Scale and Pivotal Living scale ($39; review pending). You get what you pay for with these scales. Neither of them have Wi-Fi syncing, so you need to have your phone in range to wirelessly sync your weigh-ins. They only integrate with a limited number of devices, and their apps aren't great.
The Garmin Index Smart Scale reads all the body metrics you could want, shows them to you on the scale's display, and automatically records them in the Garmin Connect app. Initial setup and syncing didn't go smoothly in my testing, although the data did reliably show up in the app once the kinks ironed themselves out. For the same price, though, the QardioBase and the Withings WS-50 scales are easier to set up, and each has special features that give them an edge over the Garmin Index.
Bottom Line: The Garmin Index Smart Scale wirelessly keeps track of your weight, body water, fat mass, and bone mass, but it's a bit pricey for what you get.
Pivotal Living Bluetooth Smart Scale
Jill Duffy Contributing Editor
Twitter LinkedIn Email
Jill Duffy is a contributing editor, specializing in productivity apps, as well as health and fitness technology. She writes the weekly Get Organized column, with tips on keeping your digital life tidy and tidying up your real life using technology. She is the author of the book Get Organized: How to Clean Up Your Messy Digital Life and writes abou... See Full Bio
More From Jill
11 Tips for Managing Email More Efficiently
The Best Online Collaboration Software for 2019
6 Tips for Getting Started With Project Management
7 Simple Steps for Cleaning Up Your Google Drive
The Best Fitness Trackers for 2019


I was expecting a bit more from spike stitch than I got, tbh. It sounds interesting, but it's just double (US: single) crochet worked into the base of the stitch below instead of the top. Which basically means it's a very slow stitch to work up and a rather thick fabric when it's done. Not a very attractive result – it visually emphasises the rows in an unattractive way. Now, it might look better if you used a different colour for each pair of rows that make up the pattern, but I'm not all that impressed at this point.


text:
Hearst Names Rachel Kay Vice President of Talent - Hearst Names Rachel Kay Vice President of Talent
Hearst Names Rachel Kay Vice President of Talent
NEW YORK, November 6, 2019 – Hearst today announced that Rachel Kay has been named vice president of talent, a new position established to develop proactive talent recruiting programs across the company. The announcement was made by Hearst President and CEO Steven R. Swartz and Chief Operating Officer Mark Aldam. Kay will assume the role immediately, reporting to Aldam.
Rachel Kay
Kay will oversee talent recruitment strategies at all levels across Hearst, including advancing Hearst's inclusion and diversity programs, institutional and on-campus recruiting efforts and compensation management. She will also work closely with the company's human capital leadership teams to customize new recruiting programs to address the specific needs of each business group.
"As our businesses continue to evolve toward more data-driven products and solutions, the demand for new skills continues to accelerate across Hearst," Aldam said. "It is vital we establish a larger volume of skilled labor prospects ranging from entry level to professional management resources. Rachel has an outstanding track record for recruiting and managing growth-oriented professionals at all levels, and her contributions will be important to our continued growth and success."
Kay spent 15 years at McKinsey & Company in a variety of roles. She began her tenure as a consultant and was most recently global leader of partner talent beginning in 2018, overseeing the firm's partner election and evaluation process.
From 2016 to 2018, Kay worked as director of professional development and operations for McKinsey's mid-Atlantic offices where she led professional development, human resources, office services, administrative support, external relations and office recruiting. She also acted as chief of staff to the office managing partner.
Prior to that, Kay was senior manager of North American women's recruiting (2014 to 2016), leading a team charged with increasing the number of women in consulting roles at the company. She also served as manager of U.S. business analyst recruiting and professional development (2011 to 2014), successfully increasing retention rates of analysts.
"To be truly successful in today's global economy, corporations must be strategic about building diverse, results-oriented workforces, and I am excited about Hearst's approach to doing this," Kay said. "I look forward to contributing to the long-term success of such an enterprising and forward-looking company."
Kay earned a bachelor's degree in history from Harvard University and a Juris Doctor degree from Columbia Law School.