text:
Blue Apron Inc. is an American ingredient-and-recipe meal kit company headquartered in New York City, operating its services exclusively in the United States. It offers weekly boxes containing ingredients, which also includes suggested recipes that must be cooked by hand by the customer using the pre-ordered ingredients.

As of September 2016, the company had shipped 8 million meal servings.  In June 2017, the company went public with an initial public offering.

History

Matt Salzberg, Ilia Papas and Matt Wadiak first began sending customers boxes containing the ingredients to cook recipes in August 2012, packing and shipping the first 30 orders themselves from a commercial kitchen in Long Island City. In May 2014, the company announced that it would be launching a fulfillment center in Richmond, California. In November 2014, Blue Apron launched Blue Apron Market, a store featuring kitchen tools and cookware. In December 2014, the company opened another fulfillment center in Jersey City, New Jersey.

After the opening of its third fulfillment center in Arlington, Texas in June 2015, the company began shipping to the contiguous United States.

In September 2015, Blue Apron launched Blue Apron Wine, a direct-to-consumer wine delivery service that sends customers six 500 ml bottles per month. The wines, made specifically for Blue Apron, are purchased directly from vineyards and sent directly to customers.

In October 2016, BuzzFeed reported a history of safety and health violations at the company's Richmond, California distribution center.  The company attributed the problems to operational issues while scaling up during its early days.

In February 2017, the company announced  that it would be opening a fulfillment center in Linden, New Jersey.

On June 29, 2017, Blue Apron had its initial public offering of 30 million shares of class A common stock (ticker APRN) priced at $10 per share; it is the first U.S. meal-kit company to go public.

Since going public, Wall Street has cut Blue Apron's stock price in half. By October 2017, prior to its next earnings report, the company had announced a company-wide realignment, 6% of employees laid off at both the corporate offices and fulfillment centers, estimated to be a couple of hundred jobs.

On November 30, 2017, Blue Apron announced that Brad Dickerson would be replacing Salzberg as CEO; Salzberg will remain chairman.

As of March 26, 2018, Blue Apron has lost 81.4% of its market value since its initial public offering.

In May 2018, Blue Apron began selling 4 servings meal kits at 17 Costco locations in California, marking the company's entrance into physical retail and Tim Bensley, formerly of Acosta Sales & Marketing, entered as CFO.

On August 2, 2018, Blue Apron, announced the total number of customers who paid for a meal delivery had a decrease of 24 percent during the second quarter of 2018 compared to the previous quarter, and the company also indicated total orders had slipped by 23 percent.

In April 2019, Brad Dickerson was succeeded by Linda Findley Kozlowski as the new CEO of the company. However, Dickerson remained at the company as an adviser.

In November 2020, Alan Blake was succeeded by Charlean Gmunder as the new COO. Blake left the company in June to lead operations at Kettle Cuisine.

Environmental impact
The company and other meal kit companies have been criticized for creating excess packaging waste from the individually packaged ingredients. As of 2017, Blue Apron partners with farms that limit agricultural chemicals and promote soil health through crop rotation to grow specialty crops for the company.

References

External links

2017 initial public offerings
Companies listed on the New York Stock Exchange
Online food retailers of the United States
American companies established in 2012
Retail companies established in 2012
Transport companies established in 2012
Internet properties established in 2012
Publicly traded companies based in New York City
Subscription services
2012 establishments in New York (state)


Russian President Dmitry Medvedev has said he is not satisfied with Russia's defense sector modernization rate and high production prices.
"Much money has been invested in the modernization and development of the defense-industrial sector in recent years. Regrettably, the policy of "mending holes" continues," said the head of the Russian state, speaking at a conference on development of the defense sector.
"The objectives of technological modernization in the sector have not been attained; we have to state it openly," he added.
He noted that this affects the quality of military hardware that is supplied to the Russian army and exported.
A solution to the problem, Medvedev said, could be adopting a federal program.
"Directors of companies and plants should take measures to cut production costs. It's a question of survival," Medvedev said.
The Russian President said the prices of military equipment should be reasonable enough to let the armed forces make purchases regularly, as opposed to one-time buys. Also, the prices must be attractive for foreign partners. "It's a crucial condition," Medvedev said.
"On many positions, the attractiveness of our armaments is disappearing; the cost is so high that purchasing them makes less and less sense," he said.
The president said the structural reform of the armed forces will end in two months and will be followed by a "more complicated mission" – modernization of the armed forces.
"A foundation of the armed forces modernization must be laid down by 2012," Medvedev said.
According to Medvedev, much money has been spent for production of the newest equipment. However, the priority should be given to manufacturing really promising models.
The most frustrating thing is when money is spent on "modernizing" obsolete equipment or equipment that will become obsolete within the next few years, Medvedev said.
To have a close look at the latest achievements of the country's military industry, the president visited Russia's Military Industrial Corporation – "NPO Mashinostroyenia" in the town of Reutov in the Moscow region.
Among other things, Medvedev was shown 'Bastion' – the new maneuverable inshore missile launch unit. The unit is designed to counter sea-based attacks and, among its capabilities, boasts self-propelled launching systems.
The head of state was shown how the missiles could be prepared for launch within 50 seconds. The missiles used in Bastion are the same as those on small naval ships.
The maximum range of the rocket is 290 kilometers – that's about 180 miles. According to officials, Russia may soon start exporting Bastions abroad.


AMERICUS, Ga. -- The Georgia Southwestern women's basketball team opened the Storm Dome for the first time this year with a dominating 70-55 conference win over Young Harris Saturday afternoon.
Defensively, the Lady Canes had 15 steals and forced a total of 25 turnovers en route to their second consecutive Peach Belt win.
How It Happened: Brianna Perry got things started for GSW, getting the first two points on the board nearly two minutes into the game. YHC quickly followed up with a three pointer that led to an 8-2 run for the Lady Canes. The Mountain Lions defense showed up with 1:20 left in the first quarter, tieing the game at 12. A three-pointer by Lex Chatman pushed the lead up to three followed by a free throw to go into the second quarter up 16-14.
In the opening two minutes of the second quarter, both teams went scoreless until YHC's Pamela Diokpara tied the game at 16 with 8:06 left in the half. Kris Beckham hit a three pointer to push the lead up by three, 23-20, midway through the second quarter before the Mountain Lions called a timeout to regroup themselves. Coming out the timeout, YHC went on a 7-4 run to tie the game going into halftime at 27.
Back-to-back threes by Morgan Towells and Lele Young opened up the second half for the Lady Canes as they were looking to establish and maintain the lead. Midway through the quarter, Chatman dropped another one from deep and Young managed to drop one in also with 17 seconds remaining in the quarter. The Lady Canes shot 50 percent from deep in the third quarter alone.
Four seconds into the final quarter, Perry dropped one in from deep which started an amazing 25-point fourth quarter for the Lady Canes who eventually went up by 17 points, 70-53, after a Towells three. The game was out of reach for the Mountain Lions as GSW got their third Peach Belt win of the season.
Both teams had similar field goal percentages to end the day - GSW finished shooting 39.7 percent while YHC finished shooting 39 percent. The Lady Canes dropped 9-of-24 (37.5 percent) from deep and went 11-of-16 from the line, finishing 78.6 percent. Of the 25 forced turnovers, they turned around to score 23 points off turnovers but YHC led the way with a 42-26 rebound advantage over the Lady Canes.
Who Stood Out: Towells led the way again with 13 points and two steals followed by Young (11 points and four rebounds) and Chatman, who led the team with three three-pointers for 10 bench points and five rebounds.
YHC's (3-11, 1-7 PBC) Diokpara led the Mountain Lions with a double-double, dropping 15 points while grabbing down 12 rebounds.
Up Next: GSW (6-6, 3-3 PBC) makes a short visit up the road to Columbus where they will play Wednesday, Jan. 16 for 5:30 p.m. tipoff time.


Dss means 'Door Step Serve' is a online market place company of united states which they provide the local services by online booking in home appliances.In united states most of people find out the service for home appliances like ac repair,roof cleaning,snow removal,carpet cleaning or many more services provide by the door step serve.Our service are available for you help at any time,you can get the services by dialling the doorstep serve phone number,or registerd your number for any enquiry.
The door step serve is give you the fast service.
They have good or well professional staffs for help.
For more information or know about the services,you can visit the our site.We have mention the all information of services.You can get here solution of your query's.


text:
La delegació o mutamadiyya de Jendouba Sud () és una delegació de Tunísia, a la governació de Jendouba, amb capçalera a la ciutat de Jendouba. Les principals viles són El Mnasrya i Aïn el Krima. La delegació, formada pels territoris al sud-oest i sud-est de la ciutat, tenia una població de 66.200 habitants segons el cens del 2004.

Administració
La delegació o mutamadiyya, amb codi geogràfic 22 51 (ISO 3166-2:TN-12), està dividida en dotze sectors o imades:

 Ezzeghaida (22 51 51)
 Jendouba Sud (22 51 52)
 En-Nour (22 51 53)
 Es-Sâada (22 51 54)
 El Malga (22 51 55)
 Ettataouer (22 51 56)
 Souk Es-Sebt (22 51 57)
 El Aitha (22 51 58)
 Aïn Karima (22 51 59)
 Mâalla (22 51 60)
 El-Jerif (22 51 61)
 El Azima (22 51 62)

Al mateix temps, forma part de la municipalitat o baladiyya de Jendouba (22 11).

Referències

Governació de Jendouba

redpajama_set_name: RedPajamaWikipedia


text:
New Museum for Western Australia now complete
Stephanie Stefanovic
A new museum has been built in Perth, designed by global architects Hassell and OMA.
The New Museum for Western Australia sits in the heart of Perth's cultural precinct, designed to evoke a 'collection of stories' and engage with Western Australia. It is described by the architects as a 'holistic' building, including refurbished heritage buildings and new structures.
"We wanted it to be a civic place for everyone; an interesting mix of heritage and contemporary architecture, that contributes to the revitalisation of Perth's cultural precinct whilst celebrating the culture of Western Australia on the world stage," says Hassell Principal Mark Loughnan.
"We are pleased to have created a dynamic dialogue between the old and new fabric, which has set a new benchmark in heritage activation, one that reflects the rich Aboriginal heritage of our State in the new contemporary landscape," adds Hassell design director and principal Peter Dean.
The refurbished heritage buildings and new structures will house exhibitions, event spaces and public areas.
One key feature is the museum's two intersecting connection loops—one vertical and one horizontal—which connect and organise the museum's content, including a world-renowned meteorite collection and iconic blue whale skeleton.
"Western Australia's natural resources, culture and history are diverse. Instead of prescribing a singular interpretation of Western Australia, the loops enable visitors to engage with the Museum's collection in distinctive ways, and tell the manifold stories of the place," says OMA managing partner David Gianotten.
Another key feature of the museum's design is the 'City Room'. Sitting at the centre of the museum, this is a sheltered outdoor space framed by refurbished heritage buildings and a large cantilevered volume. The public space is intended to stimulate imagination and creativity and serve as a space to host activities ranging from large-scale community events to smaller gatherings.
Encouraging people to visit throughout the year, the museum will include not only exhibitions and public event space, but also a range of cultural programs and new retail and dining offerings.
Exhibitions are currently being installed in preparation for the museum's official opening in November 2020.
art museum culture hassle new museum for western australia oma

redpajama_set_name: RedPajamaCommonCrawl


I know, I know. I've already waxed hyperbolic about this book and recently even. It's easy to do. Who can question that this book Tyler Chadwick has edited is of enormous cultural significance? It's astonishing how many excellent poets he found and convinced to participate.
But here's the thing. Even though I saw most of the emails he received during his marathon efforts, even though I even read some of the poems before the collection was compiled (but not many; I didn't want to influence the editorial decisions unduly), even though the whole book was my idea, I had no idea how good the final product would be.
I have on my nightstand now a galley proof of Fire in the Pasture and I get lost in it every night. Hundreds and hundreds of pages of stellar poems from dozens of poets. I don't know if I've ever been so enraptured with a poetry collection before — it's not something that happens to me much.
But this collection is not just important. This collection is good to read.
I wish there were a way to show you. Soon we'll have a free sample for you to download, but I just don't know how it can compare the with overwhelming pleasures of holding this massive paper tome filled with the best Mormon poetry of the last decade.
I want to apologize for this self-promotional post, but I can't. I don't feel bad at all. Believe me when I say you need this book.
Who says blogging doesn't lead to more formal work?
Tyler beat me to the punch, but I'd like to note that the Summer 2009 issue of Dialogue features fiction by AMVers S.P. Bailey and Theric Jepson and a review by Tyler Chadwick. This comes on the heels of the Spring 2009 issue, which features a review by P.G. Karamesines, and will be followed by a little something by me in the Fall 2009 issue.
Add in work by Tyler and me in the Fall 2007/Spring 2008 Irreantum and a fantastic essay by Eric Thompson in the Spring 2007 Irreantum, and the past year has been fairly fruitful for AMV's bloggers. And there may be more that I have forgotten (pipe up in the comments). Oh, yeah, Theric presented at Sunstone — a paper that was jumpstarted by Tyler and Laura's Reading Until Dawn project.
This is not to mention that three current or former Times & Seasons bloggers are represented in the Summer 2009 issue of Dialogue, plus Dallas Robbins and Juvenile Instructor's Heidi Harris. I think it's becoming more and more clear that for many of the new(ish) voices in Mormon Studies blogging is not the end itself, but rather a way to develop ideas, connections and communities. And today's best Mormon Studies scholars may just need to be fluent in a wide variety of genres/platforms of expressing their thinking.
Author WmPosted on 05/28/2009 Categories Literary PublicationsTags Dialogue, mormon arts, P.G. Karamesines, S.P. Bailey, Theric Jepson, Tyler Chadwick30 Comments on Who says blogging doesn't lead to more formal work?


getreading has teamed up with Royals sponsor Carabao to give five lucky readers the chance to win a pair of tickets to see Reading FC take on Wolves this weekend.
The Championship match takes place at Madejski Stadium on Saturday, November 18 at 3pm.
It's set to be an entertaining affair between two in-form teams despite their league positions.
Royals have scored seven goals in their past two games and won three of their past five matches but are 18th in the table.
Wolves, however, lead the division after winning 11 games so far and are the league's top scorers with 29 goals to their name.
Who is the manager of Wolves?
Email your name and answer to jonathan.low@trinitymirror.com by 9am Thursday with 'Wolves tickets' in the subject line.
In the second year of their partnership with Royals, Thai energy drink Carabao is the principle partner of the club – featuring on the home and away kit during the 2017/18 season.


After a cold winter, Easter and any signs of spring which are associated with it are much more welcomed. And with Easter fast approaching you might want to add a festive touch to your house for the holiday. These easy Easter decoration ideas can add a sweet touch to any home. You shouldn't spend a lot of money, as these ideas are really budget-friendly. Let your little ones help you with them. They can suggest a few unique Easter decoration ideas as well.
If you have trees outside your home, decorate them with eggs. Tie decorative ribbons around plastic eggs and hang them from the tree branches. Ask your kids to help you decorate your trees. Most children enjoy decorating Christmas trees, so they will be happy to decorate Easter egg tree too. This year I'm going to decorate my trees with plastic Easter eggs, and you?
Make your own Easter egg tree and display eggs on it inside your house. Take some tree branches from outside, clip them and insert into floral foam. Tie decorative ribbons around plastic eggs and hang them from the branches. Place the tree anywhere that you think is appropriate.
Make egg garland and string it throughout your home. Cut out egg shapes out of colored construction paper. If you want, you can embellish them with glitter or markers. Make small holes on each side of the eggs. Now string the eggs onto a length of ribbon. You can display the egg garland over doorways in order to add a festive touch to your house.
This Easter decoration idea will surely give the guests a warm welcome into the house. Make an Easter egg wreath and hang it on your front door. You can also buy a read-made egg wreath if you can't make it yourself. If you decide to make your own Easter egg wreath, then purchase some plastic Easter eggs and a straw wreath form. Using a hot glue gun, attach the Easter eggs to the wreath and you will have a beautiful wreath in a matter of an hour.
Another easy and budget-friendly Easter decoration idea is candy and flower centerpiece. Start with filling up a glass vase with colored candies and then set a beautiful bouquet of spring flowers, such as daffodils, tulips or lilies, into the vase. Such centerpiece will definitely add a spring touch to your Easter table.
Easter table is not complete without egg centerpiece. So grab a clear vase and fill it with a variety of colorful plastic Easter eggs. You can make some paper Easter eggs to save money on plastic ones. I usually add some Easter grass between the eggs, you can try it too.
Easter mini basket is a great and cheap idea for your table. Just wrap a thin, colorful ribbon around a small basket, use a small dab of hot glue to secure and glue on a tiny pearl bead. You can fill your mini basket with jelly beans or small eggs in colors which coordinate with your table.
Small flower arrangements inside eggshells will make any Easter table bloom. Start with breaking an egg at the top of its shell, then drain the contents, rinse out the inside, fill it with water and place it in an eggcup. Put your favorite flowers into eggshell and enjoy the beauty.
It's spring and flowers should be a central focus of Easter! Add festive touch to your house for the holiday by bringing in plenty of flowers. Lilies, daffodils and tulips are quite lovely flowers that are associated with the holiday. Place your flowers around your house to make it smell better.
Easter is the perfect time to spend some quality time with your family. Whether you want to make your own decorations or you simply need to decorate your house for the holiday, don't do it alone. Ask your partner, child or friends to help you. You will have lots of fun together! Which of these easy and budget-friendly Easter decoration ideas do you want to try? Do you have any other ideas? Share them with us, please.


text:
package main

import (
	"bytes"
	"crypto/md5"
	"database/sql"
	"encoding/base64"
	"encoding/binary"
	"encoding/json"
	"flag"
	"fmt"
	htemplate "html/template"
	"image"
	_ "image/gif"
	_ "image/jpeg"
	"image/png"
	"io/ioutil"
	"log"
	"math/rand"
	"net"
	"net/http"
	"os"
	"os/exec"
	"path/filepath"
	"regexp"
	"strings"
	"text/template"
	"time"
)

import (
	"github.com/fiorix/go-web/autogzip"
	_ "github.com/go-sql-driver/mysql"
	_ "github.com/mattn/go-sqlite3"
	"github.com/rcrowley/go-metrics"
)

const (
	RESULT_COMPILE = `../../experimental/webtry/safec++ -DSK_GAMMA_SRGB -DSK_GAMMA_APPLY_TO_A8 -DSK_SCALAR_TO_FLOAT_EXCLUDED -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 -DSK_SUPPORT_GPU=0 -DSK_SUPPORT_OPENCL=0 -DSK_FORCE_DISTANCEFIELD_FONTS=0 -DSK_SCALAR_IS_FLOAT -DSK_CAN_USE_FLOAT -DSK_SAMPLES_FOR_X -DSK_BUILD_FOR_UNIX -DSK_USE_POSIX_THREADS -DSK_SYSTEM_ZLIB=1 -DSK_DEBUG -DSK_DEVELOPER=1 -I../../src/core -I../../src/images -I../../tools/flags -I../../include/config -I../../include/core -I../../include/pathops -I../../include/pipe -I../../include/effects -I../../include/ports -I../../src/sfnt -I../../include/utils -I../../src/utils -I../../include/images -g -fno-exceptions -fstrict-aliasing -Wall -Wextra -Winit-self -Wpointer-arith -Wno-unused-parameter -m64 -fno-rtti -Wnon-virtual-dtor -c ../../../cache/%s.cpp -o ../../../cache/%s.o`
	LINK           = `../../experimental/webtry/safec++ -m64 -lstdc++ -lm -o ../../../inout/%s -Wl,--start-group ../../../cache/%s.o obj/experimental/webtry/webtry.main.o obj/gyp/libflags.a libskia_images.a libskia_core.a libskia_effects.a obj/gyp/libjpeg.a obj/gyp/libetc1.a obj/gyp/libSkKTX.a obj/gyp/libwebp_dec.a obj/gyp/libwebp_demux.a obj/gyp/libwebp_dsp.a obj/gyp/libwebp_enc.a obj/gyp/libwebp_utils.a libskia_utils.a libskia_opts.a libskia_opts_ssse3.a libskia_ports.a libskia_sfnt.a -Wl,--end-group -lpng -lz -lgif -lpthread -lfontconfig -ldl -lfreetype`

	DEFAULT_SAMPLE = `void draw(SkCanvas* canvas) {
    SkPaint p;
    p.setColor(SK_ColorRED);
    p.setAntiAlias(true);
    p.setStyle(SkPaint::kStroke_Style);
    p.setStrokeWidth(10);

    canvas->drawLine(20, 20, 100, 100, p);
}`
	// Don't increase above 2^16 w/o altering the db tables to accept something bigger than TEXT.
	MAX_TRY_SIZE = 64000
)

var (
	// codeTemplate is the cpp code template the user's code is copied into.
	codeTemplate *template.Template = nil

	// indexTemplate is the main index.html page we serve.
	indexTemplate *htemplate.Template = nil

	// iframeTemplate is the main index.html page we serve.
	iframeTemplate *htemplate.Template = nil

	// recentTemplate is a list of recent images.
	recentTemplate *htemplate.Template = nil

	// workspaceTemplate is the page for workspaces, a series of webtrys.
	workspaceTemplate *htemplate.Template = nil

	// db is the database, nil if we don't have an SQL database to store data into.
	db *sql.DB = nil

	// directLink is the regex that matches URLs paths that are direct links.
	directLink = regexp.MustCompile("^/c/([a-f0-9]+)$")

	// iframeLink is the regex that matches URLs paths that are links to iframes.
	iframeLink = regexp.MustCompile("^/iframe/([a-f0-9]+)$")

	// imageLink is the regex that matches URLs paths that are direct links to PNGs.
	imageLink = regexp.MustCompile("^/i/([a-z0-9-]+.png)$")

	// tryInfoLink is the regex that matches URLs paths that are direct links to data about a single try.
	tryInfoLink = regexp.MustCompile("^/json/([a-f0-9]+)$")

	// workspaceLink is the regex that matches URLs paths for workspaces.
	workspaceLink = regexp.MustCompile("^/w/([a-z0-9-]+)$")

	// workspaceNameAdj is a list of adjectives for building workspace names.
	workspaceNameAdj = []string{
		"autumn", "hidden", "bitter", "misty", "silent", "empty", "dry", "dark",
		"summer", "icy", "delicate", "quiet", "white", "cool", "spring", "winter",
		"patient", "twilight", "dawn", "crimson", "wispy", "weathered", "blue",
		"billowing", "broken", "cold", "damp", "falling", "frosty", "green",
		"long", "late", "lingering", "bold", "little", "morning", "muddy", "old",
		"red", "rough", "still", "small", "sparkling", "throbbing", "shy",
		"wandering", "withered", "wild", "black", "young", "holy", "solitary",
		"fragrant", "aged", "snowy", "proud", "floral", "restless", "divine",
		"polished", "ancient", "purple", "lively", "nameless",
	}

	// workspaceNameNoun is a list of nouns for building workspace names.
	workspaceNameNoun = []string{
		"waterfall", "river", "breeze", "moon", "rain", "wind", "sea", "morning",
		"snow", "lake", "sunset", "pine", "shadow", "leaf", "dawn", "glitter",
		"forest", "hill", "cloud", "meadow", "sun", "glade", "bird", "brook",
		"butterfly", "bush", "dew", "dust", "field", "fire", "flower", "firefly",
		"feather", "grass", "haze", "mountain", "night", "pond", "darkness",
		"snowflake", "silence", "sound", "sky", "shape", "surf", "thunder",
		"violet", "water", "wildflower", "wave", "water", "resonance", "sun",
		"wood", "dream", "cherry", "tree", "fog", "frost", "voice", "paper",
		"frog", "smoke", "star",
	}

	gitHash = ""
	gitInfo = ""

	requestsCounter = metrics.NewRegisteredCounter("requests", metrics.DefaultRegistry)
)

// flags
var (
	useChroot = flag.Bool("use_chroot", false, "Run the compiled code in the schroot jail.")
	port      = flag.String("port", ":8000", "HTTP service address (e.g., ':8000')")
)

// lineNumbers adds #line numbering to the user's code.
func LineNumbers(c string) string {
	lines := strings.Split(c, "\n")
	ret := []string{}
	for i, line := range lines {
		ret = append(ret, fmt.Sprintf("#line %d", i+1))
		ret = append(ret, line)
	}
	return strings.Join(ret, "\n")
}

func init() {
	rand.Seed(time.Now().UnixNano())

	// Change the current working directory to the directory of the executable.
	var err error
	cwd, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		log.Fatal(err)
	}
	os.Chdir(cwd)

	codeTemplate, err = template.ParseFiles(filepath.Join(cwd, "templates/template.cpp"))
	if err != nil {
		panic(err)
	}
	indexTemplate, err = htemplate.ParseFiles(
		filepath.Join(cwd, "templates/index.html"),
		filepath.Join(cwd, "templates/titlebar.html"),
		filepath.Join(cwd, "templates/content.html"),
		filepath.Join(cwd, "templates/headercommon.html"),
		filepath.Join(cwd, "templates/footercommon.html"),
	)
	if err != nil {
		panic(err)
	}
	iframeTemplate, err = htemplate.ParseFiles(
		filepath.Join(cwd, "templates/iframe.html"),
		filepath.Join(cwd, "templates/content.html"),
		filepath.Join(cwd, "templates/headercommon.html"),
		filepath.Join(cwd, "templates/footercommon.html"),
	)
	if err != nil {
		panic(err)
	}
	recentTemplate, err = htemplate.ParseFiles(
		filepath.Join(cwd, "templates/recent.html"),
		filepath.Join(cwd, "templates/titlebar.html"),
		filepath.Join(cwd, "templates/headercommon.html"),
		filepath.Join(cwd, "templates/footercommon.html"),
	)
	if err != nil {
		panic(err)
	}
	workspaceTemplate, err = htemplate.ParseFiles(
		filepath.Join(cwd, "templates/workspace.html"),
		filepath.Join(cwd, "templates/titlebar.html"),
		filepath.Join(cwd, "templates/content.html"),
		filepath.Join(cwd, "templates/headercommon.html"),
		filepath.Join(cwd, "templates/footercommon.html"),
	)
	if err != nil {
		panic(err)
	}

	// The git command returns output of the format:
	//
	//   f672cead70404080a991ebfb86c38316a4589b23 2014-04-27 19:21:51 +0000
	//
	logOutput, err := doCmd(`git log --format=%H%x20%ai HEAD^..HEAD`, true)
	if err != nil {
		panic(err)
	}
	logInfo := strings.Split(logOutput, " ")
	gitHash = logInfo[0]
	gitInfo = logInfo[1] + " " + logInfo[2] + " " + logInfo[0][0:6]

	// Connect to MySQL server. First, get the password from the metadata server.
	// See https://developers.google.com/compute/docs/metadata#custom.
	req, err := http.NewRequest("GET", "http://metadata/computeMetadata/v1/instance/attributes/password", nil)
	if err != nil {
		panic(err)
	}
	client := http.Client{}
	req.Header.Add("X-Google-Metadata-Request", "True")
	if resp, err := client.Do(req); err == nil {
		password, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			log.Printf("ERROR: Failed to read password from metadata server: %q\n", err)
			panic(err)
		}
		// The IP address of the database is found here:
		//    https://console.developers.google.com/project/31977622648/sql/instances/webtry/overview
		// And 3306 is the default port for MySQL.
		db, err = sql.Open("mysql", fmt.Sprintf("webtry:%s@tcp(173.194.83.52:3306)/webtry?parseTime=true", password))
		if err != nil {
			log.Printf("ERROR: Failed to open connection to SQL server: %q\n", err)
			panic(err)
		}
	} else {
		log.Printf("INFO: Failed to find metadata, unable to connect to MySQL server (Expected when running locally): %q\n", err)
		// Fallback to sqlite for local use.
		db, err = sql.Open("sqlite3", "./webtry.db")
		if err != nil {
			log.Printf("ERROR: Failed to open: %q\n", err)
			panic(err)
		}
		sql := `CREATE TABLE source_images (
             id        INTEGER     PRIMARY KEY                NOT NULL,
             image     MEDIUMBLOB  DEFAULT ''                 NOT NULL, -- formatted as a PNG.
             width     INTEGER     DEFAULT 0                  NOT NULL,
             height    INTEGER     DEFAULT 0                  NOT NULL,
             create_ts TIMESTAMP   DEFAULT CURRENT_TIMESTAMP  NOT NULL,
             hidden    INTEGER     DEFAULT 0                  NOT NULL
             )`
		_, err = db.Exec(sql)
		log.Printf("Info: status creating sqlite table for sources: %q\n", err)

		sql = `CREATE TABLE webtry (
             code               TEXT      DEFAULT ''                 NOT NULL,
             create_ts          TIMESTAMP DEFAULT CURRENT_TIMESTAMP  NOT NULL,
             hash               CHAR(64)  DEFAULT ''                 NOT NULL,
             source_image_id    INTEGER   DEFAULT 0                  NOT NULL,

             PRIMARY KEY(hash)
            )`
		_, err = db.Exec(sql)
		log.Printf("Info: status creating sqlite table for webtry: %q\n", err)

		sql = `CREATE TABLE workspace (
          name      CHAR(64)  DEFAULT ''                 NOT NULL,
          create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP  NOT NULL,
          PRIMARY KEY(name)
        )`
		_, err = db.Exec(sql)
		log.Printf("Info: status creating sqlite table for workspace: %q\n", err)

		sql = `CREATE TABLE workspacetry (
          name               CHAR(64)  DEFAULT ''                 NOT NULL,
          create_ts          TIMESTAMP DEFAULT CURRENT_TIMESTAMP  NOT NULL,
          hash               CHAR(64)  DEFAULT ''                 NOT NULL,
          hidden             INTEGER   DEFAULT 0                  NOT NULL,
          source_image_id    INTEGER   DEFAULT 0                  NOT NULL,

          FOREIGN KEY (name)   REFERENCES workspace(name)
        )`
		_, err = db.Exec(sql)
		log.Printf("Info: status creating sqlite table for workspace try: %q\n", err)
	}

	// Ping the database to keep the connection fresh.
	go func() {
		c := time.Tick(1 * time.Minute)
		for _ = range c {
			if err := db.Ping(); err != nil {
				log.Printf("ERROR: Database failed to respond: %q\n", err)
			}
		}
	}()

	metrics.RegisterRuntimeMemStats(metrics.DefaultRegistry)
	go metrics.CaptureRuntimeMemStats(metrics.DefaultRegistry, 1*time.Minute)

	// Start reporting metrics.
	// TODO(jcgregorio) We need a centrialized config server for storing things
	// like the IP address of the Graphite monitor.
	addr, _ := net.ResolveTCPAddr("tcp", "skia-monitoring-b:2003")
	go metrics.Graphite(metrics.DefaultRegistry, 1*time.Minute, "webtry", addr)

	writeOutAllSourceImages()
}

func writeOutAllSourceImages() {
	// Pull all the source images from the db and write them out to inout.
	rows, err := db.Query("SELECT id, image, create_ts FROM source_images ORDER BY create_ts DESC")

	if err != nil {
		log.Printf("ERROR: Failed to open connection to SQL server: %q\n", err)
		panic(err)
	}
	for rows.Next() {
		var id int
		var image []byte
		var create_ts time.Time
		if err := rows.Scan(&id, &image, &create_ts); err != nil {
			log.Printf("Error: failed to fetch from database: %q", err)
			continue
		}
		filename := fmt.Sprintf("../../../inout/image-%d.png", id)
		if _, err := os.Stat(filename); os.IsExist(err) {
			log.Printf("Skipping write since file exists: %q", filename)
			continue
		}
		if err := ioutil.WriteFile(filename, image, 0666); err != nil {
			log.Printf("Error: failed to write image file: %q", err)
		}
	}
}

// Titlebar is used in titlebar template expansion.
type Titlebar struct {
	GitHash string
	GitInfo string
}

// userCode is used in template expansion.
type userCode struct {
	Code     string
	Hash     string
	Source   int
	Titlebar Titlebar
}

// expandToFile expands the template and writes the result to the file.
func expandToFile(filename string, code string, t *template.Template) error {
	f, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer f.Close()
	return t.Execute(f, userCode{Code: code, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}})
}

// expandCode expands the template into a file and calculates the MD5 hash.
func expandCode(code string, source int) (string, error) {
	h := md5.New()
	h.Write([]byte(code))
	binary.Write(h, binary.LittleEndian, int64(source))
	hash := fmt.Sprintf("%x", h.Sum(nil))
	// At this point we are running in skia/experimental/webtry, making cache a
	// peer directory to skia.
	// TODO(jcgregorio) Make all relative directories into flags.
	err := expandToFile(fmt.Sprintf("../../../cache/%s.cpp", hash), code, codeTemplate)
	return hash, err
}

// response is serialized to JSON as a response to POSTs.
type response struct {
	Message string `json:"message"`
	StdOut  string `json:"stdout"`
	Img     string `json:"img"`
	Hash    string `json:"hash"`
}

// doCmd executes the given command line string in either the out/Debug
// directory or the inout directory. Returns the stdout and stderr.
func doCmd(commandLine string, moveToDebug bool) (string, error) {
	log.Printf("Command: %q\n", commandLine)
	programAndArgs := strings.SplitN(commandLine, " ", 2)
	program := programAndArgs[0]
	args := []string{}
	if len(programAndArgs) > 1 {
		args = strings.Split(programAndArgs[1], " ")
	}
	cmd := exec.Command(program, args...)
	abs, err := filepath.Abs("../../out/Debug")
	if err != nil {
		return "", fmt.Errorf("Failed to find absolute path to Debug directory.")
	}
	if moveToDebug {
		cmd.Dir = abs
	} else if !*useChroot { // Don't set cmd.Dir when using chroot.
		abs, err := filepath.Abs("../../../inout")
		if err != nil {
			return "", fmt.Errorf("Failed to find absolute path to inout directory.")
		}
		cmd.Dir = abs
	}
	log.Printf("Run in directory: %q\n", cmd.Dir)
	message, err := cmd.CombinedOutput()
	log.Printf("StdOut + StdErr: %s\n", string(message))
	if err != nil {
		log.Printf("Exit status: %s\n", err.Error())
		return string(message), fmt.Errorf("Failed to run command.")
	}
	return string(message), nil
}

// reportError formats an HTTP error response and also logs the detailed error message.
func reportError(w http.ResponseWriter, r *http.Request, err error, message string) {
	log.Printf("Error: %s\n%s", message, err.Error())
	w.Header().Set("Content-Type", "text/plain")
	http.Error(w, message, 500)
}

// reportTryError formats an HTTP error response in JSON and also logs the detailed error message.
func reportTryError(w http.ResponseWriter, r *http.Request, err error, message, hash string) {
	m := response{
		Message: message,
		Hash:    hash,
	}
	log.Printf("Error: %s\n%s", message, err.Error())
	resp, err := json.Marshal(m)
	if err != nil {
		http.Error(w, "Failed to serialize a response", 500)
		return
	}
	w.Header().Set("Content-Type", "text/plain")
	w.Write(resp)
}

func writeToDatabase(hash string, code string, workspaceName string, source int) {
	if db == nil {
		return
	}
	if _, err := db.Exec("INSERT INTO webtry (code, hash, source_image_id) VALUES(?, ?, ?)", code, hash, source); err != nil {
		log.Printf("ERROR: Failed to insert code into database: %q\n", err)
	}
	if workspaceName != "" {
		if _, err := db.Exec("INSERT INTO workspacetry (name, hash, source_image_id) VALUES(?, ?, ?)", workspaceName, hash, source); err != nil {
			log.Printf("ERROR: Failed to insert into workspacetry table: %q\n", err)
		}
	}
}

type Sources struct {
	Id int `json:"id"`
}

// sourcesHandler serves up the PNG of a specific try.
func sourcesHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("Sources Handler: %q\n", r.URL.Path)
	if r.Method == "GET" {
		rows, err := db.Query("SELECT id, create_ts FROM source_images WHERE hidden=0 ORDER BY create_ts DESC")

		if err != nil {
			http.Error(w, fmt.Sprintf("Failed to query sources: %s.", err), 500)
		}
		sources := make([]Sources, 0, 0)
		for rows.Next() {
			var id int
			var create_ts time.Time
			if err := rows.Scan(&id, &create_ts); err != nil {
				log.Printf("Error: failed to fetch from database: %q", err)
				continue
			}
			sources = append(sources, Sources{Id: id})
		}

		resp, err := json.Marshal(sources)
		if err != nil {
			reportError(w, r, err, "Failed to serialize a response.")
			return
		}
		w.Header().Set("Content-Type", "application/json")
		w.Write(resp)

	} else if r.Method == "POST" {
		if err := r.ParseMultipartForm(1000000); err != nil {
			http.Error(w, fmt.Sprintf("Failed to load image: %s.", err), 500)
			return
		}
		if _, ok := r.MultipartForm.File["upload"]; !ok {
			http.Error(w, "Invalid upload.", 500)
			return
		}
		if len(r.MultipartForm.File["upload"]) != 1 {
			http.Error(w, "Wrong number of uploads.", 500)
			return
		}
		f, err := r.MultipartForm.File["upload"][0].Open()
		if err != nil {
			http.Error(w, fmt.Sprintf("Failed to load image: %s.", err), 500)
			return
		}
		defer f.Close()
		m, _, err := image.Decode(f)
		if err != nil {
			http.Error(w, fmt.Sprintf("Failed to decode image: %s.", err), 500)
			return
		}
		var b bytes.Buffer
		png.Encode(&b, m)
		bounds := m.Bounds()
		width := bounds.Max.Y - bounds.Min.Y
		height := bounds.Max.X - bounds.Min.X
		if _, err := db.Exec("INSERT INTO source_images (image, width, height) VALUES(?, ?, ?)", b.Bytes(), width, height); err != nil {
			log.Printf("ERROR: Failed to insert sources into database: %q\n", err)
			http.Error(w, fmt.Sprintf("Failed to store image: %s.", err), 500)
			return
		}
		go writeOutAllSourceImages()

		// Now redirect back to where we came from.
		http.Redirect(w, r, r.Referer(), 302)
	} else {
		http.NotFound(w, r)
		return
	}
}

// imageHandler serves up the PNG of a specific try.
func imageHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("Image Handler: %q\n", r.URL.Path)
	if r.Method != "GET" {
		http.NotFound(w, r)
		return
	}
	match := imageLink.FindStringSubmatch(r.URL.Path)
	if len(match) != 2 {
		http.NotFound(w, r)
		return
	}
	filename := match[1]
	w.Header().Set("Content-Type", "image/png")
	http.ServeFile(w, r, fmt.Sprintf("../../../inout/%s", filename))
}

type Try struct {
	Hash     string `json:"hash"`
	Source   int
	CreateTS string `json:"create_ts"`
}

type Recent struct {
	Tries    []Try
	Titlebar Titlebar
}

// recentHandler shows the last 20 tries.
func recentHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("Recent Handler: %q\n", r.URL.Path)

	var err error
	rows, err := db.Query("SELECT create_ts, hash FROM webtry ORDER BY create_ts DESC LIMIT 20")
	if err != nil {
		http.NotFound(w, r)
		return
	}
	recent := []Try{}
	for rows.Next() {
		var hash string
		var create_ts time.Time
		if err := rows.Scan(&create_ts, &hash); err != nil {
			log.Printf("Error: failed to fetch from database: %q", err)
			continue
		}
		recent = append(recent, Try{Hash: hash, CreateTS: create_ts.Format("2006-02-01")})
	}
	w.Header().Set("Content-Type", "text/html")
	if err := recentTemplate.Execute(w, Recent{Tries: recent, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
		log.Printf("ERROR: Failed to expand template: %q\n", err)
	}
}

type Workspace struct {
	Name     string
	Code     string
	Hash     string
	Source   int
	Tries    []Try
	Titlebar Titlebar
}

// newWorkspace generates a new random workspace name and stores it in the database.
func newWorkspace() (string, error) {
	for i := 0; i < 10; i++ {
		adj := workspaceNameAdj[rand.Intn(len(workspaceNameAdj))]
		noun := workspaceNameNoun[rand.Intn(len(workspaceNameNoun))]
		suffix := rand.Intn(1000)
		name := fmt.Sprintf("%s-%s-%d", adj, noun, suffix)
		if _, err := db.Exec("INSERT INTO workspace (name) VALUES(?)", name); err == nil {
			return name, nil
		} else {
			log.Printf("ERROR: Failed to insert workspace into database: %q\n", err)
		}
	}
	return "", fmt.Errorf("Failed to create a new workspace")
}

// getCode returns the code for a given hash, or the empty string if not found.
func getCode(hash string) (string, int, error) {
	code := ""
	source := 0
	if err := db.QueryRow("SELECT code, source_image_id FROM webtry WHERE hash=?", hash).Scan(&code, &source); err != nil {
		log.Printf("ERROR: Code for hash is missing: %q\n", err)
		return code, source, err
	}
	return code, source, nil
}

func workspaceHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("Workspace Handler: %q\n", r.URL.Path)
	if r.Method == "GET" {
		tries := []Try{}
		match := workspaceLink.FindStringSubmatch(r.URL.Path)
		name := ""
		if len(match) == 2 {
			name = match[1]
			rows, err := db.Query("SELECT create_ts, hash, source_image_id FROM workspacetry WHERE name=? ORDER BY create_ts", name)
			if err != nil {
				reportError(w, r, err, "Failed to select.")
				return
			}
			for rows.Next() {
				var hash string
				var create_ts time.Time
				var source int
				if err := rows.Scan(&create_ts, &hash, &source); err != nil {
					log.Printf("Error: failed to fetch from database: %q", err)
					continue
				}
				tries = append(tries, Try{Hash: hash, Source: source, CreateTS: create_ts.Format("2006-02-01")})
			}
		}
		var code string
		var hash string
		source := 0
		if len(tries) == 0 {
			code = DEFAULT_SAMPLE
		} else {
			hash = tries[len(tries)-1].Hash
			code, source, _ = getCode(hash)
		}
		w.Header().Set("Content-Type", "text/html")
		if err := workspaceTemplate.Execute(w, Workspace{Tries: tries, Code: code, Name: name, Hash: hash, Source: source, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
			log.Printf("ERROR: Failed to expand template: %q\n", err)
		}
	} else if r.Method == "POST" {
		name, err := newWorkspace()
		if err != nil {
			http.Error(w, "Failed to create a new workspace.", 500)
			return
		}
		http.Redirect(w, r, "/w/"+name, 302)
	}
}

// hasPreProcessor returns true if any line in the code begins with a # char.
func hasPreProcessor(code string) bool {
	lines := strings.Split(code, "\n")
	for _, s := range lines {
		if strings.HasPrefix(strings.TrimSpace(s), "#") {
			return true
		}
	}
	return false
}

type TryRequest struct {
	Code   string `json:"code"`
	Name   string `json:"name"`   // Optional name of the workspace the code is in.
	Source int    `json:"source"` // ID of the source image, 0 if none.
}

// iframeHandler handles the GET and POST of the main page.
func iframeHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("IFrame Handler: %q\n", r.URL.Path)
	if r.Method != "GET" {
		http.NotFound(w, r)
		return
	}
	match := iframeLink.FindStringSubmatch(r.URL.Path)
	if len(match) != 2 {
		http.NotFound(w, r)
		return
	}
	hash := match[1]
	if db == nil {
		http.NotFound(w, r)
		return
	}
	var code string
	code, source, err := getCode(hash)
	if err != nil {
		http.NotFound(w, r)
		return
	}
	// Expand the template.
	w.Header().Set("Content-Type", "text/html")
	if err := iframeTemplate.Execute(w, userCode{Code: code, Hash: hash, Source: source}); err != nil {
		log.Printf("ERROR: Failed to expand template: %q\n", err)
	}
}

type TryInfo struct {
	Hash   string `json:"hash"`
	Code   string `json:"code"`
	Source int    `json:"source"`
}

// tryInfoHandler returns information about a specific try.
func tryInfoHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("Try Info Handler: %q\n", r.URL.Path)
	if r.Method != "GET" {
		http.NotFound(w, r)
		return
	}
	match := tryInfoLink.FindStringSubmatch(r.URL.Path)
	if len(match) != 2 {
		http.NotFound(w, r)
		return
	}
	hash := match[1]
	code, source, err := getCode(hash)
	if err != nil {
		http.NotFound(w, r)
		return
	}
	m := TryInfo{
		Hash:   hash,
		Code:   code,
		Source: source,
	}
	resp, err := json.Marshal(m)
	if err != nil {
		reportError(w, r, err, "Failed to serialize a response.")
		return
	}
	w.Header().Set("Content-Type", "application/json")
	w.Write(resp)
}

func cleanCompileOutput(s, hash string) string {
	old := "../../../cache/" + hash + ".cpp:"
	log.Printf("INFO: replacing %q\n", old)
	return strings.Replace(s, old, "usercode.cpp:", -1)
}

// mainHandler handles the GET and POST of the main page.
func mainHandler(w http.ResponseWriter, r *http.Request) {
	log.Printf("Main Handler: %q\n", r.URL.Path)
	requestsCounter.Inc(1)
	if r.Method == "GET" {
		code := DEFAULT_SAMPLE
		source := 0
		match := directLink.FindStringSubmatch(r.URL.Path)
		var hash string
		if len(match) == 2 && r.URL.Path != "/" {
			hash = match[1]
			if db == nil {
				http.NotFound(w, r)
				return
			}
			// Update 'code' with the code found in the database.
			if err := db.QueryRow("SELECT code, source_image_id FROM webtry WHERE hash=?", hash).Scan(&code, &source); err != nil {
				http.NotFound(w, r)
				return
			}
		}
		// Expand the template.
		w.Header().Set("Content-Type", "text/html")
		if err := indexTemplate.Execute(w, userCode{Code: code, Hash: hash, Source: source, Titlebar: Titlebar{GitHash: gitHash, GitInfo: gitInfo}}); err != nil {
			log.Printf("ERROR: Failed to expand template: %q\n", err)
		}
	} else if r.Method == "POST" {
		w.Header().Set("Content-Type", "application/json")
		buf := bytes.NewBuffer(make([]byte, 0, MAX_TRY_SIZE))
		n, err := buf.ReadFrom(r.Body)
		if err != nil {
			reportTryError(w, r, err, "Failed to read a request body.", "")
			return
		}
		if n == MAX_TRY_SIZE {
			err := fmt.Errorf("Code length equal to, or exceeded, %d", MAX_TRY_SIZE)
			reportTryError(w, r, err, "Code too large.", "")
			return
		}
		request := TryRequest{}
		if err := json.Unmarshal(buf.Bytes(), &request); err != nil {
			reportTryError(w, r, err, "Coulnd't decode JSON.", "")
			return
		}
		if hasPreProcessor(request.Code) {
			err := fmt.Errorf("Found preprocessor macro in code.")
			reportTryError(w, r, err, "Preprocessor macros aren't allowed.", "")
			return
		}
		hash, err := expandCode(LineNumbers(request.Code), request.Source)
		if err != nil {
			reportTryError(w, r, err, "Failed to write the code to compile.", hash)
			return
		}
		writeToDatabase(hash, request.Code, request.Name, request.Source)
		message, err := doCmd(fmt.Sprintf(RESULT_COMPILE, hash, hash), true)
		if err != nil {
			message = cleanCompileOutput(message, hash)
			reportTryError(w, r, err, message, hash)
			return
		}
		linkMessage, err := doCmd(fmt.Sprintf(LINK, hash, hash), true)
		if err != nil {
			linkMessage = cleanCompileOutput(linkMessage, hash)
			reportTryError(w, r, err, linkMessage, hash)
			return
		}
		message += linkMessage
		cmd := hash + " --out " + hash + ".png"
		if request.Source > 0 {
			cmd += fmt.Sprintf("  --source image-%d.png", request.Source)
		}
		if *useChroot {
			cmd = "schroot -c webtry --directory=/inout -- /inout/" + cmd
		} else {
			abs, err := filepath.Abs("../../../inout")
			if err != nil {
				reportTryError(w, r, err, "Failed to find executable directory.", hash)
				return
			}
			cmd = abs + "/" + cmd
		}

		execMessage, err := doCmd(cmd, false)
		if err != nil {
			reportTryError(w, r, err, "Failed to run the code:\n"+execMessage, hash)
			return
		}
		png, err := ioutil.ReadFile("../../../inout/" + hash + ".png")
		if err != nil {
			reportTryError(w, r, err, "Failed to open the generated PNG.", hash)
			return
		}

		m := response{
			Message: message,
			StdOut:  execMessage,
			Img:     base64.StdEncoding.EncodeToString([]byte(png)),
			Hash:    hash,
		}
		resp, err := json.Marshal(m)
		if err != nil {
			reportTryError(w, r, err, "Failed to serialize a response.", hash)
			return
		}
		w.Header().Set("Content-Type", "application/json")
		w.Write(resp)
	}
}

func main() {
	flag.Parse()
	http.HandleFunc("/i/", autogzip.HandleFunc(imageHandler))
	http.HandleFunc("/w/", autogzip.HandleFunc(workspaceHandler))
	http.HandleFunc("/recent/", autogzip.HandleFunc(recentHandler))
	http.HandleFunc("/iframe/", autogzip.HandleFunc(iframeHandler))
	http.HandleFunc("/json/", autogzip.HandleFunc(tryInfoHandler))
	http.HandleFunc("/sources/", autogzip.HandleFunc(sourcesHandler))

	// Resources are served directly
	// TODO add support for caching/etags/gzip
	http.Handle("/res/", autogzip.Handle(http.FileServer(http.Dir("./"))))

	// TODO Break out /c/ as it's own handler.
	http.HandleFunc("/", autogzip.HandleFunc(mainHandler))
	log.Fatal(http.ListenAndServe(*port, nil))
}

redpajama_set_name: RedPajamaGithub


text:
COVID VACCINATION PROJECT
IMMUNISATION PROJECT
CONFLICT MANAGEMENT & PEACE EDUCATION
AKHOJ AGOLOI—A STEP AHEAD
ABOUT SATRA
OUR BRIEF HISTORY
CONTACT CHILDLINE
The birth of SATRA was in the year 2002.On 27th February 2002 Mrs. Jyoti Prava Bora invited few social activists from different parts of Assam her resi- dence where it was decided to form an organiza- tion with a view to work for greater interest of our society. Dr.Dinesh Baishya, former principal of B.Borooah College Guwahati is the man who named the organization as Social Action For Appropriate Transformation And Advancement in Rural Areas (SATRA). Mrs. Jyoti Prova Bora a young lady started SATRA with its head office at Sipajhar and acts as the founder chief functionary. Sri Nani Kr. Saikia guided the organization from the very inception.
SATRA was formed, with the motto PEOPLE FOR DEVELOPMENT, DEVELOPMENT FOR PEOPLE, by a group of Social activists of Assam in the year 2002. The activists who were from various parts of Assam province met at Sipajhar and decided to form an Organization with the view to work for the development of Society and the common people who were lagging behind in various fields from Economic to living standard. Retired Principal of B. Barooah College-Guwahati, Dr. Dinesh Baishya, named it as SATRA which abbreviates "Social Action for Appropriate Transformation and Advancement in Rural Areas". All the social activists unanimously accepted the name and in that meeting Mrs. Jyoti Prabha Bora was elected as Founder Chief Functionary. Later in the year 2003 she joined in a govt. job and in her place all the members elected Mr. Nani Kumar Saikia as Executive Director of SATRA WEF March of 2004. After taking over the charge of the chief functionary of SATRA, Nani Kumar Saikia decided to build up a group of young people as cadre of SATRA. He had identified a group of youngsters among which the notable were Biplab Saharia, Sanjib Sarma, Debeswar Medhi, Jagadish Nath later on Sachindra Sarma, Sumitra Barman, Moni Bora etc. Mr. Saikia guided and motivated them in the path of Social welfare and constructed shaped their attitude and responsibility towards the society. This spirited group of youth worked day and night for the establishment of SATRA with the utmost goal of People's development and their rights and basic needs. At that juncture SATRA was going through the construction period and as it had not fulfill the norms of not completing three years of service, SATRA did not found any donors for funds. The determined and the spirited group of volunteers had done several works sincerely and confidently which paved the path of SATRA for becoming an esteemed NGO of Darrang district. The reputation of being the esteemed NGO of Darrang district has helped SATRA to allow and attract the Donors of the Country as well from the outside of the country to provide the fund and become partner in the journey of development and eradicating social evils. SATRA first got the helping hand from RGVN (Rastriya Grameen Vikash Nidhi) and started its activity in the field of economic development for the Common people. SATRA started Micro Finance by borrowing money from RGVN. Initially the volunteer team did their work voluntarily for more than two years, which was later become the forte of the organization. During that period the volunteers group got the opportunity to accustom to the society and to the common people. In that process they also learnt what development is, what social work is all about etc. Moreover, they understood the need of dedication, sincerity and responsibility for the Organization which helped them to enhance their capability and work culture. Gradually, with the passing of time, SATRA started to receive grants, loans funds from various National and international organization. Thus the requirements of human resources arise in the organization and SATRA with under purview of Mr. Nani Kumar Saikia and his supporting staff continued to appoint the new and capable team members for SATRA. The core team of SATRA is now taking utmost responsibilities in the fields like Micro Finance Operation and Development project implementation. As of now there are 44 nos of staff members are there in SATRA working in various projects. A group of dignitaries are associated with SATRA for the management part. Dr. Prasanna Nath, Associate Professor of Sipajhar College, joined SATRA as Chairman in the year 2004. Since then he has been providing essential supports and necessary guidance to organization. Mr. Kamal Bhatta, Advocate of Gauhati High Court, Santanu Saikia, a renowned social activists based in Guwahati, Dr. Dinesh Baishys, retired Principal of B. Borooah College, Dr. Bazrul Islam, renown veterinarian, Mrs. Purnima Bora, Jyoti Prova Bora, Jyoti Kr. Nath, Dr. Arup Nath, Dr. Dhrubajyoti Saharia, Educationist, Samhita Baruah Faculty of Tata Institute of Social science etc. are associated with SATRA as Board members. They have been providing the guidance and supports to SATRA since their association with SATRA. Now SATRA is planning to expand its activities with the guidance from our well wishers, funding, and donor agencies, so that the maximum development takes place in working areas of the Organization. SATRA was formed, with the motto PEOPLE FOR DEVELOPMENT, DEVELOPMENT FOR PEOPLE, by a group of Social activists of Assam in the year 2002. The activists who were from various parts of Assam province met at Sipajhar and decided to form an Organization with the view to work for the development of Society and the common people who were lagging behind in various fields from Economic to living standard. Retired Principal of B. Barooah College-Guwahati, Dr. Dinesh Baishya, named it as SATRA which abbreviates "Social Action for Appropriate Transformation and Advancement in Rural Areas". All the social activists unanimously accepted the name and in that meeting Mrs. Jyoti Prabha Bora was elected as Founder Chief Functionary. Later in the year 2003 she joined in a govt. job and in her place all the members elected Mr. Nani Kumar Saikia as Executive Director of SATRA WEF March of 2004. After taking over the charge of the chief functionary of SATRA, Nani Kumar Saikia decided to build up a group of young people as cadre of SATRA. He had identified a group of youngsters among which the notable were Biplab Saharia, Sanjib Sarma, Debeswar Medhi, Jagadish Nath later on Sachindra Sarma, Sumitra Barman, Moni Bora etc. Mr. Saikia guided and motivated them in the path of Social welfare and constructed shaped their attitude and responsibility towards the society. This spirited group of youth worked day and night for the establishment of SATRA with the utmost goal of People's development and their rights and basic needs. At that juncture SATRA was going through the construction period and as it had not fulfill the norms of not completing three years of service, SATRA did not found any donors for funds. The determined and the spirited group of volunteers had done several works sincerely and confidently which paved the path of SATRA for becoming an esteemed NGO of Darrang district. The reputation of being the esteemed NGO of Darrang district has helped SATRA to allow and attract the Donors of the Country as well from the outside of the country to provide the fund and become partner in the journey of development and eradicating social evils. SATRA first got the helping hand from RGVN (Rastriya Grameen Vikash Nidhi) and started its activity in the field of economic development for the Common people. SATRA started Micro Finance by borrowing money from RGVN. Initially the volunteer team did their work voluntarily for more than two years, which was later become the forte of the organization. During that period the volunteers group got the opportunity to accustom to the society and to the common people. In that process they also learnt what development is, what social work is all about etc. Moreover, they understood the need of dedication, sincerity and responsibility for the Organization which helped them to enhance their capability and work culture. Gradually, with the passing of time, SATRA started to receive grants, loans funds from various National and international organization. Thus the requirements of human resources arise in the organization and SATRA with under purview of Mr. Nani Kumar Saikia and his supporting staff continued to appoint the new and capable team members for SATRA. The core team of SATRA is now taking utmost responsibilities in the fields like Micro Finance Operation and Development project implementation. As of now there are 44 nos of staff members are there in SATRA working in various projects. A group of dignitaries are associated with SATRA for the management part. Dr. Prasanna Nath, Associate Professor of Sipajhar College, joined SATRA as Chairman in the year 2004. Since then he has been providing essential supports and necessary guidance to organization. Mr. Kamal Bhatta, Advocate of Gauhati High Court, Santanu Saikia, a renowned social activists based in Guwahati, Dr. Dinesh Baishys, retired Principal of B. Borooah College, Dr. Bazrul Islam, renown veterinarian, Mrs. Purnima Bora, Jyoti Prova Bora, Jyoti Kr. Nath, Dr. Arup Nath, Dr. Dhrubajyoti Saharia, Educationist, Samhita Baruah Faculty of Tata Institute of Social science etc. are associated with SATRA as Board members. They have been providing the guidance and supports to SATRA since their association with SATRA. Now SATRA is planning to expand its activities with the guidance from our well wishers, funding, and donor agencies, so that the maximum development takes place in working areas of the Organization..
SOCIAL ACTION FOR APPROPRIATE TRANSFORMATION AND ADVANCEMENT IN RURAL AREAS
PEOPLE FOR DEVELOPMENT, DEVELOPMENT FOR PEOPLE
CREATED BY IT DEPARTMENT,SATRA


text:
Friday 1st The weather looked very threatening in the morning and in the afternoon it rained, but it cleared up in the evening. There was a progressive Euchre party in the evening in the Hall in aid of the funds of the Tennis Club. Jane & I went, on account of the weather very few were there. Jane & I got the prizes for lady and gentleman respectfully.
Saturday 2nd It was a fine day. Willie went to Ti Point fishing. There was a meeting of the Road Board in the afternoon.
Sunday 3rd It was nice & sunney in the morning, but dull in the afternoon. I read service in the Hall in the afternoon. Miss Hutchinson was here for tea.
Monday 4th It was a fine day. I pruned the Grape Vines near the fence and we planted Up to Date Potatoes, next the Magnum Bonum ditto – right up to the Grape Vines.
Tuesday 5th It was very dull and threatening the first thing in the morning, and soon after breakfast it came on to rain steadily. It held up a little after dinner and Willie and I went down to the village, I took the Eggs to the store and Willie went on board the Rose which was out in the stream. It rained again in the evening and nearly all night.
Wednesday 6th Jane got up early and went down to the wharf intending to go round in the Rose to Ti Point, but the Rose went round there last night so Jane came up here again and got Empress and rode over to Ti Point.
It was a tolerably fine day, there were several showers. Willie and I were pulling up tea tree in the front.
Charlie Gravatt came in the morning to register the birth of his child.
Thursday 7th There were several showers during the day. Willie and I were pulling up tea tree in the front. Jane returned from Ti Point & she and Willie went to a party at Harpers</a in the evening.
Friday 8th It was a very showery day. Willie and I were pulling up tea tree in the front between the showers. Willie went down for the mail in the evening.
Saturday 9th Coronation Day. There were several showers during the day. Willie rode to Ti Point to fish, but did not catch any. I was pulling up tea tree all day. George Wyatt & wife came for tea & to spend the evening.
Sunday 10th It rained nearly all morning, but was a little finer in the afternoon. But there was no service. Jane had a bad cold and staid in bed all day.
Monday 11th It was a fine day. Willie and I were pulling up tea tree and slashing fern in front. Minnie rode over in the morning and Joe came in the evening, the latter was fishing with D. Knaggs off the Goat Island, and they left their boat round there, he brought us some fish.
Tuesday 12th It was a fine day. Willie took the Eggs down to the Store in the morning. Minnie went home in the morning. We were pulling up tea tree etc in the front. Went down to the wharf to see the Steamer in the afternoon.
Wednesday 13th It was a fine day. We were pulling up tea tree in the front. Jane went to Big Omaha in the evening to a Euchie Party.
Thursday 14th It was a fine day, but the wind is blowing from the NE and a sea is getting up. Willie and I were pulling tea tree and slashing fern in the front.
Friday 15th My 59th birthday. There were several showers during the day. Willie and I were cutting tea tree and slashing fern in the front. Willie Smith of Matakana was here in the afternoon buying Sheep for a Syndicate to ship to Sydney, but I did not sell any. I went to the P.O and Library in the evening. Received a letter from Henry.
Saturday 16th The wind was blowing very strong from the E with driving showers. Willie was laid up with a bad cold. I was slashing fern in the front in the morning. In the afternoon I went up to John Greenwoods to make a specification for a road deviation. I had tea at John Greenwoods.
Sunday 17th It was a very showery day, and the wind blowing strong from the E. There was no service.
Monday 18th It was a very fine day, the wind has changed to the SW, and the ground is drying up. Willie took the bullock down to the Store in the morning and hauled up a Case of Kerosene, afterwards he hauled a load of firewood. We were cutting tea tree in the front.
Tuesday 19th There were a few showers in the morning, but it was fine in the afternoon. We were cutting tea tree in the front in the morning. In the pm we went down to the Steamer, a parcel of Magazines came for the Library which I catalogued.
There was a Social in the Hall in the evening, we went and Minnie returned with us and staid all night. 35/- was taken at the door.
Wednesday 20th It was a showery day. I got up early and went down to see the "Rose Casey" off. Mr Handby went by her and took the cart that he has just made. I was cutting tea tree in the morning. Burton Witten came at dinner time and brought 4 Evans Early Plums that I ordered from him. I went down with him to the Library to give him some books, afterwards I went down to the Store and the wharf to meet the "Kawau".
Thursday 21st It was a fine day. We gave a party in the evening to the young people , there were 19 besides our own family, they played at Ping Pong & cards. Mrs Sim staid all night
Friday 22nd It was a fine day. Mrs McKay died in Auckland yesterday and was brought here by the "Rob Roy" early this morning. Alec Matheson came to ask if I would read the service.. The funeral was at 2 pm in the Cemetery, I officiated at the grave, she was buried alongside of her first husband (Mr Maitland). I went down to the Post Office and Library in the evening , there was a meeting of the School Committee at the Hall.
Miss Hutchinson was here for tea and Mr Roose came while we were having it, and he staid all night.
Saturday 23rd It was a dull day. We gave Mr Roose a small order. Willie went fishing to Ti Point, but he did not catch anything. I went down to the village in the pm.
Sunday 24th It rained nearly all morning and afternoon. Revd Marshall was to hold services in the Hall in the pm, but none of us stirred out of doors.
Monday 25th It rained nearly all morning, but it cleared up in the afternoon . We all went to Joe Wyatts in the evening to a party.
Tuesday 26th It was very fine in the morning, but dull in the afternoon. I walked to Ti Point in the morning, called at Minnie and then went down to the wharf to meet the "Rose Casey", Jim Sadler returned by her, I came round in the Steamer , afterwards Willie and I were cutting tea tree.
Wednesday 27th It was a fine day. We were cutting tea tree in the front. I went down to the wharf to meet the "Kawau".
Thursday 28th Fine day. Cutting tea tree.
Friday 29th It was a very fine day. We went down to the Hall in the afternoon to decorate, Miss Williams came to our place for tea, we all went to the Hall in the evening, the Tennis Club gave a progressive Euchre party, also to tender a welcome to Trooper Sadler and family, Troopers McLeod and Nilson of Warkworth were also present. We spent a very enjoyable evening, songs were given by Mrs Sim, Miss Maunders & D. Kempt. The ladies provided an excellent supper. Jim Sadler, Miss Maunders and Miss Williams staid here all night.
Saturday 30th It was a fine day. Gus Nilson called here early in the morning, Rona McLeod called up afterwards and staid dinner, all our visitors left in the pm. There was a Road Board Meeting in the afternoon .
Sunday 31st It was a fine day. I read service in the Hall in the afternoon, there was a fair congregation.


text:
Truro's Forgotten Past – Our City's Hidden Secrets
esdale77Mid - Cornwall, Things to do22 Comments
Truro sits in the heart of Cornwall – our only city and our most populous area. These days it is home to Cornwall's cathedral and a multitude of shops as well as a theatre and the Royal Cornwall Museum. But what lies beneath the buildings and carparks and what lurks in quiet side-streets, forgotten by today's busy shoppers, is truly fascinating. These forgotten places create, for those who are interested, a completely new and surprising picture of this little city and its past.
Truro's Beginnings
The earliest recorded form of the name Truro is Triueru in 1195 and then Triwereu or Treveru in around 1201. There is some debate over the meaning of the name, although it is agreed that the first element come from try meaning 'three', the second element is uncertain. Some say that it derives from the Cornish for 'three rivers', in reference to the streams that flow into or past the city – the Allen, the Kenwyn and the third is up from debate – the River Tinney or the Fal perhaps. However, Borlase and others thought that the word's origins referred to three streets or even Tre Vur – the town on the Roman road.
The city we see today rose up from just a huddle of a few houses on a marshy river bank. In 1140 Richard de Luci was granted the Manor of Kenwyn as reward for his support of King Stephen during the Civil War between Stephen and Matilda. The manor was situated on the low ground beside the tidal creek and at first the village of Truro competed with the older settlement of Newham for river trade. This picture changed forever however in around 1300 when Truro became a coinage town. From then on and for hundreds of years after it was a place where Cornwall's most valuable commodity tin would be brought to be assayed. Such were the quantities moving through the town that in 1824 F. W. L. Stockdale even described ingots just lying about in piles in the streets:
"The blocks of tin lie in heaps in the streets, and are left unguarded, their weight rendering the difficulty to remove them so great that it is never attempted."
Truro's new status coupled with a weekly market and flourishing maritime trade meant that its size and fortunes grew throughout the Medieval period. By the time that Norden visited in 1584 he noted that the town was pretty and compact with many wealthy merchants and neat buildings.
The continued prosperity which followed in the 18th and 19th centuries made the town a centre of Cornish commerce and new streets of elegant houses such as Lemon Street and Walsingham Place appeared, as did theatres, libraries and museums. Truro became a city in 1877 after the construction of the cathedral.
But during those nine hundreds of years of history and expansion, trampled beneath the unrelenting pace of change, some pieces of Truro's past have been lost entirely. Buried and forgotten beneath layers of brick and tarmac.
It is time to rediscover a few.
The Friary of St Dominic
Looking at a map of the present city it is possible to pick out a small triangle of land bordered by Little Castle Street, Kenwyn Street, St Dominic Street and Francis Street. Now covered with shops, homes and gardens this plot of land has a history that takes us right back to the very beginnings of the settlement of Truro.
The corner of Little Castle Street and Kenwyn Street
It was here in c1259 that a Dominican Friary was established on rough ground that was then on the outskirts of the small town. In fact, though hard to image today, at that time the River Kenwyn, which acted as one boundary of the new friary's land, was still tidal up to this point. This meant that the ground here was marshy and the banks of the river ill-defined but the determined friars built their compound on a piece of reclaimed ground.
The seal of the Friary of St Dominic found in a garden near Canterbury.
The original building is thought to have stood close to the road now known as Little Castle Street, with a gateway opening onto Kenwyn Street. It was considered a favourite place to stay for wealthy travellers and visiting clerics passing through the town and as a consequence the Order's wealth grew. The buildings were extended, especially during the 14th and 15th centuries, and at one time the complex included its own church, cemetery, chapter house, culver house (dovecote) and well. The friary was supported largely by donations and even the Black Prince, Edward Duke of Cornwall, is said to have given the friars oaks from Restormel and stone from Pentewan for their building work.
Masonry thought to belong to the friary. Image credit: Royal Cornwall Museum
During the construction of River Street and Francis Street in the 19th century some structural remains thought to belong to the old friary were uncovered, as well as large quantities of oyster shell. Presumably the shellfish constituted a large part of the friars' diet.
In 1462, when the friary was given an endowment by Ralph Reskymer, it is thought to have been home to as many as twenty brothers but by the Dissolution of the Monasteries in 1538 there were no more than ten. Sections of the buildings and the friary well were recorded as still standing in around 1700. But later that century the site had become an area of empty waste ground known as 'Friary Meads' and was at one time used as a tanning yard. Today the old well that once stood within the precincts is rumoured to be in the back garden of one of the houses on Francis Street, though no one is sure where. In fact, in all honesty, this once well-known and probably rather impressive complex of buildings has completely disappeared and few are aware that it even existed.
The Vanished Castle & Cemetery
Another once substantial building now entirely lost to us is Truro's Castle. From the 13th century onwards this small fortress stood overlooking the growing town, the friary and its people for more than two hundred years before vanishing without a trace. In another variation of the meaning of the name Truro the old guidebook Murray's Handbook For Devon and Cornwall (1859) suggests that it is actually a corruption of the Cornish Tre-ru meaning 'castle on the water'.
It has been suggested that there was a fort on this site during the Iron Age but Truro's castle, as we know of it, was built sometime before c1270, most probably by Richard De Luci or his descendants. There may also have been an earlier structure here, built after the conquest by someone called Hamelin, Lord of the Manor of Trehaverne and it is possible that De Luci enlarged this older fort. The medieval castle supposedly had a diameter of 75ft (23m) and walls of local slate that were three feet thick. Truro castle was of classic circular construction built on a high mound and Murray's claims that it would have resembled Launceston's castle:
"the scarped mound where it stood may be seen to this day on the high ground at the top of Pydar street, to the left. It is crowned by a modern circular wall, surrounding a circular terrace, arrangements which render it probable that this castle resembled Launceston in plan."
The true history of Truro castle has been mostly lost but it is thought to have once been the home of the Earl of Cornwall, though it is not clear exactly which one or when. Whoever the occupant was however he had secured himself a Lordship over a thriving waterside community. But before long, for reasons that aren't entirely clear, the castle fell out of use. As early as c1270 it was in serious disrepair and when John Leland travelled through Cornwall in the 1530s the castle at Truro was already in ruin. Leland wrote that it was 'clere down' and that the site was being used for 'a shooting and playing place'. In the 1790s Whitaker wrote that the only remains of the castle were the name and an area of waste ground. He also wrote that the last remnants of a keep were 'daily vanishing by application of it to other purposes', presumably the stonework was being taken away to be reused in others buildings.
Truro Cattle Market at the top of Castle Hill, showing farmers and cows. Photographer: Arthur William Jordan.
The site of the castle, even after its ruin, was always known as Castle Hill and it was here at the Castle Hill crossroads that a small medieval cemetery could once be found. This particular cemetery, however, was sadly an area of un-consecrated ground which was used to bury those who had taken their own lives. One unfortunate man is actually mentioned by name in a document held by the Cornwall Archaeological Unit:
"James Stephens, a teacher and celebrated local preacher, committed suicide when faced with a serious criminal charge. his body was interred in the dead of night at the crossroads on the Castle Hill, Truro."
After years of deterioration the site of the castle was finally levelled in 1840 to make way for a cattle market. Then the market itself was demolished in 1985 and Truro Crown Court was built soon after. The only clues to the existence of Truro's castle these days are the street names in the area. Castle Hill, Little Castle Street, Castle Rise and Barrack Lane.
The Williams' Almshouses
At the top of Pydar Street, one of the city's most ancient thoroughfares, and not far from where the castle and the small cemetery once stood, was the Williams' Almhouses. This group of low buildings surrounding a central courtyard were built in 1631 at the bequest of Henry Williams. All that remains of the complex now is the foundation stones which were once part of the arched almshouses' gateway and now lie forlorn in the gardens of a modern bungalow nearby.
Foundation stones from Williams Almshouse
Henry Williams was a woollen draper in Truro who, when he died in 1629, bequeathed a plot of land and a large sum of money in a charitable trust for the poor. As per his instructions the trust built the almshouses which were to be home to ten poor widows of the community. These women were also provided with clothes and two shillings (in later years four shillings) a week to spend as they liked. Williams also gave them a small meadow beside the house in which to keep a cow. It was a generous and entirely practical gift to the town but not everyone was happy with Williams' thoughtfulness. His two partners in the Town Mill, George and Henry Bray, tried to have him declared insane when they discovered his plans. Unfortunately for them he had bequeathed his share of the business and therefore his share of any future profits to the Trust, little wonder they were so unhappy!
Sadly as the years passed the endowment also fell victim to serious mismanagement with considerable sums of money being diverted from the care of the inmates and spent on other non-charitable purposes in the town. In the end even the almshouses' meadow was built on to provide a prison and workhouse.
Inner courtyard with monument and resident ladies. Photographer: Argall.
Despite this the Williams' Almshouses were part of Truro's community for nearly three hundred years, providing food and shelter for hundreds of destitute women. When exactly they were demolished isn't clear but it was sometime after 1920, as that year the board advertised for a new attendant at a wage of 17s 6d per week with room and board. The site was then used for the Carrick Council Offices, now empty themselves and soon to be redeveloped no doubt. I wonder what Henry Williams would have thought?
Lost Cock Fighting Rings
Almost unimaginable to us today, cock fighting was once a popular form of entertainment. It is thought to have been introduced to England by the Romans and was adopted as a sport across the UK, with purpose built rings in most towns. It was enjoyed by all levels of society for hundreds of years and wasn't outlawed until the arrival of the 1835 Cruelty to Animals Act.
"It is only in comparatively recent years that [cock fighting] has been regarded as disreputable in Britain . . . In some of our larger towns there ae yet to be seen the old cock pits where, but a generation ago, fortunes were lost and won and where leaders of society were not ashamed to be seen gathering together for the purpose of witnessing an encounter between fiery combatants."
Cornubian & Redruth Times, 9th September 1898
Truro had at least two cock fighting rings that we know of in the 18th and 19th centuries. On Green Street, near the new bus station today, there once stood a beerhouse known as The Fighting Cocks Inn, c1789. The pub apparently took its name from a ring nearby on the quay. Incidentally, this inn was the birth place of Cornish explorer Richard Lander who was born in 1804 and changed its name to The Dolphin in 1810.
The Cock Pit
A little more is known about the Cock Pit, the town's purpose built fighting ring. It was an octagonal building which could be found at the east end of The Leats, a networks of opes and alleyways between Pydar Street and River Street. The Cock Pit was said to be infamous for violence, gambling and riotous behaviour. In an article entitled 'Truro, a Century Ago' a local newspaper laid out the various entertainments that had once been available in the town:
"Cockfighting was carried on in an octagonal building – the Cock Pit – adjoining Tippet's Backlet, badger baiting took place at the back of the Barley Sheaf Inn and a wrestling ground was laid out on Mitchell Hill."
Royal Cornwall Gazette, 31st May 1900
In the 1750s the town's curate, Samuel Walker, attempted to clear up the sordid reputation of the Cock Pit and bring an end to cockfighting in the town. The Royal Cornwall Gazette reported that after his death in 1761 some of his parishioners actually began holding services in the building and bizarrely in around 1790 the Cock Pit was converted into a chapel when it was taken over by members of the Methodists Society. It fell into serious disrepair however and was eventually demolished in around 1880.
Truro's Lazar House – a home for lepers.
A lazar house was the name given to an institution that was set up to house and care for lepers. Truro's Lazar House was built around seven hundred years ago in c1309. At that time it was said to be home to 24 people suffering from leprosy. This terrible disease was thought to have been brought to England by crusaders returning from the Holy Wars and was often taken as a sign of uncleanliness, meaning that sufferers were often doubly ostracised.
In Cornwall in 1300 there are thought to have been seven hospitals, that is free standing institutions devoted to caring for the sick and infirm. Of these six were said to provide long term care for lepers at Bodmin, Helston, Lanlivery, Launceston, Liskeard and Tregony but there were many other places that those afflicted with the disease were housed in a less formal capacity. In 1310 Thomas Bitton, the Bishop of Exeter, made donations to twenty three places in Cornwall where lepers were being looked after, these were mainly rural locations away from centre of populations such as Roche, Argal near Budock and Freewater near Probus. One of the facilities (perhaps that's too former a description!) to receive the sum of 12 shillings from Bitton was 'Truru".
George Newman writes in his book Leprosy in the British Isles (1895) that the disease was in decline towards the end of the 13th century but that it had tended to remain fairly common in rural areas like Devon and Cornwall and according to Polwhele was still frequent in Cornwall up until the 16th century. It isn't clear when Truro's Lazar House finally closed and there is very little evidence that can help us to pinpoint its location either. In 1657, however, a lease was granted for an area of ground called Park Vedras. The document describes the land as being "near unto a paire of walls heretofore called The Leper's House." Park Vedras has been identified as being close to present day Stratton Terrace, which 700 years ago would have been well away from the main town in the valley below. Although any trace of the house or those walls has long since vanished, the plain fact of their existence adds another layer to the history of the city and its people.
Comprigney – field of the gibbet
When researching this particular part of the story I was reminded of the famous quote "The past is a foreign country, they do things differently there". The world of crime and punishment even just a hundred years ago was so vastly different from today that it seems unrecognisable. For example, it was once commonplace to hang the bodies of dead criminals in iron cages on roads leading into towns and villages. The site of Truro's gibbet was at Comprigney perhaps a mile from the centre of the city.
Comprigney is a corruption of the Cornish Gweal Clogh Prennyer which translates roughly as 'gallows field'. It isn't clear if criminals were actually executed here but it seems likely, and then after death their bodies were left exposed to the elements and as food for birds sometimes for months. Writing in 1977 in his book about Truro H. L. Douch describes the scene, and perhaps the purpose of such a macabre sight, vividly:
"A rotten human carcase suspended there at the town's limits would occasionally remind the ill-intentioned that he was entering a town with its own jurisdiction."
Comprigney Cross on OS Map 1884
It is hardly surprising perhaps that Comprigney has long been thought of as a haunted place. Peter Underwood in his book Ghosts of Cornwall explains that local people say that they avoided the area after dark because of 'shadowy figures' and the sound of 'rattling chains'.
I grew up just a few miles from Truro and being from a farming family meant we went there most weeks when I was small for market day. Writing this however has made me realise not only how much I still have to discover about Truro but also just how much it has changed over the centuries. My research has really given me fresh insights into Cornwall's only city and its fascinating past and I hope it has entertained you too!
Moresk Castle – the lost castle at St Clement
The Truro Poltergeist
Kennall vale – the haunted woodland
The ruin of Old Kea Church
Walking Opportunities
Truro and Newham Circular walk
Review: A Selection of Cornish Books from 2020
Jubilee Rock, Bodmin Moor
22 thoughts on "Truro's Forgotten Past – Our City's Hidden Secrets"
Owen Winter says:
I love this 👏 I had no idea Truro had such a long history, I'd assumed it's origins were more recent
Thanks Owen, glad you enjoyed it!🙂
brownandcharlesfamily gerry brown says:
My ancestors, the Charles's came from Truro – I can trace them back to definitely William Charles 1620-1676 who married a lady called Madlen – who she was has made me spend many hours trying to find out in fruitless search and now have given up – (and had at least one child William b1640) his father may have been William b1601 and his grandfather Robert b1570. The Charles's then went on to live in St.Allen and then St.Keverne then to Helston and Camborne.
brownandcharlesfamily says:
My ancestors came from Truro – the Charles family – the first definite one is William Charles 1620 1676 who married a lady called Madlen – but who she was has caused me many hours of searching but have failed so now have given up – and they had at least one child William 1640-1693 who married Zenoba Aft or maybe Wear. William the elder father mayhave been William b1601 who married a Joan and his father Robert c1580. The family eventually moved to St.Allen then St.Keverne, Helston, Camborne.
Bennetts says:
There is a Charles Street in Truro just off Lemon Street.
sorry i entered twice only when I lloked a while later and could not see it posted i thought i had forgotten to click post – so did it again.
Edward Basford says:
Brilliant read. I live in Truro now and it is fascinating to see and read about the history of our city, thank you very much.
Tracey Pendleton says:
Fabulous. I found that really fascinating.
I used to explore the unknown and long forgotten parts of Truro when I used to work there, many years ago.
We have family that lived in Comprigney. I hadn't realised that it may well be haunted, but now that you have explained why I wouldn't be at all surprised if it was!! xxx
Susan A Coney says:
An excellent 'summary' of the History of Truro – thank you
The section on Comprigney is, in my opinion and the experiences of my family, just recent folk law. From my research, I have not found any concrete evidence of a gallows at Comprigney. Far be it for me to question the learned gentleman, Mr Douch, but his opinion of the name being a corruption of the Cornish Gweal Clogh Prennyer to me is questionable. There are very few texts written in old Cornish to use to determine the precise written word especially as most Cornish speakers in years past could not read or write. Therefore the 'current' Cornish language has been 'formed' by learned folks who have used relatively few words to 'expand' the language as they think it might have been spoken or written.
My family, the Truscotts, lived at the old cottage and small holding called Higher Comprigney for over 50 years. My Mum and all her siblings were born there. Mum had very fond memories of living at Higher Compigney and there was never any mention of human bones being dug up during farming activities or ghosts either (not that Mum believed in such things).
My sister and I visited Higher Comprigney Cottage a few years ago and felt nothing but warmth and welcome – as though the little place knew who we were. Higher Comprigney (a name dating from many centuries ago – the earliest written reference I have found is 1808) has now been renamed Hangman's Cottage – not a name the lovely old building warrants in my opinion.
Aadil Desai says:
Having visited Truro on a short day trip on my way from St Ives to London, just had time for a quick visit to the cathedral. Left my luggage with a kind lady at the information centre and came back in a couple of hours to take my connecting coach to London.
Thank you for this very interesting and well researched history. I grew up in Truro and knew a little of what you wrote but the completeness is most helpful.
I walk through these streets most days so this was fascinating, thank you!
suenelson4 says:
This is brilliant! I spent all my teenage years in Truro. As a recently retired archaeologist, I found it fascinating and knew very little of what you have written. Keep up the good work!
Lynda Rodgett says:
Thank you so much for your enlightening research, I moved to Truro in 1980 with a young family, and loved the history and gentleness of the place, my children went to Archbishop Bensons School, and then on to Penair, later to go on to Uuniversity, They both contributed to the County by their interest in Sport, and Drama, During this time Truro was developing and changing, not all for the better, some things were lost, and changed unfortunately.
Now Truro is unrecognisable in some areas, and lost a little of its charm due to progression of retail shops, But the heart of our City is still here thankfully, I have since moved back to the city, from living in west Cornwall, I still love to wander through our oldest parts and remember how it used to be, and articles like this are brilliant at bringing how life really was in bygone days, and I and my family will always be grateful for living in such an Awsome Place.
My only hope is that it's not spoilt anymore by over development, We have a good future with the new renovation of our Theatre, and Hope we can move on into a brighter future in this next decade, after life will go down yet again in History of the horrid COVID virus,
Thank You yet again for your delightful research , I will be sharing with my family living abroad.
I went to school with your son,Craig.
Remember he was an amazing runner!
I'm living in Ryukyu Islands off Japan with my family now,but still have our family house in town.All the best to you and your family.
Steven Williams says:
The Williams Alms house's were still occupied in and around 1966-68 as I used to deliver fruit & veg from Jenkins (where the sweet shop is now by the Cathedral) also I worked for Slaters (top of Pydar St) and I believe I delivered stuff to one of the Alms Houses then, I remember them (sadly) as being a bit smelly. They were demolished for the new development approx 1969/70
Thanks Steven, that's really useful, I will add that to the information in the post!
Val Barnes says:
I remember the Alms Houses in Pydar Street we went Carol singing there in the early 60's – there was also Alms Houses in City Road later replaced by Carlyon Flats
Pingback: The Mystery of Pencalenick Obelisk, near Truro - The Cornish Bird
Pingback: The Truro Poltergeist - The Cornish Bird
Pingback: Stephenson's Rocket in Truro - The Cornish Bird
attillathepun says:
Thanks. I haven't visited Truro from my home in SE Cornwall for a few years. I must go again – especially since my last visit I've turned up family who lived in and around Truro for several centuries. Thank you.


text:
The pathfinder
by James Fenimore Cooper | 03 February 2015
Category: Classic Literature
In 1831, James Fenimore Cooper told his publisher that he wanted to write a story set on Lake Ontario. The book was accepted, but with no hint that it would feature Natty Bumppo from the well-established Leather-Stocking Tales. 'The Pathfinder' (1840) revisits Natty's military service, extending a story begun in 'The Last of the Mohicans', and introduces the complications of love against the backdrop of the French and Indian War.
by Hermann Hesse
by John Steinbeck
by Dodie Smith
Strumpet City
by James Plunkett
by George Orwell
Dimensions 210 x 138 x 42.49


The Guam International Film Festival returns to the islands this September for an international showcase of exciting new film productions. This is the perfect opportunity to see the works of talented directors, actors, and producers sharing their perspectives and latest contributions to the world of cinema.
This is the first and only annual U.S. film festival in the western pacific and has gained worldwide recognition since its start. The event attracts creative talent from around the globe and provides a collective experience through the camera lens.
Programming efforts are designed to increase awareness about social responsibility and open the doors of opportunity for local artists and aspiring filmmakers who want more exposure at the international level. The Guam International film Festival showcases both international movies and creations from Pacific Asia. Attend film screenings, watch awards shows and participate in film workshops during film festival week taking place September 23 to 27, 2016.
Guests of the Pacific Islands Club Guam are just a short drive from the film festival grounds and island activities. Look forward to relaxing in your spacious room at the resort and enjoy views of the Philippine Sea. Indulge in delicious foods and creative cocktails at one of our seven restaurants. After a day of events and tourist attractions, don't forget to book some relaxing spa services for the ultimate retreat in paradise.


Whether offices, services, service, event or donate: With the Emons News, you are up to date.
10.12.2008 – This year, too, Emons is sponsoring several social projects in the youth support field and furnishing proof of its social responsibility.
Most Congolese are illiterate. The people in Kasika in south Kivu province have tried building a new school. What's missing is cement. Jean-Claude Kibala, now the province's vice governor, sees in education one of the most important approaches for helping the people of his country. To implement the project, which involves not only a secondary school, but also dual training in crafts and trades, Kibala was able to win over Rupert Neudeck. Neudeck, known for rescuing many Vietnamese refugees with the freighter Cap Anamur, is also co-founder of the aid organization Grünhelme e.V. (Green Helmets), which will provide support in constructing the school in Kasika.
Kibala and Neudeck are our guarantors that the donations find their direct way into the project and do not trickle away en route. Kibala lived for many years in Troisdorf near Cologne. His wife, who occupies an executive position at Emons, and his two sons still live in Troisdorf.
South Africa has one of the highest AIDS rates in the world: 13% of South Africa's children aged between two and 14 have lost at least one of their parents to the immuno-deficiency virus. Many children, some of them carrying the HIV virus themselves, live in utmost poverty and are homeless. To counter this vicious circle, the support and recreation offer "Kick-it" within the scope of the CARE projects features sporting activities, like football, basket ball and volleyball as well as athletics, for the children and youngsters. Training units, competitions and tournaments round off the various disciplines.
In addition, a parallel care programme provides information on the risks of HIV/AIDS, drugs and crime. The aim is to strengthen the children and young people physically and mentally through a combination of sports and information. They gain new self-confidence and experience a feeling of community and belonging together which helps them master their lives even under tough conditions.
By making a donation, we wish to help boost the project in terms of quality, quantity, organization and structure, and implement the planned measures. These include, eg, the build-up of a trainer pool, improved psycho-social care for the children and youngsters, extending the range on offer and winning new participants, talent promotion as well as a street football tournament within the scope of the 2010 World Championship.
The project was recommended to us by a friend of an Emons shareholder, the German political satirist and actor Horst Schroth. The latter works on a voluntary basis for the aid organization CARE Germany-Luxembourg and is a member of CARE's board of trustees. Together with his wife, Dr Elke Rottgardt, he is also cooperation partner for another CARE project which helps indigenous Argentinean children learn to read and write.
Jo and Antonio live in the Philippine province of Nueva Yizcaya. Their father has died. Since there is no survivor's pension, their mother works abroad as domestic help. Her wage just about suffices to feed the family back home, but is not enough for a college education, without which no qualified job can be found. We wish to cut through this spiral and invest in the education of the two youngsters, so that they are able not only to feed their own families, but offer their children, too, a good education later on. Which is why we have decided to assume the college fees as well as the costs of school uniforms, books and learning material for the two young men. With this project, we are continuing the commitment of Michael Lange, who, until his sudden death this year, worked as sales director at our Cologne and Duisburg branches. Jo and Antonio have family ties to the Langes, with whom we continue to have personal contacts.
We will keep you posted in our News about the progress of our projects.
Ever since the company was set up in 1928, the name Emons has stood for dependable and flexible transport and logistics services. As a medium-sized, independent, family-run company with more than 100 branches in Germany, Bulgaria, China, Denmark, Georgia, Italy, Kazakhstan, Lithuania, Poland, Romania, Russia, the UAE, Switzerland, the Czech Republic, Turkey, Ukraine, the USA and Belarus, Emons Spedition is an established enterprise in this sector.