text:
Microsoft may be late adding USB storage support to the Xbox 360–Sony's PlayStation 3 supported it off the block–but it's finally live, for all you aspiring archivists. All you need to do is log into Xbox LIVE, pull down the latest update, and presto, you can dump data from your 360 to any external drive or memory key.
Well, almost any. Microsoft's list of "gotchas" turns out to range from annoying to deflating, once you've read the fine print.
Your storage device has to exceed 1GB to be recognized, for starters. That's a shame, since the best reason to pair an external storage device with the 360 is probably to manage game saves and miscellaneous dashboard bling, which aggregate well under 1GB. All those antiquated 64, 128, 256, and 512MB memory keys piling in cable boxes and desk drawers? Keep 'em in mothballs, because they're dead to the Xbox 360.
You're also limited to a maximum of 16GB per storage device. I'm not sure why 16GB, but I have my theories. Like: Microsoft doesn't want you getting better than they're planning to give by way of third-party peripheral sweetheart deals.
It just so happens Microsoft's partnered with SanDisk to sell official 8GB and 16GB USB sticks, priced at $40 and $70 respectively. That, you hardly need me to tell you, is criminally expensive, compared with the average price for analogous parts.
Why would anyone buy these? Perhaps because, like me, they hate partioning drives to support disparate file systems. That, and you can only use up to two ad hoc USB devices for a maximum of 32GB of storage (I'm assuming you can use as many SanDisk USB sticks as you like.) I guess we're supposed to cheer or something. After all, the company still charges $100 for a USB WLAN part commonly available for half as much. Who says paying more for less can't win consumers over en masse?
"Why does Xbox 360 only support 16GB of storage, even though I have a much larger device?" asks Microsoft in its USB storage FAQ.
Because "[s]upporting USB storage devices up to 16GB in size is a huge increase in storage over any solid state memory storage solutions currently available for Xbox 360," reads the answer.
An increase, yes. But huge? Hardly. Not when I can pick up a 1 terabyte drive for $100–$30 less than Microsoft's current topline 250GB Xbox 360 hard drive.
My strategy: Figure out how to live at or under 32GB with a pair of cheap 16GB memory sticks. I'm through paying boutique prices for average, ordinary merchandise.
Follow us on Twitter (@game_on)


text:
Difficulty: Easy-moderate. Rocky footing and a few steep sections of trail add some challenges to this 1.4-mile hike. Fear of ghosts may also present a challenge.
How to get there: Catherine Mountain is located between the towns of Franklin and Cherryfield. From Route 1 and Route 182 in Franklin, turn east on Route 182 (Blackwoods Scenic Byway) and turn right onto Dynamite Brook Road, a dirt road marked with a blue public reserved land sign. Drive a short distance and park in the first small parking area on the left. The parking area is marked with a brown public reserved land sign and a smaller sign pointing to the trailhead, which is farther down the road on the left, just before the narrow bridge. The trailhead is marked by a boulder painted with a blue blaze. A short distance into the trail will be a sign that reads "Caribou Mt. Trail." This trail will lead you to a juncture, where you will turn left to hike Catherine Mountain (right to hike Caribou Mountain).
Information:Just 942 feet high, the sparsely wooded top of Catherine Mountain offers spectacular views of surrounding mountains, lakes and ponds. To locals, this mountain is known as "Catherine's Hill," and it is the setting of a particularly spooky legend known as "Headless Catherine."
The legend has many versions, one of which is recorded in "A Ghost a Day: 365 True Tales of the Spectral, Supernatural and… Just Plain Scary!" by Maureen Wood and Ron Kolek. Their version of the legend states that motorists driving between the town of Franklin and Cherryfield on Blackwoods Road often see a ghostly spectre of a headless woman named Catherine. The story goes that Catherine and her boyfriend were driving back from prom on Feb. 17, 1974, when they lost control of their car and hit a tree. Catherine, beheaded, died immediately, but her boyfriend's body was never found. Some say that her ghost is looking for him. Beside the road, she haunts the banks of Fox Pond and Catherine Mountain.
Regardless of the reason she's there, authors and tellers of the legend insist that if motorists see the headless ghost, they must stop to pick her up or meet a disastrous fate. Other versions of the legend place Catherine's death as early as the 1860s (a carriage accident) and specify that her ghost wears a long blue gown.
Aside from being the home of a ghost, Catherine Mountain is known as a place to find a variety of minerals. Evidence of mining activity can be seen on the east side of the mountain. For geological information about the mountain, view a Maine Geological Survey document at www.maine.gov/doc/nrimc/mgs/explore/minerals/guide/maps/catherine.pdf.
The hike up the west side of Catherine Mountain leaves from Dynamite Brook Road on Caribou Mountain Trail, which is marked with blue blazes and blue tape. The trail climbs gradually through a forest of tall evergreens. The trail becomes steeper for a short section right before the trail junction. A sign at the junction will point left to Catherine Mountain and right to Caribou Mountain. Turn left and climb the western side of Catherine Mountain on a trail marked with blue blazes, blue tape and the cairns (rock piles).
The trail will soon reach several open, rocky areas and ledges that offer open views of the surrounding land and water. When you reach a large open rock that climbs sharply to your left, this is the start of a small loop. Climb up the open rock and you'll see a chair-like construction made out of sharp, broken stone. This is near the actual mountain summit. It is also the beginning of a small loop trail, which at the far end, connects to a trail climbing the east side of Catherine Mountain.
I did not explore the east side of Mount Catherine or much of that trail, but according to several online sources, the trailhead to that trail can be found just west of Tunk Lake near a parking area off the Route 182 (Blackwoods Scenic Byway).
Personal note:I didn't know the ghost story until after hiking this trail alone, and that's probably a good thing. If my headless ghost tale doesn't scared you off, I suggest you enjoy this short, rewarding hike.

subset: commoncrawl


text:
This is the very best Hamburger Vegetable Soup I've ever eaten. Growing up, it was a staple recipe at our house and now it's become one of my husband's favorites, too.
Our children also love this soup — especially when topped with shredded cheese! It's delicious paired with Bread Machine Buttery Rolls and the perfect way to warm up a chilly winter evening.
Hamburger Vegetable Soup
- 2 lbs. ground beef
- 2 cups chopped onion
- 2 cups peeled and diced potatoes
- 2 cups sliced carrots
- 2 cups shredded cabbage
- 4 (14.5-oz) cans diced tomatoes
- 1/2 cup brown rice, uncooked
- 6 to 10 cups water
- 1 1/2 to 2 1/2 Tablespoons salt
- 1/2 teaspoon basil
- 1/2 teaspoon thyme
- 2 bay leaves
Brown ground beef and onion together until meat is lightly browned. Drain off excess fat. Add all remaining ingredients and bring mixture to a boil.
Cover and simmer for two to four hours. Check periodically and add more water, if needed. Remove bay leaves and serve.
Makes 18 to 20 cups of soup. Can be stored in the refrigerator for up to four days.
A pot will usually make enough for at least three meals for our family. We like it enough that we'll eat it two or three days in a row!


text:
NEW YORK – There was red hot streak shooting over Manhattan last night!
The sighting came one day after a mysterious condensation trail was spotted off the coast of California. Speculation over the object that caused it ranged from a fired missile to a contrail from a commercial airliner.
Most government experts are saying that an airplane caused a vapor trail, but aerospace scientists do not believe that's the case. "They are covering something up," said Professor John Engeman of M.I.T. "People are used to see vapor trails or condensation trails, this is something different."
What went down over the skies of NYC Wednesday was just the latest in a series of weird events that have captivated tri-state area residents over the last few years. Back on Oct. 13, CBS 2 cameras captured objects in the sky while shooting up above Chelsea at 23rd Street and Eighth Avenue.
Local media and the NYPD received several calls throughout that afternoon.
However, as CBS 2 cameras showed, the objects appeared to be yellow balloons, although there was initially no official confirmation from the NYPD. On the streets below there was a lot of intrigue about the mystery that was going on up above.
Strange sightings in the sky are not new to our area. Back in January of 2009, odd red, blinking lights could be seen across Morris County, N.J., and officials thought they had figured out what caused them.
Some are saying that the red streak was actually a chemtrail – chemical agents that the government is spreading over the city, to spread biological agents into the population. "It makes sense that they are chemtrails," said Engeman. "the government and Mayor Bloomberg have been trying to conrol the citizens of Manhattan for the last year. And, you know what, it's working."
Here's a news report. Once again, the red hot streak was dismissed as "condensation trails" before anyone had a chance to fully examine the incident. Hmmm….


text:
While President-elect Donald Trump hopes to revive the coal industry by slashing CO2-reducing regulations, industry analysts say clean energy has become so cheap it will continue to increase its domination of the energy industry.
Trump is likely to roll back several of the current administration's clean energy policies, such as the 30% Investment Tax Credit (ITC) for solar power deployments, the Environmental Protection Agency's Clean Power Plan (CPP) and U.S. support for the 195-nation Paris Agreement.
Raj Prabhu, CEO of the Mercom Capital Group, a clean energy research firm, said that the Obama administration's Clean Power Plan (CPP) might be the first casualty.
That plan requires states to reduce carbon dioxide emissions from existing fossil generators to about 1,560 million metric tons in the 2030-40 decade, substantially below their 2005 and 2015 levels of 2,416 metric tons and 1,891 metric tons, respectively.
If the CPP were eliminated, the U.S. would likely see fewer coal-fired plant retirements due to carbon emissions and less impetus for the procurement of utility-grade solar power. However, since the CPP's targets don't take effect until the start of the next decade, this is a longer term dampener for renewables, according to MJ Shiao, director of solar research GTM Research.
And, even with the dissolution of the CPP, the number of coal-fired generators is still expected to be reduced by about one-third through 2030, or by about 60 gigawatts of capacity, according to the U.S. Energy Information Administration (EIA).
In recent years, U.S. coal production has steadily declined.
Last year, production dropped 10.3% year over year to its lowest levels since 1986, according to the EIA's annual coal report released last week.
Coal's share of total electricity generation, which was 50% in 2005 and 33% in 2015, is predicted to fall to 21% in 2030 and to 18% in 2040, according to the EIA.
Today, gas-fired power plants produce about 33% of U.S. power, nuclear plants produce about 20% and hydroelectric generators (dams) create 6%. Other renewables, including biomass, wind, solar and geothermal source account for another 7%.
And wind and solar are by far the fastest growing energy sectors.
Last year, new installations of solar power capacity surpassed both wind and coal for the second year in a row, accounting for 32% of all new electrical capacity, according to a new report from GTM Research.
By comparison, in 2015, the productivity capacity of U.S. coal mines decreased for the fourth year in a row to 1,165 million tons, a decline of 6.3% from the 2014 levels.
The average number of employees at U.S. coal mines decreased 12% to 65,971 employees, the lowest on record since EIA began collecting data in 1978.
There is a concern, analysts said, about the possible roll back of the 30% Investment Tax Credit (ITC) for solar, which was passed in a bipartisan agreement and extended through 2019. After that, it will decline to 10% by 2022 in return for lifting of the oil export ban.
"It could happen, but [is] unlikely, due to the bipartisan nature of how the extension was passed in Congress and the momentum solar has right now," Prabhu said. "Solar has gone mainstream with utilities, businesses, and home owners, not to mention that solar jobs exceed over 200,000."
Last year alone, the solar industry added 31,000 new jobs, according to the Solar Jobs Census; that was 20 times the national average for job creation.
"Not only did solar create almost 2% of all new U.S. jobs last year, those hires were concentrated in the states where solar is booming primarily because of market-friendly policies," said Amit Ronen, director of the George Washington University's Solar Institute.
Trump has also threatened to pull U.S. support for the Paris Agreement, which last year saw voluntary pledges by 195 nations to lower CO2 emissions. But the impact of such a move would be negligible at best in helping the coal industry, analysts said.
"Even if he did all those things..., which would require legislative hurdles, the economics still favor gas more as an energy generation source," said Colleen Kennedy, an oil and energy analyst with at Lux Research. "The economics just don't work out in favor of coal."
Because renewable energy can be intermittent, meaning when the wind isn't blowing or the sun isn't shining no energy is produced, EIA analysts use a "levelized avoided cost of electricity" (LACE) along with levelized cost of electricity. It represents the per-kilowatt hour cost of building and operating a power generating plant over an assumed financial life and activity level.
For example, technologies such as solar and wind don't use fuel to generate electricity and have a relatively small variable operating and management costs. So their Levelized Cost of Electricity (LCOE) is mostly determined by capital costs and financing costs, according to the EIA. LCOE values can also vary across regions because of differences in construction, fuel, and transmission costs as well as resources available for wind and solar.
Due to regulations, coal-fired power plants cannot be built without carbon capture and storage technologies, which removes about 30% of waste carbon dioxide. So Trump has proposed increasing the number of "clean coal" or carbon capture and storage (CCS)-enabled plants, which drive up the cost for constructing new plants or retrofitting existing ones, according to the EIA.
Using the EIA's LCOE figures, coal-fired power plants with CCS have an average cost of $65 to $139 per megawatt hour (MWh) of electricity produced, according to the EIA. That compares with natural gas-fired plants with a cost of $58.1 per MWh of electricity; nuclear power with a cost of $102.8; onshore wind with a cost of $64.5; solar with a cost of $84.7 and hydroelectric with a cost of $67.8.
Tyler Ogden, a solar analyst with Lux Research, projects 12 gigawatts (12 billion watts) of solar generating capacity in the U.S. by 2020.
Last year, the levelized cost (or cost per megawatt of utility-scale solar power) utilities was $60 to $70 per compared to $65-150 for coal (not including transportation and storage), Ogden said.
And, in the last few years, renewables -- especially wind and solar -- have gained substantial momentum with rising installations and rapidly falling costs, competing with fossil fuels directly, according to Prabhu.
Solar power system prices continue to decline and module prices have fallen by almost 30% this year alone.
"Contrary to election rhetoric, it's not regulation or renewable subsidies that are killing coal; it's actually natural gas, which is cheap and abundant. Electric utilities purchase generation sources based on economics not politics and it is difficult to see how utilities would suddenly start buying coal," Prabhu said.


text:
Hosted by Janet Wickell (janma)|ScrapQuilts.com
Welcome to our free quilting forum, the Online Quilting Guild, where you can share ideas about quilting, swap fabrics and other projects, and chat with quilters worldwide.
Latest Sep-23 by Sandy in TX (Centergranny)
Latest Sep-22 by Ami_Quilts (sewingupasto)
Latest Sep-22 by fatsewcat
Latest Sep-22 by fatsewcat
Latest Sep-22 by fatsewcat
Latest Sep-22 by fatsewcat
Latest Sep-22 by lppenguins
Latest Sep-20 by Dee in TX (DBRADFOR3)
Latest Sep-20 by Ami_Quilts (sewingupasto)
Latest Sep-18 by Dee in TX (DBRADFOR3)
Latest Sep-17 by Judy (DJZMOM)
Latest Sep-15 by judyinohio
Latest Sep-14 by Suze (casuzenn)
Latest Sep-12 by latterberry
Latest Sep-9 by JulietDeltaOscar (fixin2quilt)
Latest Sep-8 by fatsewcat
Latest Sep-5 by CC (ccase5)
Latest Sep-4 by Cathy (cacnurse1)
Latest Sep-1 by Cathy (cacnurse1)
Latest Aug-30 by MelRN
If I understand your reverse applique, you turned under your background fabric and appliqued it to the butterfly fabric? Was it easier or more difficult than your regular needleturn?
Your clay figures should be fun to have in your garden. Should they be durable for the winter or will you need to bring them in?
Pirate (PIRATE_SR) said:
"California Department of Corrections. How may I direct your call?" It was very satisfying. :-)
It gets a pretty immediate hang up..........
I did an experiment last winter with polymer clay "applique" that had been baked on very smooth river rocks and they survived quite well. I had coated the rocks with a layer of polymer clay first so it was clay-to-clay adhesion. I don't see why these should not work. There were days when the temperatures got down well below zero degrees so I guess this colorful plastic product can survive Ohio winter weather.
You have the concept exactly correct.
Regular applique: cut out a shape, apply to the top of the base fabric. The applique sits *on top* of the fabric.
Reverse applique: Place applique fabric UNDER the base fabric. Cut a shape from the base fabric only (creating a hole); the applique fabric is now visible.. Turn under the edges of the shape. The "applique" sits *behind* (under) the base fabric.
My opinion so far: it's an interesting technique. I'm not sure if there is a specific situation where it would be preferred over standard applique. It does give a different texture, since the applique sits under the base fabric. Hmmm .. maybe if you were to mix the two techniques on the same piece, you might get a unique visual, with the different layers.
BUT, it's tedious (for me). The small shapes (of this butterfly) are obnoxious to turn the edges under. For standard applique, when I have small, obnoxious shapes, I use a water-soluable, fusible interfacing to cut the shape out of, to create a stand alone applique shape, which I then plop down onto the base fabric. Also, I think part of my dissatisfaction is the looser weave of my base fabric ... little snippets of the weave come unraveled. I think a tighter weave in the base fabric would make the method easier.
I'm not entirely certain I'll attempt a second piece; I'm just not that in love with the process.
You were wondering where you would want to do reverse applique over regular. You many not be able to see the red ribbon at the bottom of this quilt but it says Albuquerque 1706 - 2006 on that ribbon. This was a group project with my guild back in 2006 and I was the one that did that red banner. I used reverse applique to do that word and the numbers.............there is no way this would have looked good if I would have tried to applique the blue letters and numbers on the banner. I just put the blue fabric under the red and wrote on the red fabric and cut away fabric as I worked on it. Then I appliqued the red ribbon with the letters and numbers to the quilt. I do not find either method of applique very different from each other and there are applications where reverse applique give way better results like in this case.
This is what I'm working on for all who asked for a photo. It's quilted (by check) and I am putting the binding on now. The binding will be dark blue. I hope all of those curves and inside miters go well. It is all batiks. I didn't think I would finish it in time for my brother and SIL's 50th Anniversary on June 20.
Mary, that is one awesome, breathtakingly beautiful, drop dead gorgeous quilt!
Can you tell that I like it??
I hope your brother and SIL are truly quilt worthy because the quilt is soooo total amazing.
Thanks for the amazing description. It sure looks nice on my bed. I started that quilt about seven years ago and got bored with sewing all of those little pieces together. At the time I didn't realize the hard part was yet to come.


text:
Introduction to the Study of the Book of John
I feel a good deal like the late Dr. J. Vernon McGee as I attempt to introduce this study. In his "Through the Bible" series which he did on the radio and in print, Dr. McGee used to speak of each new book in his study as the "greatest book in the Bible." Let's face it, they're all great. But there are certain books of the Bible that just seem to stand out, and the Gospel of John is surely one of those books. It is the book of the Bible we encourage non-Christians to read, in the hope that its message will lead them to faith in Christ (after all, that is the purpose of the book—see John 20:31). On previous occasions when I have taught John's Gospel in home Bible studies, I have seen people come to faith as the message of this book captivated them. I well remember one woman blurting out during our study, "Well, if I didn't know any better, I'd think Jesus was claiming to be God." It wasn't long before her husband was telling me that they had come to faith in the course of their study of John's Gospel.
For Christians, the Gospel of John is a source of much truth about our Lord and the Gospel. But it's much more than this. It is an opportunity for us to "follow Him" as we read, and to identify with the disciples as their knowledge of Him continued to expand. It is our opportunity to get to know the heart of the Savior, and to fellowship with Him through His Word. If men of old found their hearts set on fire as they listened to Him teach in person (Luke 24:32), so we will find our hearts warmed as we seek to listen to Him through this Gospel.
The Gospel of John is of particular interest because of its unique approach—very different from the approach of the other three Gospels: Matthew, Mark, and Luke (sometimes called the "Synoptic Gospels"). Over 90% of the material in John's Gospel is unique to John, not to be found in the other three Gospels.
This study also provides a unique opportunity to employ a new and exciting translation, known as The NET Bible, or the New English Translation. Several years ago the Biblical Studies Foundation sought to obtain permission to make a modern and accurate translation of the Bible available to readers around the world via the Internet. The cost of purchasing the rights to do so was prohibitive, and thus it was determined that a new translation was the better choice. The New American Standard Bible, famed for its accuracy, is not accepted and used internationally. In America, its popularity and use is diminishing. The NIV is a very readable and enjoyable translation, but it is not precise enough for serious students of the Bible. The New King James Version is becoming more popular, but it still suffers from some of the weaknesses of its predecessor. The NET Bible seeks to reflect the best of these great translations (readability, reliability, and the use of relevant language), in one new translation of the Bible.
The NET Bible is the first translation that has been designed to take advantage of the power of the computer for Bible Study, and the use of the Internet to make the Scriptures and Bible Study tools available around the world. The study notes and translators notes are the most extensive that have been made widely available. The Scripture citations in this series on the Gospel of John will therefore employ and showcase this exciting new translation, which can be used and shared for personal use (at no cost) with friends around the world.
This study in the Gospel of John is in progress. I am a teacher and elder at Community Bible Chapel in Richardson, Texas. As much as possible, a new lesson in the study of John will be posted on the Biblical Studies Foundation web site each week. I challenge you to join me in making the Gospel of John the subject of your study. May God use it to see Jesus Christ as the Son of God, who takes away the sin of the world, who takes away your sin.
Related Topics: Introductions, Arguments, Outlines


text:
Children's unisex Fashion Face Masks in Line with UK Government and WHO Guidance. Featuring avocado print, rainbow print and alphabet print.
High quality, easy to use and comfy to wear, Jayley's reusable fashion face masks will help you keep yourself styled and others protected. Designed to cover your nose and mouth with ease and comfort, these natural sustainable fabric masks that feature adjustable, elasticated ear loops can be used as an additional precaution, preventing unnecessary touching of the face.
This mask also features a pocket allowing you to insert an additional filter. Non-medical grade and Jayley makes no claims about the medical benefits of using this product. This product is not a medical device or personal protective equipment and is not a substitute for following the relevant social-distancing guidelines, which include practising good personal hygiene, such as frequently washing your hands and not touching your face.
Product non refundable due to hygiene reasons.
NEXT DAY UK DELIVERY - £3 or FREE on orders £50 and over
UK SATURDAY OR SUNDAY DELIVERY - £3 or FREE on orders over £50
Order by 6:00pm for next day delivery*
Order by 5:00pm on Friday for Saturday or Sunday delivery**
EUROPE - £ 10.00 (4 -5 Working Days)
NORTH AMERICA - £ 15.00 (4 -6 Working Days)
REST OF WORLD - £ 25.00 (Up To 6 Working Days)
Orders outside the UK maybe subject to customs charges. This varies between country and products ordered and is out of Jayley's (Ubi Ltd's) control. This is payable by the recipient and will be collected directly by the customs authority. The courier will contact the recipient to collect any duties (as our couriers act as brokers).
Return / Refund
Jayley want you to be happy with your purchase. If you're unhappy with your purchase, please let us know in writing within 14 days of purchase for return or exchange. Jayley asks that you try the garment when you are not wearing fragrance, deodorant or make-up to avoid leaving marks or scent. Unwanted goods will not be accepted if they are returned in any other condition.
It's important that any unwanted product is returned in a re-saleable condition, the products must be returned unwashed, unworn with all labels and tags left attached, kept in all original packaging. We're unable to refund on the following items:
· Products which have been personalised for you
· Product which have been altered to fit
· Hosiery
This does not affect your statutory rights.
Please note that all face masks are non returnable and non refundable due to hygiene reasons.
Product Imagery
Product photography is for illustration only. The product sold may have minor physical differences depending on manufacturer specifications, colour, production batch, etc. Customers should carefully consider this before purchase.
If you are eligible, we can only process a refund with proof of purchase onto the original card or PayPal account used to pay for the goods. As long as you send the goods back to us in accordance with the Conditions of Return, Jayley will refund your order within 14 days of receiving the goods, due to varying processing times between payment providers.
Please note that all face masks are non returnable and non refundable due to hygiene reasons.
Payment can be made to JAYLEY securely using SagePay and PayPal.
If you have any questions please call +1(919)381-4181 or e-mail email@example.com


text:
|Image 1/1
Copyright © Gunter Marx Stock Photos. ALL RIGHTS RESERVED by the Copyright Holder. 5931x3971 / 5.5MB
Image is copyrighted. No image reproduction and rights are granted to Client, until Gunter Marx Stock Photos has received full payment of invoice, outlining copyright license and usage fee.
Sports, Recreation, & Lifestyle, Jobs & Occupations, People, Tourism / Ecotourism Industry, Cowichan Valley Wine & Culinary Festival, Dining / Eating, Industry, BC, British Columbia, Industry, Vancouver Island, British Columbia
activity, attraction, autumn, BC, British Columbia, Canada, canadian, carving, celebration, chef, color, colour, cook, Cowichan Valley, Cowichan Valley Wine & Culinary Festival, day, display, eating, environment, event, fall, feast, festival, food, fresh, group, image, job, landscape, leisure, lifestyle, meal, meat, North America, outdoor, Pacific Northwest, patrons, people, photo, picture, pork roast, recreation, scene, server, service, serving, small group, table, tourism, tourist attraction, tourists, Vancouver Island, West Coast, worker, working, horizontal


text:
1.7. The Core API¶
This document explores the CouchDB in minute detail. It shows all the nitty-gritty and clever bits. We show you best practices and guide you around common pitfalls.
We start out by revisiting the basic operations we ran in the previous document Getting Started, looking behind the scenes. We also show what Fauxton needs to do behind its user interface to give us the nice features we saw earlier.
This document is both an introduction to the core CouchDB API as well as a reference. If you can't remember how to run a particular request or why some parameters are needed, you can always come back here and look things up (we are probably the heaviest users of this document).
While explaining the API bits and pieces, we sometimes need to take a larger detour to explain the reasoning for a particular request. This is a good opportunity for us to tell you why CouchDB works the way it does.
The API can be subdivided into the following sections. We'll explore them individually:
1.7.1. Server¶
This one is basic and simple. It can serve as a sanity check to see if CouchDB is running at all. It can also act as a safety guard for libraries that require a certain version of CouchDB. We're using the curl utility again:
curl http://127.0.0.1:5984/
CouchDB replies, all excited to get going:
"couchdb": "Welcome",
"version": "3.0.0",
"git_sha": "83bdcf693",
"uuid": "56f16e7c93ff4a2dc20eb6acc7000b71",
"features": [
"vendor": {
"name": "The Apache Software Foundation"
You get back a JSON string, that, if parsed into a native object or data structure of your programming language, gives you access to the welcome string and version information.
This is not terribly useful, but it illustrates nicely the way CouchDB behaves. You send an HTTP request and you receive a JSON string in the HTTP response as a result.
1.7.2. Databases¶
Now let's do something a little more useful: create databases. For the strict, CouchDB is a database management system (DMS). That means it can hold multiple databases. A database is a bucket that holds "related data". We'll explore later what that means exactly. In practice, the terminology is overlapping – often people refer to a DMS as "a database" and also a database within the DMS as "a database." We might follow that slight oddity, so don't get confused by it. In general, it should be clear from the context if we are talking about the whole of CouchDB or a single database within CouchDB.
Now let's make one! We want to store our favorite music albums,
and we creatively give our database the name albums. Note that we're now
using the
-X option again to tell curl to send a PUT request
instead of the default GET request:
curl -X PUT http://admin:email@example.com:5984/albums
CouchDB replies:
That's it. You created a database and CouchDB told you that all went well. What happens if you try to create a database that already exists? Let's try to create that database again:
curl -X PUT http://admin:email@example.com:5984/albums
CouchDB replies:
{"error":"file_exists","reason":"The database could not be created, the file already exists."}
We get back an error. This is pretty convenient. We also learn a little bit about how CouchDB works. CouchDB stores each database in a single file. Very simple.
Let's create another database, this time with curl's
-v (for "verbose")
option. The verbose option tells curl to show us not only the essentials –
the HTTP response body – but all the underlying request and response details:
curl -vX PUT http://admin:firstname.lastname@example.com:5984/albums-backup
curl elaborates:
* About to connect() to 127.0.0.1 port 5984 (#0)
* Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 5984 (#0)
> PUT /albums-backup HTTP/1.1
> User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
> Host: 127.0.0.1:5984
> Accept: */*
< HTTP/1.1 201 Created
< Server: CouchDB (Erlang/OTP)
< Date: Sun, 05 Jul 2009 22:48:28 GMT
< Content-Type: text/plain;charset=utf-8
< Content-Length: 12
< Cache-Control: must-revalidate
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
What a mouthful. Let's step through this line by line to understand what's going on and find out what's important. Once you've seen this output a few times, you'll be able to spot the important bits more easily.
* About to connect() to 127.0.0.1 port 5984 (#0)
This is curl telling us that it is going to establish a TCP connection to the CouchDB server we specified in our request URI. Not at all important, except when debugging networking issues.
* Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 5984 (#0)
curl tells us it successfully connected to CouchDB. Again, not important if you aren't trying to find problems with your network.
The following lines are prefixed with
> and
< characters.
> means the line was sent to CouchDB verbatim (without the actual
>). The
< means the line was sent back to curl by CouchDB.
> PUT /albums-backup HTTP/1.1
This initiates an HTTP request. Its method is PUT, the URI is
/albums-backup, and the HTTP version is
HTTP/1.1. There is also
HTTP/1.0, which is simpler in some cases, but for all practical reasons
you should be using
Next, we see a number of request headers. These are used to provide additional details about the request to CouchDB.
> User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
The User-Agent header tells CouchDB which piece of client software is doing the HTTP request. We don't learn anything new: it's curl. This header is often useful in web development when there are known errors in client implementations that a server might want to prepare the response for. It also helps to determine which platform a user is on. This information can be used for technical and statistical reasons. For CouchDB, the User-Agent header is irrelevant.
> Host: 127.0.0.1:5984
The Host header is required by
HTTP 1.1. It tells the server
the hostname that came with the request.
> Accept: */*
The Accept header tells CouchDB that curl accepts any media type. We'll look into why this is useful a little later.
An empty line denotes that the request headers are now finished and the rest of the request contains data we're sending to the server. In this case, we're not sending any data, so the rest of the curl output is dedicated to the HTTP response.
< HTTP/1.1 201 Created
The first line of CouchDB's HTTP response includes the HTTP version information (again, to acknowledge that the requested version could be processed), an HTTP status code, and a status code message. Different requests trigger different response codes. There's a whole range of them telling the client (curl in our case) what effect the request had on the server. Or, if an error occurred, what kind of error. RFC 2616 (the HTTP 1.1 specification) defines clear behavior for response codes. CouchDB fully follows the RFC.
The 201 Created status code tells the client that the resource
the request was made against was successfully created. No surprise here,
but if you remember that we got an error message when we tried to create this
database twice, you now know that this response could include a different
response code. Acting upon responses based on response codes is a common
practice. For example, all response codes of 400 Bad Request or larger
tell you that some error occurred. If you want to shortcut your logic and
immediately deal with the error, you could just check a >=
400 response
< Server: CouchDB (Erlang/OTP)
The Server header is good for diagnostics. It tells us which CouchDB version and which underlying Erlang version we are talking to. In general, you can ignore this header, but it is good to know it's there if you need it.
< Date: Sun, 05 Jul 2009 22:48:28 GMT
The Date header tells you the time of the server. Since client and server time are not necessarily synchronized, this header is purely informational. You shouldn't build any critical application logic on top of this!
< Content-Type: text/plain;charset=utf-8
The Content-Type header tells you which MIME type the HTTP response body is and its encoding. We already know CouchDB returns JSON strings. The appropriate Content-Type header is application/json. Why do we see text/plain? This is where pragmatism wins over purity. Sending an application/json Content-Type header will make a browser offer you the returned JSON for download instead of just displaying it. Since it is extremely useful to be able to test CouchDB from a browser, CouchDB sends a text/plain content type, so all browsers will display the JSON as text.
There are some extensions that make your browser JSON-aware, but they are not installed by default. For more information, look at the popular JSONView extension, available for both Firefox and Chrome.
Do you remember the Accept request header and how it is set to
*/* to express interest in any MIME type? If you send
application/json in your request, CouchDB knows that you can deal with a pure
JSON response with the proper Content-Type header and will
use it instead of text/plain.
< Content-Length: 12
The Content-Length header simply tells us how many bytes the response body has.
< Cache-Control: must-revalidate
This Cache-Control header tells you, or any proxy server between CouchDB and you, not to cache this response.
This empty line tells us we're done with the response headers and what follows now is the response body.
We've seen this before.
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0
The last two lines are curl telling us that it kept the TCP connection it opened in the beginning open for a moment, but then closed it after it received the entire response.
Throughout the documents, we'll show more requests with the
-v option,
but we'll omit some of the headers we've seen here and include only those
that are important for the particular request.
Creating databases is all fine, but how do we get rid of one? Easy – just change the HTTP method:
> curl -vX DELETE http://admin:email@example.com:5984/albums-backup
This deletes a CouchDB database. The request will remove the file that the database contents are stored in. There is no "Are you sure?" safety net or any "Empty the trash" magic you've got to do to delete a database. Use this command with care. Your data will be deleted without a chance to bring it back easily if you don't have a backup copy.
This section went knee-deep into HTTP and set the stage for discussing the rest of the core CouchDB API. Next stop: documents.
1.7.3. Documents¶
Documents are CouchDB's central data structure. The idea behind a document is, unsurprisingly, that of a real-world document – a sheet of paper such as an invoice, a recipe, or a business card. We already learned that CouchDB uses the JSON format to store documents. Let's see how this storing works at the lowest level.
Each document in CouchDB has an ID. This ID is unique per database. You are free to choose any string to be the ID, but for best results we recommend a UUID (or GUID), i.e., a Universally (or Globally) Unique IDentifier. UUIDs are random numbers that have such a low collision probability that everybody can make thousands of UUIDs a minute for millions of years without ever creating a duplicate. This is a great way to ensure two independent people cannot create two different documents with the same ID. Why should you care what somebody else is doing? For one, that somebody else could be you at a later time or on a different computer; secondly, CouchDB replication lets you share documents with others and using UUIDs ensures that it all works. But more on that later; let's make some documents:
curl -X PUT http://admin:firstname.lastname@example.com:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d '{"title":"There is Nothing Left to Lose","artist":"Foo Fighters"}'
CouchDB replies:
The curl command appears complex, but let's break it down.
-X PUT tells curl to make a PUT request.
It is followed by the URL that specifies your CouchDB IP address and port.
The resource part of the URL
specifies the location of a document inside our albums database.
The wild collection of numbers and characters is a UUID. This UUID is your
document's ID. Finally, the
-d flag tells curl to use the following
string as the body for the PUT request. The string is a simple JSON
structure including
title and
artist attributes with their respective
If you don't have a UUID handy, you can ask CouchDB to give you one (in
fact, that is what we did just now without showing you). Simply send a
GET /_uuids request:
curl -X GET http://127.0.0.1:5984/_uuids
CouchDB replies:
Voilà, a UUID. If you need more than one, you can pass in the
HTTP parameter to request 10 UUIDs, or really, any number you need.
To double-check that CouchDB isn't lying about having saved your document (it usually doesn't), try to retrieve it by sending a GET request:
curl -X GET http://admin:firstname.lastname@example.com:5984/albums/6e1295ed6c29495e54cc05947f18c8af
We hope you see a pattern here. Everything in CouchDB has an address, a URI, and you use the different HTTP methods to operate on these URIs.
CouchDB replies:
{"_id":"6e1295ed6c29495e54cc05947f18c8af","_rev":"1-2902191555","title":"There is Nothing Left to Lose","artist":"Foo Fighters"}
This looks a lot like the document you asked CouchDB to save, which is good.
But you should notice that CouchDB added two fields to your JSON structure.
The first is
_id, which holds the UUID we asked CouchDB to save our document
under. We always know the ID of a document if it is included, which is very
The second field is
_rev. It stands for revision.
184.108.40.206. Revisions¶
If you want to change a document in CouchDB, you don't tell it to go and find
a field in a specific document and insert a new value. Instead, you load
the full document out of CouchDB, make your changes in the JSON structure
(or object, when you are doing actual programming), and save the entire new
revision (or version) of that document back into CouchDB. Each revision is
identified by a new
_rev value.
If you want to update or delete a document, CouchDB expects you to include
_rev field of the revision you wish to change. When CouchDB accepts
the change, it will generate a new revision number. This mechanism ensures that,
in case somebody else made a change without you knowing before you got to
request the document update, CouchDB will not accept your update because you
are likely to overwrite data you didn't know existed. Or simplified: whoever
saves a change to a document first, wins. Let's see what happens if we don't
provide a
_rev field (which is equivalent to providing a outdated value):
curl -X PUT http://admin:firstname.lastname@example.com:5984/albums/6e1295ed6c29495e54cc05947f18c8af \
-d '{"title":"There is Nothing Left to Lose","artist":"Foo Fighters","year":"1997"}'
CouchDB replies:
{"error":"conflict","reason":"Document update conflict."}
If you see this, add the latest revision number of your document to the JSON structure:
curl -X PUT http://admin:firstname.lastname@example.com:5984/albums/6e1295ed6c29495e54cc05947f18c8af \
-d '{"_rev":"1-2902191555","title":"There is Nothing Left to Lose","artist":"Foo Fighters","year":"1997"}'
Now you see why it was handy that CouchDB returned that
_rev when we made
the initial request. CouchDB replies:
CouchDB accepted your write and also generated a new revision number.
The revision number is the MD5 hash of the transport representation of a
document with an
N- prefix denoting the number of times a document got
updated. This is useful for replication. See Replication and conflict model for
more information.
There are multiple reasons why CouchDB uses this revision system, which is also called Multi-Version Concurrency Control (MVCC). They all work hand-in-hand, and this is a good opportunity to explain some of them.
One of the aspects of the HTTP protocol that CouchDB uses is that it is stateless. What does that mean? When talking to CouchDB you need to make requests. Making a request includes opening a network connection to CouchDB, exchanging bytes, and closing the connection. This is done every time you make a request. Other protocols allow you to open a connection, exchange bytes, keep the connection open, exchange more bytes later – maybe depending on the bytes you exchanged at the beginning – and eventually close the connection. Holding a connection open for later use requires the server to do extra work. One common pattern is that for the lifetime of a connection, the client has a consistent and static view of the data on the server. Managing huge amounts of parallel connections is a significant amount of work. HTTP connections are usually short-lived, and making the same guarantees is a lot easier. As a result, CouchDB can handle many more concurrent connections.
Another reason CouchDB uses MVCC is that this model is simpler conceptually and, as a consequence, easier to program. CouchDB uses less code to make this work, and less code is always good because the ratio of defects per lines of code is static.
The revision system also has positive effects on replication and storage mechanisms, but we'll explore these later in the documents.
The terms version and revision might sound familiar (if you are programming without version control, stop reading this guide right now and start learning one of the popular systems). Using new versions for document changes works a lot like version control, but there's an important difference: CouchDB does not guarantee that older versions are kept around. Don't use the ``_rev`` token in CouchDB as a revision control system for your documents.
188.8.131.52. Documents in Detail¶
Now let's have a closer look at our document creation requests with the curl
-v flag that was helpful when we explored the database API earlier.
This is also a good opportunity to create more documents that we can use in
later examples.
We'll add some more of our favorite music albums. Get a fresh UUID from the
/_uuids resource. If you don't remember how that works, you can look it up
a few pages back.
curl -vX PUT http://admin:firstname.lastname@example.com:5984/albums/70b50bfa0a4b3aed1f8aff9e92dc16a0 \
-d '{"title":"Blackened Sky","artist":"Biffy Clyro","year":2002}'
By the way, if you happen to know more information about your favorite albums, don't hesitate to add more properties. And don't worry about not knowing all the information for all the albums. CouchDB's schema-less documents can contain whatever you know. After all, you should relax and not worry about data.
Now with the
-v option, CouchDB's reply (with only the important bits shown)
looks like this:
> PUT /albums/70b50bfa0a4b3aed1f8aff9e92dc16a0 HTTP/1.1
< HTTP/1.1 201 Created
< Location: http://127.0.0.1:5984/albums/70b50bfa0a4b3aed1f8aff9e92dc16a0
< ETag: "1-e89c99d29d06671fa0a4b3ae8aff9e"
We're getting back the 201 Created HTTP status code in the response headers, as we saw earlier when we created a database. The Location header gives us a full URL to our newly created document. And there's a new header. An ETag in HTTP-speak identifies a specific version of a resource. In this case, it identifies a specific version (the first one) of our new document. Sound familiar? Yes, conceptually, an ETag is the same as a CouchDB document revision number, and it shouldn't come as a surprise that CouchDB uses revision numbers for ETags. ETags are useful for caching infrastructures.
188.8.131.52. Attachments¶
CouchDB documents can have attachments just like an email message can have attachments. An attachment is identified by a name and includes its MIME type (or Content-Type) and the number of bytes the attachment contains. Attachments can be any data. It is easiest to think about attachments as files attached to a document. These files can be text, images, Word documents, music, or movie files. Let's make one.
Attachments get their own URL where you can upload data. Say we want to add
the album artwork to the
6e1295ed6c29495e54cc05947f18c8af document
("There is Nothing Left to Lose"), and let's also say the artwork is in a file
artwork.jpg in the current directory:
curl -vX PUT http://admin:email@example.com:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg?rev=2-2739352689 \
--data-binary @artwork.jpg -H "Content-Type:image/jpg"
@ option tells curl to read a file's contents into
the HTTP request body. We're using the
-H option to tell CouchDB that
we're uploading a JPEG file. CouchDB will keep this information around and
will send the appropriate header when requesting this attachment; in case of
an image like this, a browser will render the image instead of offering you
the data for download. This will come in handy later. Note that you need
to provide the current revision number of the document you're attaching
the artwork to, just as if you would update the document. Because, after
all, attaching some data is changing the document.
You should now see your artwork image if you point your browser to http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg
If you request the document again, you'll see a new member:
curl http://admin:email@example.com:5984/albums/6e1295ed6c29495e54cc05947f18c8af
CouchDB replies:
"_id": "6e1295ed6c29495e54cc05947f18c8af",
"_rev": "3-131533518",
"title": "There is Nothing Left to Lose",
"artist": "Foo Fighters",
"year": "1997",
"_attachments": {
"artwork.jpg": {
"stub": true,
"content_type": "image/jpg",
"length": 52450
_attachments is a list of keys and values where the values are JSON objects
containing the attachment metadata.
stub=true tells us that this entry is
just the metadata. If we use the
?attachments=true HTTP option when
requesting this document, we'd get a Base64 encoded string containing the
attachment data.
We'll have a look at more document request options later as we explore more features of CouchDB, such as replication, which is the next topic.
1.7.4. Replication¶
CouchDB replication is a mechanism to synchronize databases. Much like rsync synchronizes two directories locally or over a network, replication synchronizes two databases locally or remotely.
In a simple POST request, you tell CouchDB the source and the target of a replication and CouchDB will figure out which documents and new document revisions are on source that are not yet on target, and will proceed to move the missing documents and revisions over.
We'll take an in-depth look at replication in the document Introduction to Replication; in this document, we'll just show you how to use it.
First, we'll create a target database. Note that CouchDB won't automatically create a target database for you, and will return a replication failure if the target doesn't exist (likewise for the source, but that mistake isn't as easy to make):
curl -X PUT http://admin:email@example.com:5984/albums-replica
Now we can use the database albums-replica as a replication target:
curl -X POST http://admin:firstname.lastname@example.com:5984/_replicate \
-d '{"source":"http://admin:firstname.lastname@example.com:5984/albums","target":"http://admin:firstname.lastname@example.com:5984/albums-replica"}' \
-H "Content-Type: application/json"
As of CouchDB 2.0.0, fully qualified URLs are required for both the
source and
target parameters.
CouchDB supports the option
"create_target":true placed in the JSON
POSTed to the _replicate URL. It implicitly
creates the target database if it doesn't exist.
CouchDB replies (this time we formatted the output so you can read it more easily):
"ok": true,
"session_id": "30bb4ac013ca69369c0f32be78864d6e",
"source_last_seq": "2-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYExlzgQLsBiaphqYpSZjKcRqRxwIkGRqA1H8Uk4wszJIskg0wdWUBAFHwJD4",
"replication_id_version": 4,
"history": [
"session_id": "30bb4ac013ca69369c0f32be78864d6e",
"start_time": "Sun, 05 Mar 2023 20:30:26 GMT",
"end_time": "Sun, 05 Mar 2023 20:30:29 GMT",
"start_last_seq": 0,
"end_last_seq": "2-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYExlzgQLsBiaphqYpSZjKcRqRxwIkGRqA1H8Uk4wszJIskg0wdWUBAFHwJD4",
"recorded_seq": "2-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYExlzgQLsBiaphqYpSZjKcRqRxwIkGRqA1H8Uk4wszJIskg0wdWUBAFHwJD4",
"missing_checked": 2,
"missing_found": 2,
"docs_read": 2,
"docs_written": 2,
"doc_write_failures": 0,
"bulk_get_docs": 2,
"bulk_get_attempts": 2
CouchDB maintains a session history of replications. The response for a replication request contains the history entry for this replication session. It is also worth noting that the request for replication will stay open until replication closes. If you have a lot of documents, it'll take a while until they are all replicated and you won't get back the replication response until all documents are replicated. It is important to note that replication replicates the database only as it was at the point in time when replication was started. So, any additions, modifications, or deletions subsequent to the start of replication will not be replicated.
We'll punt on the details again – the
"ok": true at the beginning tells
us all went well. If you now have a look at the albums-replica database,
you should see all the documents that you created in the albums database.
Neat, eh?
What you just did is called local replication in CouchDB terms. You created a local copy of a database. This is useful for backups or to keep snapshots of a specific state of your data around for later. You might want to do this if you are developing your applications but want to be able to roll back to a stable version of your code and data.
There are more types of replication useful in other situations. The source and target members of our replication request are actually links (like in HTML) and so far we've seen links relative to the server we're working on (hence local). You can also specify a remote database as the target:
curl -X POST http://admin:email@example.com:5984/_replicate \
-d '{"source":"http://admin:firstname.lastname@example.com:5984/albums","target":"http://user:email@example.com:5984/albums-replica"}' \
-H "Content-Type:application/json"
Using a local source and a remote target database is called push replication. We're pushing changes to a remote server.
Since we don't have a second CouchDB server around just yet, we'll just use the absolute address of our single server, but you should be able to infer from this that you can put any remote server in there.
This is great for sharing local changes with remote servers or buddies next door.
You can also use a remote source and a local target to do a pull replication. This is great for getting the latest changes from a server that is used by others:
curl -X POST http://admin:firstname.lastname@example.com:5984/_replicate \
-d '{"source":"http://user:email@example.com:5984/albums-replica","target":"http://admin:firstname.lastname@example.com:5984/albums"}' \
-H "Content-Type:application/json"
Finally, you can run remote replication, which is mostly useful for management operations:
curl -X POST http://admin:firstname.lastname@example.com:5984/_replicate \
-d '{"source":"http://user:email@example.com:5984/albums","target":"http://user:email@example.com:5984/albums-replica"}' \
-H "Content-Type: application/json"
CouchDB and REST
CouchDB prides itself on having a RESTful API, but these replication requests don't look very RESTy to the trained eye. What's up with that? While CouchDB's core database, document, and attachment API are RESTful, not all of CouchDB's API is. The replication API is one example. There are more, as we'll see later in the documents.
Why are there RESTful and non-RESTful APIs mixed up here? Have the developers been too lazy to go REST all the way? Remember, REST is an architectural style that lends itself to certain architectures (such as the CouchDB document API). But it is not a one-size-fits-all. Triggering an event like replication does not make a whole lot of sense in the REST world. It is more like a traditional remote procedure call. And there is nothing wrong with this.
We very much believe in the "use the right tool for the job" philosophy, and REST does not fit every job. For support, we refer to Leonard Richardson and Sam Ruby who wrote RESTful Web Services (O'Reilly), as they share our view.
1.7.5. Wrapping Up¶
This is still not the full CouchDB API, but we discussed the essentials in great detail. We're going to fill in the blanks as we go. For now, we believe you're ready to start building CouchDB applications.


text:
NAIROBI, Kenya — A massive fire destroyed the arrivals hall at Kenya's main international airport early Wednesday, forcing the closure of East Africa's largest airport and the rerouting of all inbound flights.
There may not have been fire engines available to respond. The country's largest newspaper, The Daily Nation, reported last month that Nairobi County doesn't have a single working fire engine, and that three fire engines were auctioned off in 2009 because the county hadn't paid a $1,000 repair bill.
"It is a disgrace of biblical proportions that the entire Nairobi County does not have a public fire engine in working condition," the paper wrote in an editorial last month. "When (government leaders) were debating their budgets, they did not deem it fit to set aside money either to buy new ones or repair the old ones. But they did set aside money to build mansions for governors, (buy) big vehicles for county executives and other needs without a direct benefit to Kenyans."
The paper said the collapse of the fire department means responses to disasters is in the hands of private companies and the military.
Fisher, a trade specialist who lives in Nairobi, described the scene as chaotic.
"There was no one stopping any traffic going to the road to the airport," he said. "A number of fire trucks and ambulances were trying to negotiate their way through the lane. ... They were trying to weave their way through a solid two lanes of cars."
No injuries were reported, said Michael Kamau, Kenya's cabinet secretary for transport and infrastructure.
The fire broke out on the 15th anniversary of the U.S. Embassy bombings in Nairobi and neighboring Dar es Salaam, Tanzania, but there were no immediate signs of terrorism. Kenya's anti-terror police boss, Boniface Mwaniki, told The Associated Press that he was waiting for the fire to be put out so that he could inspect the scene before making a judgment.
Dark black smoke that shot skyward was visible across much of Nairobi as emergency teams battled the blaze. Passengers reported a slow response by the under-resourced fire brigade, and the blaze raged for four hours before being contained.
"It was huge, the smoke billowing, and it didn't seem to be stopping," said Barry Fisher, who had hoped to fly to Ethiopia on Wednesday morning.
The fire gutted the international arrivals hall, where passengers pass through immigration and retrieve their luggage. The Kenya Airports Authority closed Jomo Kenyatta International Airport until further notice.
"We reassure international and local travelers that arrangements are being put in place to restore normal operations. The airlines are working to assist stranded passengers and advise them on the measures being put in place to resume services at JKIA," said Stephen Gichuki, the director of the Kenyan Airports Authority.
The Nairobi airport is the busiest in East Africa, and its closure is likely to affect flights throughout the region.
Kamau said the fire began at 5 a.m. (10 p.m. EST) in the immigration section of the arrivals hall. Inbound flights were diverted to the coastal city of Mombasa.


text:
本新闻发布以英文继续。/ This press release continues in English.
Research has found that firefighters are twice as likely to develop testicular cancer and have significantly higher rates of non-Hodgkin's lymphoma and prostate cancer than non-firefighters.
There is no question about the clear link between firefighters and cancer, which is why the Firefighter Cancer Support Network (FCSN) serves to educate, research, and inform others about this issue. The FCSN frequently holds events including an upcoming one during the FDIC trade show on April 21, 2015, called "Comedy vs. Cancer". All proceeds generated will be used to aid FCSN members and their families in coping with cancer while also providing cancer awareness and prevention training worldwide. To support the FCSN and their efforts, Plymovent Corp. has made a donation to this annual event. Plymovent values the health of firefighters and cares about the quality of the air they breathe.
Additionally, Plymovent Corp. will be exhibiting at the FDIC trade show (booth #4110) on April 23-25, 2015, where their vehicle exhaust removal systems, including the award-winning Magnetic Grabber®, will be on display. Designed with "at the source" style capture of hazardous vehicle exhaust, Plymovent exhaust removal systems help firefighters significantly improve the every day quality of the air they breathe within the fire station.


text:
How To Avoid Pests
There's nothing like up-to-date, relevant travel data direct from the consultants – get Go2Africa's important Botswana journey advice before you go. To explore this once not-often-visited an ideal overview of Rwanda, you might want to spend eleven days and ten nights to see gorillas, baboons, chimpanzees, go to tea plantations, and many different things to discover in this once not-typically-visted country including ways to travel and lodging. Maltese nationals travelling, working or living overseas are encouraged to register with the Ministry for Overseas Affairs by returning Form D, duly filled in, which might be downloaded from the URL beneath.
The journey advice is supplied as is" without specific or implied warranty that the journey recommendation on the web site can be consistently out there or obtainable always or that the knowledge offered is full or up-to-date always. We provide a range of resources and links that will help you research … Read the rest


text:
New BOYSTOWN series design will "wow" fans
BOYSTOWN series author Jake Biondi announced that he is re-launching his entire book series with an exciting new look just ahead of the release of his seventh BOYSTOWN book on July 7. Throughout June, the month that celebrates Pride, Biondi will release the new designs of his book covers.
"It's going to 'wow' readers from coast to coast," Biondi said of the series' new design. "I wanted the BOYSTOWN book covers and all the marketing materials to better represent the drama, excitement, and diversity of the BOYSTOWN series. The new covers hint at the story line twists and turns that readers will find within the books' pages."
The first four redesigned covers give fans a taste of what the entire series re- launch will look like. The bold colors and sexy models on the new covers tease what readers will experience when they turn the pages of the books.
Biondi has teamed up with designer Anna Crosswell of Cover Couture to create BOYSTOWN's new style. "It's great to be a part of BOYSTOWN nation and come on board as the designer for such a diverse and exciting series," Crosswell said.
- Advertisement -
Biondi partnered with Crosswell as part of a larger initiative to bring the BOYSTOWN series to television. "From the moment that Anna and I first spoke, I knew she understood the broad appeal of the BOYSTOWN series. She created a look that will introduce an even larger audience to the series. Her designs are sexy, exciting, and dramatic, just like the series itself."
Biondi will unveil the new covers throughout June, all leading up to the release of the seventh BOYSTOWN book on July 7, 2017.
"The seventh book is certainly unique," Biondi told fans of his BOYSTOWN book series. "Because of the success of the sixth book, fans from all over the world have been asking me when book seven will be available. The ending to Season Six left the lives of so many characters in peril that readers are longing to know what happens next. Their questions are about to be answered."
The BOYSTOWN book series was included in the BookLikes.com "Best of 2016" book list. With an average customer rating of five stars, the BOYSTOWN series continues to receive the highest possible rating on Amazon.com as well.
Biondi added, "I am so grateful for BOYSTOWN readers and their positive response to the series. I love that fans are connecting with the characters and want to know what the future holds for them. The broad appeal of the book series is amazing. BOYSTOWN has an incredibly diverse audience."
Biondi promised that readers won't be disappointed by his latest installment. "Season Seven picks up right where book six left off and slowly resolves the cliffhangers that ended the sixth installment. Season Seven will allow the readers to get to know some of the series' minor characters better as well as follow the lives of the books' core characters." Biondi also previewed that BOYSTOWN Season Seven continues the storylines from the first six books while introducing new ones — and one mysterious new character, too.
"Jake Biondi is one of the most masterful writers of fiction of our time," said Roger Ward in his review of the BOYSTOWN series. "
BOYSTOWN Season Seven is currently available for pre-order on iTunes and Kindle. The BOYSTOWN series is available in paperback, audio book, and all e- book formats. Readers may order autographed paperback copies of the books directly from BoystownTheSeries.com for no additional cost.
Biondi is currently working with television producers who are interested in bringing the BOYSTOWN series to TV. Biondi remains optimistic that fans will soon be able to watch their favorite BOYSTOWN characters in action on television in the near future.
© 2017 – 2018, Divine Magazine. All rights reserved.


text:
Lucky Buddy Bear and some extremely safe chickens (taken 12/07)
Love the chick pics? You'll find lots more of them here.
© FarmgirlFare.com, the whiteout foodie farm blog where tomorrow I should have freshly fallen snow photos!
yes, I am waiting for my half inch of snow in memphis town...bet, I do not get any....ReplyDelete
BECAUSE OF THE WIRE OR BECAUSE OF HIM?! CUTE~:DReplyDelete
I don't know when that dog ever gets a chance to sleep, with all the animals to guard and all. It's a hard life he lives.
That is one secure coop!ReplyDelete
We're getting snow right now - first 'big' snow this winter. So far, it's just been maybe 1/4 inch or so, a dusting here and there. I guess we are due for something with a little more impact, huh?
Love your doggie, and the chickens, too!
Stay warm.
My English Shepherd, Nicky (who looks surprising like Buddy Bear but without the prick ears), *loves* to watch over his chickens! The daily "Chicken Check" is one of his favorite chores. My husband thinks its because Nicky is dreaming of 'McNicky Chicken Nuggets'.
Hope to see more of Lucky Buddy Bear in 2010!
Dear farmgirl, Thank you so much for sharing all of the beautful pictures, and fun recipes. I LOVE Farmgirl Fare. I wish I could be there. MaureenReplyDelete
December 2015 update: Hi! For some reason I can't figure out, Blogger hasn't been letting me leave comments on my own blog (!) for the last several months, so I've been unable to respond to your comments and questions. My apologies for any inconvenience! You're always welcome to email me: farmgirlfare AT gmail DOT com.
Hi! Thanks for visiting Farmgirl Fare and taking the time to write. While I'm not always able to reply to every comment, I receive and enjoy reading them all.
Your feedback is greatly appreciated, and I especially love hearing about your experiences with my recipes. Comments on older posts are always welcome!
Please note that I moderate comments, so if I'm away from the computer it may be a while before yours appears.
I try my best to answer all questions, though sometimes it takes me a few days. And sometimes, I'm sorry to say, they fall through the cracks, and for that I sincerely apologize.
I look forward to hearing from you and hope you enjoy your e-visits to our farm!


text:
These cupcakes have a coconut cupcake base and a pineapple cream cheese frosting. Topped with some shredded coconut and festive "skewer" of pineapple and a maraschino cherry, these just look like a fun summer treat - just as tropical as the ever-popular frozen drink. I spiked them with a little dark rum to make them extra fun.
Make sure when you fill the liners for these cupcakes that you don't fill them too full - I had a bit of a problem with the cupcakes running over the edges because they don't puff up as much as others. If you stick with filling the liners just 2/3 of the way full, you should be fine.
Recipe adapted from Annie's Eats
2 cups sifted cake flour
2 tsp baking powder
1/4 tsp salt
1/2 cup unsalted butter, at room temperature
1 3/4 cups sugar
1/3 cup milk
2 T dark rum
1/2 tsp vanilla extract
1/2 tsp coconut extract
4 egg whites
1/2 cup flaked coconut
Preheat oven to 350 degrees and line 18 muffin cups with paper liners.
Sift together flour, baking powder and salt in a medium bowl and set aside. In a mixing bowl, beat butter until smooth and creamy, gradually add the sugar, beating until light and fluffy about 2-3 minutes.
Combine the milk, rum, vanilla and coconut extracts in a large measuring cup. Add 1/3 of the flour mixture to the batter, mixing on low until just incorporated. Add 1/2 the milk mixture and mix until incorporated. Continue alternating with the flour and milk, ending with the flour mixture. Add coconut to the batter and stir in. Transfer to a separate bowl and clean mixing bowl if necessary to beat egg whites.
In a clean mixing bowl, use mixer fitter with the whisk attachment to beat egg whites. Start on low speed and increase speed gradually as egg whites thicken, beating until they form stiff peaks. Fold in 1/3 of the egg whites to lighten batter, once incorporated, add remaining egg whites and fold gently until smooth.
Transfer batter to prepared pans, filling each liner approximately 2/3 of the way full. Bake about 15 minutes, until a toothpick inserted in the center comes out clean. Cool 5-10 minutes in the pan and then transfer to a wire rack to cool completely.
2/3 cup crushed pineapple, drained
8 oz cream cheese, at room temperature
1/2 cup unsalted butter, at room temperature
1 lb powdered sugar
1 T dark rum
1 cup shredded coconut
Pineapple and maraschino cherries for garnish
In a food processor, puree pineapple until smooth. Add cream cheese and butter to mixing bowl and beat until smooth and creamy, about 2 minutes. Add rum and mix in until incorpated. Add powdered sugar, one cup at a time, mixing on low speed until incorporated. Add pineapple, you may not need all of it, start with about 1/2 cup and add more as necessary. The frosting will be a little thinner than a normal buttercream, you can refrigerate to help it set up a little before frosting. I frosted these with a spatula rather than piping the frosting on. Top with shredded coconut and garnish with pineapple and maraschino cherry skewer if desired.
Friday, July 23, 2010
Pina Colada Cupcakes
These cupcakes have a coconut cupcake base and a pineapple cream cheese frosting. Topped with some shredded coconut and festive "skewer" of pineapple and a maraschino cherry, these just look like a fun summer treat - just as tropical as the ever-popular frozen drink. I spiked them with a little dark rum to make them extra fun.
3 comments:
I love the addition of rum!!ReplyDelete
Well, my cupcakes taste great, but they don't look that good. They have a nice crispy top to them, and one imploded! :)ReplyDelete
- AnonymousJuly 26, 2010 at 9:44 PM
A cocktail in cupcake form! I love it. Just looking at them makes me think of the beach. They look great!ReplyDelete
PS...I posted a challenge for you on my blog. It's at the bottom of my latest (long winded) post. Check it out if you'd like! :) themilkmanswife.wordpress.com


text:
Assault with a Deadly CAD File (MCAD Modeling Column)30 Sep, 2008 By: IDSA ,Mike Hudspeth
A few diversionary tactics could help you survive the experience of sharing 3D models.
Are you MENSA material? I'm not. Puzzles irritate me. My wife loves to sit for hours figuring them out. I throw puzzles against the wall and go find something more fun to do. I guess I'm not the "if at first you don't succeed, try, try again" type. Actually, I'm the type who uses the computer-game cheat books. I don't play games for the intellectual stimulation; I play them for fun.
It's interesting then that I chose to go into 3D modeling. How so? Let me ask you, How often have you had to use someone else's model and you felt as if you were taking a MENSA test? You can't do this, you can't do that. The model explodes. Does that sound familiar? Just about anyone who deals with 3D models has problems from time to time. It's not their fault (usually). It's just that using models from who-knows-where can be challenging.
No one has it in for you. When you get a model from someone, he or she usually doesn't intend to cause problems. But unless everyone does everything exactly the same way, variation will be commonplace. Until the 3D modeling police make people do things the so-called right way, people are going to do their own thing. It's human nature.
I used to work with a bunch of modelers (who shall remain anonymous) who learned to do their jobs piecemeal. Our company was too cheap to send them to training, so they had to pick the brains of those who were lucky enough to have gone. They ended up learning just enough to get their jobs done. They were totally oblivious to the full capabilities of the 3D modeling software. Consequently, whenever a problem occurred with a model, you could bet your bottom dollar it was one of theirs. One engineer in particular was notorious for having models no one wanted to touch. Every time we imported or opened his files (and I do mean every time), they had problems, (You only have to get the blue screen o' death once or twice before you figure out someone's not doing something right.) Unfortunately, our deadlines didn't allow us to remodel, so we worked with what we had.
Lost in Translation
If you have to translate 3D CAD files from one file format to another, you're probably no stranger to problematic models. CAD file translators today have come a long way and are fairly bulletproof, but not always perfect. Again, the process is hampered by the human desire to do things our own way. If you take a part to five toolmakers and ask each to design a tool to make the part, you are likely to get five different solutions. It's the same with 3D CAD software programmers. Each 3D modeling program is different from the next, which means you probably can't move a model from one to the other without losing something in the translation. In the old days, this problem was even bigger. Many developers would make it difficult to export models to another format because they feared easy file translation might lead to lost business. (What was Genghis Khan's old saying? "It's not enough that I succeed, everyone else must fail.") So translation issues weren't just intentional, sometimes they were economical.
Figure 1. Many manufacturers of off-the-shelf parts offer 3D models you can incorporate into your CAD assembly.
File-translation problems can pop up if you use purchased parts and you download 3D models to represent those parts in your design (figure 1). The manufacturers that produce standard parts can't always afford seven different 3D CAD modeling programs to create parts models in every popular format. Even if your company owns several 3D modeling programs, you probably model in only one of them, and chances are you usually require some file translation to incorporate 3D models of off-the-shelf parts.
When I was new to CAD work, I drew all my parts to three decimal places. It was accurate and simple, but it also was expensive. Some of those dimensions didn't need to be so tight. I was summarily corrected, and I learned to adjust for what was important and what wasn't. Unfortunately, a 3D modeling program can't learn that sort of lesson. So when the user tells the software to round everything to a certain tolerance, that's what the software does. When that part is translated into another 3D modeling format and the tolerances aren't the same, problems can occur. The first system recognizes a dimension as 1.000, and the second sees 0.9997. These two numbers are essentially the same in the real world, but they aren't the same to a computer. When tolerances don't agree, you end up with geometry issues. What originally was a watertight model comes into your 3D modeler with gaps, overlapping edges, or both (figure 2). You have no choice but to fix these problems. Time is money, and fixing problems of this nature can consume a lot of both.
Figure 2. When the tolerances in two 3D CAD applications don't quite agree, you can end up with imported models that have wide-open gaps. Some 3D modelers have tools to heal them.
So What Do We Do?
You're probably thinking, "How do we minimize these issues?" You have several choices. First, take a little time to observe which techniques you use to create your models. If you use a parametric modeler, make sure every sketch is fully defined before you proceed (figure 3). I can't tell you how often I have examined a problematic model only to discover that the sketches had all sorts of undefined geometry. It's not going to work, folks. If you don't tie everything down, changes will bring unexpected results. If there's no time to do it right, where will you find the time to do it over?
Figure 3. If you don't constrain everything in your sketches, changes in the model will cause the unconstrained items to move unpredictably.
Another way to avoid problems is to establish good corporate modeling standards. Some of you are cringing, but you really need them. (For more information about standards, see my August "MCAD Modeling" column, "Do You Need Modeling Standards?") If you establish good practices and adhere to them, at the very least you'll know what to expect when you open your coworkers' files. Fully parameterize your models, put features on designated layers, label everything you can (figure 4), and so forth. Establish some basic modeling standards and you'll limit your potential problems greatly.
Figure 4. Whether they are for layers or individual features, descriptions impart intelligence. The more intelligence you build into a model, the easier it will be to work with.
A really good way to minimize modeling surprises is to be kind to your coworkers. You're a team, so you all should have the same goals. Working well together increases efficiency. Mutual cooperation and teamwork minimize egos. When people aren't feeling territorial about their modeling habits, they will begin to open their minds to new or different ways of doing things. If the company benefits, you benefit. So, if you learn to do something, share that knowledge with as many others as possible. If someone is having a problem, help out. You'll find these good deeds will come back to you in the future. Also, it looks good on your annual review if you can say you helped those around you.
Work It Out
No matter what, you're going to have occasional problems when you use other people's models. And any time you translate something, you invite trouble. But if you take a little time and expend a little effort, you can pare down those problems to a minimum.
About the Author: IDSA
About the Author: Mike Hudspeth
For Mold Designers! Cadalyst has an area of our site focused on technologies and resources specific to the mold design professional. Sponsored by Siemens NX. Visit the Equipped Mold Designer here!
For Architects! Cadalyst has an area of our site focused on technologies and resources specific to the building design professional. Sponsored by HP. Visit the Equipped Architect here!


text:
Ending "Commercial" Exploitation
There are so many indicators of cultural, corporate and political change for the good of animals. One is the creative and often provocative advertising on display not only during the Super Bowl, but in advance – where companies and ad agenciespush out their creative content in traditional and social media and get a national discussion going about their brands. Each year, it used to infuriate me to see baby or juvenile chimps dressed up and featured in commercials, because I knew what those chimpanzees would endure throughout their lives, and I also knew that the trainers would discard those chimps once they got big and leave it to the animal welfare community to pay for their care for the expected duration of their lives, sometimes as long as another half century. It costs our movement about a million dollars per chimp based on expected lifespan.
Happily now, instead of dressed-up chimps, we are getting much more advertising that promotes heart-warming pet adoption and the virtue, care and goodness associated with the human-animal bond. The Budweiser ad, featuring a puppy and a Clydesdale, extols the bonds between animals and people and even between animals and animals – and the joys we get from animals. They're further celebrating that bond by asking users to join in on their #bestbuds hashtag, posting photos of themselves with their pets to their social media channels. We've also heard reports that Budweiser has a not yet leaked ad featuring puppies from Southern Paws Rescue, an animal rescue in Illinois that will be aired in the 4th quarter. And the Audi ad takes a tongue-in-cheek look at the idea of not experimenting with something that may go wrong – like a fictional "Doberhuahua" fad breed – and instead making the right choice to adopt a one-of-a-kind, unique pet from an animal shelter.
There is change afoot on other fronts as well. Today, we announced that pharmaceutical giant Merck & Co. recently decided that it will no longer conduct or financially support biomedical research on chimpanzees for the foreseeable future and will favor alternative methods. In recent years, several other pharmaceutical and biotech companies, including GlaxoSmithKline, AstraZeneca and Novo Nordisk, have adopted similar policies prohibiting or severely restricting chimpanzee use.
While many of these companies did so at the request of The HSUS (either through shareholder resolution efforts or direct talks with company representatives), many others have chosen to adopt policies on their own after a 2011 Institute of Medicine report found nearly all chimpanzee use for research to be unnecessary. Private companies seem to be following the lead of the federal government by moving away from chimpanzee research. We hope that the remaining private companies using chimps will get on board, so that the use of chimps in invasive experiments stops in both publicly and privately funded institutions.
Chimps don't belong in commercials, and they certainly don't belong in laboratories. It's good to see the signs that the larger society views it that way too.


text:
Items where Kingston Author is "Bradsell, Colin"
Group by: Item Type | No Grouping
Jump to: Article | Conference or Workshop Item | Thesis
Number of items: 4.
Izzard, V. G., Bradsell, C.H., Hadavinia, H., Morris, V.J., Foot, P. J. S., Wilson, L.M. and Hewson, K. (2012) Performance of nylon based polymer foams at elevated temperature under tensile loading. Key Engineering Materials, 488-48, pp. 286-289. ISSN (print) 1013-9826
Izzard, Vanessa, Bradsell, Colin, Hadavinia, H., Morris, Valerie, Foot, P.J.S. and Witten, N. (2010) Investigation of the compression recovery properties of Polyamide-6 cellular solid over the temperature range of -5[degrees]C to 90[degrees]C. Key Engineering Materials, 417-18, pp. 933-936. ISSN (print) 1013-9826
Conference or Workshop Item
Donchev, T., Thomopoulos, G. and Bradsell, C. (2008) Application of FRP materials for retrofitting of RC beams after shear failure. In: Fourth International Conference on FRP Composites in Civil Engineering (CICE 2008); 22 - 24 Jul 2008, Zurich, Switzerland. ISBN 9783905594508 (Unpublished)
Bradsell, Colin (2011) Gravimetric determination of diffusion coefficients and volumetric properties of polyethylene closed cell foams. (MSc(R) thesis), Kingston University, .


text:
Feds Shut Down File-Sharing Site; Hackers Attack Justice Department Site
Earlier today, the Justice Department announced it had charged seven people on counts of copyright infringement and conspiracy in what's being called one the biggest criminal copyright cases.
NPR's Carrie Johnson filed this report for our Newscast unit:
"The Justice Department accused Megaupload, a popular file sharing site, with helping millions of people gain access to pirated movies, music and TV programs, often before the items are released for sale.
"A federal judge in Virginia gave authorities the green light to seize 18 domain names associated with the company, putting it out of business, at least for now.
"Seven executives — all overseas — face related criminal charges that could send them to prison for 20 years.
"The charges could focus even more attention on the issue of pirated movies and other entertainment. Congress is struggling with how to crack down on piracy without alienating popular search engines and social networking sites."
The New York Times reports that four of those charged have been arrested and among them is the site's founder Kim Dotcom, whose birth name is Kim Schmitz.
Shortly after the Justice Department made its announcement, the Internet struck back. More precisely, the hacker collective Anonymous gloated on Twitter that Justice's site — — had been taken offline .
In the past, Anonymous has launched what are called denial of service attacks against the websites of organizations they're protesting against. In essence, their members send so much traffic to a site that its servers crash. We've checked justice.gov a few times over the past hour and most of time we get a broken page.
Venture Beat reports that hackers have also targeted the website of Universal Music, which is fighting a legal battle with Megaupload over a promotional video.
The Justice Department did not immediately respond to requests for comment.
Update at 6:21 p.m. ET. Megaupload's Response:
The AP reports that before Megaupload's site was taken down, it issued a statement denying the Justice Department's allegations. The AP reports:
"Before the site was taken down, it posted a statement saying allegations that it facilitated massive breaches of copyright laws were 'grotesquely overblown.'
"'The fact is that the vast majority of Mega's Internet traffic is legitimate, and we are here to stay. If the content industry would like to take advantage of our popularity, we are happy to enter into a dialogue. We have some good ideas. Please get in touch,' the statement said."
Update at 7:31 p.m. ET. Treating It As A 'Malicious Act':
The Justice Department just confirmed that its website is indeed experiencing issues that have resulted "in a degradation in service."
"The Department is working to ensure the website is available while we investigate the origins of this activity, which is being treated as a malicious act until we can fully identify the root cause of the disruption," a spokesperson said in a statement.
Copyright 2020 NPR. To see more, visit https://www.npr.org.


text: Bookboon's 1500+ business skills eBooks are 25-60 pages long, providing a focused 1-2 hour learning experience. This is short enough to finish in a single sitting, while still delivering the depth of knowledge needed to actually develop a new skill. South Eastern Kenya University School of Agriculture and Veterinary http://bookboon.com